From e073b19343ddf79c7ce8286f2c80b36e18914372 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:26:39 +0800 Subject: [PATCH] Update subscriptions through the proxy first, then update them directly https://github.com/2dust/v2rayNG/issues/3627 --- .../com/v2ray/ang/service/SubscriptionUpdater.kt | 12 ++++++------ .../kotlin/com/v2ray/ang/service/V2RayVpnService.kt | 2 +- .../kotlin/com/v2ray/ang/ui/UserAssetActivity.kt | 3 ++- .../kotlin/com/v2ray/ang/util/AngConfigManager.kt | 11 ++++------- .../src/main/kotlin/com/v2ray/ang/util/PluginUtil.kt | 2 +- .../kotlin/com/v2ray/ang/util/SettingsManager.kt | 11 +++++++++++ .../kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt | 12 +++--------- V2rayNG/app/src/main/res/layout/activity_main.xml | 2 +- 8 files changed, 29 insertions(+), 26 deletions(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/SubscriptionUpdater.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/SubscriptionUpdater.kt index 449b8835..587fb5ef 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/SubscriptionUpdater.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/SubscriptionUpdater.kt @@ -15,6 +15,7 @@ import com.v2ray.ang.AppConfig.SUBSCRIPTION_UPDATE_CHANNEL import com.v2ray.ang.AppConfig.SUBSCRIPTION_UPDATE_CHANNEL_NAME import com.v2ray.ang.R import com.v2ray.ang.util.AngConfigManager +import com.v2ray.ang.util.AngConfigManager.updateConfigViaSub import com.v2ray.ang.util.MmkvManager import com.v2ray.ang.util.Utils @@ -40,8 +41,8 @@ object SubscriptionUpdater { val subs = MmkvManager.decodeSubscriptions().filter { it.second.autoUpdate } - for (i in subs) { - val subscription = i.second + for (sub in subs) { + val subItem = sub.second if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { notification.setChannelId(SUBSCRIPTION_UPDATE_CHANNEL) @@ -56,11 +57,10 @@ object SubscriptionUpdater { notificationManager.notify(3, notification.build()) Log.d( AppConfig.ANG_PACKAGE, - "subscription automatic update: ---${subscription.remarks}" + "subscription automatic update: ---${subItem.remarks}" ) - val configs = Utils.getUrlContentWithCustomUserAgent(subscription.url) - AngConfigManager.importBatchConfig(configs, i.first, false) - notification.setContentText("Updating ${subscription.remarks}") + updateConfigViaSub(Pair(sub.first, subItem)) + notification.setContentText("Updating ${subItem.remarks}") } notificationManager.cancel(3) return Result.success() diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt index c42e33fb..fc33653d 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt @@ -203,7 +203,7 @@ class V2RayVpnService : VpnService(), ServiceControl { } private fun runTun2socks() { - val socksPort = Utils.parseInt(settingsStorage?.decodeString(AppConfig.PREF_SOCKS_PORT), AppConfig.PORT_SOCKS.toInt()) + val socksPort = SettingsManager.getSocksPort() val cmd = arrayListOf( File(applicationContext.applicationInfo.nativeLibraryDir, TUN2SOCKS).absolutePath, "--netif-ipaddr", PRIVATE_VLAN4_ROUTER, diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt index 00983e2d..82ab0d88 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt @@ -31,6 +31,7 @@ import com.v2ray.ang.extension.toTrafficString import com.v2ray.ang.extension.toast import com.v2ray.ang.util.MmkvManager import com.v2ray.ang.util.MmkvManager.settingsStorage +import com.v2ray.ang.util.SettingsManager import com.v2ray.ang.util.Utils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -176,7 +177,7 @@ class UserAssetActivity : BaseActivity() { .show() toast(R.string.msg_downloading_content) - val httpPort = Utils.parseInt(settingsStorage?.decodeString(AppConfig.PREF_HTTP_PORT), AppConfig.PORT_HTTP.toInt()) + val httpPort = SettingsManager.getHttpPort() var assets = MmkvManager.decodeAssetUrls() assets = addBuiltInGeoItems(assets) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt index 997ec860..68ef328e 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt @@ -14,7 +14,6 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.AppConfig.HY2 import com.v2ray.ang.R import com.v2ray.ang.dto.* -import com.v2ray.ang.util.MmkvManager.settingsStorage import com.v2ray.ang.util.fmt.Hysteria2Fmt import com.v2ray.ang.util.fmt.ShadowsocksFmt import com.v2ray.ang.util.fmt.SocksFmt @@ -374,19 +373,17 @@ object AngConfigManager { return 0 } Log.d(AppConfig.ANG_PACKAGE, url) + var configText = try { - Utils.getUrlContentWithCustomUserAgent(url) + val httpPort = SettingsManager.getHttpPort() + Utils.getUrlContentWithCustomUserAgent(url, 30000, httpPort) } catch (e: Exception) { e.printStackTrace() "" } if (configText.isEmpty()) { configText = try { - val httpPort = Utils.parseInt( - settingsStorage?.decodeString(AppConfig.PREF_HTTP_PORT), - AppConfig.PORT_HTTP.toInt() - ) - Utils.getUrlContentWithCustomUserAgent(url, 30000, httpPort) + Utils.getUrlContentWithCustomUserAgent(url) } catch (e: Exception) { e.printStackTrace() "" diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/PluginUtil.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/PluginUtil.kt index 2a0bc05e..37de5eac 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/PluginUtil.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/PluginUtil.kt @@ -32,7 +32,7 @@ object PluginUtil { if (outbound.protocol.equals(EConfigType.HYSTERIA2.name, true)) { Log.d(packageName, "runPlugin $HYSTERIA2") - val socksPort = 100 + Utils.parseInt(settingsStorage?.decodeString(AppConfig.PREF_SOCKS_PORT), AppConfig.PORT_SOCKS.toInt()) + val socksPort = 100 + SettingsManager.getSocksPort() val hy2Config = Hysteria2Fmt.toNativeConfig(config, socksPort) ?: return val configFile = File(context.noBackupFilesDir, "hy2_${SystemClock.elapsedRealtime()}.json") diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/SettingsManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/SettingsManager.kt index c8eaf7e5..6d49f783 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/SettingsManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/SettingsManager.kt @@ -3,11 +3,14 @@ package com.v2ray.ang.util import android.content.Context import android.text.TextUtils import com.google.gson.Gson +import com.v2ray.ang.AppConfig import com.v2ray.ang.dto.RulesetItem import com.v2ray.ang.dto.ServerConfig import com.v2ray.ang.util.MmkvManager.decodeProfileConfig import com.v2ray.ang.util.MmkvManager.decodeServerConfig import com.v2ray.ang.util.MmkvManager.decodeServerList +import com.v2ray.ang.util.MmkvManager.settingsStorage +import com.v2ray.ang.util.Utils.parseInt import java.util.Collections object SettingsManager { @@ -140,4 +143,12 @@ object SettingsManager { return null } + fun getSocksPort(): Int { + return parseInt(settingsStorage?.decodeString(AppConfig.PREF_SOCKS_PORT), AppConfig.PORT_SOCKS.toInt()) + } + + fun getHttpPort(): Int { + return parseInt(settingsStorage?.decodeString(AppConfig.PREF_HTTP_PORT), AppConfig.PORT_HTTP.toInt()) + } + } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt index 3a85b4e5..4783b30d 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt @@ -101,14 +101,8 @@ object V2rayConfigUtil { private fun inbounds(v2rayConfig: V2rayConfig): Boolean { try { - val socksPort = Utils.parseInt( - settingsStorage?.decodeString(AppConfig.PREF_SOCKS_PORT), - AppConfig.PORT_SOCKS.toInt() - ) - val httpPort = Utils.parseInt( - settingsStorage?.decodeString(AppConfig.PREF_HTTP_PORT), - AppConfig.PORT_HTTP.toInt() - ) + val socksPort = SettingsManager.getSocksPort() + val httpPort = SettingsManager.getHttpPort() v2rayConfig.inbounds.forEach { curInbound -> if (settingsStorage?.decodeBool(AppConfig.PREF_PROXY_SHARING) != true) { @@ -149,7 +143,7 @@ object V2rayConfigUtil { private fun outbounds(v2rayConfig: V2rayConfig, outbound: V2rayConfig.OutboundBean, isPlugin: Boolean): Pair { if (isPlugin) { - val socksPort = 100 + Utils.parseInt(settingsStorage?.decodeString(AppConfig.PREF_SOCKS_PORT), AppConfig.PORT_SOCKS.toInt()) + val socksPort = 100 + SettingsManager.getSocksPort() val outboundNew = V2rayConfig.OutboundBean( mux = null, protocol = EConfigType.SOCKS.name.lowercase(), diff --git a/V2rayNG/app/src/main/res/layout/activity_main.xml b/V2rayNG/app/src/main/res/layout/activity_main.xml index ad2f3cec..06c29322 100644 --- a/V2rayNG/app/src/main/res/layout/activity_main.xml +++ b/V2rayNG/app/src/main/res/layout/activity_main.xml @@ -89,7 +89,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" - android:layout_marginBottom="24dp"> + android:layout_marginBottom="12dp">