Skip to content

Commit

Permalink
Now we have more consistent names on those facade classes.
Browse files Browse the repository at this point in the history
Updated the design doc, now that our API is not super hacky anymore...!
  • Loading branch information
atsushieno committed Mar 3, 2024
1 parent 8f3eb39 commit e5755d1
Show file tree
Hide file tree
Showing 12 changed files with 329 additions and 296 deletions.
7 changes: 3 additions & 4 deletions docs/design/MIDI-CI.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,9 @@ ktmidi has comprehensive MIDI-CI support as well as its dogfooding "ktmidi-ci-to

## Known missing features

- Good API design; everything has been messed throughout the development
- Tests (I am usually test-driven, but I did not come up with good API structure in the first place this time...)
- App lifecycle management: https://github.com/atsushieno/ktmidi/issues/59
- zlib+Mcoded7 support on some platforms: ubiquitous zlib implementation is currently on hold until ktor-io 3.0.0 comes up on Kotlin/Wasm. Also, I cannot find any implementation that has no issues. https://github.com/atsushieno/ktmidi/issues/58
- Profile specific messages (seeing no use at the moment)
- Profile specific messages on UI
- Any timer based session management (i.e. no timeouts implemented)
- Therefore, no request ID management; it simply increments within `Byte` https://github.com/atsushieno/ktmidi/issues/57

Expand All @@ -53,7 +51,8 @@ Modules:
Classes:

- In `ktmidi-ci` module:
- `MidiCIDevice` plays the primary role. It works as the facade for most of the MIDI-CI features. It holds `initiator` and `responder` for now, but we have been making significant changes in the structure, so do not count on them to exist.
- `MidiCIDevice` plays the primary role. It works as the facade for most of the MIDI-CI features.
- `ClientConnection` represents a destination MIDI-CI device connection, as the client point of view.
- `Message` and all those subclasses represent MIDI-CI SysEx messages. Data model and serialization in most classes (not all)
- `Messenger` implements the actual messaging protocol like "send back Reply To Discovery message in reply to Discovery Inquiry message"
- `ObservableProfileList` and `ObservablePropertyList` hold profiles and properties (both values and metadata for now) that can notify listeners. Models in `ktmidi-ci-tool` make use of them.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class ClientConnectionModel(val parent: CIDeviceModel, val conn: ClientConnectio

val properties = mutableStateListOf<PropertyValue>().apply { addAll(conn.propertyClient.properties.values)}

fun getMetadataList() = conn.propertyRules.getMetadataList()
fun getMetadataList() = conn.propertyClient.propertyRules.getMetadataList()

data class SubscriptionState(val propertyId: String, var state: MutableState<SubscriptionActionState>)
var subscriptions = mutableStateListOf<SubscriptionState>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class ConnectionViewModel(val conn: ClientConnectionModel) {

fun selectProperty(propertyId: String) {
Snapshot.withMutableSnapshot { selectedProperty.value = propertyId }
val metadata = conn.conn.propertyRules.getMetadataList()?.firstOrNull { it.propertyId == propertyId }
val metadata = conn.conn.propertyClient.propertyRules.getMetadataList()?.firstOrNull { it.propertyId == propertyId }
as CommonRulesPropertyMetadata
conn.getPropertyData(propertyId, encoding = metadata.encodings.firstOrNull(), paginateOffset = 0, paginateLimit = 10)
}
Expand Down
26 changes: 13 additions & 13 deletions ktmidi-ci/api/android/ktmidi-ci.api
Original file line number Diff line number Diff line change
Expand Up @@ -118,14 +118,12 @@ public final class dev/atsushieno/ktmidi/ci/ClientConnection {
public final fun getDeviceInfo ()Ldev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;
public final fun getMaxSimultaneousPropertyRequests ()B
public final fun getProductInstanceId ()Ljava/lang/String;
public final fun getProfileClient ()Ldev/atsushieno/ktmidi/ci/ProfileClient;
public final fun getPropertyClient ()Ldev/atsushieno/ktmidi/ci/PropertyClient;
public final fun getPropertyRules ()Ldev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules;
public final fun getProfileClient ()Ldev/atsushieno/ktmidi/ci/ProfileClientFacade;
public final fun getPropertyClient ()Ldev/atsushieno/ktmidi/ci/PropertyClientFacade;
public final fun getTargetMUID ()I
public final fun setDeviceInfo (Ldev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;)V
public final fun setMaxSimultaneousPropertyRequests (B)V
public final fun setProductInstanceId (Ljava/lang/String;)V
public final fun setPropertyRules (Ldev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules;)V
}

public final class dev/atsushieno/ktmidi/ci/ClientObservablePropertyList : dev/atsushieno/ktmidi/ci/ObservablePropertyList {
Expand Down Expand Up @@ -707,8 +705,8 @@ public final class dev/atsushieno/ktmidi/ci/MidiCIDevice {
public final fun getMessageReceived ()Ljava/util/List;
public final fun getMidiMessageReporter ()Ldev/atsushieno/ktmidi/ci/MidiMessageReporter;
public final fun getMuid ()I
public final fun getProfileHost ()Ldev/atsushieno/ktmidi/ci/ProfileConfigurationHostFacade;
public final fun getPropertyHost ()Ldev/atsushieno/ktmidi/ci/PropertyExchangeHostFacade;
public final fun getProfileHost ()Ldev/atsushieno/ktmidi/ci/ProfileHostFacade;
public final fun getPropertyHost ()Ldev/atsushieno/ktmidi/ci/PropertyHostFacade;
public final fun getUnknownCIMessageReceived ()Ljava/util/List;
public final fun processInput (BLjava/util/List;)V
public final fun requestMidiMessageReport (BIBBBB)V
Expand Down Expand Up @@ -1045,13 +1043,13 @@ public final class dev/atsushieno/ktmidi/ci/ObservablePropertyListKt {
public static final fun getMediaTypes (Ldev/atsushieno/ktmidi/ci/PropertyMetadata;)Ljava/util/List;
}

public final class dev/atsushieno/ktmidi/ci/ProfileClient {
public final class dev/atsushieno/ktmidi/ci/ProfileClientFacade {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;Ldev/atsushieno/ktmidi/ci/ClientConnection;)V
public final fun getProfiles ()Ldev/atsushieno/ktmidi/ci/ObservableProfileList;
public final fun setProfile (BBLdev/atsushieno/ktmidi/ci/MidiCIProfileId;ZS)V
}

public final class dev/atsushieno/ktmidi/ci/ProfileConfigurationHostFacade {
public final class dev/atsushieno/ktmidi/ci/ProfileHostFacade {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;)V
public final fun addProfile (Ldev/atsushieno/ktmidi/ci/MidiCIProfile;)V
public final fun disableProfile (BBLdev/atsushieno/ktmidi/ci/MidiCIProfileId;)V
Expand Down Expand Up @@ -1089,24 +1087,26 @@ public final class dev/atsushieno/ktmidi/ci/PropertyChunkManager$Chunk {
public fun toString ()Ljava/lang/String;
}

public final class dev/atsushieno/ktmidi/ci/PropertyClient {
public final class dev/atsushieno/ktmidi/ci/PropertyClientFacade {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;Ldev/atsushieno/ktmidi/ci/ClientConnection;)V
public final fun getPendingChunkManager ()Ldev/atsushieno/ktmidi/ci/PropertyChunkManager;
public final fun getProperties ()Ldev/atsushieno/ktmidi/ci/ClientObservablePropertyList;
public final fun getPropertyRules ()Ldev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules;
public final fun getSubscriptionUpdated ()Ljava/util/List;
public final fun getSubscriptions ()Ljava/util/List;
public final fun sendGetPropertyData (Ldev/atsushieno/ktmidi/ci/Message$GetPropertyData;)V
public final fun sendGetPropertyData (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V
public static synthetic fun sendGetPropertyData$default (Ldev/atsushieno/ktmidi/ci/PropertyClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)V
public static synthetic fun sendGetPropertyData$default (Ldev/atsushieno/ktmidi/ci/PropertyClientFacade;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)V
public final fun sendSetPropertyData (Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Z)V
public final fun sendSetPropertyData (Ljava/util/List;Ljava/util/List;)V
public static synthetic fun sendSetPropertyData$default (Ldev/atsushieno/ktmidi/ci/PropertyClient;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ZILjava/lang/Object;)V
public static synthetic fun sendSetPropertyData$default (Ldev/atsushieno/ktmidi/ci/PropertyClientFacade;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ZILjava/lang/Object;)V
public final fun sendSubscribeProperty (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public static synthetic fun sendSubscribeProperty$default (Ldev/atsushieno/ktmidi/ci/PropertyClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)V
public static synthetic fun sendSubscribeProperty$default (Ldev/atsushieno/ktmidi/ci/PropertyClientFacade;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)V
public final fun sendUnsubscribeProperty (Ljava/lang/String;)V
public final fun setPropertyRules (Ldev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules;)V
}

public final class dev/atsushieno/ktmidi/ci/PropertyExchangeHostFacade {
public final class dev/atsushieno/ktmidi/ci/PropertyHostFacade {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;)V
public final fun addProperty (Ldev/atsushieno/ktmidi/ci/PropertyMetadata;)V
public final fun getMetadataList ()Ljava/util/List;
Expand Down
26 changes: 13 additions & 13 deletions ktmidi-ci/api/jvm/ktmidi-ci.api
Original file line number Diff line number Diff line change
Expand Up @@ -118,14 +118,12 @@ public final class dev/atsushieno/ktmidi/ci/ClientConnection {
public final fun getDeviceInfo ()Ldev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;
public final fun getMaxSimultaneousPropertyRequests ()B
public final fun getProductInstanceId ()Ljava/lang/String;
public final fun getProfileClient ()Ldev/atsushieno/ktmidi/ci/ProfileClient;
public final fun getPropertyClient ()Ldev/atsushieno/ktmidi/ci/PropertyClient;
public final fun getPropertyRules ()Ldev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules;
public final fun getProfileClient ()Ldev/atsushieno/ktmidi/ci/ProfileClientFacade;
public final fun getPropertyClient ()Ldev/atsushieno/ktmidi/ci/PropertyClientFacade;
public final fun getTargetMUID ()I
public final fun setDeviceInfo (Ldev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;)V
public final fun setMaxSimultaneousPropertyRequests (B)V
public final fun setProductInstanceId (Ljava/lang/String;)V
public final fun setPropertyRules (Ldev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules;)V
}

public final class dev/atsushieno/ktmidi/ci/ClientObservablePropertyList : dev/atsushieno/ktmidi/ci/ObservablePropertyList {
Expand Down Expand Up @@ -707,8 +705,8 @@ public final class dev/atsushieno/ktmidi/ci/MidiCIDevice {
public final fun getMessageReceived ()Ljava/util/List;
public final fun getMidiMessageReporter ()Ldev/atsushieno/ktmidi/ci/MidiMessageReporter;
public final fun getMuid ()I
public final fun getProfileHost ()Ldev/atsushieno/ktmidi/ci/ProfileConfigurationHostFacade;
public final fun getPropertyHost ()Ldev/atsushieno/ktmidi/ci/PropertyExchangeHostFacade;
public final fun getProfileHost ()Ldev/atsushieno/ktmidi/ci/ProfileHostFacade;
public final fun getPropertyHost ()Ldev/atsushieno/ktmidi/ci/PropertyHostFacade;
public final fun getUnknownCIMessageReceived ()Ljava/util/List;
public final fun processInput (BLjava/util/List;)V
public final fun requestMidiMessageReport (BIBBBB)V
Expand Down Expand Up @@ -1045,13 +1043,13 @@ public final class dev/atsushieno/ktmidi/ci/ObservablePropertyListKt {
public static final fun getMediaTypes (Ldev/atsushieno/ktmidi/ci/PropertyMetadata;)Ljava/util/List;
}

public final class dev/atsushieno/ktmidi/ci/ProfileClient {
public final class dev/atsushieno/ktmidi/ci/ProfileClientFacade {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;Ldev/atsushieno/ktmidi/ci/ClientConnection;)V
public final fun getProfiles ()Ldev/atsushieno/ktmidi/ci/ObservableProfileList;
public final fun setProfile (BBLdev/atsushieno/ktmidi/ci/MidiCIProfileId;ZS)V
}

public final class dev/atsushieno/ktmidi/ci/ProfileConfigurationHostFacade {
public final class dev/atsushieno/ktmidi/ci/ProfileHostFacade {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;)V
public final fun addProfile (Ldev/atsushieno/ktmidi/ci/MidiCIProfile;)V
public final fun disableProfile (BBLdev/atsushieno/ktmidi/ci/MidiCIProfileId;)V
Expand Down Expand Up @@ -1089,24 +1087,26 @@ public final class dev/atsushieno/ktmidi/ci/PropertyChunkManager$Chunk {
public fun toString ()Ljava/lang/String;
}

public final class dev/atsushieno/ktmidi/ci/PropertyClient {
public final class dev/atsushieno/ktmidi/ci/PropertyClientFacade {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;Ldev/atsushieno/ktmidi/ci/ClientConnection;)V
public final fun getPendingChunkManager ()Ldev/atsushieno/ktmidi/ci/PropertyChunkManager;
public final fun getProperties ()Ldev/atsushieno/ktmidi/ci/ClientObservablePropertyList;
public final fun getPropertyRules ()Ldev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules;
public final fun getSubscriptionUpdated ()Ljava/util/List;
public final fun getSubscriptions ()Ljava/util/List;
public final fun sendGetPropertyData (Ldev/atsushieno/ktmidi/ci/Message$GetPropertyData;)V
public final fun sendGetPropertyData (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V
public static synthetic fun sendGetPropertyData$default (Ldev/atsushieno/ktmidi/ci/PropertyClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)V
public static synthetic fun sendGetPropertyData$default (Ldev/atsushieno/ktmidi/ci/PropertyClientFacade;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)V
public final fun sendSetPropertyData (Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Z)V
public final fun sendSetPropertyData (Ljava/util/List;Ljava/util/List;)V
public static synthetic fun sendSetPropertyData$default (Ldev/atsushieno/ktmidi/ci/PropertyClient;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ZILjava/lang/Object;)V
public static synthetic fun sendSetPropertyData$default (Ldev/atsushieno/ktmidi/ci/PropertyClientFacade;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ZILjava/lang/Object;)V
public final fun sendSubscribeProperty (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public static synthetic fun sendSubscribeProperty$default (Ldev/atsushieno/ktmidi/ci/PropertyClient;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)V
public static synthetic fun sendSubscribeProperty$default (Ldev/atsushieno/ktmidi/ci/PropertyClientFacade;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)V
public final fun sendUnsubscribeProperty (Ljava/lang/String;)V
public final fun setPropertyRules (Ldev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules;)V
}

public final class dev/atsushieno/ktmidi/ci/PropertyExchangeHostFacade {
public final class dev/atsushieno/ktmidi/ci/PropertyHostFacade {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;)V
public final fun addProperty (Ldev/atsushieno/ktmidi/ci/PropertyMetadata;)V
public final fun getMetadataList ()Ljava/util/List;
Expand Down
Loading

0 comments on commit e5755d1

Please sign in to comment.