Skip to content

Commit

Permalink
further refactoring on property client API.
Browse files Browse the repository at this point in the history
We do not have to pass destinationMUID around when the context is
ClientConnection which has targetMUID.

Reduce Common Rules specific parts in CommonRulesPropertyClient.
  • Loading branch information
atsushieno committed Mar 3, 2024
1 parent 2efa9e3 commit 7cbe9ad
Show file tree
Hide file tree
Showing 11 changed files with 124 additions and 178 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import dev.atsushieno.ktmidi.ci.*
import dev.atsushieno.ktmidi.ci.propertycommonrules.CommonRulesPropertyClient
import dev.atsushieno.ktmidi.ci.propertycommonrules.PropertyResourceNames

class ClientConnectionModel(val parent: CIDeviceModel, val conn: ClientConnection) {
Expand All @@ -22,7 +21,7 @@ class ClientConnectionModel(val parent: CIDeviceModel, val conn: ClientConnectio
fun setProfile(group: Byte, address: Byte, profile: MidiCIProfileId, newEnabled: Boolean, newNumChannelsRequested: Short) =
conn.profileClient.setProfile(group, address, profile, newEnabled, newNumChannelsRequested)

var deviceInfo = mutableStateOf((conn.propertyClient as CommonRulesPropertyClient).deviceInfo)
var deviceInfo = mutableStateOf(conn.deviceInfo)

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

Expand All @@ -31,18 +30,14 @@ class ClientConnectionModel(val parent: CIDeviceModel, val conn: ClientConnectio
data class SubscriptionState(val propertyId: String, var state: MutableState<SubscriptionActionState>)
var subscriptions = mutableStateListOf<SubscriptionState>()

fun getPropertyData(destinationMUID: Int, resource: String, encoding: String?, paginateOffset: Int?, paginateLimit: Int?) {
conn.sendGetPropertyData(destinationMUID, resource, encoding, paginateOffset, paginateLimit)
}
fun setPropertyData(destinationMUID: Int, resource: String, data: List<Byte>, encoding: String?, isPartial: Boolean) {
conn.sendSetPropertyData(destinationMUID, resource, data, encoding, isPartial)
}
fun subscribeProperty(destinationMUID: Int, resource: String, mutualEncoding: String?) {
conn.sendSubscribeProperty(destinationMUID, resource, mutualEncoding)
}
fun unsubscribeProperty(destinationMUID: Int, resource: String) {
conn.sendUnsubscribeProperty(destinationMUID, resource)
}
fun getPropertyData(resource: String, encoding: String?, paginateOffset: Int?, paginateLimit: Int?) =
conn.sendGetPropertyData(resource, encoding, paginateOffset, paginateLimit)
fun setPropertyData(resource: String, data: List<Byte>, encoding: String?, isPartial: Boolean) =
conn.sendSetPropertyData(resource, data, encoding, isPartial)
fun subscribeProperty(resource: String, mutualEncoding: String?) =
conn.sendSubscribeProperty(resource, mutualEncoding)
fun unsubscribeProperty(resource: String) =
conn.sendUnsubscribeProperty(resource)

fun requestMidiMessageReport(address: Byte, targetMUID: Int,
messageDataControl: Byte = MidiMessageReportDataControl.Full,
Expand Down Expand Up @@ -87,7 +82,7 @@ class ClientConnectionModel(val parent: CIDeviceModel, val conn: ClientConnectio
properties.add(index, entry)
}
if (entry.id == PropertyResourceNames.DEVICE_INFO)
deviceInfo.value = (conn.propertyClient as CommonRulesPropertyClient).deviceInfo
deviceInfo.value = conn.deviceInfo
}

conn.properties.propertiesCatalogUpdated.add {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,14 @@ fun ClientConnection(vm: ConnectionViewModel) {
val sp = selectedProperty
if (sp != null)
ClientPropertyDetails(vm, sp,
refreshValueClicked = { encoding, paginateOffset, paginateLimit -> vm.refreshPropertyValue(vm.conn.conn.targetMUID, sp, encoding, paginateOffset, paginateLimit) },
refreshValueClicked = { encoding, paginateOffset, paginateLimit -> vm.refreshPropertyValue(sp, encoding, paginateOffset, paginateLimit) },
subscribeClicked = { newState, encoding ->
if (newState)
vm.subscribeProperty(vm.conn.conn.targetMUID, sp, encoding)
vm.subscribeProperty(sp, encoding)
else
vm.unsubscribeProperty(vm.conn.conn.targetMUID, sp)
vm.unsubscribeProperty(sp)
},
commitChangeClicked = { id, bytes, encoding, isPartial -> vm.sendSetPropertyDataRequest(vm.conn.conn.targetMUID, id, bytes, encoding, isPartial) }
commitChangeClicked = { id, bytes, encoding, isPartial -> vm.sendSetPropertyDataRequest(id, bytes, encoding, isPartial) }
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,35 +80,23 @@ class ConnectionViewModel(val conn: ClientConnectionModel) {
Snapshot.withMutableSnapshot { selectedProperty.value = propertyId }
val metadata = conn.conn.propertyClient.getMetadataList()?.firstOrNull { it.propertyId == propertyId }
as CommonRulesPropertyMetadata
conn.getPropertyData(conn.conn.targetMUID, propertyId,
encoding = metadata.encodings.firstOrNull(), paginateOffset = 0, paginateLimit = 10)
conn.getPropertyData(propertyId, encoding = metadata.encodings.firstOrNull(), paginateOffset = 0, paginateLimit = 10)
}

var selectedProperty = mutableStateOf<String?>(null)

fun refreshPropertyValue(targetMUID: Int, propertyId: String, encoding: String?, paginateOffset: Int?, paginateLimit: Int?) {
conn.getPropertyData(targetMUID, propertyId, encoding, paginateOffset, paginateLimit)
}

fun subscribeProperty(targetMUID: Int, propertyId: String, mutualEncoding: String?) {
conn.subscribeProperty(targetMUID, propertyId, mutualEncoding)
}

fun unsubscribeProperty(targetMUID: Int, propertyId: String) {
conn.unsubscribeProperty(targetMUID, propertyId)
}

fun sendSetPropertyDataRequest(targetMUID: Int, propertyId: String, bytes: List<Byte>, encoding: String?, isPartial: Boolean) {
conn.setPropertyData(targetMUID, propertyId, bytes, encoding, isPartial)
}

fun setProfile(group: Byte, address: Byte, profile: MidiCIProfileId, newEnabled: Boolean, newNumChannelsRequested: Short) {
fun refreshPropertyValue(propertyId: String, encoding: String?, paginateOffset: Int?, paginateLimit: Int?) =
conn.getPropertyData(propertyId, encoding, paginateOffset, paginateLimit)
fun subscribeProperty(propertyId: String, mutualEncoding: String?) =
conn.subscribeProperty(propertyId, mutualEncoding)
fun unsubscribeProperty(propertyId: String) =
conn.unsubscribeProperty(propertyId)
fun sendSetPropertyDataRequest(propertyId: String, bytes: List<Byte>, encoding: String?, isPartial: Boolean) =
conn.setPropertyData(propertyId, bytes, encoding, isPartial)
fun setProfile(group: Byte, address: Byte, profile: MidiCIProfileId, newEnabled: Boolean, newNumChannelsRequested: Short) =
conn.setProfile(group, address, profile, newEnabled, newNumChannelsRequested)
}

fun requestMidiMessageReport(address: Byte, targetMUID: Int) {
fun requestMidiMessageReport(address: Byte, targetMUID: Int) =
conn.requestMidiMessageReport(address, targetMUID)
}
}

class PropertyValueState(val id: MutableState<String>, val mediaType: MutableState<String>, val data: MutableState<List<Byte>>) {
Expand Down
47 changes: 18 additions & 29 deletions ktmidi-ci/api/android/ktmidi-ci.api
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,9 @@ public final class dev/atsushieno/ktmidi/ci/CISubId2 {
}

public final class dev/atsushieno/ktmidi/ci/ClientConnection {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;ILdev/atsushieno/ktmidi/ci/DeviceDetails;BLjava/lang/String;Ldev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules;)V
public synthetic fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;ILdev/atsushieno/ktmidi/ci/DeviceDetails;BLjava/lang/String;Ldev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun addPendingRequest (Ldev/atsushieno/ktmidi/ci/Message$GetPropertyData;)V
public final fun addPendingSubscription (BLjava/lang/String;Ljava/lang/String;)V
public final fun getDevice ()Ldev/atsushieno/ktmidi/ci/DeviceDetails;
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;ILdev/atsushieno/ktmidi/ci/DeviceDetails;BLjava/lang/String;)V
public synthetic fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;ILdev/atsushieno/ktmidi/ci/DeviceDetails;BLjava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getDeviceInfo ()Ldev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;
public final fun getMaxSimultaneousPropertyRequests ()B
public final fun getPendingChunkManager ()Ldev/atsushieno/ktmidi/ci/PropertyChunkManager;
public final fun getProductInstanceId ()Ljava/lang/String;
Expand All @@ -131,19 +129,19 @@ public final class dev/atsushieno/ktmidi/ci/ClientConnection {
public final fun processPropertyCapabilitiesReply (Ldev/atsushieno/ktmidi/ci/Message$PropertyGetCapabilitiesReply;)V
public final fun processPropertySubscriptionReply (Ldev/atsushieno/ktmidi/ci/Message$SubscribePropertyReply;)V
public final fun processSubscribeProperty (Ldev/atsushieno/ktmidi/ci/Message$SubscribeProperty;)V
public final fun promoteSubscriptionAsUnsubscribing (Ljava/lang/String;B)V
public final fun sendGetPropertyData (ILjava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V
public final fun sendGetPropertyData (Ldev/atsushieno/ktmidi/ci/Message$GetPropertyData;)V
public static synthetic fun sendGetPropertyData$default (Ldev/atsushieno/ktmidi/ci/ClientConnection;ILjava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)V
public final fun sendSetPropertyData (ILjava/lang/String;Ljava/util/List;Ljava/lang/String;Z)V
public static synthetic fun sendSetPropertyData$default (Ldev/atsushieno/ktmidi/ci/ClientConnection;ILjava/lang/String;Ljava/util/List;Ljava/lang/String;ZILjava/lang/Object;)V
public final fun sendSubscribeProperty (ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public static synthetic fun sendSubscribeProperty$default (Ldev/atsushieno/ktmidi/ci/ClientConnection;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)V
public final fun sendUnsubscribeProperty (ILjava/lang/String;)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/ClientConnection;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/ClientConnection;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/ClientConnection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)V
public final fun sendUnsubscribeProperty (Ljava/lang/String;)V
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 updateLocalProperty (ILdev/atsushieno/ktmidi/ci/Message$SubscribeProperty;)Lkotlin/Pair;
public final fun updateRemoteProperty (Ldev/atsushieno/ktmidi/ci/Message$GetPropertyDataReply;)Ljava/lang/String;
public final fun setPropertyClient (Ldev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules;)V
}

public final class dev/atsushieno/ktmidi/ci/ClientConnection$ProfileClient {
Expand Down Expand Up @@ -690,17 +688,16 @@ public abstract interface class dev/atsushieno/ktmidi/ci/MidiCIClientPropertyRul
public abstract fun createSubscriptionHeader (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public abstract fun decodeBody (Ljava/util/List;Ljava/util/List;)Ljava/util/List;
public abstract fun encodeBody (Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
public abstract fun getHeaderFieldBoolean (Ljava/util/List;Ljava/lang/String;)Z
public abstract fun getHeaderFieldInteger (Ljava/util/List;Ljava/lang/String;)Ljava/lang/Integer;
public abstract fun getHeaderFieldString (Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;
public abstract fun getMetadataList ()Ljava/util/List;
public abstract fun getPropertyCatalogUpdated ()Ljava/util/List;
public abstract fun getPropertyIdForHeader (Ljava/util/List;)Ljava/lang/String;
public abstract fun getPropertyListRequest (BIB)Ldev/atsushieno/ktmidi/ci/Message$GetPropertyData;
public abstract fun getSubscribedProperty (Ldev/atsushieno/ktmidi/ci/Message$SubscribeProperty;)Ljava/lang/String;
public abstract fun getUpdatedValue (Ldev/atsushieno/ktmidi/ci/PropertyValue;ZLjava/lang/String;Ljava/util/List;)Lkotlin/Pair;
public abstract fun onGetPropertyDataReply (Ldev/atsushieno/ktmidi/ci/Message$GetPropertyData;Ldev/atsushieno/ktmidi/ci/Message$GetPropertyDataReply;)V
public abstract fun processPropertySubscriptionResult (Ljava/lang/Object;Ldev/atsushieno/ktmidi/ci/Message$SubscribePropertyReply;)V
public abstract fun propertyValueUpdated (Ljava/lang/String;Ljava/util/List;)V
public abstract fun requestPropertyList (B)V
}

public final class dev/atsushieno/ktmidi/ci/MidiCIConstants {
Expand Down Expand Up @@ -1291,31 +1288,27 @@ public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesKnown
}

public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyClient : dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyHelper, dev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules {
public fun <init> (Ldev/atsushieno/ktmidi/ci/Logger;ILdev/atsushieno/ktmidi/ci/DeviceDetails;)V
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;Ldev/atsushieno/ktmidi/ci/ClientConnection;)V
public fun createDataRequestHeader (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public fun createStatusHeader (I)Ljava/util/List;
public fun createSubscriptionHeader (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public fun decodeBody (Ljava/util/List;Ljava/util/List;)Ljava/util/List;
public fun encodeBody (Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
public final fun getDeviceInfo ()Ldev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;
public fun getMetadataList ()Ljava/util/List;
public fun getPropertyCatalogUpdated ()Ljava/util/List;
public fun getPropertyIdForHeader (Ljava/util/List;)Ljava/lang/String;
public fun getPropertyListRequest (BIB)Ldev/atsushieno/ktmidi/ci/Message$GetPropertyData;
public fun getSubscribedProperty (Ldev/atsushieno/ktmidi/ci/Message$SubscribeProperty;)Ljava/lang/String;
public final fun getSubscriptions ()Ljava/util/List;
public fun getUpdatedValue (Ldev/atsushieno/ktmidi/ci/PropertyValue;ZLjava/lang/String;Ljava/util/List;)Lkotlin/Pair;
public fun onGetPropertyDataReply (Ldev/atsushieno/ktmidi/ci/Message$GetPropertyData;Ldev/atsushieno/ktmidi/ci/Message$GetPropertyDataReply;)V
public fun processPropertySubscriptionResult (Ljava/lang/Object;Ldev/atsushieno/ktmidi/ci/Message$SubscribePropertyReply;)V
public final fun setDeviceInfo (Ldev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;)V
public fun propertyValueUpdated (Ljava/lang/String;Ljava/util/List;)V
public fun requestPropertyList (B)V
}

public abstract class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyHelper {
public static final field Companion Ldev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyHelper$Companion;
public fun <init> (Ldev/atsushieno/ktmidi/ci/Logger;)V
public final fun createRequestHeaderBytes (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public final fun createSubscribeHeaderBytes (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
public final fun getHeaderFieldBoolean (Ljava/util/List;Ljava/lang/String;)Z
public final fun getHeaderFieldInteger (Ljava/util/List;Ljava/lang/String;)Ljava/lang/Integer;
public final fun getHeaderFieldString (Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;
protected final fun getLogger ()Ldev/atsushieno/ktmidi/ci/Logger;
Expand All @@ -1324,10 +1317,6 @@ public abstract class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPr
public final fun getResourceListRequestJson ()Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;
}

public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyHelper$Companion {
public final fun generateRandomSubscribeId ()Ljava/lang/String;
}

public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyMetadata : dev/atsushieno/ktmidi/ci/PropertyMetadata {
public static final field Companion Ldev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyMetadata$Companion;
public fun <init> ()V
Expand Down
Loading

0 comments on commit 7cbe9ad

Please sign in to comment.