diff --git a/app/src/main/java/com/yingmao/clash/act/ChangeNodeActivity.kt b/app/src/main/java/com/yingmao/clash/act/ChangeNodeActivity.kt index 8f58d63..32490d0 100644 --- a/app/src/main/java/com/yingmao/clash/act/ChangeNodeActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/ChangeNodeActivity.kt @@ -37,9 +37,6 @@ import com.yingmao.clash.remote.Resource import com.cncat.vpn.service.model.Profile import com.cncat.vpn.service.remote.IProfileManager import com.cncat.vpn.service.remote.IRemoteService -import com.yingmao.clash.act.UIMainActivity.Companion.clashBinder -import com.yingmao.clash.act.UIMainActivity.Companion.profileBinder -import com.yingmao.clash.act.UIMainActivity.Companion.subUrl import com.yingmao.clash.util.Utils import com.yingmao.clash.view.RxToast import com.yingmao.clash.view.adapter.NodeListAdapter @@ -189,7 +186,7 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { return } //缓存订阅地址 - subUrl=nowSubUrl + UIMainActivity.subUrl=nowSubUrl MMKV.defaultMMKV().encode(BZYConstants.PROFILE_SUB_URL, nowSubUrl) //缓存节点 MMKV.defaultMMKV().encode(BZYConstants.NODE_All_ITEM_NAME_KEY, json) @@ -234,7 +231,7 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { launch(Dispatchers.IO) { - profileBinder?.let { profileManager -> + UIMainActivity.profileBinder?.let { profileManager -> var mProfile = profileManager.queryAll().find { it.name == Conf.getClashConfName(this@ChangeNodeActivity.applicationContext) } @@ -311,7 +308,7 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { override fun onStart() { super.onStart() - subUrl?.let { + UIMainActivity.subUrl?.let { nowSubUrl = it } doProfile() @@ -329,7 +326,6 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { private fun changeSubUrl(originalUrl: String, newUrl: String) { nowSubUrl = originalUrl.replace(Regex("https://[^/]+/"), "$newUrl/") - } val reloadLock = Semaphore(10) @@ -345,7 +341,7 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { testRuning = true updateMoreBar("测速中") launch(Dispatchers.IO) { - var group = reloadLock.withPermit {clashBinder?.let { cb -> + var group = reloadLock.withPermit { UIMainActivity.clashBinder?.let { cb -> var names = cb.queryProxyGroupNames(false) if (names.isNotEmpty()) { cb.healthCheck(names[0]) @@ -435,18 +431,18 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { private fun createProfile() { launch(Dispatchers.IO) { - profileBinder?.let { pro -> + UIMainActivity.profileBinder?.let { pro -> uuid?.let { uu -> pro.delete(uu) delay(500) - setSub2(pro, subUrl) + setSub2(pro, UIMainActivity.subUrl) } } } } public suspend fun setSub2(pm: IProfileManager, url: String?) { - com.cncat.vpn.common.log.Log.d("setSub2.... url==>$url") +// com.cncat.vpn.common.log.Log.d("setSub2.... url==>$url") if (TextUtils.isEmpty(url)) { com.cncat.vpn.common.log.Log.d("setSub2 url isEmpty") return @@ -495,9 +491,9 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { var isCreate: Boolean = false private var timerJob: Job? = null private fun startTimer() { - GetNodeTimeOutNum = 10 + GetNodeTimeOutNum = 15 timerJob = launch { - repeat(11) { + repeat(16) { Log.d("GetNodeTimeOutNum==>$GetNodeTimeOutNum") if (GetNodeTimeOutNum == 0) { hideLoading() @@ -532,6 +528,7 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { // com.cncat.vpn.common.log.Log.d("tryButton currentHost==>${currentHost}") var oldUrl = nowSubUrl currentHost?.let { changeSubUrl(oldUrl, it) } + doProfile() } diff --git a/app/src/main/java/com/yingmao/clash/act/UIMainActivity.kt b/app/src/main/java/com/yingmao/clash/act/UIMainActivity.kt index 11df747..d2189f5 100644 --- a/app/src/main/java/com/yingmao/clash/act/UIMainActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/UIMainActivity.kt @@ -196,13 +196,33 @@ class UIMainActivity : BaseActivity() { } data.data.let { url -> android.util.Log.e("Data", "机场URL:=${url}") +// if (url.isNotEmpty()) { +// subUrl = url +// lifecycleScope.launch(Dispatchers.IO) { +// setSub2(url) +// } +// } if (url.isNotEmpty()) { - subUrl = url + //todo 判断订阅地址是否修改过,未修改就用接口返回的地址反之使用本地修改的地址 + var pro_sub_url = + MMKV.defaultMMKV().decodeString(BZYConstants.PROFILE_SUB_URL, "") +// Log.d("pro_sub_url==>${pro_sub_url}") + if (!TextUtils.isEmpty(pro_sub_url)){ + if (pro_sub_url == url) { + subUrl = url + } else { + subUrl = pro_sub_url + } + }else{ + subUrl = url + } lifecycleScope.launch(Dispatchers.IO) { - setSub2(url) +// setSub(url) + subUrl?.let { setSub2(it) } } } } + } HttpReqType.GetActivity -> { @@ -391,6 +411,23 @@ class UIMainActivity : BaseActivity() { pro?.let { pm.setActive(it) delay(500) + //判断配置文件source + if (!TextUtils.isEmpty(pro.source)) { + Log.d("setSub2 pro.source==>${pro.source}, url==>${url}") + //订阅链接不同就更换 + if (pro.source != url) { + pm.patch( + pro.uuid, pro.name, + url, 1800000L + ) + pm.commit(pro.uuid) { status -> + android.util.Log.d( + Conf.TAG, + "new updateStatus: " + Gson().toJson(status.args) + ", pro==>" + status.progress + ) + } + } + } pm.update(it.uuid) newUuid = pro.uuid.toString() isSubbed = true diff --git a/app/src/main/java/com/yingmao/clash/view/dialog/DialogDoMainChoose.kt b/app/src/main/java/com/yingmao/clash/view/dialog/DialogDoMainChoose.kt index 961f713..47c5451 100644 --- a/app/src/main/java/com/yingmao/clash/view/dialog/DialogDoMainChoose.kt +++ b/app/src/main/java/com/yingmao/clash/view/dialog/DialogDoMainChoose.kt @@ -5,6 +5,7 @@ import android.app.Activity import android.content.Context import android.content.DialogInterface import android.content.Intent +import android.text.TextUtils import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -17,6 +18,7 @@ import com.cncat.vpn.common.log.Log import com.tencent.mmkv.MMKV import com.yingmao.clash.R +import com.yingmao.clash.act.UIMainActivity import com.yingmao.clash.conf.BZYConstants import com.yingmao.clash.entity.DomainItemBean @@ -116,16 +118,32 @@ open class DialogDoMainChoose : RxDialog { domainListAdapter.selectedPosition domainListAdapter.setOnItemClickListener { baseQuickAdapter: BaseQuickAdapter<*, *>, view: View, position: Int -> (baseQuickAdapter.getItem(position) as DomainItemBean).let { bean -> - MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_CURRENT_HOST, bean.address) + if (!TextUtils.isEmpty(bean.address)) { + MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_CURRENT_HOST, bean.address) + if (!TextUtils.isEmpty(UIMainActivity.subUrl)) { + var beanUrl=changeSubUrl(UIMainActivity.subUrl!!, bean.address) + UIMainActivity.subUrl=beanUrl + MMKV.defaultMMKV().encode( + BZYConstants.PROFILE_SUB_URL, + beanUrl + ) + } + } domainListAdapter.notifyItemChanged(domainListAdapter.selectedPosition) domainListAdapter.selectedPosition = if (domainListAdapter.selectedPosition == position) -1 else position domainListAdapter.notifyItemChanged(position) + this.onTryListener.tryButton() } } } + private fun changeSubUrl(originalUrl: String, newUrl: String): String { + return originalUrl.replace(Regex("https://[^/]+/"), "$newUrl/") + + } + interface OnTryButtonListener { fun tryButton() fun cancel()