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
获取图书信息失败
+ 获取图书分卷失败
网络错误
保存封面失败
保存封面超时