From 0e5547d586577400a7b0bfc0697c78082cb2b003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Tue, 5 Sep 2023 14:40:35 +0800 Subject: [PATCH] =?UTF-8?q?v2.0.beta19=20fix=20#25=20=E4=BF=AE=E5=A4=8D=20?= =?UTF-8?q?1.=20=E9=98=85=E8=A7=88=E6=BC=AB=E7=94=BB=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=A0=8F=E5=BC=82=E5=B8=B8=202.=20=E4=B8=8B=E8=BD=BD=E9=A1=B5?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E5=BC=82=E5=B8=B8=203.=20=E7=AB=96=E5=90=91?= =?UTF-8?q?=E9=98=85=E8=AF=BB=E5=8A=A0=E8=BD=BD=E6=97=B6=E9=97=B4=E8=BF=87?= =?UTF-8?q?=E9=95=BF=204.=20=E8=8E=B7=E5=8F=96=E5=9B=BE=E4=B9=A6=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=9C=89=E6=97=B6=E5=A4=B1=E8=B4=A5(fix=20#26)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 11 ++++-- app/src/main/AndroidManifest.xml | 2 +- .../template/http/AutoDownloadThread.kt | 2 +- .../top/fumiama/copymanga/tools/api/CMApi.kt | 5 ++- .../copymanga/tools/http/DownloadTools.kt | 8 ++-- .../top/fumiama/copymanga/tools/http/Proxy.kt | 38 ++++++++++++------- .../fumiama/copymanga/ui/book/BookFragment.kt | 3 ++ .../fumiama/copymanga/ui/book/BookHandler.kt | 3 +- .../fumiama/copymanga/ui/home/HomeFragment.kt | 4 +- .../copymanga/ui/vm/ViewMangaActivity.kt | 4 +- app/src/main/res/layout/fragment_download.xml | 2 +- app/src/main/res/values/strings.xml | 8 ++++ app/src/main/res/values/styles.xml | 2 +- app/src/main/res/xml/pref_setting.xml | 8 ++++ 14 files changed, 69 insertions(+), 31 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b0d1ea3..c2b3090 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,19 +3,22 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { - compileSdkVersion 33 - defaultConfig { + compileSdk 33 applicationId 'top.fumiama.copymanga' minSdkVersion 23 targetSdkVersion 33 - versionCode 30 - versionName '2.0.beta18' + versionCode 31 + versionName '2.0.beta19' resConfigs 'zh', 'zh-rCN' testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } + aaptOptions { + cruncherEnabled = false + } + buildTypes { release { minifyEnabled true diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8a986b8..34f7941 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -43,7 +43,7 @@ android:theme="@style/Theme.AppCompat.Light.NoActionBar"/> + android:theme="@style/AppTheme.NoActionBar"/> diff --git a/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadThread.kt b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadThread.kt index e833816..997df23 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadThread.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadThread.kt @@ -13,7 +13,7 @@ class AutoDownloadThread(private val url: String, private val whenFinish: (resul var c = 0 while (!exit && re == null && c++ < 3){ re = DownloadTools.getHttpContent(url, - mainWeakReference?.get()?.getString(R.string.referUrl)!!.format(CMApi.myHostApiUrl), + mainWeakReference?.get()?.getString(R.string.referer)!!, mainWeakReference?.get()?.getString(R.string.pc_ua)!! ) } diff --git a/app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt b/app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt index d1a4f99..25c6833 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt @@ -11,17 +11,18 @@ import java.io.File import java.net.URLEncoder object CMApi { - var proxy = if(Proxy.useProxy) Proxy() else null + var proxy = if(Proxy.useImageProxy) Proxy(R.string.imgProxyApiUrl, R.string.imgProxyApiPrefix, R.string.imgProxyKeyID) else null var myGlideHeaders: LazyHeaders? = null get() { MainActivity.mainWeakReference?.get()?.let { PreferenceManager.getDefaultSharedPreferences(it).apply { if(field === null) field = LazyHeaders.Builder() - .addHeader("referer", MainActivity.mainWeakReference?.get()?.getString(R.string.referUrl)!!) + .addHeader("referer", MainActivity.mainWeakReference?.get()?.getString(R.string.referer)!!) .addHeader("User-Agent", MainActivity.mainWeakReference?.get()?.getString(R.string.pc_ua)!!) .addHeader("source", "copyApp") .addHeader("webp", "1") + .addHeader("version", MainActivity.mainWeakReference?.get()?.getString(R.string.app_ver)!!) .addHeader("region", if(!getBoolean("settings_cat_net", false)) "1" else "0") .addHeader("platform", "3") .build() diff --git a/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt index 219708f..24dafc8 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt @@ -4,6 +4,7 @@ import android.content.Context import android.util.Log import androidx.preference.PreferenceManager import top.fumiama.copymanga.MainActivity +import top.fumiama.dmzj.copymanga.R import java.net.HttpURLConnection import java.net.URL import java.util.concurrent.Callable @@ -27,10 +28,9 @@ object DownloadTools { setRequestProperty("region", if(!getBoolean("settings_cat_net_sw_use_foreign", false)) "1" else "0") } it.getPreferences(Context.MODE_PRIVATE).apply { - setRequestProperty("version", getString("app_ver", "2.0.7")) - getString("token", "")?.let { - if(it != "") setRequestProperty("authorization", "Token $it") - else setRequestProperty("authorization", "Token ") + setRequestProperty("version", it.getString(R.string.app_ver)) + getString("token", "")?.let { tk -> + setRequestProperty("authorization", "Token $tk") } } } diff --git a/app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt b/app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt index d3fa6a5..8905f6d 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt @@ -3,32 +3,44 @@ package top.fumiama.copymanga.tools.http import android.util.Log import androidx.preference.PreferenceManager import top.fumiama.copymanga.MainActivity -import top.fumiama.dmzj.copymanga.R import java.net.URLEncoder import java.nio.charset.Charset -class Proxy(private val code: String) { - constructor(): this( +class Proxy(id: Int, apiPrefixID: Int, keyID: Int? = null) { + private val code = keyID?.let { k -> MainActivity.mainWeakReference?.get()?.let { - PreferenceManager.getDefaultSharedPreferences(it).let {sp -> - sp.getString("settings_cat_net_et_img_proxy_code", "") - } - }?:"" - ) + PreferenceManager.getDefaultSharedPreferences(it).getString(it.getString(k), null) + } + } + private val proxyApiUrl = MainActivity.mainWeakReference?.get()?.getString(id) + private val apiPrefix = MainActivity.mainWeakReference?.get()?.getString(apiPrefixID)?:"" fun wrap(u: String): String { - return MainActivity.mainWeakReference?.get()?.getString(R.string.imgProxyApiUrl) - ?.format(code, URLEncoder.encode(u, Charset.defaultCharset().name())) - ?:u + if(!u.startsWith(apiPrefix)) return u + if(code != null) { + return proxyApiUrl?.format(code, URLEncoder.encode(u, Charset.defaultCharset().name()))?:u + } + return proxyApiUrl?.format(URLEncoder.encode(u, Charset.defaultCharset().name()))?:u } companion object { - val useProxy: Boolean + val useImageProxy: Boolean get() { MainActivity.mainWeakReference?.get()?.let { PreferenceManager.getDefaultSharedPreferences(it).apply { val b = getBoolean("settings_cat_net_sw_use_img_proxy", false) - Log.d("MyProxy", "use proxy: $b") + Log.d("MyProxy", "use image proxy: $b") + return b + } + } + return false + } + val useApiProxy: Boolean + get() { + MainActivity.mainWeakReference?.get()?.let { + PreferenceManager.getDefaultSharedPreferences(it).apply { + val b = getBoolean("settings_cat_net_sw_use_api_proxy", false) + Log.d("MyProxy", "use api proxy: $b") return b } } diff --git a/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt index bd68a08..773ca63 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt @@ -8,6 +8,7 @@ import kotlinx.android.synthetic.main.line_booktandb.* import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference import top.fumiama.copymanga.manga.Reader import top.fumiama.copymanga.template.general.NoBackRefreshFragment +import top.fumiama.copymanga.ui.comicdl.ComicDlFragment import top.fumiama.dmzj.copymanga.R import java.lang.Thread.sleep import java.lang.ref.WeakReference @@ -19,6 +20,8 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + ComicDlFragment.exit = false + if(isFirstInflate) { bookHandler = BookHandler(WeakReference(this), arguments?.getString("path")?:"null") Thread{ diff --git a/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt index 823ce75..6a7f563 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt @@ -316,6 +316,7 @@ class BookHandler(private val th: WeakReference, private val path: ads += ad ad.start() offset += 100 + sleep(1000) } } while (counts[i] > 0) Thread { @@ -325,7 +326,7 @@ class BookHandler(private val th: WeakReference, private val path: if(ComicDlFragment.exit) return@Thread if(re.all { it != null }) break } - if(re.size > 1) { + if(re.isNotEmpty()) { val r = re[0] var s = emptyArray() re.forEach { diff --git a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt index 81f8432..de0a868 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt @@ -87,11 +87,11 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) { val types = arrayOf("", "name", "author", "local") var i = 0 override fun onMicClick() { - val typenames = resources.getStringArray(R.array.search_types) + val typeNames = resources.getStringArray(R.array.search_types) AlertDialog.Builder(ContextThemeWrapper(context, R.style.AlertDialogTheme)) .setTitle(R.string.set_search_types) .setIcon(R.mipmap.ic_launcher) - .setSingleChoiceItems(ArrayAdapter(context, R.layout.line_choice_list, typenames), i){ d, p -> + .setSingleChoiceItems(ArrayAdapter(context, R.layout.line_choice_list, typeNames), i){ d, p -> adapter.type = types[p] i = p d.cancel() diff --git a/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt b/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt index 69698b7..7b26cbb 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt @@ -196,6 +196,7 @@ class ViewMangaActivity : TitleActivityTemplate() { private fun doPrepareWebImg() { getImgUrlArray()?.apply { if(cut) { + Log.d("MyVM", "is cut, load all pages...") handler.sendEmptyMessage(7) //showDl isCut = BooleanArray(size) val analyzedCnt = BooleanArray(size) @@ -217,6 +218,7 @@ class ViewMangaActivity : TitleActivityTemplate() { if(b) indexMap += -(index+1) } handler.sendEmptyMessage(15) //hideDl + Log.d("MyVM", "load all pages finished") } count = size runOnUiThread { prepareItems() } @@ -347,7 +349,7 @@ class ViewMangaActivity : TitleActivityTemplate() { private fun loadImgUrlInto(imgView: ScaleImageView, url: String, isLast: Int = 0, useCut: Boolean, isLeft: Boolean){ Log.d("MyVM", "Load from adt: $url") - AutoDownloadThread(url) { + AutoDownloadThread(CMApi.proxy?.wrap(url)?:url) { it?.let { loadImg(imgView, BitmapFactory.decodeByteArray(it, 0, it.size), isLast, useCut, isLeft) } }.start() } diff --git a/app/src/main/res/layout/fragment_download.xml b/app/src/main/res/layout/fragment_download.xml index 2579481..772da11 100644 --- a/app/src/main/res/layout/fragment_download.xml +++ b/app/src/main/res/layout/fragment_download.xml @@ -3,4 +3,4 @@ android:id="@+id/mylv" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingBottom="@dimen/global_content_padding_bottom"/> + android:nestedScrollingEnabled="true" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 706af6c..957d95f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -57,6 +57,12 @@ https://%1$s/api/v3/member/browse/comics?limit=21&offset=%2$d&platform=3 https://copymanga.azurewebsites.net/api/img?code=%1$s&url=%2$s + https://hi77-overseas.mangafuna.xyz/ + settings_cat_net_et_img_proxy_code + 已完结 @@ -99,6 +105,8 @@ 不管使用什么线路, API访问均是海外, 只有图片CDN可能会变化(也可能不变), 请酌情选择使用 请求API网址 一般无需更改,除非拷贝漫画官方更改网址,默认:&hosturl; + 使用API代理(重启生效) + 作者自建的API代理,可缓解国内图书详情加载问题,但不保证100%解决,也不保证一直可用 使用图床代理(重启生效) 作者自建的图床代理,可缓解国内图片无法加载问题,但不保证100%解决,也不保证一直可用 图床代理密钥(重启生效) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2e5f544..d6274d3 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -13,7 +13,7 @@ + -->