parent
0b739766fa
commit
e8fb887912
@ -0,0 +1,158 @@ |
||||
/* |
||||
* This file is part of FYReader. |
||||
* FYReader is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* FYReader is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with FYReader. If not, see <https://www.gnu.org/licenses/>. |
||||
* |
||||
* Copyright (C) 2020 - 2022 fengyuecanzhu |
||||
*/ |
||||
|
||||
package xyz.fycz.dynamic.fix |
||||
|
||||
import android.util.Log |
||||
import androidx.appcompat.app.AppCompatActivity |
||||
import me.fycz.maple.MapleBridge |
||||
import me.fycz.maple.MapleUtils |
||||
import me.fycz.maple.MethodReplacement |
||||
import xyz.fycz.myreader.R |
||||
import xyz.fycz.myreader.application.App |
||||
import xyz.fycz.myreader.application.SysManager |
||||
import xyz.fycz.myreader.common.URLCONST |
||||
import xyz.fycz.myreader.util.SharedPreUtils |
||||
import xyz.fycz.myreader.util.ToastUtils |
||||
import xyz.fycz.myreader.util.help.StringHelper |
||||
import xyz.fycz.myreader.util.utils.NetworkUtils |
||||
import xyz.fycz.myreader.util.utils.OkHttpUtils |
||||
import java.io.IOException |
||||
|
||||
/** |
||||
* @author fengyue |
||||
* @date 2022/7/1 15:45 |
||||
*/ |
||||
@AppFix([243, 244, 245, 246], ["修复检查更新失败的问题"], "2022-07-01") |
||||
class App246Fix5 : AppFixHandle { |
||||
override fun onFix(key: String): BooleanArray { |
||||
return handleFix( |
||||
key, |
||||
"checkUpdateUrl" to { fxCheckUpdateUrl() }, |
||||
) |
||||
} |
||||
|
||||
fun fxCheckUpdateUrl() { |
||||
MapleUtils.findAndHookMethod( |
||||
App::class.java, |
||||
"checkVersionByServer", |
||||
AppCompatActivity::class.java, |
||||
Boolean::class.java, |
||||
object : MethodReplacement() { |
||||
override fun replaceHookedMethod(param: MapleBridge.MethodHookParam) { |
||||
checkUpdate(param.args[0] as AppCompatActivity, param.args[1] as Boolean) |
||||
} |
||||
} |
||||
) |
||||
} |
||||
|
||||
fun checkUpdate(activity: AppCompatActivity, isManualCheck: Boolean) { |
||||
App.getApplication().newThread { |
||||
try { |
||||
var content = OkHttpUtils.getUpdateInfo() |
||||
if (StringHelper.isEmpty(content)) { |
||||
content = getBakUpdateInfo() |
||||
if (StringHelper.isEmpty(content)) { |
||||
if (isManualCheck || NetworkUtils.isNetWorkAvailable()) { |
||||
ToastUtils.showError("检查更新失败!") |
||||
} |
||||
return@newThread |
||||
} |
||||
} |
||||
val contents = content.split(";".toRegex()) |
||||
val newestVersion = contents[0].substring(contents[0].indexOf(":") + 1).toInt() |
||||
var isForceUpdate = contents[1].substring(contents[1].indexOf(":") + 1).toBoolean() |
||||
val downloadLink = |
||||
contents[2].substring(contents[2].indexOf(":") + 1).trim { it <= ' ' } |
||||
val updateContent = contents[3].substring(contents[3].indexOf(":") + 1) |
||||
|
||||
SharedPreUtils.getInstance().putString( |
||||
App.getmContext().getString(R.string.lanzousKeyStart), |
||||
contents[4].substring(contents[4].indexOf(":") + 1) |
||||
) |
||||
val newSplashTime = contents[5].substring(contents[5].indexOf(":") + 1) |
||||
val oldSplashTime = SharedPreUtils.getInstance().getString("splashTime") |
||||
SharedPreUtils.getInstance() |
||||
.putBoolean("needUdSI", oldSplashTime != newSplashTime) |
||||
SharedPreUtils.getInstance().putString( |
||||
"splashTime", |
||||
contents[5].substring(contents[5].indexOf(":") + 1) |
||||
) |
||||
SharedPreUtils.getInstance().putString( |
||||
"splashImageUrl", |
||||
contents[6].substring(contents[6].indexOf(":") + 1) |
||||
) |
||||
SharedPreUtils.getInstance().putString( |
||||
"splashImageMD5", |
||||
contents[7].substring(contents[7].indexOf(":") + 1) |
||||
) |
||||
val forceUpdateVersion = contents[8].substring(contents[8].indexOf(":") + 1).toInt() |
||||
SharedPreUtils.getInstance().putInt("forceUpdateVersion", forceUpdateVersion) |
||||
val domain = contents[9].substring(contents[9].indexOf(":") + 1) |
||||
SharedPreUtils.getInstance().putString("domain", domain) |
||||
val pluginConfigUrl = contents[10].substring(contents[10].indexOf(":") + 1) |
||||
SharedPreUtils.getInstance().putString("pluginConfigUrl", pluginConfigUrl) |
||||
val versionCode = App.getVersionCode() |
||||
isForceUpdate = isForceUpdate && forceUpdateVersion > versionCode |
||||
if (!StringHelper.isEmpty(downloadLink)) { |
||||
SharedPreUtils.getInstance() |
||||
.putString(App.getmContext().getString(R.string.downloadLink), downloadLink) |
||||
} else { |
||||
SharedPreUtils.getInstance().putString( |
||||
App.getmContext().getString(R.string.downloadLink), |
||||
URLCONST.APP_DIR_URL |
||||
) |
||||
} |
||||
val updateContents = updateContent.split("/".toRegex()) |
||||
val s = StringBuilder() |
||||
updateContents.forEach { |
||||
s.append(it) |
||||
s.append("<br>") |
||||
} |
||||
Log.i("检查更新,最新版本", newestVersion.toString() + "") |
||||
if (newestVersion > versionCode) { |
||||
val setting = SysManager.getSetting() |
||||
if (isManualCheck || setting.newestVersionCode < newestVersion || isForceUpdate) { |
||||
setting.newestVersionCode = newestVersion |
||||
SysManager.saveSetting(setting) |
||||
App.getApplication().updateApp2( |
||||
activity, downloadLink, newestVersion, s.toString(), isForceUpdate |
||||
) |
||||
} |
||||
} else if (isManualCheck) { |
||||
ToastUtils.showSuccess("已经是最新版本!") |
||||
} |
||||
} catch (e: Exception) { |
||||
e.printStackTrace() |
||||
Log.e("检查更新失败!", "" + e.localizedMessage) |
||||
if (isManualCheck || NetworkUtils.isNetWorkAvailable()) { |
||||
ToastUtils.showError("检查更新失败!") |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Throws(IOException::class) |
||||
fun getBakUpdateInfo(): String { |
||||
return OkHttpUtils.getHtml( |
||||
"https://fyreader.coding.net/p/img/d/FYReader-Update/git/raw/master/" + |
||||
(if (App.isDebug()) "debug" else "release") + |
||||
"/content.txt" |
||||
) |
||||
} |
||||
} |
Loading…
Reference in new issue