From 38d0d4397e8958150925b39176c3d1612155f377 Mon Sep 17 00:00:00 2001 From: YuHuanTin <51024916+YuHuanTin@users.noreply.github.com> Date: Fri, 20 Jun 2025 09:06:51 +0800 Subject: [PATCH] Fixed the issue with decimal point in `Subscription-Userinfo` field (#547) https://github.com/MetaCubeX/ClashMetaForAndroid/discussions/292 --- .../java/com/github/kr328/clash/service/ProfileManager.kt | 6 +++--- .../com/github/kr328/clash/service/ProfileProcessor.kt | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt index fa10fd9a..387f00fd 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt @@ -160,13 +160,13 @@ class ProfileManager(private val context: Context) : IProfileManager, val info = flag.split("=") when { info[0].contains("upload") && info[1].isNotEmpty() -> upload = - BigDecimal(info[1]).longValueExact() + BigDecimal(info[1].split('.').first()).longValueExact() info[0].contains("download") && info[1].isNotEmpty() -> download = - BigDecimal(info[1]).longValueExact() + BigDecimal(info[1].split('.').first()).longValueExact() info[0].contains("total") && info[1].isNotEmpty() -> total = - BigDecimal(info[1]).longValueExact() + BigDecimal(info[1].split('.').first()).longValueExact() info[0].contains("expire") && info[1].isNotEmpty() -> { if (info[1].isNotEmpty()) { diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt index 360db1f9..cd6b869c 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt @@ -21,6 +21,7 @@ import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import okhttp3.OkHttpClient import okhttp3.Request +import java.math.BigDecimal import java.net.URL import java.util.* import java.util.concurrent.TimeUnit @@ -88,13 +89,13 @@ object ProfileProcessor { val info = flag.split("=") when { info[0].contains("upload") && info[1].isNotEmpty() -> upload = - info[1].toLong() + BigDecimal(info[1].split('.').first()).longValueExact() info[0].contains("download") && info[1].isNotEmpty() -> download = - info[1].toLong() + BigDecimal(info[1].split('.').first()).longValueExact() info[0].contains("total") && info[1].isNotEmpty() -> total = - info[1].toLong() + BigDecimal(info[1].split('.').first()).longValueExact() info[0].contains("expire") && info[1].isNotEmpty() -> expire = (info[1].toDouble() * 1000).toLong()