1
0
mirror of https://github.com/fumiama/copymanga.git synced 2026-06-23 11:00:24 +08:00
修复
1. 一些闪退
This commit is contained in:
源文雨
2025-06-05 23:55:18 +09:00
parent bf1f0c9395
commit 501b688f54
6 changed files with 104 additions and 18 deletions

View File

@@ -12,7 +12,7 @@ android {
minSdkVersion 23 minSdkVersion 23
//noinspection OldTargetApi //noinspection OldTargetApi
targetSdkVersion 34 targetSdkVersion 34
versionCode 75 versionCode 76
versionName '2.5.4' versionName '2.5.4'
resourceConfigurations += ['zh', 'zh-rCN'] resourceConfigurations += ['zh', 'zh-rCN']

View File

@@ -42,7 +42,7 @@ object Config {
field = LazyHeaders.Builder() field = LazyHeaders.Builder()
.addHeader("referer", referer) .addHeader("referer", referer)
.addHeader("User-Agent", pc_ua) .addHeader("User-Agent", pc_ua)
.addHeader("source", "copyApp") .addHeader("source", net_source.value)
.addHeader("webp", "1") .addHeader("webp", "1")
.addHeader("version", app_ver.value) .addHeader("version", app_ver.value)
.addHeader( .addHeader(
@@ -81,12 +81,19 @@ object Config {
val net_use_gzip = PreferenceBoolean("settings_cat_net_sw_use_gzip", false) val net_use_gzip = PreferenceBoolean("settings_cat_net_sw_use_gzip", false)
val net_use_json = PreferenceBoolean("settings_cat_net_sw_use_json", false) val net_use_json = PreferenceBoolean("settings_cat_net_sw_use_json", false)
val net_platform = PreferenceBoolean("settings_cat_net_sw_platform", false)
val net_referer = PreferenceBoolean("settings_cat_net_sw_referer", false)
val net_version = PreferenceBoolean("settings_cat_net_sw_version", false)
val net_region = PreferenceBoolean("settings_cat_net_sw_region", false)
val net_no_webp = PreferenceBoolean("settings_cat_net_no_webp", false)
val net_use_comandy = PreferenceBoolean("settings_cat_net_sw_use_comandy", false) val net_use_comandy = PreferenceBoolean("settings_cat_net_sw_use_comandy", false)
val net_use_foreign = PreferenceBoolean("settings_cat_net_sw_use_foreign", false) val net_use_foreign = PreferenceBoolean("settings_cat_net_sw_use_foreign", false)
private val net_use_img_proxy = PreferenceBoolean("settings_cat_net_sw_use_img_proxy", false) private val net_use_img_proxy = PreferenceBoolean("settings_cat_net_sw_use_img_proxy", false)
val net_use_api_proxy = PreferenceBoolean("settings_cat_net_sw_use_api_proxy", false) val net_use_api_proxy = PreferenceBoolean("settings_cat_net_sw_use_api_proxy", false)
val net_img_resolution = PreferenceString(R.string.imgResolutionKeyID) val net_img_resolution = PreferenceString(R.string.imgResolutionKeyID)
val net_umstring = PreferenceString("settings_cat_net_et_umstring") val net_umstring = PreferenceString("settings_cat_net_et_umstring")
val net_source = PreferenceString("settings_cat_net_et_source", R.string.source)
val net_ua = PreferenceString("settings_cat_net_et_ua", "__default_ua__")
val view_manga_inverse_chapters = PreferenceBoolean("settings_cat_vm_sw_inverse_chapters", false) val view_manga_inverse_chapters = PreferenceBoolean("settings_cat_vm_sw_inverse_chapters", false)
val view_manga_always_dark_bg = PreferenceBoolean("settings_cat_vm_sw_always_dark_bg", false) val view_manga_always_dark_bg = PreferenceBoolean("settings_cat_vm_sw_always_dark_bg", false)

View File

@@ -106,12 +106,19 @@ class Api {
}?: DownloadTools.requestApiWithBody(u, method, body, contentType)).decodeToString() }?: DownloadTools.requestApiWithBody(u, method, body, contentType)).decodeToString()
r = Gson().fromJson(ret, ReturnBase::class.java) r = Gson().fromJson(ret, ReturnBase::class.java)
if (r!!.code != 200) { if (r!!.code != 200) {
mu.write { mHostApiUrls.remove(api) } mu.write {
if (mHostApiUrls.size <= 1) return@write
mHostApiUrls.remove(api)
}
} else { } else {
return ret return ret
} }
} catch (e: Exception) { } catch (e: Exception) {
mu.write { mHostApiUrls.remove(api) } e.printStackTrace()
mu.write {
if (mHostApiUrls.size <= 1) return@write
mHostApiUrls.remove(api)
}
} }
} }
throw IllegalStateException("错误码${r!!.code}, 信息: ${r!!.message}") throw IllegalStateException("错误码${r!!.code}, 信息: ${r!!.message}")

View File

@@ -30,20 +30,23 @@ object DownloadTools {
connection.connectTimeout = timeout connection.connectTimeout = timeout
connection.readTimeout = timeout connection.readTimeout = timeout
connection.apply { connection.apply {
setRequestProperty("user-agent", Config.pc_ua) Config.net_ua.value.let {
setRequestProperty("source", "copyApp") if (it.isEmpty()) return@let
setRequestProperty("user-agent", if (it == "__default_ua__") Config.pc_ua else it)
}
Config.net_source.value.let { if(it.isNotEmpty()) setRequestProperty("source", it) }
// deviceinfo // deviceinfo
setRequestProperty("webp", "1") if (!Config.net_no_webp.value) setRequestProperty("webp", "1")
setRequestProperty("dt", SimpleDateFormat("yyyy.MM.dd", Locale.getDefault()).format(Calendar.getInstance().time)) setRequestProperty("dt", SimpleDateFormat("yyyy.MM.dd", Locale.getDefault()).format(Calendar.getInstance().time))
if (Config.net_use_gzip.value) setRequestProperty("accept-encoding", "gzip") if (Config.net_use_gzip.value) setRequestProperty("accept-encoding", "gzip")
setRequestProperty("authorization", "Token${Config.token.value?.let { tk -> setRequestProperty("authorization", "Token${Config.token.value?.let { tk ->
if (tk.isNotEmpty()) " $tk" else "" if (tk.isNotEmpty()) " $tk" else ""
}}") }}")
setRequestProperty("platform", Config.platform.value) if (Config.net_platform.value) setRequestProperty("platform", Config.platform.value)
setRequestProperty("referer", Config.referer) if (Config.net_referer.value) setRequestProperty("referer", Config.referer)
if (Config.net_use_json.value) setRequestProperty("accept", "application/json") if (Config.net_use_json.value) setRequestProperty("accept", "application/json")
setRequestProperty("version", Config.app_ver.value) if (Config.net_version.value) setRequestProperty("version", Config.app_ver.value)
setRequestProperty("region", if(!Config.net_use_foreign.value) "1" else "0") if (Config.net_region.value) setRequestProperty("region", if(!Config.net_use_foreign.value) "1" else "0")
// device // device
// host // host
Config.net_umstring.value.let { if (it.isNotEmpty()) setRequestProperty("umstring", it) } Config.net_umstring.value.let { if (it.isNotEmpty()) setRequestProperty("umstring", it) }
@@ -59,20 +62,23 @@ object DownloadTools {
capsule.url = url capsule.url = url
capsule.method = method capsule.method = method
capsule.headers = hashMapOf() capsule.headers = hashMapOf()
capsule.headers["user-agent"] = Config.pc_ua Config.net_ua.value.let {
capsule.headers["source"] = "copyApp" if (it.isEmpty()) return@let
capsule.headers["user-agent"] = if (it == "__default_ua__") Config.pc_ua else it
}
Config.net_source.value.let { if(it.isNotEmpty()) capsule.headers["source"] = it }
// deviceinfo // deviceinfo
capsule.headers["webp"] = "1" if (!Config.net_no_webp.value) capsule.headers["webp"] = "1"
capsule.headers["dt"] = SimpleDateFormat("yyyy.MM.dd", Locale.getDefault()).format(Calendar.getInstance().time) capsule.headers["dt"] = SimpleDateFormat("yyyy.MM.dd", Locale.getDefault()).format(Calendar.getInstance().time)
if (Config.net_use_gzip.value) capsule.headers["accept-encoding"] = "gzip" if (Config.net_use_gzip.value) capsule.headers["accept-encoding"] = "gzip"
capsule.headers["authorization"] = "Token${Config.token.value?.let { tk -> capsule.headers["authorization"] = "Token${Config.token.value?.let { tk ->
if (tk.isNotEmpty()) " $tk" else "" if (tk.isNotEmpty()) " $tk" else ""
}}" }}"
capsule.headers["platform"] = Config.platform.value if (Config.net_platform.value) capsule.headers["platform"] = Config.platform.value
capsule.headers["referer"] = Config.referer if (Config.net_referer.value) capsule.headers["referer"] = Config.referer
if (Config.net_use_json.value) capsule.headers["accept"] = "application/json" if (Config.net_use_json.value) capsule.headers["accept"] = "application/json"
capsule.headers["version"] = Config.app_ver.value if (Config.net_version.value) capsule.headers["version"] = Config.app_ver.value
capsule.headers["region"] = if(!Config.net_use_foreign.value) "1" else "0" if (Config.net_region.value) capsule.headers["region"] = if(!Config.net_use_foreign.value) "1" else "0"
// device // device
// host // host
Config.net_umstring.value.let { if (it.isNotEmpty()) capsule.headers["umstring"] = it } Config.net_umstring.value.let { if (it.isNotEmpty()) capsule.headers["umstring"] = it }

View File

@@ -4,9 +4,11 @@
<!ENTITY appver "2.3.0"> <!ENTITY appver "2.3.0">
<!ENTITY proxyurl "copymanga.azurewebsites.net"> <!ENTITY proxyurl "copymanga.azurewebsites.net">
<!ENTITY platform "3"> <!ENTITY platform "3">
<!ENTITY source "copyApp">
]> ]>
<resources> <resources>
<string name="app_name">拷贝漫画</string> <string name="app_name">拷贝漫画</string>
<string name="source">&source;</string>
<string name="action_settings">设定</string> <string name="action_settings">设定</string>
<string name="action_info">关于</string> <string name="action_info">关于</string>
@@ -177,12 +179,26 @@
<string name="settings_cat_net_sm_use_gzip">告知服务器优先返回GZip格式数据</string> <string name="settings_cat_net_sm_use_gzip">告知服务器优先返回GZip格式数据</string>
<string name="settings_cat_net_sw_use_json">请求JSON</string> <string name="settings_cat_net_sw_use_json">请求JSON</string>
<string name="settings_cat_net_sm_use_json">显式告知服务器返回JSON格式数据</string> <string name="settings_cat_net_sm_use_json">显式告知服务器返回JSON格式数据</string>
<string name="settings_cat_net_sw_platform">请求平台</string>
<string name="settings_cat_net_sm_platform">向服务器报告平台版本号</string>
<string name="settings_cat_net_sw_referer">请求来源</string>
<string name="settings_cat_net_sm_referer">向服务器报告请求来源</string>
<string name="settings_cat_net_sw_version">请求版本号</string>
<string name="settings_cat_net_sm_version">向服务器报告请求版本号</string>
<string name="settings_cat_net_sw_region">请求区域</string>
<string name="settings_cat_net_sm_region">向服务器报告请求区域</string>
<string name="settings_cat_net_sw_no_webp">不请求WebP</string>
<string name="settings_cat_net_sm_no_webp">不向服务器报告WebP请求</string>
<string name="settings_cat_net_et_title_api_url">请求API网址</string> <string name="settings_cat_net_et_title_api_url">请求API网址</string>
<string name="settings_cat_net_et_summary_api_url">一般无需更改,除非拷贝漫画官方更改网址,默认:&hosturl;</string> <string name="settings_cat_net_et_summary_api_url">一般无需更改,除非拷贝漫画官方更改网址,默认:&hosturl;</string>
<string name="settings_cat_net_et_title_reverse_proxy">反向代理</string> <string name="settings_cat_net_et_title_reverse_proxy">反向代理</string>
<string name="settings_cat_net_et_summary_reverse_proxy">您可以自建反向代理并填写在此处以解决网络不畅</string> <string name="settings_cat_net_et_summary_reverse_proxy">您可以自建反向代理并填写在此处以解决网络不畅</string>
<string name="settings_cat_net_et_title_umstring">友盟ID</string> <string name="settings_cat_net_et_title_umstring">友盟ID</string>
<string name="settings_cat_net_et_summary_umstring">填写您分配到的友盟ID</string> <string name="settings_cat_net_et_summary_umstring">填写您分配到的友盟ID</string>
<string name="settings_cat_net_et_title_source">请求源</string>
<string name="settings_cat_net_et_summary_source">默认&source;</string>
<string name="settings_cat_net_et_title_ua">请求UA</string>
<string name="settings_cat_net_et_summary_ua">自定义请求UA</string>
<string name="settings_cat_net_sw_use_api_proxy">使用API代理需要密钥</string> <string name="settings_cat_net_sw_use_api_proxy">使用API代理需要密钥</string>
<string name="settings_cat_net_sm_use_api_proxy">作者自建的API代理可缓解国内图书详情加载问题但不保证100%解决,也不保证一直可用</string> <string name="settings_cat_net_sm_use_api_proxy">作者自建的API代理可缓解国内图书详情加载问题但不保证100%解决,也不保证一直可用</string>
<string name="settings_cat_net_sw_use_img_proxy">使用图床代理(需要密钥)</string> <string name="settings_cat_net_sw_use_img_proxy">使用图床代理(需要密钥)</string>

View File

@@ -89,6 +89,36 @@
app:selectable="true" app:selectable="true"
app:summary="@string/settings_cat_net_sm_use_json" app:summary="@string/settings_cat_net_sm_use_json"
app:title="@string/settings_cat_net_sw_use_json" /> app:title="@string/settings_cat_net_sw_use_json" />
<SwitchPreferenceCompat
app:iconSpaceReserved="false"
app:key="settings_cat_net_sw_platform"
app:selectable="true"
app:summary="@string/settings_cat_net_sm_platform"
app:title="@string/settings_cat_net_sw_platform" />
<SwitchPreferenceCompat
app:iconSpaceReserved="false"
app:key="settings_cat_net_sw_referer"
app:selectable="true"
app:summary="@string/settings_cat_net_sm_referer"
app:title="@string/settings_cat_net_sw_referer" />
<SwitchPreferenceCompat
app:iconSpaceReserved="false"
app:key="settings_cat_net_sw_version"
app:selectable="true"
app:summary="@string/settings_cat_net_sm_version"
app:title="@string/settings_cat_net_sw_version" />
<SwitchPreferenceCompat
app:iconSpaceReserved="false"
app:key="settings_cat_net_sw_region"
app:selectable="true"
app:summary="@string/settings_cat_net_sm_version"
app:title="@string/settings_cat_net_sw_version" />
<SwitchPreferenceCompat
app:iconSpaceReserved="false"
app:key="settings_cat_net_no_webp"
app:selectable="true"
app:summary="@string/settings_cat_net_sm_no_webp"
app:title="@string/settings_cat_net_sw_no_webp" />
<ListPreference <ListPreference
android:max="1500" android:max="1500"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
@@ -142,6 +172,26 @@
app:enableCopying="true" app:enableCopying="true"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:key="settings_cat_net_et_umstring" /> app:key="settings_cat_net_et_umstring" />
<EditTextPreference
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:selectAllOnFocus="false"
android:singleLine="true"
android:title="@string/settings_cat_net_et_title_source"
android:summary="@string/settings_cat_net_et_summary_source"
app:enableCopying="true"
app:iconSpaceReserved="false"
app:key="settings_cat_net_et_source" />
<EditTextPreference
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:selectAllOnFocus="false"
android:singleLine="true"
android:title="@string/settings_cat_net_et_title_ua"
android:summary="@string/settings_cat_net_et_summary_ua"
app:enableCopying="true"
app:iconSpaceReserved="false"
app:key="settings_cat_net_et_ua" />
<SwitchPreferenceCompat <SwitchPreferenceCompat
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:key="@string/apiProxyKeyID" app:key="@string/apiProxyKeyID"