From 35337f2a3f896d4605d0e28fdaf826f238d3afb0 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: Mon, 11 Mar 2024 03:20:22 +0900 Subject: [PATCH] =?UTF-8?q?v2.2.1=20=E6=96=B0=E5=A2=9E=201.=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=97=A0=E7=BD=91=E7=BB=9C=E6=97=B6=E4=BB=8E=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E8=AE=BF=E9=97=AE=E6=BC=AB=E7=94=BB=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=A1=B5=20=E4=BF=AE=E5=A4=8D=201.=20=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=B0=81=E9=9D=A2=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4=E8=BF=87?= =?UTF-8?q?=E7=9F=AD=202.=20=E7=AB=96=E5=90=91=E7=BF=BB=E9=A1=B5=E5=9B=9E?= =?UTF-8?q?=E5=88=B0=E4=B8=8A=E4=B8=80=E6=AE=B5=E9=97=AA=E9=80=80=203.=20?= =?UTF-8?q?=E6=97=A0=E5=8A=A8=E7=94=BB=E9=98=85=E8=A7=88=E6=97=B6=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E4=B8=8B=E4=B8=80=E9=A1=B5=E9=97=AA=E5=B1=8F=204.=20?= =?UTF-8?q?=E6=8E=92=E8=A1=8C=E9=A1=B5=E5=BF=AB=E9=80=9F=E7=82=B9=E5=87=BB?= =?UTF-8?q?tab=E6=97=B6=E6=98=BE=E7=A4=BA=E9=94=99=E4=B9=B1=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=201.=20=E6=88=91=E7=9A=84=E4=B8=8B=E8=BD=BD=E9=A1=B5?= =?UTF-8?q?=E7=9A=84=E6=97=A0=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 11 +++++----- .../top/fumiama/copymanga/MainActivity.kt | 3 ++- .../java/top/fumiama/copymanga/manga/Book.kt | 15 ++++++++++---- .../template/http/AutoDownloadHandler.kt | 5 +++-- .../template/http/PausableDownloader.kt | 3 ++- .../fumiama/copymanga/ui/book/BookFragment.kt | 15 ++++++++++---- .../fumiama/copymanga/ui/book/BookHandler.kt | 7 ++++--- .../ui/cardflow/rank/RankFragment.kt | 3 ++- .../ui/cardflow/shelf/ShelfFragment.kt | 3 ++- .../ui/cardflow/sort/SortFragment.kt | 3 ++- .../copymanga/ui/comicdl/ComicDlFragment.kt | 3 ++- .../fumiama/copymanga/ui/home/HomeFragment.kt | 7 ++++--- .../fumiama/copymanga/ui/home/HomeHandler.kt | 20 ++++++++++++++----- .../copymanga/ui/settings/SettingsFragment.kt | 18 ++++++++++++----- .../copymanga/ui/vm/ViewMangaActivity.kt | 6 +++--- app/src/main/res/values/strings.xml | 1 + 17 files changed, 83 insertions(+), 42 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d4a7b7c..a2937a3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,7 +8,7 @@ android { applicationId 'top.fumiama.copymanga' minSdkVersion 23 targetSdkVersion 34 - versionCode 48 + versionCode 49 versionName '2.2.1' resourceConfigurations += ['zh', 'zh-rCN'] diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b56bf9a..fb9c217 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,7 +14,7 @@ android:usesCleartextTraffic="true"> - + diff --git a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt index 2a51ba3..d584720 100644 --- a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt +++ b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt @@ -44,6 +44,7 @@ import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.app_bar_main.* import kotlinx.android.synthetic.main.nav_header_main.* import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import top.fumiama.copymanga.manga.Shelf @@ -130,7 +131,7 @@ class MainActivity : AppCompatActivity() { Log.d("MyMA", "start menu waiting") lifecycleScope.launch { withContext(Dispatchers.IO) { - sleep(1000) + delay(1000) withContext(Dispatchers.Main) { isMenuWaiting = false Log.d("MyMA", "finish menu waiting") diff --git a/app/src/main/java/top/fumiama/copymanga/manga/Book.kt b/app/src/main/java/top/fumiama/copymanga/manga/Book.kt index e6803ce..98ac831 100644 --- a/app/src/main/java/top/fumiama/copymanga/manga/Book.kt +++ b/app/src/main/java/top/fumiama/copymanga/manga/Book.kt @@ -5,10 +5,13 @@ import com.google.gson.Gson import kotlinx.android.synthetic.main.card_book.* import kotlinx.android.synthetic.main.line_booktandb.* import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import top.fumiama.copymanga.json.BookInfoStructure import top.fumiama.copymanga.json.ThemeStructure import top.fumiama.copymanga.json.VolumeStructure +import top.fumiama.copymanga.template.http.PausableDownloader import top.fumiama.copymanga.tools.api.CMApi import top.fumiama.copymanga.tools.http.DownloadTools import top.fumiama.dmzj.copymanga.R @@ -107,7 +110,9 @@ class Book(val path: String, private val getString: (Int) -> String, private val mGroupPathWords.forEachIndexed { i, g -> Volume(path, g, getString) { return@Volume exit - }.updateChapters(mCounts[i])?.let { volumes += it } + }.updateChapters(mCounts[i])?.let { + volumes += it + } } } if (!exit && volumes.size == mGroupPathWords.size) { @@ -127,9 +132,11 @@ class Book(val path: String, private val getString: (Int) -> String, private val File(mangaFolder, "info.json").writeText(mJsonString) File(mangaFolder, "grps.json").writeText(Gson().toJson(mKeys)) (cover?.let { CMApi.proxy?.wrap(it) } ?:cover)?.let { - DownloadTools.getHttpContent(it, null, mUserAgent) - }?.let { data -> - File(mangaFolder, "head.jpg").writeBytes(data) + Thread { + DownloadTools.getHttpContent(it, -1)?.let { data -> + File(mangaFolder, "head.jpg").writeBytes(data) + } + }.start() } } } diff --git a/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt index c4092cd..84d2bfa 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt @@ -8,6 +8,7 @@ import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import com.google.gson.Gson import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference @@ -94,13 +95,13 @@ open class AutoDownloadHandler( } fi.close() if(!pass) { - sleep(2000) + delay(2000) continue } break } catch (e: Exception) { e.printStackTrace() - sleep(2000) + delay(2000) } } } diff --git a/app/src/main/java/top/fumiama/copymanga/template/http/PausableDownloader.kt b/app/src/main/java/top/fumiama/copymanga/template/http/PausableDownloader.kt index 29ccdd3..dcbf5c6 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/http/PausableDownloader.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/http/PausableDownloader.kt @@ -2,6 +2,7 @@ package top.fumiama.copymanga.template.http import android.util.Log import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.withContext import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference import top.fumiama.copymanga.tools.http.DownloadTools @@ -23,7 +24,7 @@ class PausableDownloader(private val url: String, private val waitMilliseconds: break } catch (e: Exception) { e.printStackTrace() - if (waitMilliseconds > 0) sleep(200+Random.nextLong(waitMilliseconds)) + if (waitMilliseconds > 0) delay(200+Random.nextLong(waitMilliseconds)) } } Log.d("MyPD", "found exit = $exit") 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 0d6545b..56803fa 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 @@ -73,11 +73,18 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) { return@launch } Log.d("MyBF", "read path: ${book?.path}") - for (i in 1..4) { - mBookHandler?.sendEmptyMessageDelayed(i, (100*i).toLong()) + for (i in 1..3) { + mBookHandler?.sendEmptyMessage(i) } - book?.updateVolumes { - mBookHandler?.sendEmptyMessage(10) + try { + book?.updateVolumes { + mBookHandler?.sendEmptyMessage(10) + } + } catch (e: Exception) { + e.printStackTrace() + Toast.makeText(context, R.string.null_volume, Toast.LENGTH_SHORT).show() + findNavController().popBackStack() + return@launch } } } else { 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 701d88e..6ffcaab 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 @@ -27,6 +27,7 @@ import kotlinx.android.synthetic.main.line_caption.view.* import kotlinx.android.synthetic.main.line_chapter.view.* import kotlinx.android.synthetic.main.page_nested_list.view.* import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference @@ -83,7 +84,7 @@ class BookHandler(private val th: WeakReference): Handler(Looper.m if (book?.cover != null) GlideUrl(CMApi.proxy?.wrap(book?.cover!!)?:book?.cover!!, CMApi.myGlideHeaders) else book?.cachedCover - ).timeout(10000).addListener(GlideHideLottieViewListener(WeakReference(laic))) + ).addListener(GlideHideLottieViewListener(WeakReference(laic))) load.into(imic) context?.let { it1 -> GlideBlurTransformation(it1) } ?.let { it2 -> RequestOptions.bitmapTransform(it2) } @@ -199,7 +200,7 @@ class BookHandler(private val th: WeakReference): Handler(Looper.m val f = CMApi.getZipFile(context?.getExternalFilesDir(""), comicName, keys[p], it.name) //Log.d("MyBH", "i = $i, last=$last, add chapter ${it.name}, line is null: ${line == null}") that?.isOnPause?.let { isOnPause -> - while (isOnPause && !exit) sleep(500) + while (isOnPause && !exit) delay(500) if (exit) return@withContext }?:return@withContext if(line == null) { @@ -260,7 +261,7 @@ class BookHandler(private val th: WeakReference): Handler(Looper.m chapterNames += it.name ViewMangaActivity.uuidArray += it.uuid that?.isOnPause?.let { isOnPause -> - while (isOnPause && !exit) sleep(500) + while (isOnPause && !exit) delay(500) if (exit) return@withContext }?:return@withContext i++ diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt index e39e4b1..02d10cd 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt @@ -6,6 +6,7 @@ import com.google.android.material.tabs.TabLayout import kotlinx.android.synthetic.main.fragment_rank.* import kotlinx.android.synthetic.main.line_rank.view.* import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import top.fumiama.copymanga.template.ui.InfoCardLoader @@ -75,7 +76,7 @@ class RankFragment : InfoCardLoader(R.layout.fragment_rank, R.id.action_nav_rank lifecycleScope.launch { isLoading = true withContext(Dispatchers.IO) { - sleep(400) + delay(400) withContext(Dispatchers.Main) { reset() addPage() diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt index e6820a1..e734c39 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt @@ -8,6 +8,7 @@ import androidx.navigation.fragment.findNavController import kotlinx.android.synthetic.main.anchor_popular.view.* import kotlinx.android.synthetic.main.line_shelf.* import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import top.fumiama.copymanga.MainActivity @@ -122,7 +123,7 @@ class ShelfFragment : InfoCardLoader(R.layout.fragment_shelf, R.id.action_nav_su private fun resetDelayed() { lifecycleScope.launch { withContext(Dispatchers.IO) { - sleep(400) + delay(400) withContext(Dispatchers.Main) { reset() addPage() diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt index 8ffb47a..24666dd 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt @@ -8,6 +8,7 @@ import com.google.gson.Gson import kotlinx.android.synthetic.main.anchor_popular.view.* import kotlinx.android.synthetic.main.line_sort.* import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import top.fumiama.copymanga.json.FilterStructure @@ -69,7 +70,7 @@ class SortFragment : StatusCardFlow(0, R.id.action_nav_sort_to_nav_book, R.layou private fun suspendReset() { lifecycleScope.launch { withContext(Dispatchers.IO) { - sleep(400) + delay(400) withContext(Dispatchers.Main) { reset() addPage() diff --git a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt index 94131f6..be8749d 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt @@ -9,6 +9,7 @@ import androidx.navigation.fragment.findNavController import com.google.gson.Gson import kotlinx.android.synthetic.main.fragment_dlcomic.* import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import top.fumiama.copymanga.json.VolumeStructure @@ -30,7 +31,7 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) { arguments?.getBoolean("callFromOldDL", false) == true -> initOldComicData() arguments?.containsKey("loadJson") == true -> context?.getExternalFilesDir("")?.let { home -> arguments?.getString("name")?.let { - sleep(600) + delay(600) Log.d("MyCDF", "loadJson by arguments") start2load( loadFromJson(arguments?.getString("loadJson")!!), 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 7b58ec8..b32cdad 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 @@ -24,6 +24,7 @@ import kotlinx.android.synthetic.main.fragment_home.* import kotlinx.android.synthetic.main.line_word.view.* import kotlinx.android.synthetic.main.viewpage_horizonal.view.* import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import top.fumiama.copymanga.MainActivity @@ -163,10 +164,10 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) { lifecycleScope.launch{ withContext(Dispatchers.IO) { homeHandler.obtainMessage(-1, true).sendToTarget() - while(!MainActivity.isDrawerClosed) sleep(233) + while(!MainActivity.isDrawerClosed) delay(233) //homeHandler.sendEmptyMessage(6) //removeAllViews homeHandler.fhib = null - sleep(600) + delay(600) homeHandler.startLoad() } } @@ -196,7 +197,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) { //Log.d("MyHomeFVP", "Load img: $it") Glide.with(this@HomeFragment).load( GlideUrl(CMApi.proxy?.wrap(it)?:it, CMApi.myGlideHeaders) - ).addListener(GlideHideLottieViewListener(WeakReference(holder.itemView.lai))).timeout(10000).into(holder.itemView.vpi) + ).addListener(GlideHideLottieViewListener(WeakReference(holder.itemView.lai))).into(holder.itemView.vpi) } holder.itemView.vpt.text = thisBanner?.brief holder.itemView.vpc.setOnClickListener { diff --git a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt index 5209065..a078f98 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt @@ -24,6 +24,7 @@ import kotlinx.android.synthetic.main.card_book.view.* import kotlinx.android.synthetic.main.fragment_home.* import kotlinx.android.synthetic.main.line_1bookline.view.* import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import top.fumiama.copymanga.json.ComicStructure @@ -36,6 +37,7 @@ import top.fumiama.copymanga.tools.ui.UITools import top.fumiama.dmzj.copymanga.R import java.lang.Thread.sleep import java.lang.ref.WeakReference +import java.util.concurrent.atomic.AtomicInteger class HomeHandler(private val that: WeakReference) : AutoDownloadHandler( that.get()?.getString(R.string.mainPageApiUrl)!!.format(CMApi.myHostApiUrl), @@ -225,7 +227,7 @@ class HomeHandler(private val that: WeakReference) : AutoDownloadH inflateRank() for(i in indexLines.indices) { obtainMessage(8, i, 0).sendToTarget() - sleep(512) + delay(512) } obtainMessage(-1, false).sendToTarget() //closeLoad } @@ -271,7 +273,7 @@ class HomeHandler(private val that: WeakReference) : AutoDownloadH //fhib = null indexLines = arrayOf() this@HomeHandler.sendEmptyMessage(6) //removeAllViews - sleep(300) + delay(300) this@HomeHandler.sendEmptyMessage(0) //setLayouts } } @@ -319,13 +321,21 @@ class HomeHandler(private val that: WeakReference) : AutoDownloadH } } + private var cardLoadingWaits = AtomicInteger() + private suspend fun setCards(cv: CardView, pw: String, name: String, img: String, isFinal: Boolean, isTopic: Boolean) = withContext(Dispatchers.Main) { cv.tic.text = name homeF?.let { if(img.startsWith("http")) { - Glide.with(it).load(GlideUrl(CMApi.proxy?.wrap(img)?:img, CMApi.myGlideHeaders)) - .addListener(GlideHideLottieViewListener(WeakReference(cv.laic))) - .timeout(20000).into(cv.imic) + Log.d("MyHH", "load card image: $img") + val waitMillis = cardLoadingWaits.getAndIncrement().toLong()*200 + val g = Glide.with(it).load(GlideUrl(CMApi.proxy?.wrap(img)?:img, CMApi.myGlideHeaders)) + .addListener(GlideHideLottieViewListener(WeakReference(cv.laic)) { + cardLoadingWaits.decrementAndGet() + }) + if (waitMillis > 0) cv.imic.postDelayed({ + g.into(cv.imic) + }, waitMillis) else g.into(cv.imic) } } if (isFinal) cv.sgnic.visibility = View.VISIBLE diff --git a/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt index 292ef56..0ce286d 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt @@ -7,22 +7,30 @@ import android.util.Log import android.view.View import android.view.Window import androidx.annotation.Keep +import androidx.lifecycle.lifecycleScope import androidx.preference.EditTextPreference import androidx.preference.EditTextPreferenceDialogFragmentCompat import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import top.fumiama.copymanga.tools.ui.UITools import top.fumiama.dmzj.copymanga.R import java.lang.Thread.sleep class SettingsFragment: PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - Thread { - sleep(300) - activity?.runOnUiThread { - setPreferencesFromResource(R.xml.pref_setting, rootKey) + lifecycleScope.launch { + withContext(Dispatchers.IO) { + delay(300) + withContext(Dispatchers.Main) { + setPreferencesFromResource(R.xml.pref_setting, rootKey) + } } - }.start() + } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 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 56c6d24..ad893c0 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 @@ -245,14 +245,14 @@ class ViewMangaActivity : TitleActivityTemplate() { } @ExperimentalStdlibApi - private fun doPrepareWebImg() { + private fun doPrepareWebImg() = Thread { getImgUrlArray()?.apply { if(cut) { Log.d("MyVM", "is cut, load all pages...") handler.sendEmptyMessage(VMHandler.DIALOG_SHOW) //showDl isCut = BooleanArray(size) val analyzedCnt = BooleanArray(size) - forEachIndexed{ i, it -> + forEachIndexed { i, it -> if(it != null) { Thread{ DownloadTools.getHttpContent(CMApi.resolution.wrap(CMApi.proxy?.wrap(it)?:it), 1024)?.inputStream()?.let { @@ -276,7 +276,7 @@ class ViewMangaActivity : TitleActivityTemplate() { runOnUiThread { prepareItems() } if (notUseVP) prepareDownloadTasks() } - } + }.start() @OptIn(ExperimentalStdlibApi::class) fun initManga() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 06990d0..4d7008c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -41,6 +41,7 @@ 加载主页控件出错 N/A 获取图书信息失败 + 获取图书分卷失败 网络错误 保存封面失败 保存封面超时