Skip to content

Commit a7b933f

Browse files
authored
feat: Implement downloader source system (#3003)
1 parent 043f13a commit a7b933f

35 files changed

+1302
-793
lines changed

app/schemas/app.revanced.manager.data.room.AppDatabase/3.json

Lines changed: 483 additions & 0 deletions
Large diffs are not rendered by default.

app/src/main/java/app/revanced/manager/DownloaderActivity.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,14 @@ import androidx.fragment.app.FragmentActivity
99
import androidx.fragment.app.FragmentContainerView
1010
import androidx.fragment.app.commit
1111
import app.revanced.manager.domain.repository.DownloaderRepository
12-
import app.revanced.manager.network.downloader.DownloaderPackageState
1312
import org.koin.android.ext.android.inject
1413

1514
class DownloaderActivity : FragmentActivity() {
1615
private val downloaderRepository: DownloaderRepository by inject()
17-
var downloaderPackageName = ""
16+
private var downloaderPackageName = ""
1817

1918
private val downloaderPkgState
20-
get() = downloaderRepository
21-
.downloaderPackageStates
22-
.value[downloaderPackageName]
23-
?.let { it as? DownloaderPackageState.Loaded }
19+
get() = downloaderRepository.findPackageByName(downloaderPackageName)
2420

2521
private var res: Resources? = null
2622

app/src/main/java/app/revanced/manager/data/room/AppDatabase.kt

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package app.revanced.manager.data.room
22

33
import androidx.room.AutoMigration
44
import androidx.room.Database
5+
import androidx.room.DeleteTable
56
import androidx.room.RoomDatabase
67
import androidx.room.TypeConverters
8+
import androidx.room.migration.AutoMigrationSpec
79
import app.revanced.manager.data.room.apps.downloaded.DownloadedApp
810
import app.revanced.manager.data.room.apps.downloaded.DownloadedAppDao
911
import app.revanced.manager.data.room.apps.installed.AppliedPatch
@@ -15,17 +17,24 @@ import app.revanced.manager.data.room.selection.SelectedPatch
1517
import app.revanced.manager.data.room.selection.SelectionDao
1618
import app.revanced.manager.data.room.bundles.PatchBundleDao
1719
import app.revanced.manager.data.room.bundles.PatchBundleEntity
20+
import app.revanced.manager.data.room.downloader.DownloaderDao
21+
import app.revanced.manager.data.room.downloader.DownloaderEntity
1822
import app.revanced.manager.data.room.options.Option
1923
import app.revanced.manager.data.room.options.OptionDao
2024
import app.revanced.manager.data.room.options.OptionGroup
21-
import app.revanced.manager.data.room.downloader.TrustedDownloader
22-
import app.revanced.manager.data.room.downloader.TrustedDownloaderDao
2325
import kotlin.random.Random
2426

2527
@Database(
26-
entities = [PatchBundleEntity::class, PatchSelection::class, SelectedPatch::class, DownloadedApp::class, InstalledApp::class, AppliedPatch::class, InstalledPatchBundle::class, OptionGroup::class, Option::class, TrustedDownloader::class],
27-
version = 2,
28-
autoMigrations = [AutoMigration(from = 1, to = 2)]
28+
entities = [PatchBundleEntity::class, PatchSelection::class, SelectedPatch::class, DownloadedApp::class, InstalledApp::class, AppliedPatch::class, InstalledPatchBundle::class, OptionGroup::class, Option::class, DownloaderEntity::class],
29+
version = 3,
30+
autoMigrations = [
31+
AutoMigration(from = 1, to = 2),
32+
AutoMigration(
33+
from = 2,
34+
to = 3,
35+
spec = AppDatabase.DeleteTrustedDownloaders::class
36+
)
37+
]
2938
)
3039
@TypeConverters(Converters::class)
3140
abstract class AppDatabase : RoomDatabase() {
@@ -34,7 +43,10 @@ abstract class AppDatabase : RoomDatabase() {
3443
abstract fun downloadedAppDao(): DownloadedAppDao
3544
abstract fun installedAppDao(): InstalledAppDao
3645
abstract fun optionDao(): OptionDao
37-
abstract fun trustedDownloaderDao(): TrustedDownloaderDao
46+
abstract fun downloaderDao(): DownloaderDao
47+
48+
@DeleteTable(tableName = "trusted_downloaders")
49+
class DeleteTrustedDownloaders : AutoMigrationSpec
3850

3951
companion object {
4052
fun generateUid() = Random.Default.nextInt()

app/src/main/java/app/revanced/manager/data/room/Converters.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package app.revanced.manager.data.room
22

33
import androidx.room.TypeConverter
4-
import app.revanced.manager.data.room.bundles.Source
54
import app.revanced.manager.data.room.options.Option.SerializedValue
5+
import app.revanced.manager.data.room.sources.Source
66
import java.io.File
77

88
class Converters {

app/src/main/java/app/revanced/manager/data/room/bundles/PatchBundleDao.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package app.revanced.manager.data.room.bundles
22

33
import androidx.room.*
4+
import app.revanced.manager.data.room.sources.SourceProperties
45

56
@Dao
67
interface PatchBundleDao {
@@ -23,7 +24,7 @@ interface PatchBundleDao {
2324
suspend fun remove(uid: Int)
2425

2526
@Query("SELECT name, version, auto_update, source FROM patch_bundles WHERE uid = :uid")
26-
suspend fun getProps(uid: Int): PatchBundleProperties?
27+
suspend fun getProps(uid: Int): SourceProperties?
2728

2829
@Upsert
2930
suspend fun upsert(source: PatchBundleEntity)
Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,7 @@
11
package app.revanced.manager.data.room.bundles
22

33
import androidx.room.*
4-
import io.ktor.http.*
5-
6-
sealed class Source {
7-
object Local : Source() {
8-
const val SENTINEL = "local"
9-
10-
override fun toString() = SENTINEL
11-
}
12-
13-
object API : Source() {
14-
const val SENTINEL = "api"
15-
16-
override fun toString() = SENTINEL
17-
}
18-
19-
data class Remote(val url: Url) : Source() {
20-
override fun toString() = url.toString()
21-
}
22-
23-
companion object {
24-
fun from(value: String) = when (value) {
25-
Local.SENTINEL -> Local
26-
API.SENTINEL -> API
27-
else -> Remote(Url(value))
28-
}
29-
}
30-
}
4+
import app.revanced.manager.data.room.sources.Source
315

326
@Entity(tableName = "patch_bundles")
337
data class PatchBundleEntity(
@@ -36,11 +10,4 @@ data class PatchBundleEntity(
3610
@ColumnInfo(name = "version") val versionHash: String? = null,
3711
@ColumnInfo(name = "source") val source: Source,
3812
@ColumnInfo(name = "auto_update") val autoUpdate: Boolean
39-
)
40-
41-
data class PatchBundleProperties(
42-
@ColumnInfo(name = "name") val name: String,
43-
@ColumnInfo(name = "version") val versionHash: String? = null,
44-
@ColumnInfo(name = "source") val source: Source,
45-
@ColumnInfo(name = "auto_update") val autoUpdate: Boolean
4613
)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package app.revanced.manager.data.room.downloader
2+
3+
import androidx.room.Dao
4+
import androidx.room.Query
5+
import androidx.room.Transaction
6+
import androidx.room.Upsert
7+
import app.revanced.manager.data.room.sources.SourceProperties
8+
9+
@Dao
10+
interface DownloaderDao {
11+
@Query("SELECT * FROM downloaders")
12+
suspend fun all(): List<DownloaderEntity>
13+
14+
@Query("UPDATE downloaders SET version = :patches WHERE uid = :uid")
15+
suspend fun updateVersionHash(uid: Int, patches: String?)
16+
17+
@Query("DELETE FROM downloaders WHERE uid != 0")
18+
suspend fun purgeCustomDownloaders()
19+
20+
@Transaction
21+
suspend fun reset() {
22+
purgeCustomDownloaders()
23+
updateVersionHash(0, null) // Reset the main source
24+
}
25+
26+
@Query("DELETE FROM downloaders WHERE uid = :uid")
27+
suspend fun remove(uid: Int)
28+
29+
@Query("SELECT name, version, auto_update, source FROM downloaders WHERE uid = :uid")
30+
suspend fun getProps(uid: Int): SourceProperties?
31+
32+
@Upsert
33+
suspend fun upsert(source: DownloaderEntity)
34+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package app.revanced.manager.data.room.downloader
2+
3+
import androidx.room.*
4+
import app.revanced.manager.data.room.sources.Source
5+
6+
@Entity(tableName = "downloaders")
7+
data class DownloaderEntity(
8+
@PrimaryKey val uid: Int,
9+
@ColumnInfo(name = "name") val name: String,
10+
@ColumnInfo(name = "version") val versionHash: String? = null,
11+
@ColumnInfo(name = "source") val source: Source,
12+
@ColumnInfo(name = "auto_update") val autoUpdate: Boolean
13+
)

app/src/main/java/app/revanced/manager/data/room/downloader/TrustedDownloader.kt

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

app/src/main/java/app/revanced/manager/data/room/downloader/TrustedDownloaderDao.kt

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

0 commit comments

Comments
 (0)