Skip to content

Commit 3671193

Browse files
sdsantosaanorbel
andauthored
Persist rejected descriptor updates (#425)
Co-authored-by: Norbel Ambanumben <[email protected]>
1 parent 35e6f0c commit 3671193

File tree

55 files changed

+552
-472
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+552
-472
lines changed

composeApp/src/androidMain/kotlin/org/ooni/probe/AndroidApplication.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class AndroidApplication : Application() {
5252
startSingleRunInner = appWorkerManager::startSingleRun,
5353
configureAutoRun = appWorkerManager::configureAutoRun,
5454
configureDescriptorAutoUpdate = appWorkerManager::configureDescriptorAutoUpdate,
55-
fetchDescriptorUpdate = appWorkerManager::fetchDescriptorUpdate,
55+
startDescriptorsUpdate = appWorkerManager::startDescriptorsUpdate,
5656
launchAction = ::launchAction,
5757
batteryOptimization = batteryOptimization,
5858
flavorConfig = FlavorConfig(),

composeApp/src/androidMain/kotlin/org/ooni/probe/background/AppWorkerManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class AppWorkerManager(
7878
}
7979
}
8080

81-
suspend fun fetchDescriptorUpdate(descriptors: List<InstalledTestDescriptorModel>?) {
81+
suspend fun startDescriptorsUpdate(descriptors: List<InstalledTestDescriptorModel>?) {
8282
withContext(backgroundDispatcher) {
8383
workManager
8484
.enqueueUniqueWork(
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11

22
onboarding1.webp
33
onboarding2.webp
4-
onboarding3.webp
5-
onboarding.webp
4+
onboarding3.webp
Binary file not shown.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11

22
onboarding1.webp
33
onboarding2.webp
4-
onboarding3.webp
5-
onboarding.webp
4+
onboarding3.webp
Binary file not shown.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11

22
onboarding1.webp
33
onboarding2.webp
4-
onboarding3.webp
5-
onboarding.webp
4+
onboarding3.webp
Binary file not shown.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11

22
onboarding1.webp
33
onboarding2.webp
4-
onboarding3.webp
5-
onboarding.webp
4+
onboarding3.webp
Binary file not shown.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11

22
onboarding1.webp
33
onboarding2.webp
4-
onboarding3.webp
5-
onboarding.webp
4+
onboarding3.webp
Binary file not shown.

composeApp/src/commonMain/composeResources/values/strings-common.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,10 +327,13 @@
327327
<string name="Modal_EnableNotifications_Title">Get updates on internet censorship</string>
328328

329329
<string name="Dashboard_Runv2_Overview_LastUpdated">Last updated %1$s</string>
330+
<string name="Dashboard_Runv2_Overview_RejectedUpdate">Rejected update</string>
331+
<string name="Dashboard_Runv2_Overview_UndoRejectedUpdate">Undo</string>
330332
<string name="Dashboard_RunTests_RunButton_Label_One">Run %1$d test</string>
331333
<string name="Dashboard_RunTests_RunButton_Label_Other">Run %1$d tests</string>
332334
<string name="Dashboard_Update_Ready">The app update has just been downloaded</string>
333335
<string name="Dashboard_Update_Restart">Restart</string>
336+
<string name="Dashboard_ReviewDescriptor_Reject">Reject Update</string>
334337

335338
<string name="AddDescriptor_Toasts_Unsupported_Url">Unsupported URL</string>
336339

composeApp/src/commonMain/kotlin/org/ooni/probe/App.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ fun App(
9999
dependencies.bootstrapTestDescriptors()
100100
dependencies.bootstrapPreferences()
101101
dependencies.configureDescriptorAutoUpdate()
102-
dependencies.fetchDescriptorUpdate(null)
102+
dependencies.startDescriptorsUpdate(null)
103103
dependencies.startSingleRunInner(RunSpecification.OnlyUploadMissingResults)
104104
}
105105
LaunchedEffect(Unit) {

composeApp/src/commonMain/kotlin/org/ooni/probe/data/models/Descriptor.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,8 @@ data class Descriptor(
3434

3535
val isExpired get() = expirationDate != null && expirationDate < LocalDateTime.now()
3636

37-
val updatable get() = updatedDescriptor != null
38-
3937
val updatedDescriptor
40-
get() = when (updateStatus) {
41-
is UpdateStatus.Updatable -> updateStatus.updatedDescriptor
42-
is UpdateStatus.UpdateRejected -> updateStatus.updatedDescriptor
43-
else -> null
44-
}
38+
get() = (updateStatus as? UpdateStatus.Updatable)?.updatedDescriptor
4539

4640
val key: String
4741
get() = when (source) {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.ooni.probe.data.models
2+
3+
enum class DescriptorUpdateOperationState {
4+
Idle,
5+
FetchingUpdates,
6+
ReviewNecessaryNotice,
7+
}

composeApp/src/commonMain/kotlin/org/ooni/probe/data/models/DescriptorUpdatesStatus.kt

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.ooni.probe.data.models
2+
3+
data class DescriptorsUpdateState(
4+
val availableUpdates: List<InstalledTestDescriptorModel> = emptyList(),
5+
val autoUpdated: List<InstalledTestDescriptorModel> = emptyList(),
6+
val operationState: DescriptorUpdateOperationState = DescriptorUpdateOperationState.Idle,
7+
) {
8+
private val availableUpdatesMap = availableUpdates.associateBy { it.id.value }
9+
private val autoUpdatesMap = autoUpdated.associateBy { it.id.value }
10+
11+
fun getStatusOf(id: InstalledTestDescriptorModel.Id): UpdateStatus =
12+
autoUpdatesMap[id.value]?.let { UpdateStatus.AutoUpdated }
13+
?: availableUpdatesMap[id.value]?.let { UpdateStatus.Updatable(it) }
14+
?: UpdateStatus.NoNewUpdate
15+
}

composeApp/src/commonMain/kotlin/org/ooni/probe/data/models/InstalledTestDescriptorModel.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ data class InstalledTestDescriptorModel(
4444
val dateCreated: LocalDateTime?,
4545
val dateUpdated: LocalDateTime?,
4646
val revisions: List<String>? = emptyList(),
47+
val rejectedRevision: Long? = null,
4748
val autoUpdate: Boolean,
4849
) {
4950
@Serializable
@@ -145,4 +146,5 @@ fun InstalledTestDescriptorModel.toDb(json: Json) =
145146
Logger.e(e) { "Failed to encode revisions" }
146147
null
147148
},
149+
rejected_revision = rejectedRevision,
148150
)
Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package org.ooni.probe.data.models
22

3-
sealed class UpdateStatus {
4-
data object Unknown : UpdateStatus()
3+
sealed interface UpdateStatus {
4+
data object Unknown : UpdateStatus
55

6-
data object UpToDate : UpdateStatus()
6+
data object NoNewUpdate : UpdateStatus
77

8-
data class Updatable(val updatedDescriptor: InstalledTestDescriptorModel) : UpdateStatus()
8+
data class Updatable(val updatedDescriptor: InstalledTestDescriptorModel) : UpdateStatus
99

10-
data object AutoUpdated : UpdateStatus()
10+
data object AutoUpdated : UpdateStatus
1111

12-
data object NotApplicable : UpdateStatus()
13-
14-
data class UpdateRejected(val updatedDescriptor: InstalledTestDescriptorModel) : UpdateStatus()
12+
data object NotApplicable : UpdateStatus
1513
}

composeApp/src/commonMain/kotlin/org/ooni/probe/data/models/UpdateStatusType.kt

Lines changed: 0 additions & 11 deletions
This file was deleted.

composeApp/src/commonMain/kotlin/org/ooni/probe/data/repositories/TestDescriptorRepository.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class TestDescriptorRepository(
7373
date_updated = installedModel.date_updated,
7474
auto_update = installedModel.auto_update,
7575
revisions = installedModel.revisions,
76+
rejected_revision = installedModel.rejected_revision,
7677
)
7778
}
7879
}
@@ -103,6 +104,7 @@ class TestDescriptorRepository(
103104
date_updated = installedModel.date_updated,
104105
auto_update = installedModel.auto_update,
105106
revisions = installedModel.revisions,
107+
rejected_revision = installedModel.rejected_revision,
106108
)
107109
database.testDescriptorQueries.clearOldNetTests(
108110
installedModel.runId,
@@ -125,6 +127,18 @@ class TestDescriptorRepository(
125127
}
126128
}
127129

130+
suspend fun updateRejectedRevision(
131+
runId: InstalledTestDescriptorModel.Id,
132+
rejectedRevision: Long?,
133+
) {
134+
withContext(backgroundContext) {
135+
database.testDescriptorQueries.updateRejectedRevision(
136+
runId = runId.value,
137+
rejected_revision = rejectedRevision,
138+
)
139+
}
140+
}
141+
128142
suspend fun deleteByRunId(runId: InstalledTestDescriptorModel.Id) {
129143
withContext(backgroundContext) {
130144
database.testDescriptorQueries.deleteByRunId(runId.value)
@@ -160,5 +174,6 @@ class TestDescriptorRepository(
160174
emptyList()
161175
}
162176
},
177+
rejectedRevision = rejected_revision,
163178
)
164179
}

0 commit comments

Comments
 (0)