diff --git a/FloconDesktop/data/core/src/commonMain/kotlin/io/github/openflocon/data/core/dashboard/datasource/DeviceDashboardsDataSource.kt b/FloconDesktop/data/core/src/commonMain/kotlin/io/github/openflocon/data/core/dashboard/datasource/DeviceDashboardsDataSource.kt index 1bde4cb6..623e72e9 100644 --- a/FloconDesktop/data/core/src/commonMain/kotlin/io/github/openflocon/data/core/dashboard/datasource/DeviceDashboardsDataSource.kt +++ b/FloconDesktop/data/core/src/commonMain/kotlin/io/github/openflocon/data/core/dashboard/datasource/DeviceDashboardsDataSource.kt @@ -7,11 +7,13 @@ import kotlinx.coroutines.flow.Flow interface DeviceDashboardsDataSource { - fun observeSelectedDeviceDashboard(deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel): Flow + fun observeSelectedDeviceDashboard( + deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel + ): Flow fun selectDeviceDashboard( - deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel, dashboardId: DashboardId, + deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel, ) fun deleteDashboard( diff --git a/FloconDesktop/data/core/src/commonMain/kotlin/io/github/openflocon/data/core/dashboard/repository/DashboardRepositoryImpl.kt b/FloconDesktop/data/core/src/commonMain/kotlin/io/github/openflocon/data/core/dashboard/repository/DashboardRepositoryImpl.kt index bb7148a7..d65c3a5c 100644 --- a/FloconDesktop/data/core/src/commonMain/kotlin/io/github/openflocon/data/core/dashboard/repository/DashboardRepositoryImpl.kt +++ b/FloconDesktop/data/core/src/commonMain/kotlin/io/github/openflocon/data/core/dashboard/repository/DashboardRepositoryImpl.kt @@ -114,18 +114,20 @@ class DashboardRepositoryImpl( } override suspend fun selectDeviceDashboard( - deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel, - dashboardId: DashboardId + dashboardId: DashboardId, + deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel ) { withContext(dispatcherProvider.data) { deviceDashboardsDataSource.selectDeviceDashboard( - deviceIdAndPackageName = deviceIdAndPackageName, dashboardId = dashboardId, + deviceIdAndPackageName = deviceIdAndPackageName, ) } } - override fun observeSelectedDeviceDashboard(deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel): Flow = deviceDashboardsDataSource.observeSelectedDeviceDashboard( + override fun observeSelectedDeviceDashboard( + deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel + ): Flow = deviceDashboardsDataSource.observeSelectedDeviceDashboard( deviceIdAndPackageName = deviceIdAndPackageName, ).flowOn(dispatcherProvider.data) diff --git a/FloconDesktop/data/local/src/commonMain/kotlin/io/github/openflocon/data/local/dashboard/datasource/DeviceDashboardsDataSourceInMemory.kt b/FloconDesktop/data/local/src/commonMain/kotlin/io/github/openflocon/data/local/dashboard/datasource/DeviceDashboardsDataSourceInMemory.kt index f47e1c0b..d15a6292 100644 --- a/FloconDesktop/data/local/src/commonMain/kotlin/io/github/openflocon/data/local/dashboard/datasource/DeviceDashboardsDataSourceInMemory.kt +++ b/FloconDesktop/data/local/src/commonMain/kotlin/io/github/openflocon/data/local/dashboard/datasource/DeviceDashboardsDataSourceInMemory.kt @@ -11,31 +11,47 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.update class DeviceDashboardsDataSourceInMemory : DeviceDashboardsDataSource { - private val selectedDeviceDashboards = MutableStateFlow>(emptyMap()) + private val selectedDeviceDashboards = MutableStateFlow>(emptyMap()) private val selectedDashboardArrangements = MutableStateFlow>(emptyMap()) - override fun observeSelectedDeviceDashboard(deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel): Flow = selectedDeviceDashboards - .map { it[deviceIdAndPackageName] } + override fun observeSelectedDeviceDashboard( + deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel + ): Flow = selectedDeviceDashboards + .map { + val dashboardKey = getSelectedDashboardKey(deviceIdAndPackageName) + it[dashboardKey] + } .distinctUntilChanged() - override fun selectDeviceDashboard(deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel, dashboardId: DashboardId) { + override fun selectDeviceDashboard( + dashboardId: DashboardId, + deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel + ) { + val dashboardKey = getSelectedDashboardKey(deviceIdAndPackageName) selectedDeviceDashboards.update { - it + (deviceIdAndPackageName to dashboardId) + it + (dashboardKey to dashboardId) } } - override fun deleteDashboard(dashboardId: DashboardId, deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel) { + override fun deleteDashboard( + dashboardId: DashboardId, + deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel + ) { + val dashboardKey = getSelectedDashboardKey(deviceIdAndPackageName) selectedDeviceDashboards.update { - if (it[deviceIdAndPackageName] == dashboardId) { - it - deviceIdAndPackageName + if (it[dashboardKey] == dashboardId) { + it - dashboardKey } else it } } - override fun observeDashboardArrangement(dashboardId: DashboardId, deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel): Flow = selectedDashboardArrangements + override fun observeDashboardArrangement( + dashboardId: DashboardId, + deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel + ): Flow = selectedDashboardArrangements .map { - val dashboardKey = getDashboardArrangementKey(dashboardId, deviceIdAndPackageName) - it[dashboardKey] ?: DashboardArrangementDomainModel.Adaptive + val dashboardArrangementKey = getDashboardArrangementKey(dashboardId, deviceIdAndPackageName) + it[dashboardArrangementKey] ?: DashboardArrangementDomainModel.Adaptive } .distinctUntilChanged() @@ -44,12 +60,18 @@ class DeviceDashboardsDataSourceInMemory : DeviceDashboardsDataSource { deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel, arrangement: DashboardArrangementDomainModel ) { - val dashboardKey = getDashboardArrangementKey(dashboardId, deviceIdAndPackageName) + val dashboardArrangementKey = getDashboardArrangementKey(dashboardId, deviceIdAndPackageName) selectedDashboardArrangements.update { - it + (dashboardKey to arrangement) + it + (dashboardArrangementKey to arrangement) } } + private fun getSelectedDashboardKey( + deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel + ): String { + return deviceIdAndPackageName.packageName + } + private fun getDashboardArrangementKey( dashboardId: DashboardId, deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel diff --git a/FloconDesktop/domain/src/commonMain/kotlin/io/github/openflocon/domain/dashboard/repository/DashboardRepository.kt b/FloconDesktop/domain/src/commonMain/kotlin/io/github/openflocon/domain/dashboard/repository/DashboardRepository.kt index c3bb785b..a24a650a 100644 --- a/FloconDesktop/domain/src/commonMain/kotlin/io/github/openflocon/domain/dashboard/repository/DashboardRepository.kt +++ b/FloconDesktop/domain/src/commonMain/kotlin/io/github/openflocon/domain/dashboard/repository/DashboardRepository.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.flow.Flow interface DashboardRepository { fun observeDashboard(deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel, dashboardId: DashboardId): Flow - suspend fun selectDeviceDashboard(deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel, dashboardId: DashboardId) + suspend fun selectDeviceDashboard(dashboardId: DashboardId, deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel) fun observeSelectedDeviceDashboard(deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel): Flow fun observeDeviceDashboards(deviceIdAndPackageName: DeviceIdAndPackageNameDomainModel): Flow>