Skip to content

Commit c7a32c4

Browse files
committed
Pass versions to OnlineModule and update state logic
Refactored OnlineModuleEntity to accept a list of versions when converting to OnlineModule. Updated LocalRepository to provide versions when fetching online modules. Modified OnlineState to use the last version's timestamp for lastUpdated. Updated UI and ViewModel logic to include local updateJson as a version when present, ensuring version lists are accurate and up-to-date.
1 parent 4302201 commit c7a32c4

File tree

5 files changed

+38
-18
lines changed

5 files changed

+38
-18
lines changed

app/src/main/kotlin/com/dergoogler/mmrl/database/entity/online/OnlineModuleEntity.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.room.Embedded
44
import androidx.room.Entity
55
import com.dergoogler.mmrl.model.online.Blacklist
66
import com.dergoogler.mmrl.model.online.OnlineModule
7+
import com.dergoogler.mmrl.model.online.VersionItem
78

89
@Entity(tableName = "onlineModules", primaryKeys = ["id", "repoUrl"])
910
data class OnlineModuleEntity(
@@ -79,7 +80,7 @@ data class OnlineModuleEntity(
7980
blacklist = BlacklistEntity(blacklist)
8081
)
8182

82-
fun toModule() = OnlineModule(
83+
fun toModule(versions: List<VersionItem> = emptyList()) = OnlineModule(
8384
repoUrl = repoUrl,
8485
id = id,
8586
name = name,
@@ -91,7 +92,7 @@ data class OnlineModuleEntity(
9192
note = note?.toNote(),
9293
root = root?.toRoot(),
9394
features = features?.toFeatures(),
94-
versions = listOf(),
95+
versions = versions,
9596
maxApi = maxApi,
9697
minApi = minApi,
9798
size = size,

app/src/main/kotlin/com/dergoogler/mmrl/model/state/OnlineState.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ data class OnlineState(
1818
val installed = local != null && local.id.equals(id)
1919
&& local.author == author
2020

21-
val updatable = if (installed && hasUpdatableTag) {
21+
val updatable = local !== null && if (installed && hasUpdatableTag) {
2222
local.versionCode < versionCode
2323
} else {
2424
false
@@ -28,7 +28,7 @@ data class OnlineState(
2828
installed = installed,
2929
updatable = updatable,
3030
hasLicense = license.orEmpty().isNotBlank(),
31-
lastUpdated = versions.firstOrNull()?.timestamp ?: 0f
31+
lastUpdated = versions.lastOrNull()?.timestamp ?: 0f
3232
)
3333
}
3434

app/src/main/kotlin/com/dergoogler/mmrl/repository/LocalRepository.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ import com.dergoogler.mmrl.ext.merge
1616
import com.dergoogler.mmrl.model.local.LocalModule
1717
import com.dergoogler.mmrl.model.online.Blacklist
1818
import com.dergoogler.mmrl.model.online.OnlineModule
19-
import dagger.hilt.EntryPoint
20-
import dagger.hilt.InstallIn
21-
import dagger.hilt.components.SingletonComponent
2219
import kotlinx.coroutines.Dispatchers
2320
import kotlinx.coroutines.flow.map
2421
import kotlinx.coroutines.withContext
@@ -165,15 +162,15 @@ class LocalRepository @Inject constructor(
165162
}
166163

167164
suspend fun getOnlineByIdAndUrl(id: String, repoUrl: String) = withContext(Dispatchers.IO) {
168-
joinDao.getOnlineByIdAndUrl(id, repoUrl).toModule()
165+
joinDao.getOnlineByIdAndUrl(id, repoUrl).toModule(getVersionByIdAndUrl(id, repoUrl))
169166
}
170167

171168
suspend fun getOnlineAllById(id: String) = withContext(Dispatchers.IO) {
172-
onlineDao.getAllById(id).map { it.toModule() }
169+
onlineDao.getAllById(id).map { it.toModule(getVersionById(it.id)) }
173170
}
174171

175172
suspend fun getOnlineAllByUrl(url: String) = withContext(Dispatchers.IO) {
176-
onlineDao.getAllByUrl(url).map { it.toModule() }
173+
onlineDao.getAllByUrl(url).map { it.toModule(getVersionByIdAndUrl(it.id, url)) }
177174
}
178175

179176
suspend fun getOnlineAllByIdAndUrl(id: String, repoUrl: String) = withContext(Dispatchers.IO) {

app/src/main/kotlin/com/dergoogler/mmrl/ui/remember/rememberOnlineModule.kt

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
package com.dergoogler.mmrl.ui.remember
22

33
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.State
45
import androidx.compose.runtime.derivedStateOf
6+
import androidx.compose.runtime.getValue
57
import androidx.compose.runtime.produceState
68
import androidx.compose.runtime.remember
79
import com.dergoogler.mmrl.database.entity.Repo
810
import com.dergoogler.mmrl.datastore.model.Option
911
import com.dergoogler.mmrl.datastore.providable.LocalUserPreferences
12+
import com.dergoogler.mmrl.model.json.UpdateJson
1013
import com.dergoogler.mmrl.model.online.OnlineModule
1114
import com.dergoogler.mmrl.model.state.OnlineState
1215
import com.dergoogler.mmrl.model.state.OnlineState.Companion.createState
1316
import com.dergoogler.mmrl.platform.model.ModId
1417
import com.dergoogler.mmrl.platform.model.ModId.Companion.toModId
15-
import androidx.compose.runtime.State
16-
import androidx.compose.runtime.getValue
1718

1819
@Composable
1920
fun rememberOnlineModules(
@@ -33,10 +34,20 @@ fun rememberOnlineModules(
3334
val modules = localRepository.getOnlineAllByUrl(repo.url)
3435

3536
val sorted = modules.map {
36-
it.createState(
37-
local = localRepository.getLocalByIdOrNull(it.id),
37+
val local = localRepository.getLocalByIdOrNull(it.id)
38+
val versionsList = it.versions.toMutableList()
39+
40+
if (local != null) {
41+
UpdateJson.loadToVersionItem(local.updateJson)?.let { es ->
42+
// no need to define here a repo name since we only need to for the last updated
43+
versionsList.add(0, es)
44+
}
45+
}
46+
47+
it.copy(versions = versionsList).createState(
48+
local = local,
3849
hasUpdatableTag = localRepository.hasUpdatableTag(it.id)
39-
) to it
50+
) to it.copy(versions = versionsList)
4051
}.sortedWith(
4152
if (repositoryMenu.descending) {
4253
when (repositoryMenu.option) {

app/src/main/kotlin/com/dergoogler/mmrl/viewmodel/RepositoryViewModel.kt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.dergoogler.mmrl.database.entity.Repo
1212
import com.dergoogler.mmrl.datastore.UserPreferencesRepository
1313
import com.dergoogler.mmrl.datastore.model.Option
1414
import com.dergoogler.mmrl.datastore.model.RepositoryMenu
15+
import com.dergoogler.mmrl.model.json.UpdateJson
1516
import com.dergoogler.mmrl.model.online.OnlineModule
1617
import com.dergoogler.mmrl.model.state.OnlineState
1718
import com.dergoogler.mmrl.model.state.OnlineState.Companion.createState
@@ -73,10 +74,20 @@ class RepositoryViewModel @AssistedInject constructor(
7374
repositoryMenu
7475
) { list, menu ->
7576
cacheFlow.value = list.map {
76-
it.createState(
77-
local = localRepository.getLocalByIdOrNull(it.id),
77+
val local = localRepository.getLocalByIdOrNull(it.id)
78+
val versionsList = it.versions.toMutableList()
79+
80+
if (local != null) {
81+
UpdateJson.loadToVersionItem(local.updateJson)?.let { es ->
82+
// no need to define here a repo name since we only need to for the last updated
83+
versionsList.add(0, es)
84+
}
85+
}
86+
87+
it.copy(versions = versionsList).createState(
88+
local = local,
7889
hasUpdatableTag = localRepository.hasUpdatableTag(it.id)
79-
) to it
90+
) to it.copy(versions = versionsList)
8091
}.sortedWith(
8192
comparator(menu.option, menu.descending)
8293
).let { v ->

0 commit comments

Comments
 (0)