Skip to content

Commit 0719dc7

Browse files
committed
chore: tidy up code
1 parent c2887d4 commit 0719dc7

21 files changed

Lines changed: 242 additions & 460 deletions

app/src/main/kotlin/app/App.kt

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,16 @@ import app.effects.TproxyBootScriptSynchronizer
1919
import features.logs.AndroidAccessLogRepository
2020
import features.logs.AndroidCoreLogRepository
2121
import features.logs.AndroidLogcatRepository
22-
import features.logs.CoreLogClearUseCase
2322
import data.AndroidAppStateStore
2423
import engine.proxy.AndroidProxyEngine
2524
import engine.proxy.latency.AndroidProxyLatencyTester
26-
import features.proxy.server.qr.ProxyServerQrScanUseCase
2725
import features.proxy.server.usecase.ProxyServerImportFileUseCase
2826
import features.proxy.server.usecase.ProxyServiceUseCase
2927
import features.resources.ResourceFileUseCase
3028
import features.settings.locale.ProvideAppLanguage
3129
import features.settings.usecase.SwitchRunModeUseCase
3230
import features.settings.usecase.TproxyBootScriptUseCase
33-
import features.subscription.SubscriptionFetchUseCase
31+
import features.subscription.runtime.AndroidSubscriptionFetcher
3432
import system.AndroidNetworkInterfaceProvider
3533
import system.AndroidPackageProvider
3634
import system.AndroidRootShellGateway
@@ -72,10 +70,8 @@ fun App(
7270
resourceFilePicker = resourceFilePicker,
7371
)
7472
}
75-
val subscriptionFetchUseCase = remember { SubscriptionFetchUseCase() }
76-
val qrScanner = remember(qrCodeScanner) {
77-
ProxyServerQrScanUseCase(qrCodeScanner)
78-
}
73+
val subscriptionFetcher = remember { AndroidSubscriptionFetcher() }
74+
val qrScanner = remember(qrCodeScanner) { qrCodeScanner }
7975
val proxyServerImportFileUseCase = remember(appContext, resourceFilePicker) {
8076
ProxyServerImportFileUseCase(
8177
context = appContext,
@@ -110,11 +106,6 @@ fun App(
110106
}
111107
val stateStore = remember(appContext) { AndroidAppStateStore.get(appContext) }
112108
val tipNotifier = remember(appContext) { AndroidToastTipNotifier(appContext) }
113-
val coreLogClearUseCase = remember(appContext) {
114-
CoreLogClearUseCase(
115-
context = appContext,
116-
)
117-
}
118109
val services = remember(
119110
appScope,
120111
proxyEngine,
@@ -123,15 +114,14 @@ fun App(
123114
packageCatalog,
124115
networkInterfaces,
125116
resourceFileUseCase,
126-
subscriptionFetchUseCase,
117+
subscriptionFetcher,
127118
qrScanner,
128119
proxyServerImportFileUseCase,
129120
proxyLatencyTester,
130121
proxyServiceUseCase,
131122
switchRunModeUseCase,
132123
tproxyBootScriptUseCase,
133124
tipNotifier,
134-
coreLogClearUseCase,
135125
logFileCreator,
136126
) {
137127
AppServices(
@@ -142,15 +132,14 @@ fun App(
142132
packageCatalog = packageCatalog,
143133
networkInterfaces = networkInterfaces,
144134
resourceFileUseCase = resourceFileUseCase,
145-
subscriptionFetchUseCase = subscriptionFetchUseCase,
135+
subscriptionFetcher = subscriptionFetcher,
146136
qrScanner = qrScanner,
147137
proxyServerImportFileUseCase = proxyServerImportFileUseCase,
148138
proxyLatencyTester = proxyLatencyTester,
149139
proxyServiceUseCase = proxyServiceUseCase,
150140
switchRunModeUseCase = switchRunModeUseCase,
151141
tproxyBootScriptUseCase = tproxyBootScriptUseCase,
152142
tipNotifier = tipNotifier,
153-
coreLogClearUseCase = coreLogClearUseCase,
154143
logFileCreator = logFileCreator,
155144
coreLogRepository = AndroidCoreLogRepository,
156145
accessLogRepository = AndroidAccessLogRepository,
@@ -172,7 +161,7 @@ fun App(
172161
)
173162
SubscriptionAutoUpdater(
174163
stateStore = stateStore,
175-
subscriptionFetchUseCase = subscriptionFetchUseCase,
164+
subscriptionFetcher = subscriptionFetcher,
176165
updateAppState = updateAppState,
177166
)
178167
TproxyBootScriptSynchronizer(

app/src/main/kotlin/app/AppServices.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@ import androidx.compose.runtime.staticCompositionLocalOf
77
import android.net.Uri
88
import engine.proxy.AndroidProxyEngine
99
import engine.proxy.latency.AndroidProxyLatencyTester
10-
import features.logs.CoreLogClearUseCase
1110
import features.logs.CoreLogRepository
12-
import features.proxy.server.qr.ProxyServerQrScanUseCase
1311
import features.proxy.server.usecase.ProxyServerImportFileUseCase
1412
import features.proxy.server.usecase.ProxyServiceUseCase
1513
import features.resources.ResourceFileUseCase
1614
import features.settings.usecase.SwitchRunModeUseCase
1715
import features.settings.usecase.TproxyBootScriptUseCase
18-
import features.subscription.SubscriptionFetchUseCase
16+
import features.subscription.runtime.AndroidSubscriptionFetcher
1917
import kotlinx.coroutines.CoroutineScope
2018
import system.AndroidNetworkInterfaceProvider
2119
import system.AndroidPackageProvider
@@ -31,15 +29,14 @@ internal data class AppServices(
3129
val packageCatalog: AndroidPackageProvider,
3230
val networkInterfaces: AndroidNetworkInterfaceProvider,
3331
val resourceFileUseCase: ResourceFileUseCase,
34-
val subscriptionFetchUseCase: SubscriptionFetchUseCase,
35-
val qrScanner: ProxyServerQrScanUseCase,
32+
val subscriptionFetcher: AndroidSubscriptionFetcher,
33+
val qrScanner: suspend () -> String?,
3634
val proxyServerImportFileUseCase: ProxyServerImportFileUseCase,
3735
val proxyLatencyTester: AndroidProxyLatencyTester,
3836
val proxyServiceUseCase: ProxyServiceUseCase,
3937
val switchRunModeUseCase: SwitchRunModeUseCase,
4038
val tproxyBootScriptUseCase: TproxyBootScriptUseCase,
4139
val tipNotifier: AndroidToastTipNotifier,
42-
val coreLogClearUseCase: CoreLogClearUseCase,
4340
val logFileCreator: suspend (String) -> Uri?,
4441
val coreLogRepository: CoreLogRepository,
4542
val accessLogRepository: CoreLogRepository,

app/src/main/kotlin/app/MainActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ import engine.vpn.AndroidVpnPermissionRequester
2020
import features.logs.AndroidLogFileCreator
2121
import features.proxy.server.qr.AndroidQrCodeScanRequester
2222
import features.resources.runtime.AndroidResourceFilePicker
23-
import features.subscription.SubscriptionFetchUseCase
2423
import features.subscription.SubscriptionInstallConfigUseCase
2524
import features.subscription.isSubscriptionInstallConfigUri
25+
import features.subscription.runtime.AndroidSubscriptionFetcher
2626
import features.subscription.toSubscriptionInstallConfigOrNull
2727
import features.subscription.usecase.subscriptionUpdateMessage
2828
import kotlinx.coroutines.launch
@@ -61,7 +61,7 @@ class MainActivity : ComponentActivity() {
6161
private val subscriptionInstallConfigUseCase by lazy {
6262
SubscriptionInstallConfigUseCase(
6363
stateStore = AndroidAppStateStore.get(this),
64-
subscriptionFetchUseCase = SubscriptionFetchUseCase(),
64+
subscriptionFetcher = AndroidSubscriptionFetcher(),
6565
)
6666
}
6767

app/src/main/kotlin/app/effects/SubscriptionAutoUpdater.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import features.proxy.server.usecase.dueSubscriptionGroups
1111
import features.proxy.server.usecase.withUpdatedSubscriptionServers
1212
import features.subscription.AutoSubscriptionCheckIntervalMillis
1313
import features.subscription.AutoSubscriptionRetryDelayMillis
14-
import features.subscription.SubscriptionFetchUseCase
14+
import features.subscription.runtime.AndroidSubscriptionFetcher
1515
import features.subscription.usecase.toSubscriptionFetchOptions
1616
import features.subscription.usecase.updateSubscriptions
1717
import kotlinx.coroutines.delay
@@ -20,10 +20,10 @@ import kotlin.time.Clock
2020
@Composable
2121
internal fun SubscriptionAutoUpdater(
2222
stateStore: AndroidAppStateStore,
23-
subscriptionFetchUseCase: SubscriptionFetchUseCase,
23+
subscriptionFetcher: AndroidSubscriptionFetcher,
2424
updateAppState: ((AppState) -> AppState) -> Unit,
2525
) {
26-
LaunchedEffect(stateStore, subscriptionFetchUseCase) {
26+
LaunchedEffect(stateStore, subscriptionFetcher) {
2727
val lastAttemptMillisByGroupId = mutableMapOf<Int, Long>()
2828
while (true) {
2929
val currentState = stateStore.state.value
@@ -37,7 +37,7 @@ internal fun SubscriptionAutoUpdater(
3737
dueGroups.forEach { group -> lastAttemptMillisByGroupId[group.id] = nowMillis }
3838
val result = updateSubscriptions(
3939
groups = dueGroups,
40-
subscriptionFetchUseCase = subscriptionFetchUseCase,
40+
subscriptionFetcher = subscriptionFetcher,
4141
fetchOptions = { group -> currentState.toSubscriptionFetchOptions(group) },
4242
)
4343
if (result.updates.isNotEmpty()) {
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package features.logs
2+
3+
import android.content.Context
4+
import engine.xray.XrayCoreLogPaths
5+
import engine.xray.clearCoreLogFilesAsApp
6+
import engine.xray.prepareXrayCoreLogPaths
7+
import kotlinx.coroutines.Dispatchers
8+
import kotlinx.coroutines.withContext
9+
10+
internal suspend fun Context.clearCoreLogFile(logFile: XrayLogFile) {
11+
val logPath = applicationContext.prepareXrayCoreLogPaths().pathOf(logFile)
12+
if (logPath.isBlank()) {
13+
return
14+
}
15+
16+
withContext(Dispatchers.IO) {
17+
clearCoreLogFilesAsApp(
18+
logPaths = listOf(logPath),
19+
logTag = LogTag,
20+
)
21+
}
22+
}
23+
24+
private fun XrayCoreLogPaths.pathOf(logFile: XrayLogFile): String {
25+
return when (logFile) {
26+
XrayLogFile.Error -> errorLogPath
27+
XrayLogFile.Access -> accessLogPath
28+
}
29+
}
30+
31+
internal enum class XrayLogFile {
32+
Error,
33+
Access,
34+
}
35+
36+
private const val LogTag = "CoreLogClear"

app/src/main/kotlin/features/logs/CoreLogClearUseCase.kt

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

app/src/main/kotlin/features/logs/LogViewerPage.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,13 @@ fun CoreLogsPage(
5858
padding: PaddingValues,
5959
) {
6060
val services = LocalAppServices.current
61+
val context = LocalContext.current
6162
LogViewerPage(
6263
padding = padding,
6364
title = stringResource(R.string.core_logs_title),
6465
repository = services.coreLogRepository,
6566
onClear = {
66-
services.coreLogClearUseCase.clear(
67-
logFile = XrayLogFile.Error,
68-
)
67+
context.clearCoreLogFile(XrayLogFile.Error)
6968
},
7069
)
7170
}
@@ -75,14 +74,13 @@ fun AccessLogsPage(
7574
padding: PaddingValues,
7675
) {
7776
val services = LocalAppServices.current
77+
val context = LocalContext.current
7878
LogViewerPage(
7979
padding = padding,
8080
title = stringResource(R.string.access_logs_title),
8181
repository = services.accessLogRepository,
8282
onClear = {
83-
services.coreLogClearUseCase.clear(
84-
logFile = XrayLogFile.Access,
85-
)
83+
context.clearCoreLogFile(XrayLogFile.Access)
8684
},
8785
)
8886
}

app/src/main/kotlin/features/proxy/server/list/ProxyServerListPage.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ fun ProxyServerListPage(
5959
val services = LocalAppServices.current
6060
val proxyLatencyTester = services.proxyLatencyTester
6161
val qrScanner = services.qrScanner
62-
val subscriptionFetchUseCase = services.subscriptionFetchUseCase
62+
val subscriptionFetcher = services.subscriptionFetcher
6363
val proxyEngine = services.proxyEngine
6464
val proxyServiceUseCase = services.proxyServiceUseCase
6565
val proxyServerImportFileUseCase = services.proxyServerImportFileUseCase
@@ -212,7 +212,7 @@ fun ProxyServerListPage(
212212
navigator = navigator,
213213
qrScanner = qrScanner,
214214
proxyServerImportFileUseCase = proxyServerImportFileUseCase,
215-
subscriptionFetchUseCase = subscriptionFetchUseCase,
215+
subscriptionFetcher = subscriptionFetcher,
216216
proxyServiceUseCase = proxyServiceUseCase,
217217
clipboard = clipboard,
218218
tipNotifier = tipNotifier,

0 commit comments

Comments
 (0)