1
0
mirror of https://github.com/fumiama/copymanga.git synced 2026-06-30 07:40:27 +08:00
新增
1. 默认不在我的下载显示未下载漫画
修复
1. 某些排序标签效果与邻签相同(作者、标签、已完结)
2. 从漫画下载进入阅览,退出后加载中对话框不消失
优化
1. 未登录时进入我的订阅、浏览历史则自动返回
2. Fragment activity 获取
3. VMHandler 消息表示
4. ViewMangaActivity Dialog 泄漏
5. 设置页加载卡顿
This commit is contained in:
源文雨
2023-11-03 17:06:44 +09:00
parent 34e9a4fe67
commit cc4c1fb064
26 changed files with 250 additions and 157 deletions

View File

@@ -8,8 +8,8 @@ android {
applicationId 'top.fumiama.copymanga' applicationId 'top.fumiama.copymanga'
minSdkVersion 23 minSdkVersion 23
targetSdkVersion 34 targetSdkVersion 34
versionCode 38 versionCode 39
versionName '2.0.2' versionName '2.0.3'
resConfigs 'zh', 'zh-rCN' resConfigs 'zh', 'zh-rCN'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

View File

@@ -11,7 +11,7 @@ import top.fumiama.copymanga.ui.vm.ViewMangaActivity
import java.io.File import java.io.File
object Reader { object Reader {
fun viewMangaAt(name: String, pos: Int, fromFirstPage: Boolean = false) { fun viewMangaAt(name: String, pos: Int, urlArray: Array<String>, fromFirstPage: Boolean = false) {
Log.d("MyR", "viewMangaAt name $name, pos $pos") Log.d("MyR", "viewMangaAt name $name, pos $pos")
mainWeakReference?.get()?.apply { mainWeakReference?.get()?.apply {
getPreferences(Context.MODE_PRIVATE)?.edit { getPreferences(Context.MODE_PRIVATE)?.edit {
@@ -19,11 +19,12 @@ object Reader {
apply() apply()
Log.d("MyR", "记录 $name 阅读到第 ${pos+1}") Log.d("MyR", "记录 $name 阅读到第 ${pos+1}")
}?: Log.d("MyR", "无法获得 main pref") }?: Log.d("MyR", "无法获得 main pref")
ViewMangaActivity.dlhandler = null // ViewMangaActivity.dlhandler = null
ViewMangaActivity.position = pos ViewMangaActivity.position = pos
ViewMangaActivity.comicName = name ViewMangaActivity.comicName = name
val zipf = ViewMangaActivity.fileArray[pos] val zipf = ViewMangaActivity.fileArray[pos]
val intent = Intent(this, ViewMangaActivity::class.java) val intent = Intent(this, ViewMangaActivity::class.java)
intent.putExtra("urlArray", urlArray)
if(!fromFirstPage) { if(!fromFirstPage) {
intent.putExtra("function", "log") intent.putExtra("function", "log")
ViewMangaActivity.pn = -2 ViewMangaActivity.pn = -2

View File

@@ -66,7 +66,7 @@ open class MangaPagesFragmentTemplate(inflateRes:Int, val isLazy: Boolean = true
} }
Thread { Thread {
sleep(600) sleep(600)
MainActivity.mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
setLayouts() setLayouts()
} }
}.start() }.start()
@@ -109,7 +109,7 @@ open class MangaPagesFragmentTemplate(inflateRes:Int, val isLazy: Boolean = true
reset() reset()
Thread { Thread {
sleep(600) sleep(600)
MainActivity.mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
addPage() addPage()
} }
}.start() }.start()

View File

@@ -17,12 +17,12 @@ import java.io.File
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
class CardList( class CardList(
fragment: WeakReference<Fragment>, private val fragment: WeakReference<Fragment>,
private val cardWidth: Int, private val cardWidth: Int,
private val cardHeight: Int, private val cardHeight: Int,
private val cardPerRow: Int private val cardPerRow: Int
) { ) {
private val that = fragment.get() private val that get() = fragment.get()
private var rows:Array<View?> = arrayOfNulls(20) private var rows:Array<View?> = arrayOfNulls(20)
private var index = 0 private var index = 0
private var count = 0 private var count = 0
@@ -42,15 +42,17 @@ class CardList(
} }
private fun inflateRow(){ private fun inflateRow(){
that?.layoutInflater?.inflate(R.layout.line_horizonal_empty, that.mydll, false)?.let { that?.apply {
if(exitCardList) return layoutInflater.inflate(R.layout.line_horizonal_empty, mydll, false)?.let {
it.layoutParams.height = cardHeight + 16 if(exitCardList) return
mainWeakReference?.get()?.runOnUiThread { it.layoutParams.height = cardHeight + 16
if(exitCardList) return@runOnUiThread activity?.runOnUiThread {
that.mydll.addView(it) if(exitCardList) return@runOnUiThread
mydll?.addView(it)
}
recycleOneRow(it)
index++
} }
recycleOneRow(it)
index++
} }
} }
private fun recycleOneRow(v:View?){ private fun recycleOneRow(v:View?){
@@ -58,11 +60,11 @@ class CardList(
if(rows[relativeIndex] == null) rows[relativeIndex] = v if(rows[relativeIndex] == null) rows[relativeIndex] = v
else { else {
val victim = rows[relativeIndex] val victim = rows[relativeIndex]
mainWeakReference?.get()?.runOnUiThread { that?.apply {
if(exitCardList) return@runOnUiThread activity?.runOnUiThread {
that?.apply { if(exitCardList) return@runOnUiThread
mydll?.removeView(victim) mydll?.removeView(victim)
mys?.scrollY = that.mys?.scrollY?.minus(cardHeight + 16)?:0 mys?.scrollY = mys?.scrollY?.minus(cardHeight + 16)?:0
} }
} }
rows[relativeIndex] = v rows[relativeIndex] = v
@@ -70,26 +72,29 @@ class CardList(
} }
@ExperimentalStdlibApi @ExperimentalStdlibApi
fun addCard(name: String, append: String? = null, head: String? = null, path: String? = null, chapterUUID: String? = null, pn: Int? = null, isFinish: Boolean = false, isNew: Boolean = false){ fun addCard(name: String, append: String? = null, head: String? = null, path: String? = null, chapterUUID: String? = null, pn: Int? = null, isFinish: Boolean = false, isNew: Boolean = false) {
if(exitCardList) return if (exitCardList) return
manageRow() manageRow()
that?.layoutInflater?.inflate(R.layout.card_book, that.mydll.ltbtn, false)?.let { that?.apply {
val card = it.cic layoutInflater.inflate(R.layout.card_book, mydll.ltbtn, false)?.let {
card.name = name val card = it.cic
card.append = append card.name = name
card.headImageUrl = head card.append = append
card.path = path card.headImageUrl = head
card.index = index - 1 card.path = path
card.chapterUUID = chapterUUID card.index = index - 1
card.pageNumber = pn card.chapterUUID = chapterUUID
card.isFinish = isFinish card.pageNumber = pn
card.isNew = isNew card.isFinish = isFinish
mainWeakReference?.get()?.runOnUiThread{ card.isNew = isNew
if(exitCardList) return@runOnUiThread activity?.runOnUiThread {
addCard(it) if (exitCardList) return@runOnUiThread
addCard(it)
}
} }
} }
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
@ExperimentalStdlibApi @ExperimentalStdlibApi
fun addCard(cardFrame: View) { fun addCard(cardFrame: View) {

View File

@@ -26,6 +26,12 @@ open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isT
override fun addPage(){ override fun addPage(){
super.addPage() super.addPage()
ad = AutoDownloadThread(subUrl) { ad = AutoDownloadThread(subUrl) {
if (it == null) {
activity?.runOnUiThread {
findNavController().popBackStack()
}
return@AutoDownloadThread
}
if(isRefresh){ if(isRefresh){
page = 0 page = 0
isRefresh = false isRefresh = false
@@ -128,7 +134,7 @@ open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isT
override fun onLoadFinish() { override fun onLoadFinish() {
super.onLoadFinish() super.onLoadFinish()
MainActivity.mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
if(ad?.exit != true) mypl.visibility = View.GONE if(ad?.exit != true) mypl.visibility = View.GONE
} }
} }

View File

@@ -39,7 +39,7 @@ open class StatusCardFlow(private val api: Int, nav: Int) : InfoCardLoader(R.lay
} }
Thread{ Thread{
Thread.sleep(400) Thread.sleep(400)
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }
@@ -54,14 +54,14 @@ open class StatusCardFlow(private val api: Int, nav: Int) : InfoCardLoader(R.lay
setOnClickListener { setOnClickListener {
sortValue = if (apim.rotation == 0f) { sortValue = if (apim.rotation == 0f) {
ObjectAnimator.ofFloat(apim, "rotation", 0f, 180f).setDuration(233).start() ObjectAnimator.ofFloat(apim, "rotation", 0f, 180f).setDuration(233).start()
1 3
} else { } else {
ObjectAnimator.ofFloat(apim, "rotation", 180f, 0f).setDuration(233).start() ObjectAnimator.ofFloat(apim, "rotation", 180f, 0f).setDuration(233).start()
0 2
} }
Thread { Thread {
Thread.sleep(400) Thread.sleep(400)
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }

View File

@@ -96,7 +96,7 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
i = p i = p
} }
setOnClickListener { setOnClickListener {
Reader.viewMangaAt(comic.name, i) Reader.viewMangaAt(comic.name, i, bookHandler!!.urlArray)
} }
} }
} }
@@ -125,7 +125,7 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
if (collect < 0) return@setOnClickListener if (collect < 0) return@setOnClickListener
Thread{ Thread{
val re = MainActivity.shelf?.del(collect) val re = MainActivity.shelf?.del(collect)
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
Toast.makeText(context, re, Toast.LENGTH_SHORT).show() Toast.makeText(context, re, Toast.LENGTH_SHORT).show()
if (re == "请求成功") { if (re == "请求成功") {
this@BookFragment.lbbsub.setText(R.string.button_sub) this@BookFragment.lbbsub.setText(R.string.button_sub)
@@ -137,7 +137,7 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
} }
Thread{ Thread{
val re = MainActivity.shelf?.add(comic.uuid) val re = MainActivity.shelf?.add(comic.uuid)
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
Toast.makeText(context, re, Toast.LENGTH_SHORT).show() Toast.makeText(context, re, Toast.LENGTH_SHORT).show()
if (re == "修改成功") { if (re == "修改成功") {
this@BookFragment.lbbsub.setText(R.string.button_sub_subscribed) this@BookFragment.lbbsub.setText(R.string.button_sub_subscribed)

View File

@@ -64,6 +64,8 @@ class BookHandler(private val th: WeakReference<BookFragment>, val path: String)
var collect: Int = -1 var collect: Int = -1
private val divider get() = that?.layoutInflater?.inflate(R.layout.div_h, that?.fbl, false) private val divider get() = that?.layoutInflater?.inflate(R.layout.div_h, that?.fbl, false)
var urlArray = arrayOf<String>()
override fun handleMessage(msg: Message) { override fun handleMessage(msg: Message) {
super.handleMessage(msg) super.handleMessage(msg)
when(msg.what){ when(msg.what){
@@ -242,10 +244,10 @@ class BookHandler(private val th: WeakReference<BookFragment>, val path: String)
if(exit) return@Thread if(exit) return@Thread
that?.apply { that?.apply {
book?.results?.apply { book?.results?.apply {
mainWeakReference?.get()?.runOnUiThread{ that?.activity?.runOnUiThread{
if(exit) return@runOnUiThread if(exit) return@runOnUiThread
ViewMangaActivity.fileArray = arrayOf() ViewMangaActivity.fileArray = arrayOf()
ViewMangaActivity.urlArray = arrayOf() urlArray = arrayOf()
ViewMangaActivity.uuidArray = arrayOf() ViewMangaActivity.uuidArray = arrayOf()
var i = 0 var i = 0
vols?.forEachIndexed { iv, v -> vols?.forEachIndexed { iv, v ->
@@ -258,7 +260,7 @@ class BookHandler(private val th: WeakReference<BookFragment>, val path: String)
var line: View? = null var line: View? = null
val last = v.results.list.size - 1 val last = v.results.list.size - 1
v.results.list.forEach { v.results.list.forEach {
ViewMangaActivity.urlArray += CMApi.getChapterInfoApiUrl( urlArray += CMApi.getChapterInfoApiUrl(
comic.path_word, comic.path_word,
it.uuid it.uuid
)?:"" )?:""
@@ -271,7 +273,7 @@ class BookHandler(private val th: WeakReference<BookFragment>, val path: String)
line?.lcc?.apply { line?.lcc?.apply {
lct.text = it.name lct.text = it.name
val index = i val index = i
setOnClickListener { Reader.viewMangaAt(comic.name, index) } setOnClickListener { Reader.viewMangaAt(comic.name, index, urlArray) }
} }
fbl?.addView(line) fbl?.addView(line)
} else { } else {
@@ -279,13 +281,13 @@ class BookHandler(private val th: WeakReference<BookFragment>, val path: String)
line?.l2cl?.apply { line?.l2cl?.apply {
lct.text = it.name lct.text = it.name
val index = i val index = i
setOnClickListener { Reader.viewMangaAt(comic.name, index) } setOnClickListener { Reader.viewMangaAt(comic.name, index, urlArray) }
} }
} }
} else line?.l2cr?.apply { } else line?.l2cr?.apply {
lct.text = it.name lct.text = it.name
val index = i val index = i
setOnClickListener { Reader.viewMangaAt(comic.name, index) } setOnClickListener { Reader.viewMangaAt(comic.name, index, urlArray) }
fbl?.addView(line) fbl?.addView(line)
line = null line = null
} }
@@ -368,7 +370,7 @@ class BookHandler(private val th: WeakReference<BookFragment>, val path: String)
c++ c++
} }
if (volumes.size == gpws.size) { if (volumes.size == gpws.size) {
mainWeakReference?.get()?.runOnUiThread { that?.activity?.runOnUiThread {
saveVolumes(volumes) saveVolumes(volumes)
} }
} }

View File

@@ -1,6 +1,8 @@
package top.fumiama.copymanga.ui.cardflow.history package top.fumiama.copymanga.ui.cardflow.history
import android.os.Bundle
import android.view.View import android.view.View
import androidx.navigation.fragment.findNavController
import kotlinx.android.synthetic.main.line_lazybooklines.* import kotlinx.android.synthetic.main.line_lazybooklines.*
import top.fumiama.copymanga.MainActivity import top.fumiama.copymanga.MainActivity
import top.fumiama.copymanga.template.ui.InfoCardLoader import top.fumiama.copymanga.template.ui.InfoCardLoader
@@ -11,4 +13,9 @@ import top.fumiama.dmzj.copymanga.R
class HistoryFragment : InfoCardLoader(R.layout.fragment_history, R.id.action_nav_history_to_nav_book, isHistoryBook = true) { class HistoryFragment : InfoCardLoader(R.layout.fragment_history, R.id.action_nav_history_to_nav_book, isHistoryBook = true) {
override fun getApiUrl() = override fun getApiUrl() =
getString(R.string.historyApiUrl).format(CMApi.myHostApiUrl, page * 21) getString(R.string.historyApiUrl).format(CMApi.myHostApiUrl, page * 21)
override fun onCreate(savedInstanceState: Bundle?) {
if (MainActivity.member?.hasLogin != true) findNavController().popBackStack()
super.onCreate(savedInstanceState)
}
} }

View File

@@ -65,7 +65,7 @@ class RankFragment : InfoCardLoader(R.layout.fragment_rank, R.id.action_nav_rank
sortValue = value sortValue = value
Thread{ Thread{
sleep(400) sleep(400)
if(ad?.exit != true) MainActivity.mainWeakReference?.get()?.runOnUiThread { if(ad?.exit != true) activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }

View File

@@ -1,6 +1,8 @@
package top.fumiama.copymanga.ui.cardflow.shelf package top.fumiama.copymanga.ui.cardflow.shelf
import android.animation.ObjectAnimator import android.animation.ObjectAnimator
import android.os.Bundle
import androidx.navigation.fragment.findNavController
import kotlinx.android.synthetic.main.anchor_popular.view.* import kotlinx.android.synthetic.main.anchor_popular.view.*
import kotlinx.android.synthetic.main.line_shelf.* import kotlinx.android.synthetic.main.line_shelf.*
import top.fumiama.copymanga.MainActivity import top.fumiama.copymanga.MainActivity
@@ -28,6 +30,11 @@ class ShelfFragment : InfoCardLoader(R.layout.fragment_shelf, R.id.action_nav_su
sortWay[sortValue] sortWay[sortValue]
) )
override fun onCreate(savedInstanceState: Bundle?) {
if (MainActivity.member?.hasLogin != true) findNavController().popBackStack()
super.onCreate(savedInstanceState)
}
override fun setListeners() { override fun setListeners() {
super.setListeners() super.setListeners()
setUpdate() setUpdate()
@@ -48,7 +55,7 @@ class ShelfFragment : InfoCardLoader(R.layout.fragment_shelf, R.id.action_nav_su
} }
Thread { Thread {
sleep(400) sleep(400)
MainActivity.mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }
@@ -69,7 +76,7 @@ class ShelfFragment : InfoCardLoader(R.layout.fragment_shelf, R.id.action_nav_su
} }
Thread { Thread {
sleep(400) sleep(400)
MainActivity.mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }
@@ -90,7 +97,7 @@ class ShelfFragment : InfoCardLoader(R.layout.fragment_shelf, R.id.action_nav_su
} }
Thread { Thread {
sleep(400) sleep(400)
MainActivity.mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }

View File

@@ -39,7 +39,7 @@ class SortFragment : InfoCardLoader(R.layout.fragment_sort, R.id.action_nav_sort
it?.let { it?.let {
filter = Gson().fromJson(it.inputStream().reader(), FilterStructure::class.java) filter = Gson().fromJson(it.inputStream().reader(), FilterStructure::class.java)
if(ad?.exit == true) return@AutoDownloadThread if(ad?.exit == true) return@AutoDownloadThread
mainWeakReference?.get()?.runOnUiThread{ activity?.runOnUiThread{
if(ad?.exit != true) setClasses() if(ad?.exit != true) setClasses()
} }
} }
@@ -59,7 +59,7 @@ class SortFragment : InfoCardLoader(R.layout.fragment_sort, R.id.action_nav_sort
} }
Thread{ Thread{
sleep(400) sleep(400)
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }
@@ -83,7 +83,7 @@ class SortFragment : InfoCardLoader(R.layout.fragment_sort, R.id.action_nav_sort
it.apt.text = "全部" it.apt.text = "全部"
Thread{ Thread{
sleep(400) sleep(400)
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }
@@ -98,7 +98,7 @@ class SortFragment : InfoCardLoader(R.layout.fragment_sort, R.id.action_nav_sort
region = i region = i
Thread{ Thread{
sleep(400) sleep(400)
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }
@@ -125,7 +125,7 @@ class SortFragment : InfoCardLoader(R.layout.fragment_sort, R.id.action_nav_sort
it.apt.text = "全部" it.apt.text = "全部"
Thread{ Thread{
sleep(400) sleep(400)
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }
@@ -140,7 +140,7 @@ class SortFragment : InfoCardLoader(R.layout.fragment_sort, R.id.action_nav_sort
theme = i theme = i
Thread{ Thread{
sleep(400) sleep(400)
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }
@@ -167,7 +167,7 @@ class SortFragment : InfoCardLoader(R.layout.fragment_sort, R.id.action_nav_sort
} }
Thread { Thread {
sleep(400) sleep(400)
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
reset() reset()
addPage() addPage()
} }

View File

@@ -25,9 +25,10 @@ class TopicFragment : InfoCardLoader(R.layout.fragment_topic, R.id.action_nav_to
val r = inputStream().reader() val r = inputStream().reader()
val topic = Gson().fromJson(r, TopicStructure::class.java) val topic = Gson().fromJson(r, TopicStructure::class.java)
topic?.apply { topic?.apply {
if(ad?.exit == true) return@AutoDownloadThread if(ad?.exit != false) return@AutoDownloadThread
mainWeakReference?.get()?.let { activity?.let {
if(ad?.exit != true) it.runOnUiThread { it.runOnUiThread {
if(ad?.exit != false) return@runOnUiThread
it.toolbar.title = results.title it.toolbar.title = results.title
ftttime.text = results.datetime_created ftttime.text = results.datetime_created
fttintro.text = results.intro fttintro.text = results.intro

View File

@@ -6,7 +6,6 @@ import android.util.Log
import android.view.View import android.view.View
import com.google.gson.Gson import com.google.gson.Gson
import kotlinx.android.synthetic.main.fragment_dlcomic.* import kotlinx.android.synthetic.main.fragment_dlcomic.*
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
import top.fumiama.copymanga.json.ChapterStructure import top.fumiama.copymanga.json.ChapterStructure
import top.fumiama.copymanga.json.VolumeStructure import top.fumiama.copymanga.json.VolumeStructure
import top.fumiama.copymanga.template.http.AutoDownloadThread import top.fumiama.copymanga.template.http.AutoDownloadThread
@@ -31,7 +30,7 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
arguments?.getString("name")?.let { arguments?.getString("name")?.let {
Thread{ Thread{
sleep(600) sleep(600)
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
start2load(loadFromJson(), true, loadGroupsFromFile(File(home, "$it/grps.json"))) start2load(loadFromJson(), true, loadGroupsFromFile(File(home, "$it/grps.json")))
} }
}.start() }.start()
@@ -51,6 +50,7 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
//mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) } //mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) }
handler?.downloading = false handler?.downloading = false
handler?.mangaDlTools?.exit = true handler?.mangaDlTools?.exit = true
handler?.dl?.dismiss()
ads.forEach { ads.forEach {
it.exit = true it.exit = true
} }
@@ -139,7 +139,7 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
c++ c++
} }
if (volumes.size == gpws.size) { if (volumes.size == gpws.size) {
mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
start2load(volumes) start2load(volumes)
} }
} }

View File

@@ -39,13 +39,13 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragme
isOld = true isOld = true
} }
private var isOld = false private var isOld = false
var complete = false private var complete = false
private val that get() = th.get() private val that get() = th.get()
private val toolsBox = UITools(th.get()?.context) private val toolsBox = UITools(th.get()?.context)
private var btnNumPerRow = 4 private var btnNumPerRow = 4
private var btnw = 0 private var btnw = 0
private var cdwnWidth = 0 private var cdwnWidth = 0
private var dl: Dialog? = null var dl: Dialog? = null
private var haveSElectAll = false private var haveSElectAll = false
private var checkedChapter = 0 private var checkedChapter = 0
private val dldChapter: Int get() = finishMap.count { p -> return@count p == true } private val dldChapter: Int get() = finishMap.count { p -> return@count p == true }
@@ -56,6 +56,7 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragme
private var multiSelect = false private var multiSelect = false
private var finishMap = arrayOf<Boolean?>() private var finishMap = arrayOf<Boolean?>()
var downloading = false var downloading = false
private var urlArray = arrayOf<String>()
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun handleMessage(msg: Message) { override fun handleMessage(msg: Message) {
@@ -104,7 +105,7 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragme
setComponents() setComponents()
if(isOld) analyzeOldStructure() if(isOld) analyzeOldStructure()
else Thread{ else Thread{
ViewMangaActivity.urlArray = arrayOf() urlArray = arrayOf()
ViewMangaActivity.fileArray = arrayOf() ViewMangaActivity.fileArray = arrayOf()
ViewMangaActivity.uuidArray = arrayOf() ViewMangaActivity.uuidArray = arrayOf()
vols.forEachIndexed { i, vol -> vols.forEachIndexed { i, vol ->
@@ -225,7 +226,7 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragme
} }
mangaDlTools.onDownloadedListener = object :MangaDlTools.OnDownloadedListener{ mangaDlTools.onDownloadedListener = object :MangaDlTools.OnDownloadedListener{
override fun handleMessage(index: Int, isSuccess: Boolean) { override fun handleMessage(index: Int, isSuccess: Boolean) {
mainWeakReference?.get()?.runOnUiThread { that?.activity?.runOnUiThread {
if(isSuccess) onZipDownloadFinish(index) if(isSuccess) onZipDownloadFinish(index)
else onZipDownloadFailure(index) else onZipDownloadFailure(index)
} }
@@ -237,7 +238,7 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragme
total: Int, total: Int,
isSuccess: Boolean isSuccess: Boolean
) { ) {
mainWeakReference?.get()?.runOnUiThread { that?.activity?.runOnUiThread {
if(isSuccess) { if(isSuccess) {
tbtnlist[index].text = if(downloaded == 0 && total == 0) tbtnlist[index].chapterName else "$downloaded/$total" tbtnlist[index].text = if(downloaded == 0 && total == 0) tbtnlist[index].chapterName else "$downloaded/$total"
} else { } else {
@@ -312,7 +313,7 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragme
} }
private fun addTbtn(data: Array<String>){ private fun addTbtn(data: Array<String>){
addTbtn(data[0], data[1], data[2], data[3]) addTbtn(data[0], data[1], data[2], data[3])
ViewMangaActivity.urlArray += data[3] urlArray += data[3]
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun addTbtn(title: String, uuid: String, caption: String, url: String) { private fun addTbtn(title: String, uuid: String, caption: String, url: String) {
@@ -381,7 +382,9 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragme
ViewMangaActivity.position = it.tbtn.index ViewMangaActivity.position = it.tbtn.index
dl?.show() dl?.show()
that?.startActivity(Intent(that?.context, ViewMangaActivity::class.java)) val intent = Intent(that?.context, ViewMangaActivity::class.java)
intent.putExtra("urlArray", urlArray)
that?.startActivity(intent)
}, null, null }, null, null
) )
} }

View File

@@ -12,8 +12,8 @@ import kotlinx.android.synthetic.main.app_bar_main.*
import kotlinx.android.synthetic.main.fragment_download.* import kotlinx.android.synthetic.main.fragment_download.*
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
import top.fumiama.copymanga.template.general.NoBackRefreshFragment import top.fumiama.copymanga.template.general.NoBackRefreshFragment
import top.fumiama.copymanga.tools.ui.Navigate
import top.fumiama.copymanga.tools.file.FileUtils import top.fumiama.copymanga.tools.file.FileUtils
import top.fumiama.copymanga.tools.ui.Navigate
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
import top.fumiama.copymanga.ui.vm.ViewMangaActivity import top.fumiama.copymanga.ui.vm.ViewMangaActivity
import top.fumiama.dmzj.copymanga.R import top.fumiama.dmzj.copymanga.R
@@ -60,7 +60,7 @@ class DownloadFragment: NoBackRefreshFragment(R.layout.fragment_download) {
ViewMangaActivity.comicName = it[position] ViewMangaActivity.comicName = it[position]
ViewMangaActivity.position = position ViewMangaActivity.position = position
ViewMangaActivity.fileArray = it.map { File(cd, it) }.toTypedArray() ViewMangaActivity.fileArray = it.map { File(cd, it) }.toTypedArray()
ViewMangaActivity.urlArray = Array(it.size) {return@Array ""} // ViewMangaActivity.urlArray = Array(it.size) {return@Array ""}
startActivity(Intent(context, ViewMangaActivity::class.java)) startActivity(Intent(context, ViewMangaActivity::class.java))
} }
} }

View File

@@ -6,6 +6,7 @@ import android.util.Log
import android.view.View import android.view.View
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.preference.PreferenceManager
import kotlinx.android.synthetic.main.line_lazybooklines.* import kotlinx.android.synthetic.main.line_lazybooklines.*
import top.fumiama.copymanga.MainActivity import top.fumiama.copymanga.MainActivity
import top.fumiama.copymanga.manga.Reader import top.fumiama.copymanga.manga.Reader
@@ -28,9 +29,12 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl
private var isReverse = false private var isReverse = false
private var isContentChanged = false private var isContentChanged = false
private var exit = false private var exit = false
private var showAll = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
wn = WeakReference(this) wn = WeakReference(this)
val settingsPref = MainActivity.mainWeakReference?.get()?.let { PreferenceManager.getDefaultSharedPreferences(it) }
showAll = settingsPref?.getBoolean("settings_cat_md_sw_show_0m_manga", false)?:false
} }
override fun onPause() { override fun onPause() {
@@ -65,6 +69,11 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl
Log.d("MyNDF", "reversed...") Log.d("MyNDF", "reversed...")
sortedBookList = sortedBookList?.asReversed() sortedBookList = sortedBookList?.asReversed()
} }
if (!showAll) {
sortedBookList = sortedBookList?.filter {
return@filter FileUtils.sizeOf(it) / 1048576 > 0
}
}
isContentChanged = false isContentChanged = false
} }
Log.d("MyNDF", "Start drawing cards") Log.d("MyNDF", "Start drawing cards")
@@ -124,7 +133,7 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl
.setTitle("提示").setPositiveButton(android.R.string.ok) { _, _ -> .setTitle("提示").setPositiveButton(android.R.string.ok) { _, _ ->
if (chosenFile.exists()) Thread { if (chosenFile.exists()) Thread {
FileUtils.recursiveRemove(chosenFile) FileUtils.recursiveRemove(chosenFile)
MainActivity.mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
it.visibility = View.INVISIBLE it.visibility = View.INVISIBLE
} }
}.start() }.start()
@@ -175,7 +184,7 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl
override fun onLoadFinish() { override fun onLoadFinish() {
super.onLoadFinish() super.onLoadFinish()
MainActivity.mainWeakReference?.get()?.runOnUiThread { activity?.runOnUiThread {
mypl.visibility = View.GONE mypl.visibility = View.GONE
} }
} }

View File

@@ -242,7 +242,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
fun refresh(q: CharSequence) { fun refresh(q: CharSequence) {
query = q query = q
mainWeakReference?.get()?.apply { activity?.apply {
AutoDownloadThread(getString(R.string.searchApiUrl).format(CMApi.myHostApiUrl, 0, query, type)) { AutoDownloadThread(getString(R.string.searchApiUrl).format(CMApi.myHostApiUrl, 0, query, type)) {
results = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java) results = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java)
count = results?.results?.total?:0 count = results?.results?.total?:0

View File

@@ -17,7 +17,12 @@ import java.lang.Thread.sleep
class SettingsFragment: PreferenceFragmentCompat() { class SettingsFragment: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.pref_setting, rootKey) Thread {
sleep(300)
activity?.runOnUiThread {
setPreferencesFromResource(R.xml.pref_setting, rootKey)
}
}.start()
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

View File

@@ -4,11 +4,10 @@ import android.widget.Toast
import top.fumiama.copymanga.manga.Reader import top.fumiama.copymanga.manga.Reader
import top.fumiama.copymanga.ui.vm.ViewMangaActivity.Companion.comicName import top.fumiama.copymanga.ui.vm.ViewMangaActivity.Companion.comicName
import top.fumiama.copymanga.ui.vm.ViewMangaActivity.Companion.position import top.fumiama.copymanga.ui.vm.ViewMangaActivity.Companion.position
import top.fumiama.copymanga.ui.vm.ViewMangaActivity.Companion.urlArray
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
class PagesManager(w: WeakReference<ViewMangaActivity>) { class PagesManager(private val w: WeakReference<ViewMangaActivity>) {
val v = w.get() val v get() = w.get()
private var isEndL = false private var isEndL = false
private var isEndR = false private var isEndR = false
@ExperimentalStdlibApi @ExperimentalStdlibApi
@@ -22,8 +21,12 @@ class PagesManager(w: WeakReference<ViewMangaActivity>) {
private fun judgePrevious() = (v?.pageNum ?: 0) > 1 private fun judgePrevious() = (v?.pageNum ?: 0) > 1
private fun judgeNext() = (v?.pageNum ?: 0) < (v?.realCount ?: 0) private fun judgeNext() = (v?.pageNum ?: 0) < (v?.realCount ?: 0)
@ExperimentalStdlibApi @ExperimentalStdlibApi
fun toPage(goNext:Boolean){ fun toPage(goNext:Boolean) {
if (v?.clicked == false) { v?.let { v ->
if (v.clicked) {
v.hideObjs()
return
}
if (if(goNext)judgeNext() else judgePrevious()) { if (if(goNext)judgeNext() else judgePrevious()) {
if(goNext) { if(goNext) {
v.scrollForward() v.scrollForward()
@@ -32,36 +35,36 @@ class PagesManager(w: WeakReference<ViewMangaActivity>) {
v.scrollBack() v.scrollBack()
isEndL = false isEndL = false
} }
} else { return
val chapterPosition = position + if(goNext) 1 else -1 }
urlArray.let { val chapterPosition = position + if(goNext) 1 else -1
if(chapterPosition >= 0 && chapterPosition < it.size) it[chapterPosition].let { if (v.urlArray.isNotEmpty()) {
if (if(goNext) isEndR else isEndL) { if(chapterPosition >= 0 && chapterPosition < v.urlArray.size) v.urlArray[chapterPosition].let {
//if(v.zipFirst) intent.putExtra("callFrom", "zipFirst") if (if(goNext) isEndR else isEndL) {
v.tt.canDo = false //if(v.zipFirst) intent.putExtra("callFrom", "zipFirst")
//ViewMangaActivity.dlhandler = null v.tt.canDo = false
comicName?.let { it1 -> Reader.viewMangaAt(it1, chapterPosition, goNext) } //ViewMangaActivity.dlhandler = null
v.finish() comicName?.let { it1 -> Reader.viewMangaAt(it1, chapterPosition, v.urlArray, goNext) }
} else { v.finish()
val hint = if(goNext) '下' else '上' return
Toast.makeText( }
v.applicationContext, val hint = if(goNext) '下' else '上'
"再次按下加载${hint}一章", Toast.makeText(
Toast.LENGTH_SHORT
).show()
if(goNext) isEndR = true
else isEndL = true
}
} else Toast.makeText(
v.applicationContext, v.applicationContext,
"已经到头了~", "再次按下加载${hint}一章",
Toast.LENGTH_SHORT Toast.LENGTH_SHORT
).show() ).show()
} if(goNext) isEndR = true
else isEndL = true
} else Toast.makeText(
v.applicationContext,
"已经到头了~",
Toast.LENGTH_SHORT
).show()
} }
} else v?.hideObjs() }
} }
fun manageInfo(){ fun manageInfo(){
if (v?.clicked == false) v.showObjs() else v?.hideObjs() if (v?.clicked == false) v?.showObjs() else v?.hideObjs()
} }
} }

View File

@@ -35,7 +35,7 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
private val wv = WeakReference(activity) private val wv = WeakReference(activity)
private val infcard = wv.get()?.infcard private val infcard = wv.get()?.infcard
private var infcShowed = false private var infcShowed = false
private val dl = wv.get()?.let { val dl = activity.let {
val re = Dialog(it) val re = Dialog(it)
re.setContentView(R.layout.dialog_unzipping) re.setContentView(R.layout.dialog_unzipping)
re re
@@ -64,56 +64,56 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
override fun handleMessage(msg: Message) { override fun handleMessage(msg: Message) {
super.handleMessage(msg) super.handleMessage(msg)
when (msg.what) { when (msg.what) {
1 -> if (infcShowed) { HIDE_INFO_CARD -> if (infcShowed) {
hideInfCard(); infcShowed = false hideInfCard(); infcShowed = false
} }
2 -> if (!infcShowed) { SHOW_INFO_CARD -> if (!infcShowed) {
showInfCard(); infcShowed = true showInfCard(); infcShowed = true
} }
3 -> infcShowed = if (infcShowed) { TRIGGER_INFO_CARD -> infcShowed = if (infcShowed) {
hideInfCard(); false hideInfCard(); false
} else { } else {
showInfCard(); true showInfCard(); true
} }
4 -> { LOAD_IMG_ON -> {
val simg = msg.obj as ScaleImageView val simg = msg.obj as ScaleImageView
wv.get()?.loadImgOn(simg, msg.arg1, msg.arg2) wv.get()?.loadImgOn(simg, msg.arg1, msg.arg2)
//simg.setHeight2FitImgWidth() //simg.setHeight2FitImgWidth()
//if(msg.arg2 == 1) sendEmptyMessage(8) //if(msg.arg2 == 1) sendEmptyMessage(DELAYED_RESTORE_PAGE_NUMBER)
} }
5 -> wv.get()?.clearImgOn(msg.obj as ScaleImageView) CLEAR_IMG_ON -> wv.get()?.clearImgOn(msg.obj as ScaleImageView)
6 -> wv.get()?.prepareLastPage(msg.arg1, msg.arg2) PREPARE_LAST_PAGE -> wv.get()?.prepareLastPage(msg.arg1, msg.arg2)
7 -> dl?.show() DIALOG_SHOW -> dl.show()
8 -> Thread{ DELAYED_RESTORE_PAGE_NUMBER -> Thread{
sleep(233) sleep(233)
sendEmptyMessage(13) sendEmptyMessage(RESTORE_PAGE_NUMBER)
}.start() }.start()
9 -> loadScrollMode(msg.arg1) LOAD_ITEM_SCROLL_MODE -> loadScrollMode(msg.arg1)
10 -> loadScrollMode() LOAD_SCROLL_MODE -> loadScrollMode()
11 -> loadImagesIntoLine(msg.arg1) LOAD_ITEM_IMAGES_INTO_LINE -> loadImagesIntoLine(msg.arg1)
12 -> loadImagesIntoLine() LOAD_IMAGES_INTO_LINE -> loadImagesIntoLine()
13 -> { RESTORE_PAGE_NUMBER -> {
dl?.hide() sendEmptyMessage(DIALOG_HIDE)
wv.get()?.restorePN() wv.get()?.restorePN()
} }
14 -> { LOAD_PAGE_FROM_ITEM -> {
val item = (pn - 1) / (wv.get()?.verticalLoadMaxCount?:20) * (wv.get()?.verticalLoadMaxCount?:20) val item = (pn - 1) / (wv.get()?.verticalLoadMaxCount?:20) * (wv.get()?.verticalLoadMaxCount?:20)
loadScrollMode(item) loadScrollMode(item)
Log.d("MyVMH", "Load page from $item") Log.d("MyVMH", "Load page from $item")
} }
15 -> dl?.hide() DIALOG_HIDE -> dl.hide()
16 -> if (infcShowed) { HIDE_INFO_CARD_FULL -> if (infcShowed) {
hideInfCardFull(); infcShowed = false hideInfCardFull(); infcShowed = false
} }
17 -> if (!infcShowed) { SHOW_INFO_CARD_FULL -> if (!infcShowed) {
showInfCardFull(); infcShowed = true showInfCardFull(); infcShowed = true
} }
18 -> infcShowed = if (infcShowed) { TRIGGER_INFO_CARD_FULL -> infcShowed = if (infcShowed) {
hideInfCardFull(); false hideInfCardFull(); false
} else { } else {
showInfCardFull(); true showInfCardFull(); true
} }
22 -> wv.get()?.idtime?.text = SimpleDateFormat("HH:mm").format(Date()) + week + wv.get()?.toolsBox?.netInfo SET_NET_INFO -> wv.get()?.idtime?.text = SimpleDateFormat("HH:mm").format(Date()) + week + wv.get()?.toolsBox?.netInfo
} }
} }
override fun getGsonItem() = manga override fun getGsonItem() = manga
@@ -161,7 +161,7 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
} }
} }
true true
}catch (e: Exception){ } catch (e: Exception){
e.printStackTrace() e.printStackTrace()
//wv.get()?.toolsBox?.toastError("读取本地章节信息失败") //wv.get()?.toolsBox?.toastError("读取本地章节信息失败")
false false
@@ -183,25 +183,25 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
val notFull = item + maxCount > count val notFull = item + maxCount > count
val loadCount = (if(notFull) count - item else maxCount) - 1 val loadCount = (if(notFull) count - item else maxCount) - 1
Log.d("MyVMH", "count: $count, loadCount: $loadCount, notFull: $notFull") Log.d("MyVMH", "count: $count, loadCount: $loadCount, notFull: $notFull")
if(loadCount >= 0) for(i in 0..loadCount) obtainMessage(4,item + i, if(i == loadCount - 1) 1 else 0, wv.get()?.scrollImages?.get(i)).sendToTarget() if(loadCount >= 0) for(i in 0..loadCount) obtainMessage(LOAD_IMG_ON,item + i, if(i == loadCount - 1) 1 else 0, wv.get()?.scrollImages?.get(i)).sendToTarget()
else sendEmptyMessage(8) else sendEmptyMessage(DELAYED_RESTORE_PAGE_NUMBER)
if(notFull) obtainMessage(6, loadCount + 1, maxCount).sendToTarget() if(notFull) obtainMessage(PREPARE_LAST_PAGE, loadCount + 1, maxCount).sendToTarget()
wv.get()?.updateSeekBar() wv.get()?.updateSeekBar()
} }
} }
}//.start() }//.start()
private fun loadScrollMode() { private fun loadScrollMode() {
sendEmptyMessage(7) sendEmptyMessage(DIALOG_SHOW)
//sleep(233) //sleep(233)
sendEmptyMessage(12) sendEmptyMessage(LOAD_IMAGES_INTO_LINE)
} }
private fun loadScrollMode(item: Int) { private fun loadScrollMode(item: Int) {
sendEmptyMessage(7) sendEmptyMessage(DIALOG_SHOW)
//sleep(233) //sleep(233)
Log.d("MyVMH", "loadImgsIntoLine($item)") Log.d("MyVMH", "loadImgsIntoLine($item)")
obtainMessage(11, item, 0).sendToTarget() obtainMessage(LOAD_ITEM_IMAGES_INTO_LINE, item, 0).sendToTarget()
} }
private fun showInfCard() { private fun showInfCard() {
@@ -224,4 +224,27 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
ObjectAnimator.ofFloat(infcard?.idc, "alpha", 0.8F, 0.0F).setDuration(233).start() ObjectAnimator.ofFloat(infcard?.idc, "alpha", 0.8F, 0.0F).setDuration(233).start()
ObjectAnimator.ofFloat(infcard, "translationY", 0F, delta).setDuration(233).start() ObjectAnimator.ofFloat(infcard, "translationY", 0F, delta).setDuration(233).start()
} }
companion object {
const val HIDE_INFO_CARD = 1
const val SHOW_INFO_CARD = 2
const val TRIGGER_INFO_CARD = 3
const val LOAD_IMG_ON = 4
const val CLEAR_IMG_ON = 5
const val PREPARE_LAST_PAGE = 6
const val DIALOG_SHOW = 7
const val DELAYED_RESTORE_PAGE_NUMBER = 8
const val LOAD_ITEM_SCROLL_MODE = 9
const val LOAD_SCROLL_MODE = 10
const val LOAD_ITEM_IMAGES_INTO_LINE = 11
const val LOAD_IMAGES_INTO_LINE = 12
const val RESTORE_PAGE_NUMBER = 13
const val LOAD_PAGE_FROM_ITEM = 14
const val DIALOG_HIDE = 15
const val HIDE_INFO_CARD_FULL = 16
const val SHOW_INFO_CARD_FULL = 17
const val TRIGGER_INFO_CARD_FULL = 18
const val SET_NET_INFO = 22
}
} }

View File

@@ -20,6 +20,7 @@ import androidx.core.content.edit
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import com.afollestad.materialdialogs.utils.MDUtil.getStringArray
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.load.model.GlideUrl import com.bumptech.glide.load.model.GlideUrl
import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.target.SimpleTarget
@@ -95,6 +96,8 @@ class ViewMangaActivity : TitleActivityTemplate() {
private var fullyHideInfo = false private var fullyHideInfo = false
val realCount get() = if(cut) indexMap.size else count val realCount get() = if(cut) indexMap.size else count
var urlArray = arrayOf<String>()
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_viewmanga) setContentView(R.layout.activity_viewmanga)
@@ -103,6 +106,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
va = WeakReference(this) va = WeakReference(this)
//dlZip2View = intent.getStringExtra("callFrom") == "Dl" || p["dlZip2View"] == "true" //dlZip2View = intent.getStringExtra("callFrom") == "Dl" || p["dlZip2View"] == "true"
//zipFirst = intent.getStringExtra("callFrom") == "zipFirst" //zipFirst = intent.getStringExtra("callFrom") == "zipFirst"
intent.getStringArrayExtra("urlArray")?.let { urlArray = it }
cut = pb["useCut"] cut = pb["useCut"]
r2l = pb["r2l"] r2l = pb["r2l"]
verticalLoadMaxCount = settingsPref?.getInt("settings_cat_vm_sb_vertical_max", 20)?.let { if(it > 0) it else 20 }?:20 verticalLoadMaxCount = settingsPref?.getInt("settings_cat_vm_sb_vertical_max", 20)?.let { if(it > 0) it else 20 }?:20
@@ -111,7 +115,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
//url = intent.getStringExtra("url") //url = intent.getStringExtra("url")
handler = VMHandler(this, if(urlArray.isNotEmpty()) urlArray[position] else "") handler = VMHandler(this, if(urlArray.isNotEmpty()) urlArray[position] else "")
settingsPref?.getInt("settings_cat_vm_sb_quality", 100)?.let { q = if (it > 0) it else 100 } settingsPref?.getInt("settings_cat_vm_sb_quality", 100)?.let { q = if (it > 0) it else 100 }
tt = TimeThread(handler, 22) tt = TimeThread(handler, VMHandler.SET_NET_INFO)
tt.canDo = true tt.canDo = true
tt.start() tt.start()
volTurnPage = settingsPref?.getBoolean("settings_cat_vm_sw_vol_turn", false)?:false volTurnPage = settingsPref?.getBoolean("settings_cat_vm_sw_vol_turn", false)?:false
@@ -213,7 +217,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
getImgUrlArray()?.apply { getImgUrlArray()?.apply {
if(cut) { if(cut) {
Log.d("MyVM", "is cut, load all pages...") Log.d("MyVM", "is cut, load all pages...")
handler.sendEmptyMessage(7) //showDl handler.sendEmptyMessage(VMHandler.DIALOG_SHOW) //showDl
isCut = BooleanArray(size) isCut = BooleanArray(size)
val analyzedCnt = BooleanArray(size) val analyzedCnt = BooleanArray(size)
forEachIndexed{ i, it -> forEachIndexed{ i, it ->
@@ -364,7 +368,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
imgView.setImageBitmap(bitmap2load) imgView.setImageBitmap(bitmap2load)
if(isVertical){ if(isVertical){
imgView.setHeight2FitImgWidth() imgView.setHeight2FitImgWidth()
if (!isPlaceholder && isLast == 1) handler.sendEmptyMessage(8) if (!isPlaceholder && isLast == 1) handler.sendEmptyMessage(VMHandler.DELAYED_RESTORE_PAGE_NUMBER)
} }
} }
} }
@@ -430,7 +434,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
} }
fun prepareLastPage(loadCount: Int, maxCount: Int){ fun prepareLastPage(loadCount: Int, maxCount: Int){
for (i in loadCount until maxCount) handler.obtainMessage(5, scrollImages[i]).sendToTarget() for (i in loadCount until maxCount) handler.obtainMessage(VMHandler.CLEAR_IMG_ON, scrollImages[i]).sendToTarget()
// handler.dl?.hide() // handler.dl?.hide()
} }
@@ -465,7 +469,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
infoDrawerDelta = position.toFloat() infoDrawerDelta = position.toFloat()
infcard.translationY = infoDrawerDelta infcard.translationY = infoDrawerDelta
Log.d("MyVM", "Set info drawer delta to $infoDrawerDelta") Log.d("MyVM", "Set info drawer delta to $infoDrawerDelta")
handler.sendEmptyMessage(if (fullyHideInfo) 16 else 1) handler.sendEmptyMessage(if (fullyHideInfo) 16 else VMHandler.HIDE_INFO_CARD)
} }
@ExperimentalStdlibApi @ExperimentalStdlibApi
@@ -575,7 +579,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
}) })
isearch.setImageResource(R.drawable.ic_author) isearch.setImageResource(R.drawable.ic_author)
isearch.setOnClickListener { isearch.setOnClickListener {
handler.sendEmptyMessage(if (fullyHideInfo) 18 else 3) // trigger info card handler.sendEmptyMessage(if (fullyHideInfo) VMHandler.TRIGGER_INFO_CARD_FULL else VMHandler.TRIGGER_INFO_CARD) // trigger info card
} }
} }
@@ -602,7 +606,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
vp.visibility = View.GONE vp.visibility = View.GONE
vsp.visibility = View.VISIBLE vsp.visibility = View.VISIBLE
initImgList() initImgList()
handler.sendEmptyMessage(if(isPnValid)14 else 10) handler.sendEmptyMessage(if(isPnValid) VMHandler.LOAD_PAGE_FROM_ITEM else VMHandler.LOAD_SCROLL_MODE)
psivs.setOnScrollChangeListener { _, _, scrollY, _, _ -> psivs.setOnScrollChangeListener { _, _, scrollY, _, _ ->
isInScroll = true isInScroll = true
if(!isInSeek){ if(!isInSeek){
@@ -624,7 +628,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
isInScroll = false isInScroll = false
if(isVertical && (pageNum-1) % verticalLoadMaxCount == 0){ if(isVertical && (pageNum-1) % verticalLoadMaxCount == 0){
Log.d("MyVM", "Do scroll back, isVertical: $isVertical, pageNum: $pageNum") Log.d("MyVM", "Do scroll back, isVertical: $isVertical, pageNum: $pageNum")
handler.obtainMessage(9, currentItem - verticalLoadMaxCount, 0).sendToTarget() //loadImgsIntoLine(currentItem - verticalLoadMaxCount) handler.obtainMessage(VMHandler.LOAD_ITEM_SCROLL_MODE, currentItem - verticalLoadMaxCount, 0).sendToTarget() //loadImgsIntoLine(currentItem - verticalLoadMaxCount)
psivl.postDelayed({ pageNum-- }, 233) psivl.postDelayed({ pageNum-- }, 233)
}else pageNum-- }else pageNum--
} }
@@ -632,7 +636,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
fun scrollForward() { fun scrollForward() {
isInScroll = false isInScroll = false
pageNum++ pageNum++
if(isVertical && (pageNum-1) % verticalLoadMaxCount == 0) handler.sendEmptyMessage(10) if(isVertical && (pageNum-1) % verticalLoadMaxCount == 0) handler.sendEmptyMessage(VMHandler.LOAD_SCROLL_MODE)
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
@@ -649,6 +653,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
tt.canDo = false tt.canDo = false
destroy = true destroy = true
dlhandler = null dlhandler = null
handler.dl.dismiss()
handler.destroy() handler.destroy()
super.onDestroy() super.onDestroy()
} }
@@ -721,13 +726,12 @@ class ViewMangaActivity : TitleActivityTemplate() {
infseek.visibility = View.GONE infseek.visibility = View.GONE
isearch.visibility = View.GONE isearch.visibility = View.GONE
}, 300) }, 300)
handler.sendEmptyMessage(if (fullyHideInfo) 16 else 1) handler.sendEmptyMessage(if (fullyHideInfo) VMHandler.HIDE_INFO_CARD_FULL else VMHandler.HIDE_INFO_CARD)
} }
companion object { companion object {
var comicName: String? = null var comicName: String? = null
var uuidArray = arrayOf<String>() var uuidArray = arrayOf<String>()
var urlArray = arrayOf<String>()
var fileArray = arrayOf<File>() var fileArray = arrayOf<File>()
var position = 0 var position = 0
var zipFile: File? = null var zipFile: File? = null

View File

@@ -30,7 +30,7 @@ object Update {
val msg = kanban[BuildConfig.VERSION_CODE] val msg = kanban[BuildConfig.VERSION_CODE]
if(msg != "null") { if(msg != "null") {
val verNum = msg.substringBefore('\n').toIntOrNull() val verNum = msg.substringBefore('\n').toIntOrNull()
val skipNum = activity.getPreferences(MODE_PRIVATE).getInt("skipVersion", 0) val skipNum = getPreferences(MODE_PRIVATE).getInt("skipVersion", 0)
Log.d("MyUP", "Ver:$verNum, skip: $skipNum") Log.d("MyUP", "Ver:$verNum, skip: $skipNum")
if(verNum != null) { if(verNum != null) {
@@ -57,7 +57,7 @@ object Update {
} }
val f = File(externalCacheDir, "new.apk") val f = File(externalCacheDir, "new.apk")
f.writeBytes(it) f.writeBytes(it)
install(f, activity) install(f, this)
} else runOnUiThread { } else runOnUiThread {
Toast.makeText(this, "文件损坏", Toast.LENGTH_SHORT).show() Toast.makeText(this, "文件损坏", Toast.LENGTH_SHORT).show()
info.dismiss() info.dismiss()
@@ -66,7 +66,7 @@ object Update {
} }
}.start() }.start()
}, { }, {
activity.getPreferences(MODE_PRIVATE).edit { getPreferences(MODE_PRIVATE).edit {
putInt("skipVersion", verNum) putInt("skipVersion", verNum)
apply() apply()
} }

View File

@@ -10,6 +10,7 @@ import top.fumiama.copymanga.tools.http.DownloadTools
import top.fumiama.dmzj.copymanga.R import top.fumiama.dmzj.copymanga.R
class Member(private val pref: SharedPreferences, private val getString: (Int) -> String) { class Member(private val pref: SharedPreferences, private val getString: (Int) -> String) {
val hasLogin: Boolean get() = pref.getString("token", "")?.isNotEmpty()?:false
fun login(username: String, pwd: String, salt: Int): LoginInfoStructure { fun login(username: String, pwd: String, salt: Int): LoginInfoStructure {
try { try {
CMApi.getLoginConnection(username, pwd, salt)?.apply { CMApi.getLoginConnection(username, pwd, salt)?.apply {

View File

@@ -139,6 +139,11 @@
<string name="settings_cat_vm_sb_quality">图片质量</string> <string name="settings_cat_vm_sb_quality">图片质量</string>
<string name="settings_cat_vm_sm_quality">默认为100</string> <string name="settings_cat_vm_sm_quality">默认为100</string>
<string name="settings_cat_md">漫画下载</string>
<string name="settings_cat_md_sw_show_0m_manga">显示未下载漫画</string>
<string name="settings_cat_md_sm_show_0m_manga">打开后将在我的下载显示所有浏览过详情页的漫画,旧版下载永远全部显示</string>
<string name="login_null_username">用户名为空</string> <string name="login_null_username">用户名为空</string>
<string name="login_null_pwd">密码为空</string> <string name="login_null_pwd">密码为空</string>

View File

@@ -82,4 +82,15 @@
app:summary="@string/settings_cat_vm_sm_quality" app:summary="@string/settings_cat_vm_sm_quality"
app:title="@string/settings_cat_vm_sb_quality" /> app:title="@string/settings_cat_vm_sb_quality" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory
app:iconSpaceReserved="false"
app:title="@string/settings_cat_md">
<SwitchPreferenceCompat
app:iconSpaceReserved="false"
app:key="settings_cat_md_sw_show_0m_manga"
app:selectable="true"
app:summary="@string/settings_cat_md_sm_show_0m_manga"
app:title="@string/settings_cat_md_sw_show_0m_manga" />
</PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>