diff --git a/app/src/main/java/io/nekohasekai/sagernet/bg/SubscriptionUpdater.kt b/app/src/main/java/io/nekohasekai/sagernet/bg/SubscriptionUpdater.kt index 5a367ee..a000672 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/bg/SubscriptionUpdater.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/bg/SubscriptionUpdater.kt @@ -4,7 +4,7 @@ import android.content.Context import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.work.CoroutineWorker -import androidx.work.ExistingPeriodicWorkPolicy +import androidx.work.ExistingPeriodicWorkPolicy.UPDATE import androidx.work.PeriodicWorkRequest import androidx.work.WorkerParameters import androidx.work.multiprocess.RemoteWorkManager @@ -39,7 +39,7 @@ object SubscriptionUpdater { // main process RemoteWorkManager.getInstance(app).enqueueUniquePeriodicWork( WORK_NAME, - ExistingPeriodicWorkPolicy.REPLACE, + UPDATE, PeriodicWorkRequest.Builder(UpdateTask::class.java, minDelay, TimeUnit.MINUTES) .apply { if (minInitDelay > 0) setInitialDelay(minInitDelay, TimeUnit.SECONDS) diff --git a/app/src/main/java/io/nekohasekai/sagernet/ktx/Asyncs.kt b/app/src/main/java/io/nekohasekai/sagernet/ktx/Asyncs.kt index af3c96c..6c66964 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ktx/Asyncs.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ktx/Asyncs.kt @@ -2,6 +2,8 @@ package io.nekohasekai.sagernet.ktx +import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.* fun block(block: suspend CoroutineScope.() -> Unit): suspend CoroutineScope.() -> Unit { @@ -11,6 +13,9 @@ fun block(block: suspend CoroutineScope.() -> Unit): suspend CoroutineScope.() - fun runOnDefaultDispatcher(block: suspend CoroutineScope.() -> Unit) = GlobalScope.launch(Dispatchers.Default, block = block) +fun Fragment.runOnLifecycleDispatcher(block: suspend CoroutineScope.() -> Unit) = + lifecycleScope.launch(Dispatchers.Default, block = block) + suspend fun onDefaultDispatcher(block: suspend CoroutineScope.() -> T) = withContext(Dispatchers.Default, block = block) diff --git a/app/src/main/java/io/nekohasekai/sagernet/ui/ConfigurationFragment.kt b/app/src/main/java/io/nekohasekai/sagernet/ui/ConfigurationFragment.kt index 3bbbfe1..addad2a 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ui/ConfigurationFragment.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ui/ConfigurationFragment.kt @@ -43,6 +43,7 @@ import io.nekohasekai.sagernet.databinding.LayoutProfileListBinding import io.nekohasekai.sagernet.databinding.LayoutProgressListBinding import io.nekohasekai.sagernet.fmt.AbstractBean import io.nekohasekai.sagernet.fmt.toUniversalLink +import io.nekohasekai.sagernet.group.GroupUpdater import io.nekohasekai.sagernet.group.RawUpdater import io.nekohasekai.sagernet.ktx.* import io.nekohasekai.sagernet.plugin.PluginManager @@ -419,6 +420,18 @@ class ConfigurationFragment @JvmOverloads constructor( .show() } + R.id.action_update_subscription -> { + val group = DataStore.currentGroup() + if (group.type != GroupType.SUBSCRIPTION) { + snackbar(R.string.group_not_subscription).show() + Logs.e("onMenuItemClick: Group(${group.displayName()}) is not subscription") + } else { + runOnLifecycleDispatcher { + GroupUpdater.startUpdate(group, true) + } + } + } + R.id.action_clear_traffic_statistics -> { runOnDefaultDispatcher { val profiles = SagerDatabase.proxyDao.getByGroup(DataStore.currentGroupId()) diff --git a/app/src/main/res/menu/add_profile_menu.xml b/app/src/main/res/menu/add_profile_menu.xml index b6a6524..072cf8d 100644 --- a/app/src/main/res/menu/add_profile_menu.xml +++ b/app/src/main/res/menu/add_profile_menu.xml @@ -83,6 +83,9 @@ android:title="" app:showAsAction="always"> + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1a837f0..6adcde5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -487,4 +487,6 @@ ECH 配置 HTTPUpgrade 主机 HTTPUpgrade 路径 + 更新当前组订阅 + 组类型不是订阅 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 76cb3cf..f826e94 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -528,5 +528,7 @@ Anyone can write advanced plugins, which can control NekoBox. please download an If enable, the largest possible TLS record size is always used. When disable, the size of TLS records may be adjusted in an attempt to improve latency. HTTPUpgrade Host HTTPUpgrade Path + Update current Group\'s subscription + Group type is not subscription \ No newline at end of file