mirror of
https://github.com/fumiama/copymanga.git
synced 2026-06-21 09:50:23 +08:00
2.0.beta9
1. api改为云函数反代 2. 记录漫画与章节的阅读进度 3. 详情页显示章节 4. 修复流量警告不再提醒无效
This commit is contained in:
3
.idea/misc.xml
generated
3
.idea/misc.xml
generated
@@ -17,9 +17,12 @@
|
|||||||
<entry key="app/src/main/res/layout/fragment_home.xml" value="0.5095108695652174" />
|
<entry key="app/src/main/res/layout/fragment_home.xml" value="0.5095108695652174" />
|
||||||
<entry key="app/src/main/res/layout/line_1bookline.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/line_1bookline.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/line_bookinfo.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/line_bookinfo.xml" value="0.49592391304347827" />
|
||||||
|
<entry key="app/src/main/res/layout/line_booktandb.xml" value="0.48596014492753625" />
|
||||||
|
<entry key="app/src/main/res/layout/line_chapter.xml" value="0.48596014492753625" />
|
||||||
<entry key="app/src/main/res/layout/line_choice_list.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/line_choice_list.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/line_text_info.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/line_text_info.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/line_word.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/line_word.xml" value="0.49592391304347827" />
|
||||||
|
<entry key="app/src/main/res/layout/nav_header_main.xml" value="0.48596014492753625" />
|
||||||
<entry key="app/src/main/res/layout/viewpage_banner.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/viewpage_banner.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/viewpage_horizonal.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/viewpage_horizonal.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" value="0.5572916666666666" />
|
<entry key="app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" value="0.5572916666666666" />
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
### 功能
|
### 功能
|
||||||
1. 浏览主页、分类、排行、我的下载、标签、作者。
|
1. 浏览主页、分类、排行、我的下载、标签、作者。
|
||||||
2. 查看、搜索漫画并直接阅读。
|
2. 查看、搜索漫画并直接阅读;记录漫画与章节的阅读进度。
|
||||||
3. 下载漫画。但是由于不可抗力,下载速度较慢且容易出错,这绝对不是优化的原因,绝对不是。
|
3. 下载漫画。但是由于不可抗力,下载速度较慢且容易出错,这绝对不是优化的原因,绝对不是。
|
||||||
4. 阅读下载的漫画。
|
4. 阅读下载的漫画。
|
||||||
5. 检查更新。
|
5. 检查更新。
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ android {
|
|||||||
applicationId 'top.fumiama.copymanga'
|
applicationId 'top.fumiama.copymanga'
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 31
|
targetSdkVersion 31
|
||||||
versionCode 19
|
versionCode 21
|
||||||
versionName '2.0.beta8'
|
versionName '2.0.beta9'
|
||||||
resConfigs "zh", "zh-rCN"
|
resConfigs "zh", "zh-rCN"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import androidx.appcompat.app.AlertDialog
|
|||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.core.content.edit
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.drawerlayout.widget.DrawerLayout
|
import androidx.drawerlayout.widget.DrawerLayout
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
@@ -36,7 +37,6 @@ import kotlinx.android.synthetic.main.activity_main.*
|
|||||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||||
import kotlinx.android.synthetic.main.nav_header_main.*
|
import kotlinx.android.synthetic.main.nav_header_main.*
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import top.fumiama.copymanga.tools.file.PropertiesTools
|
|
||||||
import top.fumiama.copymanga.tools.api.UITools
|
import top.fumiama.copymanga.tools.api.UITools
|
||||||
import top.fumiama.copymanga.ui.download.DownloadFragment
|
import top.fumiama.copymanga.ui.download.DownloadFragment
|
||||||
import top.fumiama.copymanga.update.Update
|
import top.fumiama.copymanga.update.Update
|
||||||
@@ -50,7 +50,6 @@ class MainActivity : AppCompatActivity() {
|
|||||||
var navController: NavController? = null
|
var navController: NavController? = null
|
||||||
|
|
||||||
private lateinit var appBarConfiguration: AppBarConfiguration
|
private lateinit var appBarConfiguration: AppBarConfiguration
|
||||||
private lateinit var p: PropertiesTools
|
|
||||||
private lateinit var headPic: File
|
private lateinit var headPic: File
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
@@ -75,7 +74,6 @@ class MainActivity : AppCompatActivity() {
|
|||||||
setupActionBarWithNavController(navController!!, appBarConfiguration)
|
setupActionBarWithNavController(navController!!, appBarConfiguration)
|
||||||
nav_view.setupWithNavController(navController!!)
|
nav_view.setupWithNavController(navController!!)
|
||||||
|
|
||||||
p = PropertiesTools(File(filesDir, "database.prop"))
|
|
||||||
headPic = File(getExternalFilesDir(""), "headPic")
|
headPic = File(getExternalFilesDir(""), "headPic")
|
||||||
mainWeakReference = WeakReference(this)
|
mainWeakReference = WeakReference(this)
|
||||||
drawer_layout.addDrawerListener(object : DrawerLayout.DrawerListener {
|
drawer_layout.addDrawerListener(object : DrawerLayout.DrawerListener {
|
||||||
@@ -121,7 +119,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
p["navTextInfo"].let { if (it != "null") navtinfo.text = it }
|
navtinfo.text = getPreferences(MODE_PRIVATE).getString("navTextInfo", getString(R.string.navTextInfo))
|
||||||
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
|
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,7 +237,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
private fun checkUpdate(ignoreSkip: Boolean) {
|
private fun checkUpdate(ignoreSkip: Boolean) {
|
||||||
Thread{
|
Thread{
|
||||||
Update.checkUpdate(this, p, UITools(this), ignoreSkip)
|
Update.checkUpdate(this, UITools(this), ignoreSkip)
|
||||||
}.start()
|
}.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,7 +257,10 @@ class MainActivity : AppCompatActivity() {
|
|||||||
MaterialDialog(this).show {
|
MaterialDialog(this).show {
|
||||||
input(prefill = (it as TextView).text) { _, charSequence ->
|
input(prefill = (it as TextView).text) { _, charSequence ->
|
||||||
it.text = charSequence
|
it.text = charSequence
|
||||||
p["navTextInfo"] = charSequence.toString()
|
getPreferences(MODE_PRIVATE).edit {
|
||||||
|
putString("navTextInfo", charSequence.toString())
|
||||||
|
apply()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
positiveButton(android.R.string.ok)
|
positiveButton(android.R.string.ok)
|
||||||
title(R.string.navTextInfoInputHint)
|
title(R.string.navTextInfoInputHint)
|
||||||
|
|||||||
@@ -3,20 +3,18 @@ package top.fumiama.copymanga.template.general
|
|||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import top.fumiama.copymanga.tools.file.PropertiesTools
|
import androidx.core.content.edit
|
||||||
import top.fumiama.copymanga.tools.api.UITools
|
import top.fumiama.copymanga.tools.api.UITools
|
||||||
import java.io.File
|
|
||||||
import java.lang.ref.WeakReference
|
|
||||||
|
|
||||||
open class ActivityTemplate:Activity() {
|
open class ActivityTemplate:Activity() {
|
||||||
lateinit var p: PropertiesTools
|
|
||||||
lateinit var toolsBox: UITools
|
lateinit var toolsBox: UITools
|
||||||
|
val p = IntPref()
|
||||||
|
val pb = BoolPref()
|
||||||
private val allFullScreen
|
private val allFullScreen
|
||||||
get() = p["allFullScreen"] == "true"
|
get() = getPreferences(MODE_PRIVATE).getBoolean("allFullScreen", false)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
p = PropertiesTools(File("$filesDir/settings.properties"))
|
|
||||||
toolsBox = UITools(this)
|
toolsBox = UITools(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,4 +23,20 @@ open class ActivityTemplate:Activity() {
|
|||||||
if(allFullScreen) window.decorView.systemUiVisibility =
|
if(allFullScreen) window.decorView.systemUiVisibility =
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inner class IntPref {
|
||||||
|
operator fun get(key: String) = getPreferences(MODE_PRIVATE).getInt(key, -5)
|
||||||
|
operator fun set(key: String, value: Int) = getPreferences(MODE_PRIVATE).edit {
|
||||||
|
putInt(key, value)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inner class BoolPref {
|
||||||
|
operator fun get(key: String) = getPreferences(MODE_PRIVATE).getBoolean(key, false)
|
||||||
|
operator fun set(key: String, value: Boolean) = getPreferences(MODE_PRIVATE).edit {
|
||||||
|
putBoolean(key, value)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
package top.fumiama.copymanga.ui.book
|
package top.fumiama.copymanga.ui.book
|
||||||
|
|
||||||
|
import android.content.Context.MODE_PRIVATE
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.navigation.Navigation
|
import androidx.navigation.Navigation
|
||||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||||
|
import kotlinx.android.synthetic.main.line_booktandb.*
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
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
|
||||||
@@ -33,12 +35,16 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
|
|||||||
menuMain?.let { setMenuVisible(it) }
|
menuMain?.let { setMenuVisible(it) }
|
||||||
toolbar.title = bookHandler.book?.results?.comic?.name
|
toolbar.title = bookHandler.book?.results?.comic?.name
|
||||||
}
|
}
|
||||||
|
setStartRead()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) }
|
mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) }
|
||||||
bookHandler.destroy()
|
bookHandler.destroy()
|
||||||
|
bookHandler.ads.forEach {
|
||||||
|
it.exit = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
@@ -46,6 +52,25 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
|
|||||||
mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) }
|
mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setStartRead() {
|
||||||
|
mainWeakReference?.get()?.apply {
|
||||||
|
bookHandler.book?.results?.comic?.name?.let {
|
||||||
|
getPreferences(MODE_PRIVATE).getInt(it, -1).let { p ->
|
||||||
|
this@BookFragment.lbbstart.apply {
|
||||||
|
var i = 0
|
||||||
|
if(p >= 0) {
|
||||||
|
text = bookHandler.chapterNames[p]
|
||||||
|
i = p
|
||||||
|
}
|
||||||
|
setOnClickListener {
|
||||||
|
bookHandler.callViewManga(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun setMenuInvisible(menu: Menu){
|
private fun setMenuInvisible(menu: Menu){
|
||||||
menu.findItem(R.id.action_download)?.isVisible = false
|
menu.findItem(R.id.action_download)?.isVisible = false
|
||||||
}
|
}
|
||||||
@@ -68,19 +93,12 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
|
|||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.putString("path", arguments?.getString("path")?:"null")
|
bundle.putString("path", arguments?.getString("path")?:"null")
|
||||||
bundle.putString("name", bookHandler.book?.results?.comic?.name)
|
bundle.putString("name", bookHandler.book?.results?.comic?.name)
|
||||||
val groups = bookHandler.book?.results?.groups
|
if(bookHandler.vols != null) {
|
||||||
var keys = arrayOf<String>()
|
bundle.putBoolean("loadJson", true)
|
||||||
var gpws = arrayOf<String>()
|
|
||||||
var cnts = intArrayOf()
|
|
||||||
groups?.values?.forEach {
|
|
||||||
keys += it.name
|
|
||||||
gpws += it.path_word
|
|
||||||
cnts += it.count
|
|
||||||
Log.d("MyBF", "Add caption: ${it.name} @ ${it.path_word} of ${it.count}")
|
|
||||||
}
|
}
|
||||||
bundle.putStringArray("group", gpws)
|
bundle.putStringArray("group", bookHandler.gpws)
|
||||||
bundle.putStringArray("groupNames", keys)
|
bundle.putStringArray("groupNames", bookHandler.keys)
|
||||||
bundle.putIntArray("count", cnts)
|
bundle.putIntArray("count", bookHandler.cnts)
|
||||||
rootView?.let { Navigation.findNavController(it).navigate(R.id.action_nav_book_to_nav_group, bundle) }
|
rootView?.let { Navigation.findNavController(it).navigate(R.id.action_nav_book_to_nav_group, bundle) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
package top.fumiama.copymanga.ui.book
|
package top.fumiama.copymanga.ui.book
|
||||||
|
|
||||||
|
import android.content.Context.MODE_PRIVATE
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.os.Message
|
import android.os.Message
|
||||||
@@ -7,28 +9,41 @@ import android.util.Log
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.core.content.edit
|
||||||
import androidx.navigation.Navigation
|
import androidx.navigation.Navigation
|
||||||
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.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
|
import com.google.gson.Gson
|
||||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||||
|
import kotlinx.android.synthetic.main.button_tbutton.view.*
|
||||||
import kotlinx.android.synthetic.main.card_book.*
|
import kotlinx.android.synthetic.main.card_book.*
|
||||||
import kotlinx.android.synthetic.main.fragment_book.*
|
import kotlinx.android.synthetic.main.fragment_book.*
|
||||||
import kotlinx.android.synthetic.main.line_2chapters.view.*
|
import kotlinx.android.synthetic.main.line_2chapters.view.*
|
||||||
import kotlinx.android.synthetic.main.line_bookinfo.*
|
import kotlinx.android.synthetic.main.line_bookinfo.*
|
||||||
import kotlinx.android.synthetic.main.line_bookinfo_text.*
|
import kotlinx.android.synthetic.main.line_bookinfo_text.*
|
||||||
|
import kotlinx.android.synthetic.main.line_booktandb.*
|
||||||
import kotlinx.android.synthetic.main.line_caption.view.*
|
import kotlinx.android.synthetic.main.line_caption.view.*
|
||||||
import kotlinx.android.synthetic.main.line_chapter.view.*
|
import kotlinx.android.synthetic.main.line_chapter.view.*
|
||||||
|
import kotlinx.android.synthetic.main.widget_downloadbar.*
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
import top.fumiama.copymanga.json.BookInfoStructure
|
import top.fumiama.copymanga.json.BookInfoStructure
|
||||||
|
import top.fumiama.copymanga.json.ChapterStructure
|
||||||
import top.fumiama.copymanga.json.ThemeStructure
|
import top.fumiama.copymanga.json.ThemeStructure
|
||||||
|
import top.fumiama.copymanga.json.VolumeStructure
|
||||||
import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
||||||
|
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||||
import top.fumiama.copymanga.tools.api.CMApi
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import top.fumiama.copymanga.tools.api.GlideBlurTransformation
|
import top.fumiama.copymanga.tools.api.GlideBlurTransformation
|
||||||
|
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
|
||||||
|
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment.Companion.json
|
||||||
|
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
|
||||||
|
import java.io.File
|
||||||
|
import java.lang.Thread.sleep
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
class BookHandler(that: WeakReference<BookFragment>, path: String)
|
class BookHandler(that: WeakReference<BookFragment>, private val path: String)
|
||||||
: AutoDownloadHandler(
|
: AutoDownloadHandler(
|
||||||
that.get()?.getString(R.string.bookInfoApiUrl)?.let { String.format(it, path) } ?: "",
|
that.get()?.getString(R.string.bookInfoApiUrl)?.let { String.format(it, path) } ?: "",
|
||||||
BookInfoStructure::class.java,
|
BookInfoStructure::class.java,
|
||||||
@@ -43,6 +58,12 @@ class BookHandler(that: WeakReference<BookFragment>, path: String)
|
|||||||
var book: BookInfoStructure? = null
|
var book: BookInfoStructure? = null
|
||||||
var fbibinfo:View? = null
|
var fbibinfo:View? = null
|
||||||
var complete = false
|
var complete = false
|
||||||
|
var ads = emptyArray<AutoDownloadThread>()
|
||||||
|
var gpws = arrayOf<String>()
|
||||||
|
var keys = arrayOf<String>()
|
||||||
|
var cnts = intArrayOf()
|
||||||
|
var vols: Array<VolumeStructure>? = null
|
||||||
|
var chapterNames = arrayOf<String>()
|
||||||
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)
|
||||||
private var fbtinfo: View? = null
|
private var fbtinfo: View? = null
|
||||||
|
|
||||||
@@ -55,7 +76,6 @@ class BookHandler(that: WeakReference<BookFragment>, path: String)
|
|||||||
3 -> fbibinfo?.let { setInfoHeight(it) }
|
3 -> fbibinfo?.let { setInfoHeight(it) }
|
||||||
4 -> setThemes()
|
4 -> setThemes()
|
||||||
5 -> setOverScale()
|
5 -> setOverScale()
|
||||||
6 -> endSetLayouts()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,12 +100,20 @@ class BookHandler(that: WeakReference<BookFragment>, path: String)
|
|||||||
super.doWhenFinishDownload()
|
super.doWhenFinishDownload()
|
||||||
if(exit) return
|
if(exit) return
|
||||||
inflateComponents()
|
inflateComponents()
|
||||||
Thread{ for (i in 1..6) sendEmptyMessage(i) }.start()
|
book?.results?.groups?.values?.forEach{
|
||||||
|
keys += it.name
|
||||||
|
gpws += it.path_word
|
||||||
|
cnts += it.count
|
||||||
|
Log.d("MyBFH", "Add caption: ${it.name} @ ${it.path_word} of ${it.count}")
|
||||||
|
}
|
||||||
|
initComicData()
|
||||||
|
Thread{ for (i in 1..5) sendEmptyMessage(i) }.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun endSetLayouts(){
|
private fun endSetLayouts(){
|
||||||
that?.fbloading?.visibility = View.GONE
|
that?.fbloading?.visibility = View.GONE
|
||||||
complete = true
|
complete = true
|
||||||
|
that?.setStartRead()
|
||||||
Log.d("MyBH", "Set complete: true")
|
Log.d("MyBH", "Set complete: true")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,9 +220,63 @@ class BookHandler(that: WeakReference<BookFragment>, path: String)
|
|||||||
that?.apply {
|
that?.apply {
|
||||||
book?.results?.comic?.apply {
|
book?.results?.comic?.apply {
|
||||||
author?.let { setTheme(getString(R.string.author), it, R.id.action_nav_book_to_nav_author) }
|
author?.let { setTheme(getString(R.string.author), it, R.id.action_nav_book_to_nav_author) }
|
||||||
|
fbl.addView(layoutInflater.inflate(R.layout.div_h, fbl, false))
|
||||||
theme?.let { setTheme(getString(R.string.caption), it, R.id.action_nav_book_to_nav_caption) }
|
theme?.let { setTheme(getString(R.string.caption), it, R.id.action_nav_book_to_nav_caption) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Thread{
|
||||||
|
while (vols == null && !exit) sleep(1000)
|
||||||
|
if(exit) return@Thread
|
||||||
|
that?.apply {
|
||||||
|
book?.results?.apply {
|
||||||
|
mainWeakReference?.get()?.runOnUiThread{
|
||||||
|
ViewMangaActivity.fileArray = arrayOf()
|
||||||
|
ViewMangaActivity.urlArray = arrayOf()
|
||||||
|
vols?.forEachIndexed { iv, v ->
|
||||||
|
fbl.addView(layoutInflater.inflate(R.layout.div_h, fbl, false))
|
||||||
|
val t = layoutInflater.inflate(R.layout.line_caption, fbl, false)
|
||||||
|
t.tcptn.text = keys[iv]
|
||||||
|
fbl.addView(t)
|
||||||
|
fbl.addView(layoutInflater.inflate(R.layout.div_h, fbl, false))
|
||||||
|
var line: View? = null
|
||||||
|
val last = v.results.list.size - 1
|
||||||
|
v.results.list.onEachIndexed { i, it ->
|
||||||
|
ViewMangaActivity.urlArray += CMApi.getApiUrl(R.string.chapterInfoApiUrl, comic.path_word, it.uuid)?:""
|
||||||
|
ViewMangaActivity.fileArray += CMApi.getZipFile(context?.getExternalFilesDir(""), comic.name, keys[iv], it.name)
|
||||||
|
chapterNames += it.name
|
||||||
|
if(line == null) {
|
||||||
|
if(i == last) {
|
||||||
|
line = layoutInflater.inflate(R.layout.line_chapter, that.fbl, false)
|
||||||
|
line?.lcc?.apply {
|
||||||
|
lct.text = it.name
|
||||||
|
setOnClickListener { callViewManga(i) }
|
||||||
|
}
|
||||||
|
fbl?.addView(line)
|
||||||
|
} else {
|
||||||
|
line = layoutInflater.inflate(R.layout.line_2chapters, that.fbl, false)
|
||||||
|
line?.l2cl?.apply {
|
||||||
|
lct.text = it.name
|
||||||
|
setOnClickListener { callViewManga( i) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else line?.l2cr?.apply {
|
||||||
|
lct.text = it.name
|
||||||
|
setOnClickListener { callViewManga(i) }
|
||||||
|
fbl?.addView(line)
|
||||||
|
line = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// padding
|
||||||
|
val line = layoutInflater.inflate(R.layout.line_chapter, that.fbl, false)
|
||||||
|
line.lci.visibility = View.INVISIBLE
|
||||||
|
line.isClickable = false
|
||||||
|
fbl?.addView(line)
|
||||||
|
endSetLayouts()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadVolume(name: String, path: String, nav: Int){
|
private fun loadVolume(name: String, path: String, nav: Int){
|
||||||
@@ -204,4 +286,100 @@ class BookHandler(that: WeakReference<BookFragment>, path: String)
|
|||||||
bundle.putString("path", path)
|
bundle.putString("path", path)
|
||||||
that?.rootView?.let { Navigation.findNavController(it).navigate(nav, bundle) }
|
that?.rootView?.let { Navigation.findNavController(it).navigate(nav, bundle) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun initComicData() {
|
||||||
|
var volumes = emptyArray<VolumeStructure>()
|
||||||
|
val counts = cnts.clone()
|
||||||
|
gpws.forEachIndexed { i, gpw ->
|
||||||
|
Log.d("MyBFH", "下载:$gpw")
|
||||||
|
var offset = 0
|
||||||
|
val times = counts[i] / 100
|
||||||
|
val remain = counts[i] % 100
|
||||||
|
val re = arrayOfNulls<VolumeStructure>(if(remain != 0) (times+1) else (times))
|
||||||
|
Log.d("MyBFH", "${i}卷共${if(times == 0) 1 else times}次加载")
|
||||||
|
do {
|
||||||
|
counts[i] = counts[i] - 100
|
||||||
|
CMApi.getApiUrl(R.string.groupInfoApiUrl, path, gpw, offset)?.let {
|
||||||
|
if(ComicDlFragment.exit) return
|
||||||
|
val ad = AutoDownloadThread(it) { result ->
|
||||||
|
Log.d("MyBFH", "第${i}卷返回")
|
||||||
|
val r =
|
||||||
|
Gson().fromJson(result?.decodeToString(), VolumeStructure::class.java)
|
||||||
|
re[r.results.offset / 100] = r
|
||||||
|
}
|
||||||
|
ads += ad
|
||||||
|
ad.start()
|
||||||
|
offset += 100
|
||||||
|
}
|
||||||
|
} while (counts[i] > 0)
|
||||||
|
Thread {
|
||||||
|
var c = 0
|
||||||
|
while (c++ < 80) {
|
||||||
|
sleep(1000)
|
||||||
|
if(ComicDlFragment.exit) return@Thread
|
||||||
|
if(re.all { it != null }) break
|
||||||
|
}
|
||||||
|
if(re.size > 1) {
|
||||||
|
val r = re[0]
|
||||||
|
var s = emptyArray<ChapterStructure>()
|
||||||
|
re.forEach {
|
||||||
|
it?.results?.list?.forEach {
|
||||||
|
s += it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r?.results?.list = s
|
||||||
|
r?.apply { volumes += this }
|
||||||
|
} else re[0]?.apply { volumes += this }
|
||||||
|
}.start()
|
||||||
|
}
|
||||||
|
Thread {
|
||||||
|
var c = 0
|
||||||
|
while (c < 80 && volumes.size != gpws.size) {
|
||||||
|
sleep(1000)
|
||||||
|
if(ComicDlFragment.exit) return@Thread
|
||||||
|
Log.d("MyBFH", "已有:${volumes.size} 共:${gpws.size}")
|
||||||
|
c++
|
||||||
|
}
|
||||||
|
if (volumes.size == gpws.size) {
|
||||||
|
mainWeakReference?.get()?.runOnUiThread {
|
||||||
|
saveVolumes(volumes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun saveVolumes(volumes: Array<VolumeStructure>) {
|
||||||
|
that?.context?.getExternalFilesDir("")?.let { home ->
|
||||||
|
book?.results?.comic?.name?.let { name ->
|
||||||
|
val mangaFolder = File(home, name)
|
||||||
|
if(!mangaFolder.exists()) mangaFolder.mkdirs()
|
||||||
|
json = Gson().toJson(volumes)
|
||||||
|
File(mangaFolder, "info.json").writeText(json!!)
|
||||||
|
File(mangaFolder, "grps.json").writeText(Gson().toJson(keys))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vols = volumes
|
||||||
|
}
|
||||||
|
|
||||||
|
fun callViewManga(pos: Int) {
|
||||||
|
book?.results?.comic?.name?.let {
|
||||||
|
mainWeakReference?.get()?.getPreferences(MODE_PRIVATE)?.edit {
|
||||||
|
putInt(it, pos)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ViewMangaActivity.dlhandler = null
|
||||||
|
ViewMangaActivity.position = pos
|
||||||
|
val zipf = ViewMangaActivity.fileArray[pos]
|
||||||
|
if (zipf.exists()) {
|
||||||
|
ViewMangaActivity.zipFile = zipf
|
||||||
|
that?.startActivity(
|
||||||
|
Intent(that.context, ViewMangaActivity::class.java)
|
||||||
|
.putExtra("callFrom", "zipFirst").putExtra("function", "log")
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
ViewMangaActivity.zipFile = null
|
||||||
|
that?.startActivity(Intent(that.context, ViewMangaActivity::class.java).putExtra("function", "log"))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,12 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
|||||||
arguments?.getBoolean("callFromOldDL", false) == true -> initOldComicData()
|
arguments?.getBoolean("callFromOldDL", false) == true -> initOldComicData()
|
||||||
arguments?.getBoolean("loadJson", false) == true -> context?.getExternalFilesDir("")?.let { home ->
|
arguments?.getBoolean("loadJson", false) == true -> context?.getExternalFilesDir("")?.let { home ->
|
||||||
arguments?.getString("name")?.let {
|
arguments?.getString("name")?.let {
|
||||||
start2load(loadFromJson(), true, loadGroupsFromFile(File(home, "$it/grps.json")))
|
Thread{
|
||||||
|
sleep(600)
|
||||||
|
mainWeakReference?.get()?.runOnUiThread {
|
||||||
|
start2load(loadFromJson(), true, loadGroupsFromFile(File(home, "$it/grps.json")))
|
||||||
|
}
|
||||||
|
}.start()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> initComicData(
|
else -> initComicData(
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import top.fumiama.copymanga.json.ComicStructureOld
|
|||||||
import top.fumiama.copymanga.json.VolumeStructure
|
import top.fumiama.copymanga.json.VolumeStructure
|
||||||
import top.fumiama.copymanga.tools.api.CMApi
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import top.fumiama.copymanga.tools.http.MangaDlTools
|
import top.fumiama.copymanga.tools.http.MangaDlTools
|
||||||
import top.fumiama.copymanga.tools.file.PropertiesTools
|
|
||||||
import top.fumiama.copymanga.tools.api.UITools
|
import top.fumiama.copymanga.tools.api.UITools
|
||||||
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment.Companion.json
|
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment.Companion.json
|
||||||
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
|
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
|
||||||
@@ -45,7 +44,6 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
var complete = false
|
var complete = false
|
||||||
private val that = that.get()
|
private val that = that.get()
|
||||||
private val toolsBox = UITools(that.get()?.context)
|
private val toolsBox = UITools(that.get()?.context)
|
||||||
private val p = PropertiesTools(File("${that.get()?.context?.filesDir}/settings.properties"))
|
|
||||||
private var btnNumPerRow = 4
|
private var btnNumPerRow = 4
|
||||||
private var btnw = 0
|
private var btnw = 0
|
||||||
private var cdwnWidth = 0
|
private var cdwnWidth = 0
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import top.fumiama.copymanga.json.Chapter2Return
|
|||||||
import top.fumiama.copymanga.json.ChapterWithContent
|
import top.fumiama.copymanga.json.ChapterWithContent
|
||||||
import top.fumiama.copymanga.json.ComicStructure
|
import top.fumiama.copymanga.json.ComicStructure
|
||||||
import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
||||||
import top.fumiama.copymanga.tools.file.PropertiesTools
|
|
||||||
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.pn
|
import top.fumiama.copymanga.ui.vm.ViewMangaActivity.Companion.pn
|
||||||
import top.fumiama.copymanga.views.ScaleImageView
|
import top.fumiama.copymanga.views.ScaleImageView
|
||||||
@@ -26,7 +25,6 @@ import java.lang.Thread.sleep
|
|||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.zip.ZipInputStream
|
|
||||||
|
|
||||||
class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
|
class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
|
||||||
url, Chapter2Return::class.java, Looper.myLooper()!!
|
url, Chapter2Return::class.java, Looper.myLooper()!!
|
||||||
@@ -59,7 +57,6 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
|
|||||||
else -> ""
|
else -> ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var progressLog: PropertiesTools? = null
|
|
||||||
|
|
||||||
@SuppressLint("SimpleDateFormat", "SetTextI18n")
|
@SuppressLint("SimpleDateFormat", "SetTextI18n")
|
||||||
override fun handleMessage(msg: Message) {
|
override fun handleMessage(msg: Message) {
|
||||||
@@ -159,7 +156,6 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
|
|||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
private fun prepareManga(){
|
private fun prepareManga(){
|
||||||
comicName = manga?.results?.comic?.name
|
comicName = manga?.results?.comic?.name
|
||||||
progressLog = PropertiesTools(File("${wv.get()?.filesDir}/progress/${manga?.results?.comic?.name}"))
|
|
||||||
wv.get()?.count = manga?.results?.chapter?.size?:0
|
wv.get()?.count = manga?.results?.chapter?.size?:0
|
||||||
wv.get()?.initManga()
|
wv.get()?.initManga()
|
||||||
wv.get()?.vprog?.visibility = View.GONE
|
wv.get()?.vprog?.visibility = View.GONE
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import android.util.Log
|
|||||||
import android.view.*
|
import android.view.*
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.core.content.edit
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.viewpager2.widget.ViewPager2
|
import androidx.viewpager2.widget.ViewPager2
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
@@ -41,7 +42,6 @@ import java.io.ByteArrayInputStream
|
|||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
import java.lang.Thread.sleep
|
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.FutureTask
|
import java.util.concurrent.FutureTask
|
||||||
@@ -90,21 +90,20 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
setContentView(R.layout.activity_viewmanga)
|
setContentView(R.layout.activity_viewmanga)
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
va = WeakReference(this)
|
va = WeakReference(this)
|
||||||
//progressLog = PropertiesTools(File("$filesDir/progress/${chapter2Return?.results?.chapter?.comic_id}"))
|
|
||||||
//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"
|
||||||
cut = p["useCut"] == "true"
|
cut = pb["useCut"]
|
||||||
r2l = p["r2l"] == "true"
|
r2l = pb["r2l"]
|
||||||
verticalLoadMaxCount = if (p["verticalMax"] != "null") p["verticalMax"].toInt() else 20
|
verticalLoadMaxCount = p["verticalMax"].let { if(it > 0) it else 20 }
|
||||||
isVertical = p["vertical"] == "true"
|
isVertical = pb["vertical"]
|
||||||
notUseVP = p["noVP"] == "true" || isVertical
|
notUseVP = pb["noVP"] || isVertical
|
||||||
//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 "")
|
||||||
if (p["quality"] != "null") q = p["quality"].toInt()
|
p["quality"].let { q = if (it > 0) it else 100 }
|
||||||
tt = TimeThread(handler, 22)
|
tt = TimeThread(handler, 22)
|
||||||
tt.canDo = true
|
tt.canDo = true
|
||||||
tt.start()
|
tt.start()
|
||||||
volTurnPage = p["volturn"] == "true"
|
volTurnPage = pb["volturn"]
|
||||||
am = getSystemService(Service.AUDIO_SERVICE) as AudioManager
|
am = getSystemService(Service.AUDIO_SERVICE) as AudioManager
|
||||||
|
|
||||||
Log.d("MyVM", "Now ZipFile is $zipFile")
|
Log.d("MyVM", "Now ZipFile is $zipFile")
|
||||||
@@ -155,7 +154,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
pageNum = pn
|
pageNum = pn
|
||||||
pn = -1
|
pn = -1
|
||||||
}
|
}
|
||||||
sendProgress()
|
setProgress()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun preDownloadChapterPages() {
|
private fun preDownloadChapterPages() {
|
||||||
@@ -220,6 +219,9 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
|
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
fun initManga(){
|
fun initManga(){
|
||||||
|
handler.manga?.results?.chapter?.uuid?.let {
|
||||||
|
pn = getPreferences(MODE_PRIVATE).getInt(it, pn)
|
||||||
|
}
|
||||||
if (zipFile?.exists() != true) doPrepareWebImg()
|
if (zipFile?.exists() != true) doPrepareWebImg()
|
||||||
else prepareItems()
|
else prepareItems()
|
||||||
if (!isVertical) restorePN()
|
if (!isVertical) restorePN()
|
||||||
@@ -227,7 +229,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
|
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
private fun prepareImgFromWeb() {
|
private fun prepareImgFromWeb() {
|
||||||
if(toolsBox.netinfo == "移动数据") alertCellar()
|
if(!noCellarAlert && toolsBox.netinfo == "移动数据") alertCellar()
|
||||||
else handler.startLoad()
|
else handler.startLoad()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -431,18 +433,21 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sendProgress() {
|
private fun setProgress() {
|
||||||
handler.progressLog?.let {
|
handler.manga?.results?.chapter?.uuid?.let {
|
||||||
//it["chapterId"] = hm.chapterId.toString()
|
getPreferences(MODE_PRIVATE).edit {
|
||||||
it["page"] = pageNum.toString()
|
//it["chapterId"] = hm.chapterId.toString()
|
||||||
//it["name"] = inftitle.ttitle.text
|
putInt(it, pageNum)
|
||||||
|
//it["name"] = inftitle.ttitle.text
|
||||||
|
apply()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun prepareIdBtCut() {
|
private fun prepareIdBtCut() {
|
||||||
idtbcut.isChecked = cut
|
idtbcut.isChecked = cut
|
||||||
idtbcut.setOnClickListener {
|
idtbcut.setOnClickListener {
|
||||||
p["useCut"] = if (idtbcut.isChecked) "true" else "false"
|
pb["useCut"] = idtbcut.isChecked
|
||||||
Toast.makeText(this, "下次浏览生效", Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, "下次浏览生效", Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -450,8 +455,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
private fun prepareIdBtLR() {
|
private fun prepareIdBtLR() {
|
||||||
idtblr.isChecked = r2l
|
idtblr.isChecked = r2l
|
||||||
idtblr.setOnClickListener {
|
idtblr.setOnClickListener {
|
||||||
if (idtblr.isChecked) p["r2l"] = "true"
|
pb["r2l"] = idtblr.isChecked
|
||||||
else p["r2l"] = "false"
|
|
||||||
Toast.makeText(this, "下次浏览生效", Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, "下次浏览生效", Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -459,8 +463,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
private fun prepareIdBtVP() {
|
private fun prepareIdBtVP() {
|
||||||
idtbvp.isChecked = notUseVP
|
idtbvp.isChecked = notUseVP
|
||||||
idtbvp.setOnClickListener {
|
idtbvp.setOnClickListener {
|
||||||
if (idtbvp.isChecked) p["noVP"] = "true"
|
pb["noVP"] = idtbvp.isChecked
|
||||||
else p["noVP"] = "false"
|
|
||||||
Toast.makeText(this, "下次浏览生效", Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, "下次浏览生效", Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -487,7 +490,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
if (!isInSeek) hideObjs()
|
if (!isInSeek) hideObjs()
|
||||||
updateSeekText()
|
updateSeekText()
|
||||||
updateSeekProgress()
|
updateSeekProgress()
|
||||||
sendProgress()
|
setProgress()
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
@@ -555,7 +558,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
idtbvh.setOnClickListener {
|
idtbvh.setOnClickListener {
|
||||||
p["vertical"] = if (idtbvh.isChecked) "true" else "false"
|
pb["vertical"] = idtbvh.isChecked
|
||||||
Toast.makeText(this, "下次浏览生效", Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, "下次浏览生效", Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
package top.fumiama.copymanga.update
|
package top.fumiama.copymanga.update
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
|
import android.content.Context.MODE_PRIVATE
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
|
import androidx.core.content.edit
|
||||||
import kotlinx.android.synthetic.main.dialog_progress.view.*
|
import kotlinx.android.synthetic.main.dialog_progress.view.*
|
||||||
import top.fumiama.copymanga.tools.file.PropertiesTools
|
import top.fumiama.copymanga.tools.file.PropertiesTools
|
||||||
import top.fumiama.copymanga.tools.api.UITools
|
import top.fumiama.copymanga.tools.api.UITools
|
||||||
@@ -15,7 +17,7 @@ import java.io.File
|
|||||||
import java.security.MessageDigest
|
import java.security.MessageDigest
|
||||||
|
|
||||||
object Update {
|
object Update {
|
||||||
fun checkUpdate(activity: Activity, p: PropertiesTools, toolsBox: UITools, ignoreSkip: Boolean = false) = activity.apply{
|
fun checkUpdate(activity: Activity, toolsBox: UITools, ignoreSkip: Boolean = false) = activity.apply{
|
||||||
val client = Client("copymanga.v6.army", 12315)
|
val client = Client("copymanga.v6.army", 12315)
|
||||||
val progressBar = layoutInflater.inflate(R.layout.dialog_progress, null, false)
|
val progressBar = layoutInflater.inflate(R.layout.dialog_progress, null, false)
|
||||||
val progressHandler = object : Client.Progress{
|
val progressHandler = object : Client.Progress{
|
||||||
@@ -28,7 +30,7 @@ object Update {
|
|||||||
val msg = kanban[packageManager.getPackageInfo(packageName, 0).versionCode]
|
val msg = kanban[packageManager.getPackageInfo(packageName, 0).versionCode]
|
||||||
if(msg != "null") {
|
if(msg != "null") {
|
||||||
val verNum = msg.substringBefore('\n').toIntOrNull()
|
val verNum = msg.substringBefore('\n').toIntOrNull()
|
||||||
val skipNum = p["skipVersion"].let { if(it != "null") it.toInt() else 0 }
|
val skipNum = activity.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) {
|
||||||
@@ -63,7 +65,12 @@ object Update {
|
|||||||
client.progress = null
|
client.progress = null
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
}, { p["skipVersion"] = verNum.toString() })
|
}, {
|
||||||
|
activity.getPreferences(MODE_PRIVATE).edit {
|
||||||
|
putInt("skipVersion", verNum)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
} else runOnUiThread {
|
} else runOnUiThread {
|
||||||
toolsBox.buildInfo("看板", msg.substringAfter('\n'), "知道了")
|
toolsBox.buildInfo("看板", msg.substringAfter('\n'), "知道了")
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="@dimen/nav_header_vertical_spacing"
|
android:layout_marginBottom="@dimen/nav_header_vertical_spacing"
|
||||||
android:onClick="onNavTInfoClicked"
|
android:onClick="onNavTInfoClicked"
|
||||||
android:text="@string/navTextInfo"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
|||||||
@@ -30,24 +30,22 @@
|
|||||||
<string name="null_book">获取图书信息失败</string>
|
<string name="null_book">获取图书信息失败</string>
|
||||||
<string name="web_error">网络错误</string>
|
<string name="web_error">网络错误</string>
|
||||||
|
|
||||||
<string name="mainPageApiUrl">https://api.copymanga.com/api/v3/h5/homeIndex?platform=3</string>
|
<string name="mainPageApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/h5/homeIndex?platform=3&format=json</string>
|
||||||
<string name="referUrl">"https://api.copymanga.com"</string>
|
<string name="referUrl">"https://api.copymanga.com"</string>
|
||||||
<string name="recentUpdateApiUrl">https://nnv3api.dmzj1.com/novel/recentUpdate/%1$d.json</string>
|
<string name="rankApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/ranks?limit=21&offset=%1$d&date_type=%2$s&platform=3&format=json</string>
|
||||||
<string name="rankApiUrl">https://api.copymanga.com/api/v3/ranks?limit=21&offset=%1$d&date_type=%2$s&platform=3</string>
|
<string name="searchApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/search/comic?limit=21&offset=%1$d&q=%2$s&q_type=%3$s&platform=3&format=json</string>
|
||||||
<string name="searchApiUrl">https://api.copymanga.com/api/v3/search/comic?limit=21&offset=%1$d&q=%2$s&q_type=%3$s&platform=3</string>
|
<string name="filterApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/h5/filterIndex/comic/tags?platform=3&format=json</string>
|
||||||
<string name="filterApiUrl">https://api.copymanga.com/api/v3/h5/filterIndex/comic/tags?platform=3</string>
|
<string name="sortApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3&format=json</string>
|
||||||
<string name="sortApiUrl">https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3</string>
|
<string name="bookInfoApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/comic2/%1$s?platform=3&format=json</string>
|
||||||
<string name="bookInfoApiUrl">https://api.copymanga.com/api/v3/comic2/%1$s?platform=3</string>
|
<string name="groupInfoApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d&platform=3&format=json</string>
|
||||||
<string name="groupInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d&platform=3</string>
|
<string name="chapterInfoApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/comic/%1$s/chapter2/%2$s?platform=3&format=json</string>
|
||||||
<string name="chapterInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/chapter2/%2$s?platform=3</string>
|
<string name="topicApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/topic/%1$s?platform=3&format=json</string>
|
||||||
<string name="chapterTxtUrl">https://nnv3api.dmzj1.com/novel/download/%1$d_%2$d_%3$d.txt</string>
|
<string name="topicContentApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$d&platform=3&format=json</string>
|
||||||
<string name="topicApiUrl">https://api.copymanga.com/api/v3/topic/%1$s?platform=3</string>
|
<string name="recommendApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/recs?pos=3200102&limit=21&offset=%1$d&platform=3&format=json</string>
|
||||||
<string name="topicContentApiUrl">https://api.copymanga.com/api/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$d&platform=3</string>
|
<string name="newestApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/update/newest?limit=21&offset=%1$d&platform=3&format=json</string>
|
||||||
<string name="recommendApiUrl">https://api.copymanga.com/api/v3/recs?pos=3200102&limit=21&offset=%1$d&platform=3</string>
|
<string name="finishApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/comics?limit=21&offset=%1$d&ordering=%2$s&top=finish&platform=3&format=json</string>
|
||||||
<string name="newestApiUrl">https://api.copymanga.com/api/v3/update/newest?limit=21&offset=%1$d&platform=3</string>
|
<string name="authorApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/comics?limit=21&offset=%1$d&ordering=%2$s&author=%3$s&platform=3&format=json</string>
|
||||||
<string name="finishApiUrl">https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&top=finish&platform=3</string>
|
<string name="captionApiUrl">https://copymanga.azurewebsites.net/api/api?/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3&format=json</string>
|
||||||
<string name="authorApiUrl">https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&author=%3$s&platform=3</string>
|
|
||||||
<string name="captionApiUrl">https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3</string>
|
|
||||||
|
|
||||||
<string name="complete">已完结</string>
|
<string name="complete">已完结</string>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user