From cb5e730eae3c6c9dfb983706cf91b88f538dfb35 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Tue, 18 Oct 2022 16:31:44 +0800
Subject: [PATCH] =?UTF-8?q?2.0.beta14=201.=20=E5=AE=8C=E5=96=84=E8=AE=BE?=
=?UTF-8?q?=E7=BD=AE=202.=20=E5=A2=9E=E5=8A=A0=E7=99=BB=E9=99=86=203.=20?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B5=8F=E8=A7=88=E5=8E=86=E5=8F=B2=E9=A1=B5?=
=?UTF-8?q?=E9=9D=A2=204.=20=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9B=E9=97=AA?=
=?UTF-8?q?=E9=80=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/misc.xml | 7 ++
README.md | 5 +-
app/build.gradle | 10 +-
.../top/fumiama/copymanga/LoginActivity.kt | 47 ++++++++-
.../top/fumiama/copymanga/MainActivity.kt | 8 ++
.../json/HistoryBookListStructure.java | 16 ++++
.../copymanga/json/HistoryComicStructure.java | 16 ++++
.../copymanga/json/LoginInfoStructure.java | 12 +++
.../top/fumiama/copymanga/manga/Reader.kt | 4 +-
.../copymanga/template/ui/InfoCardLoader.kt | 18 +++-
.../top/fumiama/copymanga/tools/api/CMApi.kt | 16 +++-
.../copymanga/tools/http/DownloadTools.kt | 95 +++++--------------
.../fumiama/copymanga/ui/book/BookFragment.kt | 2 +-
.../fumiama/copymanga/ui/book/BookHandler.kt | 6 +-
.../ui/cardflow/history/HistoryFragment.kt | 22 +++++
.../ui/cardflow/newest/NewestFragment.kt | 2 +-
.../copymanga/ui/history/HistoryFragment.kt | 19 ----
.../copymanga/ui/settings/SettingsFragment.kt | 6 +-
.../copymanga/ui/vm/ViewMangaActivity.kt | 10 +-
app/src/main/res/layout/activity_login.xml | 7 +-
app/src/main/res/layout/fragment_history.xml | 20 +---
.../main/res/navigation/mobile_navigation.xml | 12 ++-
app/src/main/res/values/strings.xml | 43 +++++----
app/src/main/res/xml/pref_setting.xml | 2 -
24 files changed, 252 insertions(+), 153 deletions(-)
create mode 100644 app/src/main/java/top/fumiama/copymanga/json/HistoryBookListStructure.java
create mode 100644 app/src/main/java/top/fumiama/copymanga/json/HistoryComicStructure.java
create mode 100644 app/src/main/java/top/fumiama/copymanga/json/LoginInfoStructure.java
create mode 100644 app/src/main/java/top/fumiama/copymanga/ui/cardflow/history/HistoryFragment.kt
delete mode 100644 app/src/main/java/top/fumiama/copymanga/ui/history/HistoryFragment.kt
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 90b07e1..b85b19c 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -18,19 +18,26 @@
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index 38fb46b..457f560 100644
--- a/README.md
+++ b/README.md
@@ -34,11 +34,12 @@
3. 本应用默认使用大陆线路。
### 功能
-1. 浏览主页、分类、排行、我的下载、标签、作者。
-2. 查看、搜索漫画并直接阅读;记录漫画与章节的阅读进度。
+1. 浏览主页、分类、排行、我的下载、浏览历史、标签、作者。
+2. 查看、搜索漫画并直接阅读;**在本地**记录漫画与章节的阅读进度。
3. 下载漫画。但是由于不可抗力,下载速度较慢且容易出错,这绝对不是优化的原因,绝对不是。
4. 阅读下载的漫画。
5. 检查更新。
+6. 登录。
### 未实现功能
未在上表列出的官方`APP`的其他功能。
diff --git a/app/build.gradle b/app/build.gradle
index e79e187..d1999c8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@ android {
applicationId 'top.fumiama.copymanga'
minSdkVersion 23
targetSdkVersion 33
- versionCode 25
- versionName '2.0.beta13'
+ versionCode 26
+ versionName '2.0.beta14'
resConfigs 'zh', 'zh-rCN'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -66,9 +66,9 @@ dependencies {
implementation 'com.afollestad.material-dialogs:input:3.3.0'
implementation 'com.github.yalantis:ucrop:2.2.6'
implementation 'com.to.aboomy:pager2banner:1.0.1'
- implementation 'com.github.bumptech.glide:glide:4.12.0'
- annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
- implementation 'com.google.code.gson:gson:2.8.9'
+ implementation 'com.github.bumptech.glide:glide:4.14.2'
+ annotationProcessor 'com.github.bumptech.glide:compiler:4.14.2'
+ implementation 'com.google.code.gson:gson:2.9.1'
implementation 'com.github.vovaksenov99:OverscrollableScrollView:1.0'
implementation 'com.liaoinstan.springview:library:1.7.0'
implementation 'com.github.zawadz88.materialpopupmenu:material-popup-menu:4.0.1'
diff --git a/app/src/main/java/top/fumiama/copymanga/LoginActivity.kt b/app/src/main/java/top/fumiama/copymanga/LoginActivity.kt
index e5acaf6..45805a4 100644
--- a/app/src/main/java/top/fumiama/copymanga/LoginActivity.kt
+++ b/app/src/main/java/top/fumiama/copymanga/LoginActivity.kt
@@ -2,11 +2,56 @@ package top.fumiama.copymanga
import android.app.Activity
import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import com.google.gson.Gson
+import kotlinx.android.synthetic.main.activity_login.*
+import top.fumiama.copymanga.json.BookListStructure
+import top.fumiama.copymanga.json.LoginInfoStructure
+import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.tools.http.DownloadTools
import top.fumiama.dmzj.copymanga.R
+import kotlin.random.Random
+import kotlin.random.nextUInt
class LoginActivity:Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
+ alblogin.setOnClickListener {
+ val salt = Random.nextInt(10000)
+ altusrnm.text?.toString()?.let { username ->
+ altpwd.text?.toString()?.let { pwd ->
+ Thread{
+ try {
+ CMApi.getLoginConnection(username, pwd, salt)?.apply {
+ Gson().fromJson(inputStream.reader(), LoginInfoStructure::class.java)?.let {
+ if(it.code == 200) {
+ MainActivity.mainWeakReference?.get()?.getPreferences(MODE_PRIVATE)?.edit()?.apply {
+ putString("token", it.results?.token)
+ putString("user_id", it.results?.user_id)
+ putString("username", it.results?.username)
+ putString("nickname", it.results?.nickname)
+ apply()
+ DownloadTools.getHttpContent(getString(R.string.memberInfoApiUrl))?.decodeToString()?.let {
+ val l = Gson().fromJson(it, LoginInfoStructure::class.java)
+ if(l.code == 200) {
+ putString("avatar", l.results.avatar)
+ apply()
+ } else runOnUiThread { Toast.makeText(this@LoginActivity, l.message, Toast.LENGTH_SHORT).show() }
+ }
+ runOnUiThread { finish() }
+ }?:runOnUiThread { Toast.makeText(this@LoginActivity, R.string.login_get_conn_failed, Toast.LENGTH_SHORT).show() }
+ } else runOnUiThread { Toast.makeText(this@LoginActivity, it.message, Toast.LENGTH_SHORT).show() }
+ }
+ disconnect()
+ }?:runOnUiThread { Toast.makeText(this, R.string.login_get_conn_failed, Toast.LENGTH_SHORT).show() }
+ }catch (e: Exception) {
+ runOnUiThread { Toast.makeText(this, e.localizedMessage, Toast.LENGTH_SHORT).show() }
+ }
+ }.start()
+ }?:Toast.makeText(this, R.string.login_null_pwd, Toast.LENGTH_SHORT).show()
+ }?:Toast.makeText(this, R.string.login_null_username, Toast.LENGTH_SHORT).show()
+ }
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt
index 7599749..17859fe 100644
--- a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt
+++ b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt
@@ -32,6 +32,7 @@ import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.input.input
+import com.bumptech.glide.Glide
import com.yalantis.ucrop.UCrop
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.app_bar_main.*
@@ -86,6 +87,13 @@ class MainActivity : AppCompatActivity() {
Log.d("MyMain", "onDrawerOpened")
isDrawerClosed = false
DownloadFragment.currentDir = getExternalFilesDir("")
+ getPreferences(MODE_PRIVATE)?.apply {
+ val name = getString("nickname", getString("username", ""))
+ val avatar = getString("avatar", "")
+ if(name != "") navttitle.text = name
+ else navttitle.setText(R.string.noLogin)
+ if(avatar != "") Glide.with(this@MainActivity).load(avatar).into(navhicon)
+ }
}
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {}
diff --git a/app/src/main/java/top/fumiama/copymanga/json/HistoryBookListStructure.java b/app/src/main/java/top/fumiama/copymanga/json/HistoryBookListStructure.java
new file mode 100644
index 0000000..4859d48
--- /dev/null
+++ b/app/src/main/java/top/fumiama/copymanga/json/HistoryBookListStructure.java
@@ -0,0 +1,16 @@
+package top.fumiama.copymanga.json;
+
+public class HistoryBookListStructure extends ReturnBase {
+ public Results results;
+ public static class Results {
+ public ListItem[] list;
+ public int total;
+ public int limit;
+ public int offset;
+ }
+ public static class ListItem {
+ public String last_chapter_id;
+ public String last_chapter_name;
+ public HistoryComicStructure comic;
+ }
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/json/HistoryComicStructure.java b/app/src/main/java/top/fumiama/copymanga/json/HistoryComicStructure.java
new file mode 100644
index 0000000..e905960
--- /dev/null
+++ b/app/src/main/java/top/fumiama/copymanga/json/HistoryComicStructure.java
@@ -0,0 +1,16 @@
+package top.fumiama.copymanga.json;
+
+public class HistoryComicStructure {
+ public String uuid;
+ public boolean b_display;
+ public String name;
+ public String path_word;
+ public ThemeStructure[] author;
+ public ThemeStructure[] theme;
+ public String cover;
+ public int status;
+ public int popular;
+ public String datetime_updated;
+ public String last_chapter_id;
+ public String last_chapter_name;
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/json/LoginInfoStructure.java b/app/src/main/java/top/fumiama/copymanga/json/LoginInfoStructure.java
new file mode 100644
index 0000000..4bf4fb6
--- /dev/null
+++ b/app/src/main/java/top/fumiama/copymanga/json/LoginInfoStructure.java
@@ -0,0 +1,12 @@
+package top.fumiama.copymanga.json;
+
+public class LoginInfoStructure extends ReturnBase{
+ public Results results;
+ public static class Results {
+ public String token;
+ public String user_id;
+ public String username;
+ public String nickname;
+ public String avatar;
+ }
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/manga/Reader.kt b/app/src/main/java/top/fumiama/copymanga/manga/Reader.kt
index 2b1dd71..5e49d4d 100644
--- a/app/src/main/java/top/fumiama/copymanga/manga/Reader.kt
+++ b/app/src/main/java/top/fumiama/copymanga/manga/Reader.kt
@@ -2,6 +2,7 @@ package top.fumiama.copymanga.manga
import android.content.Context
import android.content.Intent
+import android.util.Log
import androidx.core.content.edit
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
@@ -12,7 +13,8 @@ object Reader {
getPreferences(Context.MODE_PRIVATE)?.edit {
putInt(name, pos)
apply()
- }
+ Log.d("MyR", "记录 $name 阅读到第 ${pos+1} 话")
+ }?: Log.d("MyR", "无法获得main pref")
ViewMangaActivity.dlhandler = null
ViewMangaActivity.position = pos
ViewMangaActivity.comicName = name
diff --git a/app/src/main/java/top/fumiama/copymanga/template/ui/InfoCardLoader.kt b/app/src/main/java/top/fumiama/copymanga/template/ui/InfoCardLoader.kt
index 71b4e51..1a0fc80 100644
--- a/app/src/main/java/top/fumiama/copymanga/template/ui/InfoCardLoader.kt
+++ b/app/src/main/java/top/fumiama/copymanga/template/ui/InfoCardLoader.kt
@@ -7,13 +7,14 @@ import androidx.fragment.app.Fragment
import androidx.navigation.Navigation
import com.google.gson.Gson
import top.fumiama.copymanga.json.BookListStructure
+import top.fumiama.copymanga.json.HistoryBookListStructure
import top.fumiama.copymanga.json.TypeBookListStructure
import top.fumiama.copymanga.template.general.MangaPagesFragmentTemplate
import top.fumiama.copymanga.template.http.AutoDownloadThread
import java.lang.ref.WeakReference
@ExperimentalStdlibApi
-open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isTypeBook: Boolean = false): MangaPagesFragmentTemplate(inflateRes) {
+open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isTypeBook: Boolean = false,private val isHistoryBook: Boolean = false): MangaPagesFragmentTemplate(inflateRes) {
var offset = 0
private val subUrl get() = getApiUrl()
var ad: AutoDownloadThread? = null
@@ -40,6 +41,21 @@ open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isT
}
page++
}
+ } else if(isHistoryBook) {
+ val bookList = Gson().fromJson(it?.decodeToString(), HistoryBookListStructure::class.java)
+ bookList?.apply {
+ Log.d("MyICL", "offset:${results.offset}, total:${results.total}")
+ if(results.offset < results.total) {
+ if(code == 200) {
+ results.list.forEach{ book ->
+ if(ad?.exit == true) return@AutoDownloadThread
+ cardList.addCard(book.comic.name, null, book.comic.cover, book.comic.path_word, null, null, false)
+ }
+ offset += results.list.size
+ }
+ }
+ page++
+ }
} else {
val bookList = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java)
bookList?.apply {
diff --git a/app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt b/app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt
index 338d266..5058fbf 100644
--- a/app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt
+++ b/app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt
@@ -1,10 +1,13 @@
package top.fumiama.copymanga.tools.api
+import android.util.Base64
import com.bumptech.glide.load.model.LazyHeaders
import top.fumiama.dmzj.copymanga.R
import top.fumiama.copymanga.MainActivity
+import top.fumiama.copymanga.tools.http.DownloadTools
import top.fumiama.copymanga.ui.settings.SettingsFragment.Companion.settingsPref
import java.io.File
+import java.net.URLEncoder
object CMApi {
var myGlideHeaders: LazyHeaders? = null
@@ -23,4 +26,15 @@ object CMApi {
fun getZipFile(exDir: File?, manga: String, caption: CharSequence, name: CharSequence) = File(exDir, "$manga/$caption/$name.zip")
fun getApiUrl(id: Int, arg1: String?, arg2: String?) = MainActivity.mainWeakReference?.get()?.getString(id)?.let { String.format(it, arg1, arg2) }
fun getApiUrl(id: Int, arg1: String?, arg2: String?, arg3: Int? = 0) = MainActivity.mainWeakReference?.get()?.getString(id)?.let { String.format(it, arg1, arg2, arg3) }
-}
\ No newline at end of file
+ fun getLoginConnection(username: String, pwd: String, salt: Int) = MainActivity.mainWeakReference?.get()?.getString(R.string.loginApiUrl)?.let {
+ DownloadTools.getConnection(it, "POST")?.apply {
+ doOutput = true
+ setRequestProperty("content-type", "application/x-www-form-urlencoded;charset=utf-8")
+ setRequestProperty("platform", "3")
+ setRequestProperty("accept", "application/json")
+ val r = if(settingsPref?.getBoolean("", false) == false) "1" else "0"
+ val pwdb64 = Base64.encode("$pwd-$salt".toByteArray(), Base64.DEFAULT).decodeToString()
+ outputStream.write("username=${URLEncoder.encode(username)}&password=$pwdb64&salt=$salt&platform=3&authorization=Token+&version=1.4.4&source=copyApp®ion=$r&webp=1".toByteArray())
+ }
+ }
+ }
diff --git a/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt
index 74cae1d..0e687e8 100644
--- a/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt
+++ b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt
@@ -1,10 +1,12 @@
package top.fumiama.copymanga.tools.http
+import android.content.Context
import android.util.Log
+import top.fumiama.copymanga.MainActivity
import top.fumiama.copymanga.tools.ssl.AllTrustManager
import top.fumiama.copymanga.tools.ssl.IgnoreHostNameVerifier
import top.fumiama.copymanga.ui.settings.SettingsFragment.Companion.settingsPref
-import java.io.File
+import top.fumiama.dmzj.copymanga.R
import java.net.HttpURLConnection
import java.net.URL
import java.net.URLEncoder
@@ -27,13 +29,25 @@ object DownloadTools {
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.socketFactory)
}
- private fun getConnection(url: String?, method: String = "GET") =
+ fun getConnection(url: String?, method: String = "GET", refer: String? = null, ua: String? = null) =
url?.let {
val connection = URL(url).openConnection() as HttpURLConnection
connection.requestMethod = method
connection.connectTimeout = 20000
connection.readTimeout = 20000
- connection
+ connection.apply {
+ ua?.let { setRequestProperty("user-agent", it) }
+ refer?.let { setRequestProperty("referer", it) }
+ setRequestProperty("source", "copyApp")
+ setRequestProperty("webp", "1")
+ setRequestProperty("region", if(settingsPref?.getBoolean("", false) == false) "1" else "0")
+ MainActivity.mainWeakReference?.get()?.getPreferences(Context.MODE_PRIVATE)?.getString("token", "")?.let {
+ if(it != "") setRequestProperty("authorization", "Token $it")
+ else setRequestProperty("authorization", "Token")
+ }
+ setRequestProperty("host", url.substringAfter("://").substringBefore("/"))
+ setRequestProperty("platform", "3")
+ }
}
fun getHttpContent(Url: String, refer: String? = null, ua: String? = null): ByteArray? {
@@ -41,15 +55,7 @@ object DownloadTools {
var ret: ByteArray? = null
val task = FutureTask(Callable {
try {
- getConnection(Url)?.apply {
- refer?.let { setRequestProperty("referer", it) }
- setRequestProperty("source", "copyApp")
- setRequestProperty("webp", "1")
- setRequestProperty("region", if(settingsPref?.getBoolean("", false) == false) "1" else "0")
- setRequestProperty("authorization", "Token")
- setRequestProperty("platform", "3")
- ua?.let { setRequestProperty("User-agent", it) }
-
+ getConnection(Url, "GET", refer, ua)?.apply {
ret = inputStream.readBytes()
disconnect()
}
@@ -67,37 +73,15 @@ object DownloadTools {
}
}
- fun getHttpContent(Url: String, refer: String? = null): ByteArray? {
- Log.d("Mydl", "getHttp: $Url")
- var ret: ByteArray? = null
- val task = FutureTask(Callable {
- try {
- val connection = getConnection(Url)
- refer?.let { connection?.setRequestProperty("referer", it) }
-
- ret = connection?.inputStream?.readBytes()
- connection?.disconnect()
- } catch (ex: Exception) {
- ex.printStackTrace()
- }
- return@Callable ret
- })
- Thread(task).start()
- return try {
- task.get()
- } catch (ex: Exception) {
- ex.printStackTrace()
- null
- }
- }
-
fun getHttpContent(Url: String, readSize: Int, refer: String? = "https://api.copymanga.com"): ByteArray? {
Log.d("Mydl", "getHttp: $Url")
var ret: ByteArray? = null
val task = FutureTask(Callable {
try {
- val connection = getConnection(Url)
- refer?.let { connection?.setRequestProperty("referer", it) }
+ val connection = getConnection(Url, "GET", refer)?.apply {
+ ret = inputStream.readBytes()
+ disconnect()
+ }
val ci = connection?.inputStream
if(readSize > 0) {
@@ -126,8 +110,10 @@ object DownloadTools {
var ret: ByteArray? = null
val task = FutureTask(Callable {
try {
- val connection = getConnection(it)
- refer?.let { connection?.setRequestProperty("referer", it) }
+ val connection = getConnection(it, "GET", refer)?.apply {
+ ret = inputStream.readBytes()
+ disconnect()
+ }
val ci = connection?.inputStream
ret = ci?.readBytes()
@@ -148,33 +134,4 @@ object DownloadTools {
return@replace URLEncoder.encode(match.value, "UTF-8")
}
}
-
- fun downloadUsingUrlRet(url: String?, f: File, refer: String?): Boolean {
- Log.d("Mydl", "Ret Get url: $url, File: $f")
- val task = FutureTask(Callable {
- val connection = getConnection(replaceChineseCharacters(url))
- if(refer != null) connection?.setRequestProperty("referer", refer)
-
- if (f.exists()) f.delete()
- else f.parentFile?.mkdirs()
- f.parentFile?.let {
- if (!it.canRead()) it.setReadable(true)
- if (!it.canWrite()) it.setWritable(true)
- }
- val ci = connection?.inputStream
- val fo = f.outputStream()
- ci?.buffered()?.copyTo(fo)
- fo.close()
- ci?.close()
- connection?.disconnect()
- return@Callable true
- })
- Thread(task).start()
- return try {
- task.get()
- } catch (ex: Exception) {
- ex.printStackTrace()
- false
- }
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt
index a08123e..5ef9c40 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt
@@ -54,7 +54,7 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
}
fun setStartRead() {
- mainWeakReference?.get()?.apply {
+ if(bookHandler.chapterNames.isNotEmpty()) mainWeakReference?.get()?.apply {
bookHandler.book?.results?.comic?.name?.let { name ->
getPreferences(MODE_PRIVATE).getInt(name, -1).let { p ->
this@BookFragment.lbbstart.apply {
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt
index f731815..801308b 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt
@@ -253,19 +253,19 @@ class BookHandler(that: WeakReference, private val path: String)
line = layoutInflater.inflate(R.layout.line_chapter, that.fbl, false)
line?.lcc?.apply {
lct.text = it.name
- setOnClickListener { _ -> Reader.viewMangaAt(it.name, i) }
+ setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) }
}
fbl?.addView(line)
} else {
line = layoutInflater.inflate(R.layout.line_2chapters, that.fbl, false)
line?.l2cl?.apply {
lct.text = it.name
- setOnClickListener { _ -> Reader.viewMangaAt(it.name, i) }
+ setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) }
}
}
} else line?.l2cr?.apply {
lct.text = it.name
- setOnClickListener { _ -> Reader.viewMangaAt(it.name, i) }
+ setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) }
fbl?.addView(line)
line = null
}
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/history/HistoryFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/history/HistoryFragment.kt
new file mode 100644
index 0000000..c5c1211
--- /dev/null
+++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/history/HistoryFragment.kt
@@ -0,0 +1,22 @@
+package top.fumiama.copymanga.ui.cardflow.history
+
+import android.view.View
+import kotlinx.android.synthetic.main.line_lazybooklines.*
+import top.fumiama.copymanga.MainActivity
+import top.fumiama.copymanga.template.ui.InfoCardLoader
+import top.fumiama.dmzj.copymanga.R
+
+@OptIn(ExperimentalStdlibApi::class)
+class HistoryFragment : InfoCardLoader(R.layout.fragment_history, R.id.action_nav_history_to_nav_book, isHistoryBook = true) {
+ override fun getApiUrl() =
+ getString(R.string.historyApiUrl).let {
+ String.format(it, page * 21)
+ }
+
+ override fun onLoadFinish() {
+ super.onLoadFinish()
+ MainActivity.mainWeakReference?.get()?.runOnUiThread {
+ mypl.visibility = View.GONE
+ }
+ }
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/newest/NewestFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/newest/NewestFragment.kt
index 2e61074..bbc0a0d 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/newest/NewestFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/newest/NewestFragment.kt
@@ -19,4 +19,4 @@ class NewestFragment : InfoCardLoader(R.layout.fragment_newest, R.id.action_nav_
mypl.visibility = View.GONE
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/history/HistoryFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/history/HistoryFragment.kt
deleted file mode 100644
index 4cf5317..0000000
--- a/app/src/main/java/top/fumiama/copymanga/ui/history/HistoryFragment.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package top.fumiama.copymanga.ui.history
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.fragment.app.Fragment
-import kotlinx.android.synthetic.main.fragment_history.*
-import top.fumiama.dmzj.copymanga.R
-
-class HistoryFragment : Fragment() {
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- return inflater.inflate(R.layout.fragment_history, container, false)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt
index 9c3de13..b73cce1 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt
@@ -2,19 +2,17 @@ package top.fumiama.copymanga.ui.settings
import android.content.SharedPreferences
import android.os.Bundle
-import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
-import androidx.preference.SeekBarPreference
import top.fumiama.dmzj.copymanga.R
class SettingsFragment: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.pref_setting, rootKey)
- settingsPref = context?.let { PreferenceManager.getDefaultSharedPreferences(it) }
+ if(settingsPref == null) settingsPref = context?.let { PreferenceManager.getDefaultSharedPreferences(it) }
}
companion object {
- var settingsPref: SharedPreferences? = null
+ var settingsPref: SharedPreferences? = SettingsFragment().context?.let {PreferenceManager.getDefaultSharedPreferences(it)}
}
}
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt b/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt
index 29856a6..a889838 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt
@@ -25,9 +25,7 @@ import kotlinx.android.synthetic.main.line_header.view.*
import kotlinx.android.synthetic.main.page_imgview.*
import kotlinx.android.synthetic.main.page_imgview.view.*
import kotlinx.android.synthetic.main.page_scrollimgview.*
-import kotlinx.android.synthetic.main.page_scrollimgview.view.*
import kotlinx.android.synthetic.main.widget_infodrawer.*
-import kotlinx.android.synthetic.main.widget_infodrawer.view.*
import kotlinx.android.synthetic.main.widget_titlebar.*
import kotlinx.android.synthetic.main.widget_titlebar.view.*
import kotlinx.android.synthetic.main.widget_viewmangainfo.*
@@ -43,7 +41,7 @@ import java.io.ByteArrayOutputStream
import java.io.File
import java.io.InputStream
import java.lang.ref.WeakReference
-import java.util.*
+import top.fumiama.copymanga.ui.settings.SettingsFragment.Companion.settingsPref
import java.util.concurrent.FutureTask
import java.util.zip.ZipFile
@@ -96,16 +94,16 @@ class ViewMangaActivity : TitleActivityTemplate() {
//zipFirst = intent.getStringExtra("callFrom") == "zipFirst"
cut = pb["useCut"]
r2l = pb["r2l"]
- verticalLoadMaxCount = p["verticalMax"].let { if(it > 0) it else 20 }
+ verticalLoadMaxCount = settingsPref?.getInt("settings_cat_vm_sb_vertical_max", 20)?.let { if(it > 0) it else 20 }?:20
isVertical = pb["vertical"]
notUseVP = pb["noVP"] || isVertical
//url = intent.getStringExtra("url")
handler = VMHandler(this, if(urlArray.isNotEmpty()) urlArray[position] else "")
- p["quality"].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.canDo = true
tt.start()
- volTurnPage = pb["volturn"]
+ volTurnPage = settingsPref?.getBoolean("settings_cat_vm_sw_vol_turn", false)?:false
am = getSystemService(Service.AUDIO_SERVICE) as AudioManager
Log.d("MyVM", "Now ZipFile is $zipFile")
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 38fef41..6eaa6d1 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -79,7 +79,7 @@
android:layout_marginTop="4dp"
android:fontFamily="@font/calibri"
android:gravity="center"
- android:text="This is the third-party app for manga reading"
+ android:text="A third-party app for manga reading"
android:textColor="#9affffff"
android:textSize="10sp" />
@@ -102,9 +102,10 @@
@@ -117,6 +118,7 @@
+ android:layout_height="match_parent">
-
+ android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index 1c36912..2f62c08 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -83,9 +83,17 @@
+ tools:layout="@layout/fragment_history" >
+
+
获取图书信息失败
网络错误
- https://api.copymanga.info/api/v3/h5/homeIndex?platform=3&format=json
+ https://api.copymanga.info/api/v3/h5/homeIndex?platform=3
"https://api.copymanga.info"
- https://api.copymanga.info/api/v3/ranks?limit=21&offset=%1$d&date_type=%2$s&platform=3&format=json
- https://api.copymanga.info/api/v3/search/comic?limit=21&offset=%1$d&q=%2$s&q_type=%3$s&platform=3&format=json
- https://api.copymanga.info/api/v3/h5/filterIndex/comic/tags?platform=3&format=json
- https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3&format=json
- https://api.copymanga.info/api/v3/comic2/%1$s?platform=3&format=json
- https://api.copymanga.info/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d&platform=3&format=json
- https://api.copymanga.info/api/v3/comic/%1$s/chapter2/%2$s?platform=3&format=json
- https://api.copymanga.info/api/v3/topic/%1$s?platform=3&format=json
- https://api.copymanga.info/api/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$d&platform=3&format=json
- https://api.copymanga.info/api/v3/recs?pos=3200102&limit=21&offset=%1$d&platform=3&format=json
- https://api.copymanga.info/api/v3/update/newest?limit=21&offset=%1$d&platform=3&format=json
- https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&top=finish&platform=3&format=json
- https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&author=%3$s&platform=3&format=json
- https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3&format=json
+ "api.copymanga.info"
+ https://api.copymanga.info/api/v3/ranks?limit=21&offset=%1$d&date_type=%2$s&platform=3
+ https://api.copymanga.info/api/v3/search/comic?limit=21&offset=%1$d&q=%2$s&q_type=%3$s&platform=3
+ https://api.copymanga.info/api/v3/h5/filterIndex/comic/tags?platform=3
+ https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3
+ https://api.copymanga.info/api/v3/comic2/%1$s?platform=3
+ https://api.copymanga.info/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d&platform=3
+ https://api.copymanga.info/api/v3/comic/%1$s/chapter2/%2$s?platform=3
+ https://api.copymanga.info/api/v3/topic/%1$s?platform=3
+ https://api.copymanga.info/api/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$d&platform=3
+ https://api.copymanga.info/api/v3/recs?pos=3200102&limit=21&offset=%1$d&platform=3
+ https://api.copymanga.info/api/v3/update/newest?limit=21&offset=%1$d&platform=3
+ https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&top=finish&platform=3
+ https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&author=%3$s&platform=3
+ https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3
+ https://api.copymanga.info/api/v3/login?platform=3
+ https://api.copymanga.info/api/v3/member/info?platform=3
+ https://api.copymanga.info/api/v3/member/browse/comics?limit=21&offset=%1$d&platform=3
已完结
@@ -56,7 +60,7 @@
LOWPAN
无网络
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36 Edg/86.0.622.38
+ Dart/2.16 (dart:io)
更新时间
热度
@@ -92,4 +96,9 @@
默认为20
图片质量
默认为100
-
\ No newline at end of file
+
+
+ 用户名为空
+ 密码为空
+ 连接失败
+
diff --git a/app/src/main/res/xml/pref_setting.xml b/app/src/main/res/xml/pref_setting.xml
index ffda7ad..a065df5 100644
--- a/app/src/main/res/xml/pref_setting.xml
+++ b/app/src/main/res/xml/pref_setting.xml
@@ -22,7 +22,6 @@
app:title="@string/settings_cat_vm_sw_vol_turn" />