diff --git a/core/data/src/main/java/com/rtbishop/look4sat/core/data/repository/SettingsRepo.kt b/core/data/src/main/java/com/rtbishop/look4sat/core/data/repository/SettingsRepo.kt index afa8b5e3..3cce3445 100644 --- a/core/data/src/main/java/com/rtbishop/look4sat/core/data/repository/SettingsRepo.kt +++ b/core/data/src/main/java/com/rtbishop/look4sat/core/data/repository/SettingsRepo.kt @@ -31,6 +31,7 @@ import com.rtbishop.look4sat.core.domain.model.PassesSettings import com.rtbishop.look4sat.core.domain.model.RCSettings import com.rtbishop.look4sat.core.domain.model.RadioControlSettings import com.rtbishop.look4sat.core.domain.model.WavelogSettings +import com.rtbishop.look4sat.core.domain.model.WavelogUploadSettings import com.rtbishop.look4sat.core.domain.predict.GeoPos import com.rtbishop.look4sat.core.domain.repository.ISettingsRepo import com.rtbishop.look4sat.core.domain.utility.positionToQth @@ -386,6 +387,40 @@ class SettingsRepo( preferences.edit { putString(keyLastLotwSyncCallsign, callsign.trim().uppercase()) } //endregion + //region # Wavelog upload settings + private val keyWavelogUploadUrl = "wavelogUploadUrl" + private val keyWavelogUploadApiKey = "wavelogUploadApiKey" + private val keyWavelogUploadStationId = "wavelogUploadStationId" + private val keyWavelogUploadStationName = "wavelogUploadStationName" + private val keyWavelogUploadStationCallsign = "wavelogUploadStationCallsign" + private val keyWavelogUploadStationGrid = "wavelogUploadStationGrid" + + private val _wavelogUploadSettings = MutableStateFlow(getWavelogUploadSettings()) + override val wavelogUploadSettings: StateFlow = _wavelogUploadSettings + + override fun updateWavelogUploadSettings(settings: WavelogUploadSettings) { + val trimmed = settings.copy(url = settings.url.trim(), apiKey = settings.apiKey.trim()) + preferences.edit { + putString(keyWavelogUploadUrl, trimmed.url) + putString(keyWavelogUploadApiKey, trimmed.apiKey) + putString(keyWavelogUploadStationId, trimmed.stationId) + putString(keyWavelogUploadStationName, trimmed.stationName) + putString(keyWavelogUploadStationCallsign, trimmed.stationCallsign) + putString(keyWavelogUploadStationGrid, trimmed.stationGrid) + } + _wavelogUploadSettings.value = trimmed + } + + private fun getWavelogUploadSettings(): WavelogUploadSettings = WavelogUploadSettings( + url = preferences.getString(keyWavelogUploadUrl, null).orEmpty(), + apiKey = preferences.getString(keyWavelogUploadApiKey, null).orEmpty(), + stationId = preferences.getString(keyWavelogUploadStationId, null).orEmpty(), + stationName = preferences.getString(keyWavelogUploadStationName, null).orEmpty(), + stationCallsign = preferences.getString(keyWavelogUploadStationCallsign, null).orEmpty(), + stationGrid = preferences.getString(keyWavelogUploadStationGrid, null).orEmpty() + ) + //endregion + //region # Transceivers settings private val _passesSettings = MutableStateFlow(getPassesSettings()) override val passesSettings: StateFlow = _passesSettings diff --git a/core/data/src/test/java/com/rtbishop/look4sat/core/data/repository/DatabaseRepoTest.kt b/core/data/src/test/java/com/rtbishop/look4sat/core/data/repository/DatabaseRepoTest.kt index a5ed56cc..8d0ee8d8 100644 --- a/core/data/src/test/java/com/rtbishop/look4sat/core/data/repository/DatabaseRepoTest.kt +++ b/core/data/src/test/java/com/rtbishop/look4sat/core/data/repository/DatabaseRepoTest.kt @@ -458,6 +458,11 @@ private class FakeSettingsRepo(dataSources: DataSourcesSettings = defaultDataSou override fun updateWavelogSettings(settings: com.rtbishop.look4sat.core.domain.model.WavelogSettings) = Unit + override val wavelogUploadSettings: StateFlow = + MutableStateFlow(com.rtbishop.look4sat.core.domain.model.WavelogUploadSettings()) + + override fun updateWavelogUploadSettings(settings: com.rtbishop.look4sat.core.domain.model.WavelogUploadSettings) = Unit + override fun getWorkedGrids(): Set = emptySet() private val workedGrids = MutableStateFlow(emptySet()) diff --git a/core/data/src/test/java/com/rtbishop/look4sat/core/data/repository/SelectionRepoSearchTest.kt b/core/data/src/test/java/com/rtbishop/look4sat/core/data/repository/SelectionRepoSearchTest.kt index 5ad6d52f..7f583154 100644 --- a/core/data/src/test/java/com/rtbishop/look4sat/core/data/repository/SelectionRepoSearchTest.kt +++ b/core/data/src/test/java/com/rtbishop/look4sat/core/data/repository/SelectionRepoSearchTest.kt @@ -346,6 +346,9 @@ private class FakeSettingsRepoForSearch : ISettingsRepo { ) override val wavelogSettings: StateFlow = MutableStateFlow(com.rtbishop.look4sat.core.domain.model.WavelogSettings()) + override val wavelogUploadSettings: StateFlow = + MutableStateFlow(com.rtbishop.look4sat.core.domain.model.WavelogUploadSettings()) + override fun updateWavelogUploadSettings(settings: com.rtbishop.look4sat.core.domain.model.WavelogUploadSettings) = Unit override val lotwSettings: StateFlow = MutableStateFlow(com.rtbishop.look4sat.core.domain.model.LoTWSettings()) diff --git a/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/model/Settings.kt b/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/model/Settings.kt index e98d648e..76682190 100644 --- a/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/model/Settings.kt +++ b/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/model/Settings.kt @@ -109,6 +109,19 @@ data class WavelogSettings( val isConfigured: Boolean get() = url.isNotBlank() && token.isNotBlank() } +/** Wavelog QSO-upload configuration (a separate block from the worked-grids sync). */ +data class WavelogUploadSettings( + val url: String = "", + val apiKey: String = "", + val stationId: String = "", + val stationName: String = "", + val stationCallsign: String = "", + val stationGrid: String = "" +) { + val isConfigured: Boolean get() = url.isNotBlank() && apiKey.isNotBlank() + val isReady: Boolean get() = isConfigured && stationId.isNotBlank() +} + data class LoTWSettings( val callsign: String = "", val password: String = "" diff --git a/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/repository/ISettingsRepo.kt b/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/repository/ISettingsRepo.kt index c06824eb..29c6e000 100644 --- a/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/repository/ISettingsRepo.kt +++ b/core/domain/src/main/java/com/rtbishop/look4sat/core/domain/repository/ISettingsRepo.kt @@ -24,6 +24,7 @@ import com.rtbishop.look4sat.core.domain.model.PassesSettings import com.rtbishop.look4sat.core.domain.model.RCSettings import com.rtbishop.look4sat.core.domain.model.RadioControlSettings import com.rtbishop.look4sat.core.domain.model.WavelogSettings +import com.rtbishop.look4sat.core.domain.model.WavelogUploadSettings import com.rtbishop.look4sat.core.domain.predict.GeoPos import kotlinx.coroutines.flow.StateFlow @@ -124,6 +125,11 @@ interface ISettingsRepo { fun setMarkedGridStations(stations: Map>) //endregion + //region # Wavelog upload settings + val wavelogUploadSettings: StateFlow + fun updateWavelogUploadSettings(settings: WavelogUploadSettings) + //endregion + //region # LoTW confirmed-grids settings val lotwSettings: StateFlow fun updateLoTWSettings(settings: com.rtbishop.look4sat.core.domain.model.LoTWSettings) diff --git a/core/domain/src/test/java/com/rtbishop/look4sat/core/domain/repository/LoTWGridSyncTest.kt b/core/domain/src/test/java/com/rtbishop/look4sat/core/domain/repository/LoTWGridSyncTest.kt index 5eb7c672..195060bb 100644 --- a/core/domain/src/test/java/com/rtbishop/look4sat/core/domain/repository/LoTWGridSyncTest.kt +++ b/core/domain/src/test/java/com/rtbishop/look4sat/core/domain/repository/LoTWGridSyncTest.kt @@ -27,6 +27,7 @@ import com.rtbishop.look4sat.core.domain.model.PassesSettings import com.rtbishop.look4sat.core.domain.model.RCSettings import com.rtbishop.look4sat.core.domain.model.RadioControlSettings import com.rtbishop.look4sat.core.domain.model.WavelogSettings +import com.rtbishop.look4sat.core.domain.model.WavelogUploadSettings import com.rtbishop.look4sat.core.domain.predict.GeoPos import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -248,6 +249,7 @@ class LoTWGridSyncTest { RadioControlSettings(false, RadioControlSettings.MODEL_YAESU_FT817, "", "", "", "", 9600) ) override val wavelogSettings: StateFlow = MutableStateFlow(WavelogSettings()) + override val wavelogUploadSettings: StateFlow = MutableStateFlow(WavelogUploadSettings()) override val lotwSettings: StateFlow = MutableStateFlow(LoTWSettings()) private var workedGrids: Set = emptySet() @@ -292,6 +294,7 @@ class LoTWGridSyncTest { override fun getAmSatCallsign(): String = "" override fun setAmSatCallsign(callsign: String) = TODO() override fun updateWavelogSettings(settings: WavelogSettings) = TODO() + override fun updateWavelogUploadSettings(settings: WavelogUploadSettings) = TODO() override fun updateLoTWSettings(settings: LoTWSettings) = TODO() } } diff --git a/feature/mutual/src/test/java/com/rtbishop/look4sat/feature/mutual/Fakes.kt b/feature/mutual/src/test/java/com/rtbishop/look4sat/feature/mutual/Fakes.kt index 7171525b..feac6b28 100644 --- a/feature/mutual/src/test/java/com/rtbishop/look4sat/feature/mutual/Fakes.kt +++ b/feature/mutual/src/test/java/com/rtbishop/look4sat/feature/mutual/Fakes.kt @@ -28,6 +28,7 @@ import com.rtbishop.look4sat.core.domain.model.RCSettings import com.rtbishop.look4sat.core.domain.model.RadioControlSettings import com.rtbishop.look4sat.core.domain.model.SatRadio import com.rtbishop.look4sat.core.domain.model.WavelogSettings +import com.rtbishop.look4sat.core.domain.model.WavelogUploadSettings import com.rtbishop.look4sat.core.domain.predict.GeoPos import com.rtbishop.look4sat.core.domain.predict.OrbitalObject import com.rtbishop.look4sat.core.domain.predict.OrbitalPass @@ -107,6 +108,8 @@ class FakeSettingsRepo( RadioControlSettings(false, RadioControlSettings.MODEL_YAESU_FT817, "", "", "", "", 9600) ) override val wavelogSettings: StateFlow = MutableStateFlow(WavelogSettings()) + override val wavelogUploadSettings: StateFlow = MutableStateFlow(WavelogUploadSettings()) + override fun updateWavelogUploadSettings(settings: WavelogUploadSettings) = Unit override val lotwSettings: StateFlow = MutableStateFlow(LoTWSettings()) override fun setSelectedIds(ids: List) = TODO()