Skip to content

Commit 8500967

Browse files
committed
When geoip:cn and geoip:private appear in the routing rules, load geoip-only-cn-private.dat to reduce memory usage.
1 parent 3d42ac9 commit 8500967

File tree

4 files changed

+33
-3
lines changed

4 files changed

+33
-3
lines changed

V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@ object AppConfig {
132132
const val GEOIP_PRIVATE = "geoip:private"
133133
const val GEOIP_CN = "geoip:cn"
134134

135+
/** Geo data file names. */
136+
const val GEOSITE_DAT = "geosite.dat"
137+
const val GEOIP_DAT = "geoip.dat"
138+
const val GEOIP_ONLY_CN_PRIVATE_DAT = "geoip-only-cn-private.dat"
139+
const val GEOIP_ONLY_CN_PRIVATE_URL = "$GITHUB_RAW_URL/Loyalsoldier/geoip/release/$GEOIP_ONLY_CN_PRIVATE_DAT"
140+
135141
/** Ports and addresses for various services. */
136142
const val PORT_LOCAL_DNS = "10853"
137143
const val PORT_SOCKS = "10808"

V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ object SettingsManager {
265265
val extFolder = Utils.userAssetPath(context)
266266

267267
try {
268-
val geo = arrayOf("geosite.dat", "geoip.dat")
268+
val geo = arrayOf(AppConfig.GEOSITE_DAT, AppConfig.GEOIP_DAT, AppConfig.GEOIP_ONLY_CN_PRIVATE_DAT)
269269
assets.list("")
270270
?.filter { geo.contains(it) }
271271
?.filter { !File(extFolder, it).exists() }

V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,19 @@ object V2rayConfigManager {
467467

468468
val rule = JsonUtil.fromJson(JsonUtil.toJson(item), RulesBean::class.java) ?: return
469469

470+
// Replace specific geoip rules with ext versions
471+
rule.ip?.let { ipList ->
472+
val updatedIpList = ArrayList<String>()
473+
ipList.forEach { ip ->
474+
when (ip) {
475+
AppConfig.GEOIP_CN -> updatedIpList.add("ext:${AppConfig.GEOIP_ONLY_CN_PRIVATE_DAT}:cn")
476+
AppConfig.GEOIP_PRIVATE -> updatedIpList.add("ext:${AppConfig.GEOIP_ONLY_CN_PRIVATE_DAT}:private")
477+
else -> updatedIpList.add(ip)
478+
}
479+
}
480+
rule.ip = updatedIpList
481+
}
482+
470483
v2rayConfig.routing.rules.add(rule)
471484

472485
} catch (e: Exception) {

V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/UserAssetViewModel.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import java.net.HttpURLConnection
1515

1616
class UserAssetViewModel : ViewModel() {
1717
private val assets = mutableListOf<AssetUrlCache>()
18-
private val builtInGeoFiles = listOf("geosite.dat", "geoip.dat")
18+
private val builtInGeoFiles = listOf(AppConfig.GEOSITE_DAT, AppConfig.GEOIP_DAT, AppConfig.GEOIP_ONLY_CN_PRIVATE_DAT)
1919

2020
val itemCount: Int
2121
get() = assets.size
@@ -47,7 +47,18 @@ class UserAssetViewModel : ViewModel() {
4747
)
4848
)
4949
}
50-
return builtInItems + savedAssets
50+
// Force update URL for geoip-only-cn-private.dat
51+
return (builtInItems + savedAssets).map { cache ->
52+
if (cache.assetUrl.remarks == AppConfig.GEOIP_ONLY_CN_PRIVATE_DAT) {
53+
cache.copy(
54+
assetUrl = cache.assetUrl.copy(
55+
url = AppConfig.GEOIP_ONLY_CN_PRIVATE_URL
56+
)
57+
)
58+
} else {
59+
cache
60+
}
61+
}
5162
}
5263

5364
fun downloadGeoFiles(extDir: File, httpPort: Int): GeoDownloadResult {

0 commit comments

Comments
 (0)