1
1
package com.aliucord.manager.patcher.steps.download
2
2
3
+ import android.util.Log
3
4
import androidx.compose.runtime.Stable
5
+ import com.aliucord.manager.BuildConfig
4
6
import com.aliucord.manager.R
7
+ import com.aliucord.manager.manager.OverlayManager
5
8
import com.aliucord.manager.manager.PathManager
6
9
import com.aliucord.manager.network.utils.SemVer
7
10
import com.aliucord.manager.patcher.StepRunner
8
- import com.aliucord.manager.patcher.steps.base.DownloadStep
9
- import com.aliucord.manager.patcher.steps.base.IDexProvider
11
+ import com.aliucord.manager.patcher.steps.base.*
10
12
import com.aliucord.manager.patcher.steps.patch.ReorganizeDexStep
11
13
import com.aliucord.manager.patcher.steps.prepare.FetchInfoStep
14
+ import com.aliucord.manager.ui.components.dialogs.CustomComponentVersionPicker
12
15
import org.koin.core.component.KoinComponent
13
16
import org.koin.core.component.inject
14
17
@@ -19,10 +22,12 @@ import org.koin.core.component.inject
19
22
@Stable
20
23
class DownloadInjectorStep : DownloadStep (), IDexProvider, KoinComponent {
21
24
private val paths: PathManager by inject()
25
+ private val overlays: OverlayManager by inject()
22
26
23
27
/* *
24
28
* This is populated right before the download starts (ref: [execute])
25
29
*/
30
+ private var isCustomVersion: Boolean = false
26
31
lateinit var targetVersion: SemVer
27
32
private set
28
33
@@ -32,6 +37,39 @@ class DownloadInjectorStep : DownloadStep(), IDexProvider, KoinComponent {
32
37
get() = paths.cachedInjectorDex(targetVersion)
33
38
34
39
override suspend fun execute (container : StepRunner ) {
40
+ var customVersions = mutableListOf<SemVer >()
41
+ .apply { addAll(paths.customInjectorDexs()) }
42
+
43
+ // Prompt to select or manage custom versions instead of downloading
44
+ if (customVersions.isNotEmpty()) {
45
+ val selectedVersion = overlays.startComposableForResult { callback ->
46
+ CustomComponentVersionPicker (
47
+ componentTitle = " Injector" ,
48
+ versions = customVersions,
49
+ onConfirm = { version -> callback(version) },
50
+ onDelete = { version ->
51
+ try {
52
+ paths.cachedInjectorDex(version, custom = true ).delete()
53
+ customVersions.remove(version)
54
+
55
+ // Dismiss if no custom versions left
56
+ if (customVersions.isEmpty())
57
+ callback(null )
58
+ } catch (t: Throwable ) {
59
+ Log .e(BuildConfig .TAG , " Failed to delete custom component" , t)
60
+ }
61
+ },
62
+ onCancel = { callback(null ) },
63
+ )
64
+ }
65
+ if (selectedVersion != null ) {
66
+ isCustomVersion = true
67
+ targetVersion = selectedVersion
68
+ state = StepState .Skipped
69
+ return
70
+ }
71
+ }
72
+
35
73
targetVersion = container.getStep<FetchInfoStep >()
36
74
.data.injectorVersion
37
75
0 commit comments