From af8aca46a47b9f2e0f815b3e5dae268027ba30fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Mon, 24 Mar 2025 18:44:00 +0900
Subject: [PATCH] =?UTF-8?q?v2.3.8=20=E4=BC=98=E5=8C=96=201.=20=E9=9B=86?=
=?UTF-8?q?=E4=B8=AD=E7=AE=A1=E7=90=86=E8=AE=BE=E7=BD=AE=E9=A1=B9=20?=
=?UTF-8?q?=E5=8D=87=E7=BA=A7=201.=20androidx.constraintlayout=20->=202.2.?=
=?UTF-8?q?1=202.=20gson=20->=202.12.1=203.=20lottie=20->=206.6.4=204.=20j?=
=?UTF-8?q?na=20->=205.17.0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/dictionaries/fumiama.xml | 1 +
app/build.gradle | 8 +-
.../top/fumiama/copymanga/LoginActivity.kt | 21 ++---
.../top/fumiama/copymanga/MainActivity.kt | 48 +++++-----
.../java/top/fumiama/copymanga/api/Config.kt | 93 +++++++++++++++++++
.../java/top/fumiama/copymanga/manga/Book.kt | 10 +-
.../manga/{MangaDlTools.kt => Downloader.kt} | 2 +-
.../java/top/fumiama/copymanga/manga/Shelf.kt | 21 ++---
.../top/fumiama/copymanga/manga/Volume.kt | 4 +-
.../template/general/NoBackRefreshFragment.kt | 7 +-
.../template/http/AutoDownloadHandler.kt | 5 +-
.../template/http/PausableDownloader.kt | 8 +-
.../fumiama/copymanga/template/ui/CardList.kt | 4 +-
.../copymanga/template/ui/StatusCardFlow.kt | 6 +-
.../copymanga/template/ui/ThemeCardFlow.kt | 4 +-
.../top/fumiama/copymanga/tools/api/CMApi.kt | 78 ----------------
.../copymanga/tools/file/PreferenceBoolean.kt | 20 ++++
.../copymanga/tools/file/PreferenceInt.kt | 20 ++++
.../copymanga/tools/file/PreferenceString.kt | 36 +++++++
.../copymanga/tools/file/UserPreferenceInt.kt | 46 +++++++++
.../tools/file/UserPreferenceString.kt | 62 +++++++++++++
.../fumiama/copymanga/tools/http/Comandy.kt | 24 ++---
.../copymanga/tools/http/DownloadPool.kt | 7 +-
.../copymanga/tools/http/DownloadTools.kt | 46 +++------
.../top/fumiama/copymanga/tools/http/Proxy.kt | 48 ++--------
.../top/fumiama/copymanga/tools/ui/UITools.kt | 32 +++----
.../fumiama/copymanga/ui/book/BookHandler.kt | 10 +-
.../ui/cardflow/history/HistoryFragment.kt | 4 +-
.../ui/cardflow/newest/NewestFragment.kt | 4 +-
.../ui/cardflow/rank/RankFragment.kt | 4 +-
.../ui/cardflow/recommend/RecFragment.kt | 4 +-
.../ui/cardflow/search/SearchFragment.kt | 4 +-
.../ui/cardflow/shelf/ShelfFragment.kt | 4 +-
.../ui/cardflow/sort/SortFragment.kt | 6 +-
.../ui/cardflow/topic/TopicFragment.kt | 6 +-
.../copymanga/ui/comicdl/ComicDlFragment.kt | 2 +-
.../copymanga/ui/comicdl/ComicDlHandler.kt | 25 +++--
.../copymanga/ui/download/DownloadFragment.kt | 4 +-
.../ui/download/NewDownloadFragment.kt | 11 +--
.../fumiama/copymanga/ui/home/HomeFragment.kt | 8 +-
.../fumiama/copymanga/ui/home/HomeHandler.kt | 6 +-
.../copymanga/ui/vm/ViewMangaActivity.kt | 39 ++++----
.../java/top/fumiama/copymanga/user/Member.kt | 91 ++++++++----------
app/src/main/res/values/strings.xml | 2 +-
44 files changed, 489 insertions(+), 406 deletions(-)
create mode 100644 app/src/main/java/top/fumiama/copymanga/api/Config.kt
rename app/src/main/java/top/fumiama/copymanga/manga/{MangaDlTools.kt => Downloader.kt} (99%)
delete mode 100644 app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt
create mode 100644 app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceBoolean.kt
create mode 100644 app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceInt.kt
create mode 100644 app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceString.kt
create mode 100644 app/src/main/java/top/fumiama/copymanga/tools/file/UserPreferenceInt.kt
create mode 100644 app/src/main/java/top/fumiama/copymanga/tools/file/UserPreferenceString.kt
diff --git a/.idea/dictionaries/fumiama.xml b/.idea/dictionaries/fumiama.xml
index 8dc0886..54f8c0f 100644
--- a/.idea/dictionaries/fumiama.xml
+++ b/.idea/dictionaries/fumiama.xml
@@ -17,6 +17,7 @@
pausable
reclass
reilia
+ systembar
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 652394e..e265bb9 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -78,7 +78,7 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.12.0'
- implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
//noinspection GradleDependency
implementation 'androidx.navigation:navigation-fragment-ktx:2.7.7'
//noinspection GradleDependency
@@ -91,13 +91,13 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.16.0'
//noinspection KaptUsageInsteadOfKsp
kapt 'com.github.bumptech.glide:compiler:4.16.0'
- implementation 'com.google.code.gson:gson:2.11.0'
+ implementation 'com.google.code.gson:gson:2.12.1'
implementation 'com.github.vovaksenov99:OverscrollableScrollView:1.0'
implementation 'com.github.liaoinstan.SpringView:library:0a24d3e9dd'
implementation 'com.github.zawadz88:MaterialPopupMenu:4.1.0'
implementation files('libs/com.lapism/search-2.4.1.aar') // https://stackoverflow.com/a/63029110/28801553
//noinspection GradleDependency
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.7.0'
- implementation 'com.airbnb.android:lottie:6.5.2'
- implementation 'net.java.dev.jna:jna:5.15.0@aar'
+ implementation 'com.airbnb.android:lottie:6.6.4'
+ implementation 'net.java.dev.jna:jna:5.17.0@aar'
}
diff --git a/app/src/main/java/top/fumiama/copymanga/LoginActivity.kt b/app/src/main/java/top/fumiama/copymanga/LoginActivity.kt
index 0706698..cf6f65c 100644
--- a/app/src/main/java/top/fumiama/copymanga/LoginActivity.kt
+++ b/app/src/main/java/top/fumiama/copymanga/LoginActivity.kt
@@ -7,9 +7,9 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import androidx.lifecycle.lifecycleScope
-import androidx.preference.PreferenceManager
import kotlinx.android.synthetic.main.activity_login.*
import kotlinx.coroutines.launch
+import top.fumiama.copymanga.api.Config
import top.fumiama.dmzj.copymanga.R
import kotlin.random.Random
@@ -18,11 +18,10 @@ class LoginActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
- val pref = MainActivity.mainWeakReference?.get()?.getPreferences(MODE_PRIVATE) ?: return
- val isLogout = pref.getString("token", null) != null
+ val isLogout = !Config.token.value.isNullOrEmpty()
if (isLogout) {
alblogin.setText(R.string.logout)
- altusrnm.setText(pref.getString("username", "N/A"))
+ altusrnm.setText(Config.username.value)
}
alblogin.setOnClickListener {
lifecycleScope.launch {
@@ -61,14 +60,12 @@ class LoginActivity : AppCompatActivity() {
Toast.makeText(this@LoginActivity, l?.message, Toast.LENGTH_LONG).show()
}
}
- PreferenceManager.getDefaultSharedPreferences(this)?.apply {
- if (getBoolean("settings_cat_general_sw_enable_transparent_systembar", false)) {
- WindowCompat.setDecorFitsSystemWindows(window, false)
- window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
- window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
- window.statusBarColor = 0
- window.navigationBarColor = 0
- }
+ if (Config.general_enable_transparent_system_bar.value) {
+ WindowCompat.setDecorFitsSystemWindows(window, false)
+ window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
+ window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
+ window.statusBarColor = 0
+ window.navigationBarColor = 0
}
}
}
diff --git a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt
index 41375ef..7793c94 100644
--- a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt
+++ b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt
@@ -23,7 +23,6 @@ import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
-import androidx.collection.size
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.content.edit
@@ -32,7 +31,6 @@ import androidx.core.view.WindowCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
-import androidx.navigation.contains
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
@@ -52,6 +50,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.manga.Shelf
import top.fumiama.copymanga.tools.ui.UITools
import top.fumiama.copymanga.ui.book.BookFragment.Companion.bookHandler
@@ -172,7 +171,7 @@ class MainActivity : AppCompatActivity() {
)[it])
}
}
- if (getBoolean("settings_cat_general_sw_enable_transparent_systembar", false)) {
+ if (Config.general_enable_transparent_system_bar.value) {
WindowCompat.setDecorFitsSystemWindows(window, false)
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
@@ -255,23 +254,22 @@ class MainActivity : AppCompatActivity() {
}
}
- suspend fun refreshUserInfo() = withContext(Dispatchers.IO) {
- getPreferences(MODE_PRIVATE)?.apply {
- val name = getString("nickname", getString("username", ""))
- val avatar = getString("avatar", "")
- navttitle.apply { post {
- if(name != "") text = name
- else setText(R.string.noLogin)
- } }
- navhicon.apply ic@ { post {
- if(avatar != "")
- Glide.with(this@MainActivity).load(avatar)
- .apply(RequestOptions.bitmapTransform(CircleCrop()))
- .timeout(60000)
- .into(this@ic)
- else setImageResource(R.mipmap.ic_launcher)
- } }
- }
+ suspend fun refreshUserInfo(): Unit = withContext(Dispatchers.IO) {
+ var name = Config.nickname.value
+ if (name.isNullOrEmpty()) name = Config.username.value
+ val avatar = Config.avatar.value
+ navttitle.apply { post {
+ if(!name.isNullOrEmpty()) text = name
+ else setText(R.string.noLogin)
+ } }
+ navhicon.apply ic@ { post {
+ if(!avatar.isNullOrEmpty())
+ Glide.with(this@MainActivity).load(avatar)
+ .apply(RequestOptions.bitmapTransform(CircleCrop()))
+ .timeout(60000)
+ .into(this@ic)
+ else setImageResource(R.mipmap.ic_launcher)
+ } }
}
private fun changeMenuList(latestDestination: Int) {
@@ -450,9 +448,7 @@ class MainActivity : AppCompatActivity() {
get() {
if (field != null) return field
return mainWeakReference?.get()?.let {
- field = Shelf(
- it.getPreferences(Context.MODE_PRIVATE)
- .getString("token", "")?:return@let null) { id ->
+ field = Shelf { id ->
return@Shelf it.getString(id)
}
field
@@ -462,10 +458,8 @@ class MainActivity : AppCompatActivity() {
get() {
if (field != null) return field
return mainWeakReference?.get()?.let {
- it.getPreferences(MODE_PRIVATE)?.let { pref ->
- field = Member(pref) { id ->
- return@Member it.getString(id)
- }
+ field = Member { id ->
+ return@Member it.getString(id)
}
field
}
diff --git a/app/src/main/java/top/fumiama/copymanga/api/Config.kt b/app/src/main/java/top/fumiama/copymanga/api/Config.kt
new file mode 100644
index 0000000..bb501ea
--- /dev/null
+++ b/app/src/main/java/top/fumiama/copymanga/api/Config.kt
@@ -0,0 +1,93 @@
+package top.fumiama.copymanga.api
+
+import com.bumptech.glide.load.model.LazyHeaders
+import top.fumiama.copymanga.MainActivity
+import top.fumiama.copymanga.tools.file.PreferenceBoolean
+import top.fumiama.copymanga.tools.file.PreferenceInt
+import top.fumiama.copymanga.tools.file.PreferenceString
+import top.fumiama.copymanga.tools.file.UserPreferenceInt
+import top.fumiama.copymanga.tools.file.UserPreferenceString
+import top.fumiama.copymanga.tools.http.Proxy
+import top.fumiama.copymanga.tools.http.Resolution
+import top.fumiama.dmzj.copymanga.R
+import java.io.File
+
+object Config {
+ var imageProxy: Proxy? = null
+ get() {
+ if (!net_use_img_proxy.value) return null
+ if (field != null) return field
+ field = Proxy(
+ R.string.imgProxyApiUrl,
+ Regex("^https://[0-9a-z-]+\\.mangafun[a-z]\\.(xyz|fun)/"),
+ )
+ return field
+ }
+ var apiProxy: Proxy? = null
+ get() {
+ if (!net_use_api_proxy.value) return null
+ if (field != null) return field
+ field = Proxy(
+ R.string.apiProxyApiUrl,
+ Regex("^https://(api|www)\\.(copymanga|mangacopy|copy-manga)\\.\\w+/api/"),
+ )
+ return field
+ }
+ val resolution = Resolution(Regex("c\\d+x\\."))
+
+ var myGlideHeaders: LazyHeaders? = null
+ get() {
+ if (field === null)
+ field = LazyHeaders.Builder()
+ .addHeader("referer", referer)
+ .addHeader("User-Agent", pc_ua)
+ .addHeader("source", "copyApp")
+ .addHeader("webp", "1")
+ .addHeader("version", app_ver.value)
+ .addHeader(
+ "region",
+ if (net_use_foreign.value) "1" else "0"
+ )
+ .addHeader("platform", "3")
+ .build()
+ return field
+ }
+
+ val myHostApiUrl = PreferenceString("settings_cat_net_et_api_url", R.string.hostUrl)
+ val proxy_key = PreferenceString(R.string.imgProxyKeyID)
+ val app_ver = PreferenceString("settings_cat_general_et_app_version", R.string.app_ver)
+ val token = UserPreferenceString("token", "", null)
+ val pc_ua get() = MainActivity.mainWeakReference?.get()?.getString(R.string.pc_ua)?.format(app_ver.value)?:""
+ val referer get() = MainActivity.mainWeakReference?.get()?.getString(R.string.referer)?.format(app_ver.value)?:""
+ val comandy_version = UserPreferenceInt("comandy_version", 0)
+ val user_id = UserPreferenceString("user_id")
+ val username = UserPreferenceString("username")
+ val nickname = UserPreferenceString("nickname")
+ val avatar = UserPreferenceString("avatar")
+
+ val general_enable_transparent_system_bar = PreferenceBoolean("settings_cat_general_sw_enable_transparent_systembar", false)
+ val general_disable_kanban_animation = PreferenceBoolean("settings_cat_general_sw_disable_kanban_animation", false)
+ val general_card_per_row = PreferenceInt("settings_cat_general_sb_card_per_row", 0)
+
+ val manga_dl_max_batch = PreferenceInt("settings_cat_md_sb_max_batch", 16)
+ val manga_dl_show_0m_manga = PreferenceBoolean("settings_cat_md_sw_show_0m_manga", false)
+
+ val net_use_comandy = PreferenceBoolean("settings_cat_net_sw_use_comandy", false)
+ val net_use_foreign = PreferenceBoolean("settings_cat_net_sw_use_foreign", false)
+ private val net_use_img_proxy = PreferenceBoolean("settings_cat_net_sw_use_img_proxy", false)
+ val net_use_api_proxy = PreferenceBoolean("settings_cat_net_sw_use_api_proxy", false)
+
+ val view_manga_always_dark_bg = PreferenceBoolean("settings_cat_vm_sw_always_dark_bg", false)
+ val view_manga_vertical_max = PreferenceInt("settings_cat_vm_sb_vertical_max", 20)
+ val view_manga_quality = PreferenceInt("settings_cat_vm_sb_quality", 100)
+ val view_manga_vol_turn = PreferenceBoolean("settings_cat_vm_sw_vol_turn", false)
+ val view_manga_use_cellar = PreferenceBoolean("settings_cat_net_sw_use_cellar", false)
+ val view_manga_hide_info = PreferenceBoolean("settings_cat_vm_sw_hide_info", false)
+
+ fun getZipFile(exDir: File?, manga: String, caption: CharSequence, name: CharSequence) =
+ File(File(File(exDir, manga), caption.toString()), "$name.zip")
+
+ fun getChapterInfoApiUrl(path: String?, uuid: String?, version: Int) =
+ MainActivity.mainWeakReference?.get()?.getString(R.string.chapterInfoApiUrl)
+ ?.format(myHostApiUrl.value, path, if (version >= 2) "$version" else "" , uuid)
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/manga/Book.kt b/app/src/main/java/top/fumiama/copymanga/manga/Book.kt
index 6fe10a1..2674a79 100644
--- a/app/src/main/java/top/fumiama/copymanga/manga/Book.kt
+++ b/app/src/main/java/top/fumiama/copymanga/manga/Book.kt
@@ -9,16 +9,16 @@ import kotlinx.coroutines.withContext
import top.fumiama.copymanga.json.BookInfoStructure
import top.fumiama.copymanga.json.ThemeStructure
import top.fumiama.copymanga.json.VolumeStructure
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.tools.http.DownloadTools
import top.fumiama.dmzj.copymanga.R
import java.io.File
class Book(val path: String, private val getString: (Int) -> String, private val exDir: File, private val loadCache: Boolean = false, private val mPassName: String? = null) {
- private val mBookApiUrl = getString(R.string.bookInfoApiUrl).format(CMApi.myHostApiUrl, path).let {
- CMApi.apiProxy?.wrap(it)?:it
+ private val mBookApiUrl = getString(R.string.bookInfoApiUrl).format(Config.myHostApiUrl.value, path).let {
+ Config.apiProxy?.wrap(it)?:it
}
- private val mUserAgent = getString(R.string.pc_ua).format(DownloadTools.app_ver)
+ private val mUserAgent = getString(R.string.pc_ua).format(Config.app_ver.value)
private var mBook: BookInfoStructure? = null
private var mGroupPathWords = arrayOf()
private var mKeys = arrayOf()
@@ -139,7 +139,7 @@ class Book(val path: String, private val getString: (Int) -> String, private val
val mangaFolder = File(exDir, name)
if(!mangaFolder.exists()) mangaFolder.mkdirs()
val f = File(mangaFolder, "head.jpg")
- if(force || !f.exists()) (cover?.let { CMApi.imageProxy?.wrap(it) } ?:cover)?.let {
+ if(force || !f.exists()) (cover?.let { Config.imageProxy?.wrap(it) } ?:cover)?.let {
Thread {
DownloadTools.getHttpContent(it, -1)?.let { data ->
f.writeBytes(data)
diff --git a/app/src/main/java/top/fumiama/copymanga/manga/MangaDlTools.kt b/app/src/main/java/top/fumiama/copymanga/manga/Downloader.kt
similarity index 99%
rename from app/src/main/java/top/fumiama/copymanga/manga/MangaDlTools.kt
rename to app/src/main/java/top/fumiama/copymanga/manga/Downloader.kt
index 1aece32..002cf2c 100644
--- a/app/src/main/java/top/fumiama/copymanga/manga/MangaDlTools.kt
+++ b/app/src/main/java/top/fumiama/copymanga/manga/Downloader.kt
@@ -8,7 +8,7 @@ import top.fumiama.copymanga.template.http.PausableDownloader
import top.fumiama.copymanga.tools.http.DownloadPool
import java.io.File
-class MangaDlTools {
+class Downloader {
private var pool: DownloadPool? = null
private var grp: CharSequence = ""
private var indexMap = hashMapOf()
diff --git a/app/src/main/java/top/fumiama/copymanga/manga/Shelf.kt b/app/src/main/java/top/fumiama/copymanga/manga/Shelf.kt
index b7c4024..6f1df3f 100644
--- a/app/src/main/java/top/fumiama/copymanga/manga/Shelf.kt
+++ b/app/src/main/java/top/fumiama/copymanga/manga/Shelf.kt
@@ -5,16 +5,15 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import top.fumiama.copymanga.json.BookQueryStructure
import top.fumiama.copymanga.json.ReturnBase
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.tools.http.DownloadTools
import top.fumiama.dmzj.copymanga.R
-class Shelf(private val token: String, private val getString: (Int) -> String) {
- private val apiUrl: String get() = getString(R.string.shelfOperateApiUrl).format(CMApi.myHostApiUrl)
+class Shelf(private val getString: (Int) -> String) {
+ private val apiUrl: String get() = getString(R.string.shelfOperateApiUrl).format(Config.myHostApiUrl.value)
private val queryApiUrlTemplate = getString(R.string.bookUserQueryApiUrl)
- private val referer: String = getString(R.string.referer).format(DownloadTools.app_ver)
- private val addApiUrl get() = "$apiUrl?platform=3".let { CMApi.apiProxy?.wrap(it)?:it }
- private val delApiUrl get() = "${apiUrl}s?platform=3".let { CMApi.apiProxy?.wrap(it)?:it }
+ private val addApiUrl get() = "$apiUrl?platform=3".let { Config.apiProxy?.wrap(it)?:it }
+ private val delApiUrl get() = "${apiUrl}s?platform=3".let { Config.apiProxy?.wrap(it)?:it }
suspend fun add(comicId: String): String = withContext(Dispatchers.IO) {
if (comicId.isEmpty()) {
return@withContext "空漫画ID"
@@ -24,7 +23,7 @@ class Shelf(private val token: String, private val getString: (Int) -> String) {
append(comicId)
append("&is_collect=1&authorization=Token+")
append("")
- append(token)
+ append(Config.token.value)
}
val re = DownloadTools.requestWithBody(
addApiUrl, "POST", body.encodeToByteArray()
@@ -47,7 +46,7 @@ class Shelf(private val token: String, private val getString: (Int) -> String) {
append("&")
}
append("authorization=Token+")
- append(token)
+ append(Config.token.value)
}
val re = DownloadTools.requestWithBody(
delApiUrl, "DELETE", body.encodeToByteArray()
@@ -62,9 +61,9 @@ class Shelf(private val token: String, private val getString: (Int) -> String) {
suspend fun query(pathWord: String): BookQueryStructure? = withContext(Dispatchers.IO) {
try {
Gson().fromJson(DownloadTools.getHttpContent(
- queryApiUrlTemplate.format(CMApi.myHostApiUrl, pathWord).let {
- CMApi.apiProxy?.wrap(it)?:it
- }, referer
+ queryApiUrlTemplate.format(Config.myHostApiUrl.value, pathWord).let {
+ Config.apiProxy?.wrap(it)?:it
+ }, Config.referer
).decodeToString(), BookQueryStructure::class.java)
} catch (e: Exception) {
e.printStackTrace()
diff --git a/app/src/main/java/top/fumiama/copymanga/manga/Volume.kt b/app/src/main/java/top/fumiama/copymanga/manga/Volume.kt
index 65595c9..b414c4b 100644
--- a/app/src/main/java/top/fumiama/copymanga/manga/Volume.kt
+++ b/app/src/main/java/top/fumiama/copymanga/manga/Volume.kt
@@ -7,7 +7,7 @@ import kotlinx.coroutines.withContext
import top.fumiama.copymanga.json.ChapterStructure
import top.fumiama.copymanga.json.VolumeStructure
import top.fumiama.copymanga.template.http.PausableDownloader
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.dmzj.copymanga.R
class Volume(private val path: String, private val groupPathWord: String, getString: (Int) -> String, private val isExit: ()->Boolean, private val setProgress: ((Int) -> Unit)? = null) {
@@ -39,7 +39,7 @@ class Volume(private val path: String, private val groupPathWord: String, getStr
return@withContext mVolume
}
- private fun getApiUrl(offset: Int) = mGroupInfoApiUrlTemplate.format(CMApi.myHostApiUrl, path, groupPathWord, offset)
+ private fun getApiUrl(offset: Int) = mGroupInfoApiUrlTemplate.format(Config.myHostApiUrl.value, path, groupPathWord, offset)
private suspend fun download(re: Array, offset: Int, c: Int) = withContext(Dispatchers.IO) {
Log.d("MyV", "下载偏移: $offset")
getApiUrl(offset).let {
diff --git a/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt b/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt
index 144d30a..b62c661 100644
--- a/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt
@@ -8,10 +8,9 @@ import android.view.View
import android.view.ViewGroup
import androidx.core.animation.doOnEnd
import androidx.fragment.app.Fragment
-import androidx.preference.PreferenceManager
import kotlinx.android.synthetic.main.content_main.*
-import kotlinx.coroutines.runBlocking
import top.fumiama.copymanga.MainActivity
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.tools.ui.UITools
import java.util.concurrent.atomic.AtomicBoolean
@@ -20,9 +19,7 @@ open class NoBackRefreshFragment(private val layoutToLoad: Int): Fragment() {
val rootView: View get() = _rootView!!
var isFirstInflate = true
var navBarHeight = 0
- private val disableAnimation = MainActivity.mainWeakReference?.get()?.let {
- PreferenceManager.getDefaultSharedPreferences(it)
- }?.getBoolean("settings_cat_general_sw_disable_kanban_animation", false)?:false
+ private val disableAnimation get() = Config.general_disable_kanban_animation.value
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
diff --git a/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt
index 6c41230..6a07b01 100644
--- a/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt
+++ b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt
@@ -13,9 +13,8 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
import top.fumiama.copymanga.json.ReturnBase
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.tools.http.DownloadTools
-import top.fumiama.dmzj.copymanga.R
import java.io.File
import java.security.MessageDigest
@@ -78,7 +77,7 @@ open class AutoDownloadHandler(
var cnt = 0
while (cnt++ <= 3) {
try {
- val data = DownloadTools.getHttpContent(CMApi.apiProxy?.wrap(url)?:url)
+ val data = DownloadTools.getHttpContent(Config.apiProxy?.wrap(url)?:url)
if(exit) return@withContext
val fi = data.inputStream()
val pass = setGsonItem(Gson().fromJson(fi.reader(), jsonClass))
diff --git a/app/src/main/java/top/fumiama/copymanga/template/http/PausableDownloader.kt b/app/src/main/java/top/fumiama/copymanga/template/http/PausableDownloader.kt
index c30c9aa..6fcf5a8 100644
--- a/app/src/main/java/top/fumiama/copymanga/template/http/PausableDownloader.kt
+++ b/app/src/main/java/top/fumiama/copymanga/template/http/PausableDownloader.kt
@@ -4,10 +4,8 @@ import android.util.Log
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext
-import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.tools.http.DownloadTools
-import top.fumiama.dmzj.copymanga.R
import kotlin.random.Random
class PausableDownloader(private val url: String, private val waitMilliseconds: Long = 0, private val isApi: Boolean = true, private val whenFinish: (suspend (result: ByteArray)->Unit)? = null) {
@@ -17,8 +15,8 @@ class PausableDownloader(private val url: String, private val waitMilliseconds:
while (!exit && c++ < 3) {
try {
val data = (DownloadTools.getHttpContent(
- (if(isApi) CMApi.apiProxy?.wrap(url) else null)?:url,
- DownloadTools.referer
+ (if(isApi) Config.apiProxy?.wrap(url) else null)?:url,
+ Config.referer
))
whenFinish?.let { it(data) }
return@withContext true
diff --git a/app/src/main/java/top/fumiama/copymanga/template/ui/CardList.kt b/app/src/main/java/top/fumiama/copymanga/template/ui/CardList.kt
index a924406..d045ae2 100644
--- a/app/src/main/java/top/fumiama/copymanga/template/ui/CardList.kt
+++ b/app/src/main/java/top/fumiama/copymanga/template/ui/CardList.kt
@@ -13,7 +13,7 @@ import kotlinx.android.synthetic.main.line_horizonal_empty.view.*
import kotlinx.android.synthetic.main.line_lazybooklines.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.tools.ui.GlideHideLottieViewListener
import top.fumiama.dmzj.copymanga.R
import java.io.File
@@ -131,7 +131,7 @@ class CardList(
that?.context?.let { context ->
val waitMillis = cardLoadingWaits.getAndIncrement().toLong()*200
val g = Glide.with(context).load(
- GlideUrl(CMApi.imageProxy?.wrap(head)?:head, CMApi.myGlideHeaders)
+ GlideUrl(Config.imageProxy?.wrap(head)?:head, Config.myGlideHeaders)
).addListener(GlideHideLottieViewListener(WeakReference(it.laic)) {
if (exitCardList) return@GlideHideLottieViewListener
cardLoadingWaits.decrementAndGet()
diff --git a/app/src/main/java/top/fumiama/copymanga/template/ui/StatusCardFlow.kt b/app/src/main/java/top/fumiama/copymanga/template/ui/StatusCardFlow.kt
index c3cc988..ccef14c 100644
--- a/app/src/main/java/top/fumiama/copymanga/template/ui/StatusCardFlow.kt
+++ b/app/src/main/java/top/fumiama/copymanga/template/ui/StatusCardFlow.kt
@@ -3,9 +3,7 @@ package top.fumiama.copymanga.template.ui
import android.animation.ObjectAnimator
import android.view.View
import kotlinx.android.synthetic.main.anchor_popular.view.*
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.withContext
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.dmzj.copymanga.R
@ExperimentalStdlibApi
@@ -20,7 +18,7 @@ open class StatusCardFlow(private val api: Int, nav: Int, inflateRes: Int,
override fun getApiUrl() =
getString(api).format(
- CMApi.myHostApiUrl,
+ Config.myHostApiUrl.value,
page * 21,
sortWay[sortValue]
)
diff --git a/app/src/main/java/top/fumiama/copymanga/template/ui/ThemeCardFlow.kt b/app/src/main/java/top/fumiama/copymanga/template/ui/ThemeCardFlow.kt
index 2759573..8b94cb5 100644
--- a/app/src/main/java/top/fumiama/copymanga/template/ui/ThemeCardFlow.kt
+++ b/app/src/main/java/top/fumiama/copymanga/template/ui/ThemeCardFlow.kt
@@ -4,7 +4,7 @@ import android.os.Bundle
import android.view.View
import kotlinx.android.synthetic.main.app_bar_main.*
import kotlinx.android.synthetic.main.line_finish.*
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.dmzj.copymanga.R
@ExperimentalStdlibApi
@@ -12,7 +12,7 @@ open class ThemeCardFlow(private val api: Int, nav: Int) : StatusCardFlow(0, nav
private var theme = ""
override fun getApiUrl() =
getString(api).format(
- CMApi.myHostApiUrl,
+ Config.myHostApiUrl.value,
page * 21,
sortWay[sortValue],
theme
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
deleted file mode 100644
index 60ed57f..0000000
--- a/app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt
+++ /dev/null
@@ -1,78 +0,0 @@
-package top.fumiama.copymanga.tools.api
-
-import androidx.preference.PreferenceManager
-import com.bumptech.glide.load.model.LazyHeaders
-import top.fumiama.copymanga.MainActivity
-import top.fumiama.copymanga.tools.http.DownloadTools
-import top.fumiama.copymanga.tools.http.Proxy
-import top.fumiama.copymanga.tools.http.Resolution
-import top.fumiama.dmzj.copymanga.R
-import java.io.File
-
-object CMApi {
- var imageProxy: Proxy? = null
- get() {
- if (field != null) return field
- if (Proxy.useImageProxy) field = Proxy(
- R.string.imgProxyApiUrl,
- Regex("^https://[0-9a-z-]+\\.mangafun[a-z]\\.(xyz|fun)/"),
- R.string.imgProxyKeyID
- )
- return field
- }
- var apiProxy: Proxy? = null
- get() {
- if (field != null) return field
- if (Proxy.useApiProxy) field = Proxy(
- R.string.apiProxyApiUrl,
- Regex("^https://api\\.(copymanga|mangacopy)\\.\\w+/api/"),
- R.string.imgProxyKeyID
- )
- return field
- }
- var resolution = Resolution(Regex("c\\d+x\\."))
- var myGlideHeaders: LazyHeaders? = null
- get() {
- MainActivity.mainWeakReference?.get()?.let {
- PreferenceManager.getDefaultSharedPreferences(it).apply {
- if (field === null)
- field = LazyHeaders.Builder()
- .addHeader("referer", DownloadTools.referer)
- .addHeader("User-Agent", DownloadTools.pc_ua)
- .addHeader("source", "copyApp")
- .addHeader("webp", "1")
- .addHeader("version", DownloadTools.app_ver)
- .addHeader(
- "region",
- if (!getBoolean("settings_cat_net", false)) "1" else "0"
- )
- .addHeader("platform", "3")
- .build()
- }
- }
- return field
- }
- var myHostApiUrl: String = ""
- get() {
- if (field != "") return field
- MainActivity.mainWeakReference?.get()?.let {
- PreferenceManager.getDefaultSharedPreferences(it).apply {
- getString("settings_cat_net_et_api_url", "")?.let { host ->
- if (host != "") {
- field = host
- return host
- }
- }
- }
- field = it.getString(R.string.hostUrl)
- }
- return field
- }
-
- fun getZipFile(exDir: File?, manga: String, caption: CharSequence, name: CharSequence) =
- File(exDir, "$manga/$caption/$name.zip")
-
- fun getChapterInfoApiUrl(path: String?, uuid: String?, version: Int) =
- MainActivity.mainWeakReference?.get()?.getString(R.string.chapterInfoApiUrl)
- ?.format(myHostApiUrl, path, if (version >= 2) "$version" else "" , uuid)
-}
diff --git a/app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceBoolean.kt b/app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceBoolean.kt
new file mode 100644
index 0000000..92f8299
--- /dev/null
+++ b/app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceBoolean.kt
@@ -0,0 +1,20 @@
+package top.fumiama.copymanga.tools.file
+
+import android.util.Log
+import androidx.preference.PreferenceManager
+import top.fumiama.copymanga.MainActivity
+
+data class PreferenceBoolean(private val key: String, private var default: Boolean) {
+ val value: Boolean
+ get() {
+ MainActivity.mainWeakReference?.get()?.let {
+ PreferenceManager.getDefaultSharedPreferences(it).apply {
+ getBoolean(key, default).let { v ->
+ Log.d("MyPB", "get key $key value $v")
+ return v
+ }
+ }
+ }
+ return default
+ }
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceInt.kt b/app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceInt.kt
new file mode 100644
index 0000000..a761540
--- /dev/null
+++ b/app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceInt.kt
@@ -0,0 +1,20 @@
+package top.fumiama.copymanga.tools.file
+
+import android.util.Log
+import androidx.preference.PreferenceManager
+import top.fumiama.copymanga.MainActivity
+
+data class PreferenceInt(private val key: String, private var default: Int) {
+ val value: Int
+ get() {
+ MainActivity.mainWeakReference?.get()?.let {
+ PreferenceManager.getDefaultSharedPreferences(it).apply {
+ getInt(key, default).let { v ->
+ Log.d("MyPI", "get key $key value $v")
+ return v
+ }
+ }
+ }
+ return default
+ }
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceString.kt b/app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceString.kt
new file mode 100644
index 0000000..5b92784
--- /dev/null
+++ b/app/src/main/java/top/fumiama/copymanga/tools/file/PreferenceString.kt
@@ -0,0 +1,36 @@
+package top.fumiama.copymanga.tools.file
+
+import android.util.Log
+import androidx.preference.PreferenceManager
+import top.fumiama.copymanga.MainActivity
+
+data class PreferenceString(private val key: String, private var default: String?, private val defaultID: Int) {
+ constructor(key: Int, default: String?, defaultID: Int): this(
+ MainActivity.mainWeakReference?.get()?.getString(key) ?:"", default, defaultID)
+ constructor(key: String, default: Int): this(key, null, default)
+ constructor(key: Int): this(key, "", 0)
+
+ private val defaultField: String
+ get() {
+ if (default != null) return default!!
+ MainActivity.mainWeakReference?.get()?.let {
+ default = it.getString(defaultID)
+ }
+ return default?:""
+ }
+ val value: String
+ get() {
+ MainActivity.mainWeakReference?.get()?.let {
+ PreferenceManager.getDefaultSharedPreferences(it).apply {
+ getString(key, null)?.let { v ->
+ if (v.isNotEmpty()) {
+ Log.d("MyPS", "get key $key value $v")
+ return v
+ }
+ }
+ }
+ }
+ Log.d("MyPS", "get default key $key value $defaultField")
+ return defaultField
+ }
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/tools/file/UserPreferenceInt.kt b/app/src/main/java/top/fumiama/copymanga/tools/file/UserPreferenceInt.kt
new file mode 100644
index 0000000..3102dbb
--- /dev/null
+++ b/app/src/main/java/top/fumiama/copymanga/tools/file/UserPreferenceInt.kt
@@ -0,0 +1,46 @@
+package top.fumiama.copymanga.tools.file
+
+import android.util.Log
+import androidx.appcompat.app.AppCompatActivity.MODE_PRIVATE
+import androidx.core.content.edit
+import top.fumiama.copymanga.MainActivity
+
+data class UserPreferenceInt(private val key: String, private var default: Int) {
+ var value: Int? = null
+ get() {
+ field?.let {
+ Log.d("MyUPI", "get cached key $key value $it")
+ return it
+ }
+ MainActivity.mainWeakReference?.get()?.let {
+ it.getPreferences(MODE_PRIVATE).apply {
+ getInt(key, default).let { v ->
+ field = v
+ Log.d("MyUPI", "get new key $key value $v")
+ return v
+ }
+ }
+ }
+ Log.d("MyUPI", "get default key $key value $default")
+ return default
+ }
+ set(value) {
+ if (value == null) {
+ Log.d("MyUPI", "remove key $key")
+ MainActivity.mainWeakReference?.get()?.let {
+ it.getPreferences(MODE_PRIVATE).apply {
+ edit(commit = true) { remove(key) }
+ }
+ }
+ field = default
+ return
+ }
+ field = value
+ Log.d("MyUPI", "set key $key value $value")
+ MainActivity.mainWeakReference?.get()?.let {
+ it.getPreferences(MODE_PRIVATE).apply {
+ edit(commit = true) { putInt(key, value) }
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/tools/file/UserPreferenceString.kt b/app/src/main/java/top/fumiama/copymanga/tools/file/UserPreferenceString.kt
new file mode 100644
index 0000000..3b6da54
--- /dev/null
+++ b/app/src/main/java/top/fumiama/copymanga/tools/file/UserPreferenceString.kt
@@ -0,0 +1,62 @@
+package top.fumiama.copymanga.tools.file
+
+import android.util.Log
+import androidx.appcompat.app.AppCompatActivity.MODE_PRIVATE
+import androidx.core.content.edit
+import top.fumiama.copymanga.MainActivity
+
+data class UserPreferenceString(private val key: String, private var default: String?, private val defaultID: Int?) {
+ constructor(key: String): this(key, "", 0)
+ constructor(key: String, default: Int): this(key, null, default)
+ constructor(key: String, default: String): this(key, default, 0)
+ private val defaultField: String?
+ get() {
+ default?.let { return it }
+ defaultID?.let { id ->
+ MainActivity.mainWeakReference?.get()?.let {
+ default = it.getString(id)
+ }
+ }
+ return default
+ }
+ var value: String? = null
+ get() {
+ field?.let {
+ Log.d("MyUPS", "get cached key $key value $it")
+ return it
+ }
+ MainActivity.mainWeakReference?.get()?.let {
+ it.getPreferences(MODE_PRIVATE).apply {
+ getString(key, null)?.let { v ->
+ if (v.isNotEmpty()) {
+ field = v
+ Log.d("MyUPS", "get new key $key value $v")
+ return v
+ }
+ }
+ }
+ }
+ field = defaultField
+ Log.d("MyUPS", "get default key $key value $field")
+ return field
+ }
+ set(value) {
+ if (value == null) {
+ Log.d("MyUPS", "get remove key $key")
+ MainActivity.mainWeakReference?.get()?.let {
+ it.getPreferences(MODE_PRIVATE).apply {
+ edit(commit = true) { remove(key) }
+ }
+ }
+ field = defaultField
+ return
+ }
+ field = value
+ Log.d("MyUPS", "set key $key value $value")
+ MainActivity.mainWeakReference?.get()?.let {
+ it.getPreferences(MODE_PRIVATE).apply {
+ edit(commit = true) { putString(key, value) }
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/top/fumiama/copymanga/tools/http/Comandy.kt b/app/src/main/java/top/fumiama/copymanga/tools/http/Comandy.kt
index 075b691..1107562 100644
--- a/app/src/main/java/top/fumiama/copymanga/tools/http/Comandy.kt
+++ b/app/src/main/java/top/fumiama/copymanga/tools/http/Comandy.kt
@@ -2,13 +2,11 @@ package top.fumiama.copymanga.tools.http
import android.os.Build
import android.util.Log
-import androidx.appcompat.app.AppCompatActivity
-import androidx.core.content.edit
-import androidx.preference.PreferenceManager
import com.google.gson.Gson
import com.sun.jna.Library
import com.sun.jna.Native
import top.fumiama.copymanga.MainActivity
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.json.ComandyVersion
import top.fumiama.dmzj.copymanga.R
import java.io.ByteArrayInputStream
@@ -43,16 +41,9 @@ interface Comandy : Library {
return true
}
if (mUseComandy != null) return mUseComandy!!
- MainActivity.mainWeakReference?.get()?.let {
- PreferenceManager.getDefaultSharedPreferences(it).apply {
- val b = getBoolean("settings_cat_net_sw_use_comandy", false)
- Log.d("MyComandy", "use comandy: $b")
- mUseComandy = b
- return b
- }
- }
- mUseComandy = false
- return false
+ val v = Config.net_use_comandy.value
+ mUseComandy = v
+ return v
}
private val libraryFile: File?
get() {
@@ -82,7 +73,7 @@ interface Comandy : Library {
} catch (e: Exception) {
e.printStackTrace()
}
- val myVersion = ma.getPreferences(AppCompatActivity.MODE_PRIVATE).getInt("comandy_version", 0)
+ val myVersion = Config.comandy_version.value?:0
if (myVersion >= remoteVersion) {
Log.d("MyComandy", "lib version $myVersion is latest")
isInInit.set(false)
@@ -99,10 +90,7 @@ interface Comandy : Library {
dataIn.copyTo(dataOut)
}
}
- if (remoteVersion > 0) ma.getPreferences(AppCompatActivity.MODE_PRIVATE).edit {
- putInt("comandy_version", remoteVersion)
- apply()
- }
+ if (remoteVersion > 0) Config.comandy_version.value = remoteVersion
Log.d("MyComandy", "update success")
isInInit.set(false)
} catch (e: Exception) {
diff --git a/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadPool.kt b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadPool.kt
index fefa324..3fb1101 100644
--- a/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadPool.kt
+++ b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadPool.kt
@@ -1,10 +1,7 @@
package top.fumiama.copymanga.tools.http
import android.util.Log
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import java.io.File
import java.io.FileOutputStream
import java.lang.Thread.sleep
@@ -100,7 +97,7 @@ class DownloadPool(folder: String) {
var s = false
while (!s && tryTimes-- > 0) {
val u = imgUrls[index]
- s = (DownloadTools.getHttpContent(CMApi.resolution.wrap(CMApi.imageProxy?.wrap(u)?:u), -1))?.let {
+ s = (DownloadTools.getHttpContent(Config.resolution.wrap(Config.imageProxy?.wrap(u)?:u), -1))?.let {
zip.putNextEntry(ZipEntry("$index.${if(imgUrls[index].contains(".webp")) "webp" else "jpg"}"))
zip.write(it)
zip.closeEntry()
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 4531265..7c6066c 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,16 +1,13 @@
package top.fumiama.copymanga.tools.http
-import android.content.Context
import android.util.Base64
import android.util.Log
-import androidx.preference.PreferenceManager
import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import top.fumiama.copymanga.MainActivity
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.json.ComandyCapsule
-import top.fumiama.dmzj.copymanga.R
-import java.lang.IllegalArgumentException
import java.net.HttpURLConnection
import java.net.URL
import java.util.concurrent.Callable
@@ -18,13 +15,6 @@ import java.util.concurrent.FutureTask
import java.util.concurrent.atomic.AtomicInteger
object DownloadTools {
- val app_ver = MainActivity.mainWeakReference?.get()?.let { main ->
- PreferenceManager.getDefaultSharedPreferences(main)
- ?.getString("settings_cat_general_et_app_version", main.getString(R.string.app_ver))
- ?:main.getString(R.string.app_ver)
- }!!
- val pc_ua = MainActivity.mainWeakReference?.get()!!.getString(R.string.pc_ua).format(app_ver)
- val referer = MainActivity.mainWeakReference?.get()!!.getString(R.string.referer).format(app_ver)
val failTimes = AtomicInteger(0)
fun getApiConnection(url: String, method: String = "GET", refer: String? = null, ua: String? = null, timeout: Int = 20000) =
url.let {
@@ -38,16 +28,10 @@ object DownloadTools {
refer?.let { setRequestProperty("referer", it) }
setRequestProperty("source", "copyApp")
setRequestProperty("webp", "1")
- MainActivity.mainWeakReference?.get()?.let {
- PreferenceManager.getDefaultSharedPreferences(it).apply {
- setRequestProperty("region", if(!getBoolean("settings_cat_net_sw_use_foreign", false)) "1" else "0")
- }
- it.getPreferences(Context.MODE_PRIVATE).apply {
- setRequestProperty("version", app_ver)
- getString("token", "")?.let { tk ->
- setRequestProperty("authorization", "Token $tk")
- }
- }
+ setRequestProperty("region", if(!Config.net_use_foreign.value) "1" else "0")
+ setRequestProperty("version", Config.app_ver.value)
+ Config.token.value?.let { tk ->
+ setRequestProperty("authorization", "Token $tk")
}
setRequestProperty("platform", "3")
}
@@ -67,14 +51,10 @@ object DownloadTools {
capsule.headers["source"] = "copyApp"
capsule.headers["webp"] = "1"
MainActivity.mainWeakReference?.get()?.let {
- PreferenceManager.getDefaultSharedPreferences(it).apply {
- capsule.headers["region"] = if(!getBoolean("settings_cat_net_sw_use_foreign", false)) "1" else "0"
- }
- it.getPreferences(Context.MODE_PRIVATE).apply {
- capsule.headers["version"] = app_ver
- getString("token", "")?.let { tk ->
- capsule.headers["authorization"] = "Token $tk"
- }
+ capsule.headers["region"] = if(!Config.net_use_foreign.value) "1" else "0"
+ capsule.headers["version"] = Config.app_ver.value
+ Config.token.value?.let { tk ->
+ capsule.headers["authorization"] = "Token $tk"
}
}
capsule.headers["platform"] = "3"
@@ -105,7 +85,7 @@ object DownloadTools {
capsule
}
- suspend fun getHttpContent(u: String, refer: String? = null, ua: String? = pc_ua): ByteArray =
+ suspend fun getHttpContent(u: String, refer: String? = null, ua: String? = Config.pc_ua): ByteArray =
withContext(Dispatchers.IO) {
if (!u.startsWith("https://copymanga.azurewebsites.net") && Comandy.useComandy) {
getComandyApiConnection(u, "GET", refer, ua).let { capsule ->
@@ -150,7 +130,7 @@ object DownloadTools {
FutureTask(if (!u.startsWith("https://copymanga.azurewebsites.net") && Comandy.useComandy) Callable{
try {
Comandy.instance?.request(Gson().toJson(
- getComandyNormalConnection(u, "GET", pc_ua))
+ getComandyNormalConnection(u, "GET", Config.pc_ua))
)?.let { result ->
Gson().fromJson(result, ComandyCapsule::class.java)?.let {
if (it.code != 200) null
@@ -164,7 +144,7 @@ object DownloadTools {
} else Callable {
var ret: ByteArray? = null
try {
- val connection = getNormalConnection(u, "GET", pc_ua)
+ val connection = getNormalConnection(u, "GET", Config.pc_ua)
val ci = connection.inputStream
if(readSize > 0) {
ret = ByteArray(readSize)
@@ -186,7 +166,7 @@ object DownloadTools {
}
}*/
- fun requestWithBody(url: String, method: String, body: ByteArray, refer: String? = referer, ua: String? = pc_ua, contentType: String? = "application/x-www-form-urlencoded;charset=utf-8"): ByteArray? {
+ fun requestWithBody(url: String, method: String, body: ByteArray, refer: String? = Config.referer, ua: String? = Config.pc_ua, contentType: String? = "application/x-www-form-urlencoded;charset=utf-8"): ByteArray? {
Log.d("MyDT", "$method Http: $url")
var ret: ByteArray? = null
val task = FutureTask(if(!url.startsWith("https://copymanga.azurewebsites.net") && Comandy.useComandy) Callable{
diff --git a/app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt b/app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt
index cdec538..5f3289e 100644
--- a/app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt
+++ b/app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt
@@ -1,17 +1,13 @@
package top.fumiama.copymanga.tools.http
import android.util.Log
-import androidx.preference.PreferenceManager
import top.fumiama.copymanga.MainActivity
+import top.fumiama.copymanga.api.Config.proxy_key
import java.net.URLEncoder
import java.nio.charset.Charset
-class Proxy(id: Int, private val apiRegex: Regex, keyID: Int? = null) {
- private val code = keyID?.let { k ->
- MainActivity.mainWeakReference?.get()?.let {
- PreferenceManager.getDefaultSharedPreferences(it).getString(it.getString(k), null)
- }
- }
+class Proxy(id: Int, private val apiRegex: Regex) {
+ private val code get() = proxy_key.value
private val proxyApiUrl = MainActivity.mainWeakReference?.get()?.getString(id)
fun wrap(u: String): String {
@@ -19,8 +15,9 @@ class Proxy(id: Int, private val apiRegex: Regex, keyID: Int? = null) {
Log.d("MyP", "[N] wrap: $u")
return u
}
- if(!code.isNullOrEmpty()) {
- val wu = proxyApiUrl?.format(code, URLEncoder.encode(u, Charset.defaultCharset().name()))?:u
+ if(code.isNotEmpty() and !proxyApiUrl.isNullOrEmpty()) {
+ val wu = proxyApiUrl?.format(code, URLEncoder.encode(u, Charset.defaultCharset().name()))
+ ?:u
Log.d("MyP", "[M] wrap: $wu")
return wu
}
@@ -28,37 +25,4 @@ class Proxy(id: Int, private val apiRegex: Regex, keyID: Int? = null) {
//return proxyApiUrl?.format(URLEncoder.encode(u, Charset.defaultCharset().name()))?:u
return u
}
-
- companion object {
- private var mUseImageProxy: Boolean? = null
- val useImageProxy: Boolean
- get() {
- if (mUseImageProxy != null) return mUseImageProxy!!
- MainActivity.mainWeakReference?.get()?.let {
- PreferenceManager.getDefaultSharedPreferences(it).apply {
- val b = getBoolean("settings_cat_net_sw_use_img_proxy", false)
- Log.d("MyProxy", "use image proxy: $b")
- mUseImageProxy = b
- return b
- }
- }
- mUseImageProxy = false
- return false
- }
- private var mUseApiProxy: Boolean? = null
- val useApiProxy: Boolean
- get() {
- if (mUseApiProxy != null) return mUseApiProxy!!
- MainActivity.mainWeakReference?.get()?.let {
- PreferenceManager.getDefaultSharedPreferences(it).apply {
- val b = getBoolean("settings_cat_net_sw_use_api_proxy", false)
- Log.d("MyProxy", "use api proxy: $b")
- mUseApiProxy = b
- return b
- }
- }
- mUseApiProxy = false
- return false
- }
- }
}
diff --git a/app/src/main/java/top/fumiama/copymanga/tools/ui/UITools.kt b/app/src/main/java/top/fumiama/copymanga/tools/ui/UITools.kt
index 0e3f57b..1f27846 100644
--- a/app/src/main/java/top/fumiama/copymanga/tools/ui/UITools.kt
+++ b/app/src/main/java/top/fumiama/copymanga/tools/ui/UITools.kt
@@ -8,15 +8,16 @@ import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.view.View
import android.widget.Toast
-import androidx.preference.PreferenceManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
+import top.fumiama.copymanga.api.Config
import top.fumiama.dmzj.copymanga.R
import java.lang.ref.WeakReference
import kotlin.math.sqrt
class UITools(that: Context?, w: WeakReference? = null) {
- private val zis = that
+ private val weakZis = WeakReference(that)
+ private val zis get() = weakZis.get()
private val weak = w
constructor(w: WeakReference): this(w.get()?.applicationContext, w)
val transportStringNull = zis?.getString(R.string.TRANSPORT_NULL) ?: "TRANSPORT_NULL"
@@ -27,16 +28,16 @@ class UITools(that: Context?, w: WeakReference? = null) {
zis?.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
return cm.getNetworkCapabilities(cm.activeNetwork)?.let {
when {
- it.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> return@let zis.getString(
- R.string.TRANSPORT_WIFI)
- it.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> return@let zis.getString(
- R.string.TRANSPORT_CELLULAR)
- it.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH) -> return@let zis.getString(
- R.string.TRANSPORT_BLUETOOTH)
- it.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> return@let zis.getString(
- R.string.TRANSPORT_ETHERNET)
- it.hasTransport(NetworkCapabilities.TRANSPORT_LOWPAN) -> return@let zis.getString(
- R.string.TRANSPORT_LOWPAN)
+ it.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> return@let zis?.getString(
+ R.string.TRANSPORT_WIFI)?:""
+ it.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> return@let zis?.getString(
+ R.string.TRANSPORT_CELLULAR)?:""
+ it.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH) -> return@let zis?.getString(
+ R.string.TRANSPORT_BLUETOOTH)?:""
+ it.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> return@let zis?.getString(
+ R.string.TRANSPORT_ETHERNET)?:""
+ it.hasTransport(NetworkCapabilities.TRANSPORT_LOWPAN) -> return@let zis?.getString(
+ R.string.TRANSPORT_LOWPAN)?:""
it.hasTransport(NetworkCapabilities.TRANSPORT_VPN) -> return@let "VPN"
else -> return@let transportStringNull
}
@@ -99,11 +100,8 @@ class UITools(that: Context?, w: WeakReference? = null) {
val margin = marginLeftDp.toDouble()
val marginPx = dp2px(marginLeftDp)?:16
val screenWidth = zis?.resources?.displayMetrics?.widthPixels?:1080
- val numPerRow = ((px2dp(screenWidth)?:400).toDouble() / (widthDp + 2 * margin) + 0.5).toInt().let {
- it + (zis?.let {
- a -> PreferenceManager.getDefaultSharedPreferences(a).getInt("settings_cat_general_sb_card_per_row", 0)
- } ?: 0)
- }.let { if(it <= 0) 3 else it }
+ val numPerRow = (((px2dp(screenWidth)?:400).toDouble() / (widthDp + 2 * margin) + 0.5).toInt()
+ + Config.general_card_per_row.value).let { if(it <= 0) 3 else it }
val w = (screenWidth - marginPx*numPerRow*2)/numPerRow
val totalWidth = screenWidth/numPerRow
return listOf(numPerRow, w, totalWidth)
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 6440870..458e8b8 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
@@ -39,7 +39,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import top.fumiama.copymanga.json.ThemeStructure
import top.fumiama.copymanga.manga.Reader
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.tools.ui.GlideBlurTransformation
import top.fumiama.copymanga.tools.ui.GlideHideLottieViewListener
import top.fumiama.copymanga.tools.ui.Navigate
@@ -88,7 +88,7 @@ class BookHandler(private val th: WeakReference): Handler(Looper.m
that?.apply {
Glide.with(this).load(
if (book?.cover != null)
- GlideUrl(CMApi.imageProxy?.wrap(book?.cover!!)?:book?.cover!!, CMApi.myGlideHeaders)
+ GlideUrl(Config.imageProxy?.wrap(book?.cover!!)?:book?.cover!!, Config.myGlideHeaders)
else book?.cachedCover
)
.timeout(60000)
@@ -222,7 +222,7 @@ class BookHandler(private val th: WeakReference): Handler(Looper.m
var line: View? = null
last += v.results.list.size
v.results.list.forEach {
- val f = CMApi.getZipFile(context?.getExternalFilesDir(""), comicName, keys[p], it.name)
+ val f = Config.getZipFile(context?.getExternalFilesDir(""), comicName, keys[p], it.name)
//Log.d("MyBH", "i = $i, last=$last, add chapter ${it.name}, line is null: ${line == null}")
that?.isOnPause?.let { isOnPause ->
while (isOnPause && !exit) delay(500)
@@ -277,12 +277,12 @@ class BookHandler(private val th: WeakReference): Handler(Looper.m
if(exit) return@withContext
last += v.results.list.size
v.results.list.forEach {
- urlArray += CMApi.getChapterInfoApiUrl(
+ urlArray += Config.getChapterInfoApiUrl(
path,
it.uuid,
version
)?:""
- val f = CMApi.getZipFile(context?.getExternalFilesDir(""), comicName, keys[groupIndex], it.name)
+ val f = Config.getZipFile(context?.getExternalFilesDir(""), comicName, keys[groupIndex], it.name)
Reader.fileArray += f
chapterNames += it.name
uuidArray += it.uuid
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
index 2d64889..4cabc5b 100644
--- 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
@@ -5,13 +5,13 @@ import android.widget.Toast
import androidx.navigation.fragment.findNavController
import top.fumiama.copymanga.MainActivity
import top.fumiama.copymanga.template.ui.InfoCardLoader
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
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).format(CMApi.myHostApiUrl, page * 21)
+ getString(R.string.historyApiUrl).format(Config.myHostApiUrl.value, page * 21)
override fun onCreate(savedInstanceState: Bundle?) {
if (MainActivity.member?.hasLogin != true) {
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 f67ecf6..0bb912d 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
@@ -1,11 +1,11 @@
package top.fumiama.copymanga.ui.cardflow.newest
import top.fumiama.copymanga.template.ui.InfoCardLoader
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.dmzj.copymanga.R
@ExperimentalStdlibApi
class NewestFragment : InfoCardLoader(R.layout.fragment_newest, R.id.action_nav_newest_to_nav_book, true) {
override fun getApiUrl() =
- getString(R.string.newestApiUrl).format(CMApi.myHostApiUrl, page * 21)
+ getString(R.string.newestApiUrl).format(Config.myHostApiUrl.value, page * 21)
}
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt
index ba1ec8f..05247a3 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt
@@ -5,7 +5,7 @@ import com.google.android.material.tabs.TabLayout
import kotlinx.android.synthetic.main.fragment_rank.*
import kotlinx.android.synthetic.main.line_rank.view.*
import top.fumiama.copymanga.template.ui.InfoCardLoader
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.tools.ui.UITools
import top.fumiama.dmzj.copymanga.R
import java.lang.ref.WeakReference
@@ -48,7 +48,7 @@ class RankFragment : InfoCardLoader(R.layout.fragment_rank, R.id.action_nav_rank
override fun getApiUrl() =
getString(R.string.rankApiUrl).format(
- CMApi.myHostApiUrl,
+ Config.myHostApiUrl.value,
page * 21,
sortWay[sortValue],
audienceWay[audience]
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/recommend/RecFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/recommend/RecFragment.kt
index d6aee5e..0a85119 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/recommend/RecFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/recommend/RecFragment.kt
@@ -1,11 +1,11 @@
package top.fumiama.copymanga.ui.cardflow.recommend
import top.fumiama.copymanga.template.ui.InfoCardLoader
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.dmzj.copymanga.R
@ExperimentalStdlibApi
class RecFragment : InfoCardLoader(R.layout.fragment_recommend, R.id.action_nav_recommend_to_nav_book, true) {
override fun getApiUrl() =
- getString(R.string.recommendApiUrl).format(CMApi.myHostApiUrl, page * 21)
+ getString(R.string.recommendApiUrl).format(Config.myHostApiUrl.value, page * 21)
}
\ No newline at end of file
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/search/SearchFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/search/SearchFragment.kt
index 39ff6ac..3bd4df6 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/search/SearchFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/search/SearchFragment.kt
@@ -3,7 +3,7 @@ package top.fumiama.copymanga.ui.cardflow.search
import android.os.Bundle
import android.util.Log
import top.fumiama.copymanga.template.ui.InfoCardLoader
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.dmzj.copymanga.R
@ExperimentalStdlibApi
@@ -11,7 +11,7 @@ class SearchFragment : InfoCardLoader(R.layout.fragment_search, R.id.action_nav_
private var query: String? = null
private var type: String? = null
override fun getApiUrl() =
- getString(R.string.searchApiUrl).format(CMApi.myHostApiUrl, page * 21, query, type)
+ getString(R.string.searchApiUrl).format(Config.myHostApiUrl.value, page * 21, query, type)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt
index 8b2ea29..caa633b 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt
@@ -9,7 +9,7 @@ import kotlinx.android.synthetic.main.anchor_popular.view.*
import kotlinx.android.synthetic.main.line_shelf.*
import top.fumiama.copymanga.MainActivity
import top.fumiama.copymanga.template.ui.InfoCardLoader
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.dmzj.copymanga.R
@ExperimentalStdlibApi
@@ -26,7 +26,7 @@ class ShelfFragment : InfoCardLoader(R.layout.fragment_shelf, R.id.action_nav_su
override fun getApiUrl() =
getString(R.string.shelfApiUrl).format(
- CMApi.myHostApiUrl,
+ Config.myHostApiUrl.value,
page * 21,
sortWay[sortValue]
)
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt
index f80cbc0..7ed3228 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt
@@ -14,7 +14,7 @@ import top.fumiama.copymanga.json.FilterStructure
import top.fumiama.copymanga.json.ThemeStructure
import top.fumiama.copymanga.template.http.PausableDownloader
import top.fumiama.copymanga.template.ui.StatusCardFlow
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.dmzj.copymanga.R
@ExperimentalStdlibApi
@@ -25,7 +25,7 @@ class SortFragment : StatusCardFlow(0, R.id.action_nav_sort_to_nav_book, R.layou
override fun getApiUrl() =
getString(R.string.sortApiUrl).format(
- CMApi.myHostApiUrl,
+ Config.myHostApiUrl.value,
page * 21,
sortWay[sortValue],
if(theme >= 0 && theme < (filter?.results?.theme?.size ?: 0)) (filter?.results?.theme?.get(theme)?.path_word ?: "") else "",
@@ -42,7 +42,7 @@ class SortFragment : StatusCardFlow(0, R.id.action_nav_sort_to_nav_book, R.layou
super.setListeners()
lifecycleScope.launch {
setProgress(5)
- PausableDownloader(getString(R.string.filterApiUrl).format(CMApi.myHostApiUrl)) {
+ PausableDownloader(getString(R.string.filterApiUrl).format(Config.myHostApiUrl.value)) {
if(ad?.exit == true) return@PausableDownloader
it.let {
it.inputStream().use { i ->
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/topic/TopicFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/topic/TopicFragment.kt
index d5299c7..0f317df 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/topic/TopicFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/topic/TopicFragment.kt
@@ -11,20 +11,20 @@ import kotlinx.coroutines.withContext
import top.fumiama.copymanga.json.TopicStructure
import top.fumiama.copymanga.template.http.PausableDownloader
import top.fumiama.copymanga.template.ui.InfoCardLoader
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.dmzj.copymanga.R
@ExperimentalStdlibApi
class TopicFragment : InfoCardLoader(R.layout.fragment_topic, R.id.action_nav_topic_to_nav_book) {
private var type = 1
override fun getApiUrl() =
- getString(R.string.topicContentApiUrl).format(CMApi.myHostApiUrl, arguments?.getString("path"), type, offset)
+ getString(R.string.topicContentApiUrl).format(Config.myHostApiUrl.value, arguments?.getString("path"), type, offset)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch {
setProgress(5)
- PausableDownloader(getString(R.string.topicApiUrl).format(CMApi.myHostApiUrl, arguments?.getString("path"))) { data ->
+ PausableDownloader(getString(R.string.topicApiUrl).format(Config.myHostApiUrl.value, arguments?.getString("path"))) { data ->
setProgress(10)
withContext(Dispatchers.IO) {
if(ad?.exit == true) return@withContext
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt
index 0b1c425..75daa7f 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt
@@ -50,7 +50,7 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
super.onDestroy()
//mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) }
handler?.downloading = false
- handler?.mangaDlTools?.exit = true
+ handler?.downloader?.exit = true
handler?.dl?.dismiss()
exit = true
handler = null
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt
index a48181b..92aba29 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt
@@ -11,7 +11,6 @@ import android.view.ViewGroup
import android.view.ViewTreeObserver
import android.widget.Toast
import androidx.lifecycle.lifecycleScope
-import androidx.preference.PreferenceManager
import com.google.gson.Gson
import kotlinx.android.synthetic.main.button_tbutton.*
import kotlinx.android.synthetic.main.button_tbutton.view.*
@@ -25,12 +24,12 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.json.ChapterStructure
import top.fumiama.copymanga.json.ComicStructureOld
import top.fumiama.copymanga.json.VolumeStructure
-import top.fumiama.copymanga.manga.MangaDlTools
+import top.fumiama.copymanga.manga.Downloader
import top.fumiama.copymanga.manga.Reader
-import top.fumiama.copymanga.tools.api.CMApi
import top.fumiama.copymanga.tools.ui.UITools
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment.Companion.exit
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment.Companion.json
@@ -65,13 +64,13 @@ class ComicDlHandler(
private var tbtnlist: Array = arrayOf()
private var tbtncnt = 0
private var isNewTitle = false
- val mangaDlTools = MangaDlTools()
+ val downloader = Downloader()
private var multiSelect = false
private var finishMap = arrayOf()
var downloading = false
private var urlArray = arrayOf()
private var uuidArray = arrayOf()
- private val maxBatch = that?.activity?.let { PreferenceManager.getDefaultSharedPreferences(it) }?.getInt("settings_cat_md_sb_max_batch", 16)?:16
+ private val maxBatch = Config.manga_dl_max_batch.value
@SuppressLint("SetTextI18n")
override fun handleMessage(msg: Message) {
@@ -170,7 +169,7 @@ class ComicDlHandler(
if (multiSelect) {
for (i in tbtnlist) {
if (i.isChecked) {
- val f = CMApi.getZipFile(that?.context?.getExternalFilesDir(""), comicName, i.caption?:"null", i.chapterName)
+ val f = Config.getZipFile(that?.context?.getExternalFilesDir(""), comicName, i.caption?:"null", i.chapterName)
if (f.exists()) {
deleteChapter(f, i)
checkedChapter--
@@ -225,7 +224,7 @@ class ComicDlHandler(
else{
that!!.pdwn.progress = 0
if (downloading || checkedChapter == 0) {
- mangaDlTools.wait = !mangaDlTools.wait!!
+ downloader.wait = !downloader.wait!!
} else that?.lifecycleScope?.launch {
downloading = true
sendEmptyMessage(9)
@@ -238,7 +237,7 @@ class ComicDlHandler(
sendEmptyMessage(4)
return@setOnLongClickListener true
}
- mangaDlTools.onDownloadedListener = object :MangaDlTools.OnDownloadedListener {
+ downloader.onDownloadedListener = object :Downloader.OnDownloadedListener {
override fun handleMessage(index: Int, isSuccess: Boolean, message: String) {
that?.lifecycleScope?.launch {
if(isSuccess) onZipDownloadFinish(index)
@@ -287,7 +286,7 @@ class ComicDlHandler(
while (totalInDownload.get() >= maxBatch) delay(1000)
totalInDownload.incrementAndGet()
launch {
- mangaDlTools.downloadChapterInVol(
+ downloader.downloadChapterInVol(
it,
i.chapterName,
i.caption?:"null",
@@ -308,7 +307,7 @@ class ComicDlHandler(
updateProgressBar()
that?.apply {
cdwn.postDelayed({
- if (mangaDlTools.exit) return@postDelayed
+ if (downloader.exit) return@postDelayed
if (dldChapter == checkedChapter) {
checkedChapter = 0
setProgress2(0, 233)
@@ -341,7 +340,7 @@ class ComicDlHandler(
}
private suspend fun addButtons(chapters: Array, caption: String, version: Int) = withContext(Dispatchers.IO) {
chapters.forEach { chapter ->
- val u = CMApi.getChapterInfoApiUrl(chapter.comic_path_word, chapter.uuid, version)?:""
+ val u = Config.getChapterInfoApiUrl(chapter.comic_path_word, chapter.uuid, version)?:""
addButton(chapter.name, chapter.uuid, caption, u)
urlArray += u
}
@@ -372,7 +371,7 @@ class ComicDlHandler(
that?.ltbtn?.invalidate()
withContext(Dispatchers.IO) {
- val zipf = CMApi.getZipFile(that!!.context?.getExternalFilesDir(""), comicName, caption, title)
+ val zipf = Config.getZipFile(that!!.context?.getExternalFilesDir(""), comicName, caption, title)
Log.d("MyCD", "Get zipf: $zipf")
Reader.fileArray += zipf
if (zipf.exists()) withContext(Dispatchers.Main) {
@@ -440,7 +439,7 @@ class ComicDlHandler(
}
isNewTitle = true
for (chapter in group.chapters) {
- val newUrl = CMApi.getChapterInfoApiUrl(
+ val newUrl = Config.getChapterInfoApiUrl(
chapter.url.substringAfter("/comic/").substringBefore('/'),
chapter.url.substringAfterLast('/'), version,
)?:""
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt
index 3d35477..d64fefd 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt
@@ -14,7 +14,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import top.fumiama.copymanga.MainActivity
-import top.fumiama.copymanga.manga.MangaDlTools
+import top.fumiama.copymanga.manga.Downloader
import top.fumiama.copymanga.manga.Reader
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
import top.fumiama.copymanga.tools.file.FileUtils
@@ -149,7 +149,7 @@ class DownloadFragment: NoBackRefreshFragment(R.layout.fragment_download) {
fun removeAllEmpty() {
MainActivity.mainWeakReference?.get()?.getExternalFilesDir("")?.listFiles()?.toList().let {
var removed = false
- MangaDlTools.getEmptyMangaList(it)?.forEach { f ->
+ Downloader.getEmptyMangaList(it)?.forEach { f ->
if (f.exists()) {
FileUtils.recursiveRemove(f)
removed = true
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/download/NewDownloadFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/download/NewDownloadFragment.kt
index fd76764..c463e5c 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/download/NewDownloadFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/download/NewDownloadFragment.kt
@@ -7,13 +7,13 @@ import android.view.View
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
-import androidx.preference.PreferenceManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
-import top.fumiama.copymanga.manga.MangaDlTools
+import top.fumiama.copymanga.api.Config.manga_dl_show_0m_manga
+import top.fumiama.copymanga.manga.Downloader
import top.fumiama.copymanga.manga.Reader
import top.fumiama.copymanga.template.general.MangaPagesFragmentTemplate
import top.fumiama.copymanga.template.ui.CardList
@@ -32,13 +32,10 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl
private var isReverse = false
private var isContentChanged = false
private var exit = false
- private var showAll = false
+ private val showAll get() = manga_dl_show_0m_manga.value
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
wn = WeakReference(this)
- showAll = activity?.let {
- PreferenceManager.getDefaultSharedPreferences(it)
- }?.getBoolean("settings_cat_md_sw_show_0m_manga", false)?:false
}
override fun onPause() {
@@ -74,7 +71,7 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl
var size = sortedBookList?.size?:0
if (size > 0) {
if (!showAll) {
- sortedBookList = MangaDlTools.getNonEmptyMangaList(sortedBookList) {
+ sortedBookList = Downloader.getNonEmptyMangaList(sortedBookList) {
setProgress(40+20*it/100)
}
}
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt
index e77b22f..419201f 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt
@@ -32,7 +32,7 @@ import top.fumiama.copymanga.MainActivity.Companion.ime
import top.fumiama.copymanga.json.BookListStructure
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
import top.fumiama.copymanga.template.http.PausableDownloader
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.tools.ui.GlideHideLottieViewListener
import top.fumiama.copymanga.tools.ui.Navigate
import top.fumiama.dmzj.copymanga.R
@@ -204,7 +204,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
if(it.isEmpty()) return@let
//Log.d("MyHomeFVP", "Load img: $it")
Glide.with(this@HomeFragment).load(
- GlideUrl(CMApi.imageProxy?.wrap(it)?:it, CMApi.myGlideHeaders)
+ GlideUrl(Config.imageProxy?.wrap(it)?:it, Config.myGlideHeaders)
)
.addListener(GlideHideLottieViewListener(WeakReference(holder.itemView.lai)))
.timeout(60000).into(holder.itemView.vpi)
@@ -276,7 +276,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
cic.isClickable = false
context?.let {
Glide.with(it)
- .load(GlideUrl(CMApi.imageProxy?.wrap(cover)?:cover, CMApi.myGlideHeaders))
+ .load(GlideUrl(Config.imageProxy?.wrap(cover)?:cover, Config.myGlideHeaders))
.addListener(GlideHideLottieViewListener(WeakReference(laic)))
.timeout(60000).into(imic)
}
@@ -295,7 +295,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
suspend fun refresh(q: CharSequence) = withContext(Dispatchers.IO) {
query = q.toString()
activity?.apply {
- PausableDownloader(getString(R.string.searchApiUrl).format(CMApi.myHostApiUrl, 0, query, type)) {
+ PausableDownloader(getString(R.string.searchApiUrl).format(Config.myHostApiUrl.value, 0, query, type)) {
results = Gson().fromJson(it.decodeToString(), BookListStructure::class.java)
count = results?.results?.total?:0
withContext(Dispatchers.Main) {
diff --git a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt
index 0bad515..ad60de2 100644
--- a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt
+++ b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt
@@ -31,7 +31,7 @@ import kotlinx.coroutines.withContext
import top.fumiama.copymanga.json.ComicStructure
import top.fumiama.copymanga.json.IndexStructure
import top.fumiama.copymanga.template.http.AutoDownloadHandler
-import top.fumiama.copymanga.tools.api.CMApi
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.tools.ui.GlideHideLottieViewListener
import top.fumiama.copymanga.tools.ui.Navigate
import top.fumiama.copymanga.tools.ui.UITools
@@ -40,7 +40,7 @@ import java.lang.ref.WeakReference
import java.util.concurrent.atomic.AtomicInteger
class HomeHandler(private val that: WeakReference) : AutoDownloadHandler(
- that.get()?.getString(R.string.mainPageApiUrl)!!.format(CMApi.myHostApiUrl),
+ that.get()?.getString(R.string.mainPageApiUrl)!!.format(Config.myHostApiUrl.value),
IndexStructure::class.java,
that.get()
) {
@@ -369,7 +369,7 @@ class HomeHandler(private val that: WeakReference) : AutoDownloadH
if(img.startsWith("http")) {
//Log.d("MyHH", "load card image: $img")
val waitMillis = cardLoadingWaits.getAndIncrement().toLong()*200
- val g = Glide.with(it).load(GlideUrl(CMApi.imageProxy?.wrap(img)?:img, CMApi.myGlideHeaders))
+ val g = Glide.with(it).load(GlideUrl(Config.imageProxy?.wrap(img)?:img, Config.myGlideHeaders))
.addListener(GlideHideLottieViewListener(WeakReference(cv.laic)) {
cardLoadingWaits.decrementAndGet()
}).timeout(60000)
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 366fb45..beb1903 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
@@ -29,7 +29,6 @@ import androidx.core.animation.doOnEnd
import androidx.core.content.ContextCompat
import androidx.core.content.edit
import androidx.lifecycle.lifecycleScope
-import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import com.bumptech.glide.Glide
@@ -54,10 +53,9 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-import top.fumiama.copymanga.MainActivity
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.template.general.TitleActivityTemplate
import top.fumiama.copymanga.template.http.PausableDownloader
-import top.fumiama.copymanga.tools.api.CMApi
import top.fumiama.copymanga.tools.http.DownloadTools
import top.fumiama.copymanga.tools.thread.TimeThread
import top.fumiama.copymanga.tools.ui.Font
@@ -151,14 +149,11 @@ class ViewMangaActivity : TitleActivityTemplate() {
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) {
- val settingsPref = MainActivity.mainWeakReference?.get()?.let { PreferenceManager.getDefaultSharedPreferences(it) }
- settingsPref?.getBoolean("settings_cat_vm_sw_always_dark_bg", false)?.let {
- if (it) {
- Log.d("MyVM", "force dark")
- delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES
- } else {
- delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
- }
+ if (Config.view_manga_always_dark_bg.value) {
+ Log.d("MyVM", "force dark")
+ delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES
+ } else {
+ delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
}
postponeEnterTransition()
setContentView(R.layout.activity_viewmanga)
@@ -174,21 +169,21 @@ class ViewMangaActivity : TitleActivityTemplate() {
pn = intent.getIntExtra("pn", 0)
cut = pb["useCut"]
r2l = pb["r2l"]
- verticalLoadMaxCount = settingsPref?.getInt("settings_cat_vm_sb_vertical_max", 20)?.let { if(it > 0) it else 20 }?:20
+ verticalLoadMaxCount = Config.view_manga_vertical_max.value.let { if(it > 0) it else 20 }
isVertical = pb["vertical"]
notUseVP = pb["noVP"] || isVertical
//url = intent.getStringExtra("url")
mHandler = VMHandler(this@ViewMangaActivity, if(urlArray.isNotEmpty()) urlArray[position] else "", resources.getStringArray(R.array.weeks))
lifecycleScope.launch {
withContext(Dispatchers.IO) {
- settingsPref?.getInt("settings_cat_vm_sb_quality", 100)?.let { q = if (it > 0) it else 100 }
+ Config.view_manga_quality.value.let { q = if (it > 0) it else 100 }
tt = TimeThread(mHandler, VMHandler.SET_NET_INFO, 10000)
tt.canDo = true
tt.start()
- volTurnPage = settingsPref?.getBoolean("settings_cat_vm_sw_vol_turn", false)?:false
+ volTurnPage = Config.view_manga_vol_turn.value
am = getSystemService(Service.AUDIO_SERVICE) as AudioManager
- if (!noCellarAlert) noCellarAlert = settingsPref?.getBoolean("settings_cat_net_sw_use_cellar", false) == true
- fullyHideInfo = settingsPref?.getBoolean("settings_cat_vm_sw_hide_info", false) == true
+ if (!noCellarAlert) noCellarAlert = Config.view_manga_use_cellar.value
+ fullyHideInfo = Config.view_manga_hide_info.value
Log.d("MyVM", "Now ZipFile is $zipFile")
try {
@@ -205,7 +200,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
}
}
}
- if (settingsPref?.getBoolean("settings_cat_general_sw_enable_transparent_systembar", false) == true) {
+ if (Config.general_enable_transparent_system_bar.value) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
}
@@ -262,7 +257,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
getImgUrlArray()?.let {
tasks = Array(it.size) { i ->
val u = it[i]?:return@Array null
- return@Array DownloadTools.prepare(CMApi.resolution.wrap(CMApi.imageProxy?.wrap(u)?:u))
+ return@Array DownloadTools.prepare(Config.resolution.wrap(Config.imageProxy?.wrap(u)?:u))
}
tasksRunStatus = Array(it.size) { return@Array false }
}
@@ -278,7 +273,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
forEachIndexed { i, it ->
mHandler.obtainMessage(VMHandler.SET_DL_TEXT, "$i/$size").sendToTarget()
if(it != null) try {
- DownloadTools.getHttpContent(CMApi.resolution.wrap(CMApi.imageProxy?.wrap(it)?:it), 1024)?.inputStream()?.let {
+ DownloadTools.getHttpContent(Config.resolution.wrap(Config.imageProxy?.wrap(it)?:it), 1024)?.inputStream()?.let {
isCut[i] = canCut(it)
}?:run {
withContext(Dispatchers.Main) {
@@ -428,7 +423,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
private suspend fun loadImgUrlInto(imgView: ScaleImageView, button: Button, url: String, useCut: Boolean, isLeft: Boolean, check: (() -> Boolean)? = null): Boolean {
Log.d("MyVM", "Load from adt: $url")
- val success = PausableDownloader(CMApi.resolution.wrap(CMApi.imageProxy?.wrap(url)?:url), 1000, false) { data ->
+ val success = PausableDownloader(Config.resolution.wrap(Config.imageProxy?.wrap(url)?:url), 1000, false) { data ->
check?.let { it() }?.let { if(it) loadImg(imgView, BitmapFactory.decodeByteArray(data, 0, data.size), useCut, isLeft, false) }
}.run()
if (!success) button.apply { post {
@@ -918,7 +913,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
val thisOneB = holder.itemView.oneb
Glide.with(this@ViewMangaActivity.applicationContext)
.asBitmap()
- .load(GlideUrl(CMApi.resolution.wrap(CMApi.imageProxy?.wrap(it)?:it), CMApi.myGlideHeaders))
+ .load(GlideUrl(Config.resolution.wrap(Config.imageProxy?.wrap(it)?:it), Config.myGlideHeaders))
.placeholder(BitmapDrawable(resources, getLoadingBitmap(pos)))
.timeout(60000)
.addListener(OneButtonRequestListener(thisOneB))
@@ -929,7 +924,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
override fun onLoadCleared(placeholder: Drawable?) { }
})
} else Glide.with(this@ViewMangaActivity.applicationContext)
- .load(GlideUrl(CMApi.resolution.wrap(CMApi.imageProxy?.wrap(it)?:it), CMApi.myGlideHeaders))
+ .load(GlideUrl(Config.resolution.wrap(Config.imageProxy?.wrap(it)?:it), Config.myGlideHeaders))
.timeout(60000)
.placeholder(BitmapDrawable(resources, getLoadingBitmap(pos)))
.addListener(OneButtonRequestListener(holder.itemView.oneb))
diff --git a/app/src/main/java/top/fumiama/copymanga/user/Member.kt b/app/src/main/java/top/fumiama/copymanga/user/Member.kt
index 56d9795..2af2814 100644
--- a/app/src/main/java/top/fumiama/copymanga/user/Member.kt
+++ b/app/src/main/java/top/fumiama/copymanga/user/Member.kt
@@ -1,28 +1,24 @@
package top.fumiama.copymanga.user
-import android.content.SharedPreferences
import android.util.Base64
-import android.util.Log
import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
+import top.fumiama.copymanga.api.Config
import top.fumiama.copymanga.json.ComandyCapsule
import top.fumiama.copymanga.json.LoginInfoStructure
-import top.fumiama.copymanga.tools.api.CMApi
import top.fumiama.copymanga.tools.http.Comandy
import top.fumiama.copymanga.tools.http.DownloadTools
-import top.fumiama.copymanga.tools.http.DownloadTools.app_ver
-import top.fumiama.copymanga.tools.http.DownloadTools.pc_ua
-import top.fumiama.copymanga.tools.http.Proxy
import top.fumiama.dmzj.copymanga.R
import java.net.URLEncoder
import java.nio.charset.Charset
-class Member(private val pref: SharedPreferences, private val getString: (Int) -> String) {
- val hasLogin: Boolean get() = pref.getString("token", "")?.isNotEmpty()?:false
+class Member(private val getString: (Int) -> String) {
+ val hasLogin: Boolean get() = Config.token.value?.isNotEmpty()?:false
suspend fun login(username: String, pwd: String, salt: Int): LoginInfoStructure = withContext(Dispatchers.IO) {
var err = ""
- if (!Proxy.useApiProxy && Comandy.useComandy) getComandyLoginConnection(username, pwd, salt).let { capsule ->
+ if (!Config.net_use_api_proxy.value && Comandy.useComandy)
+ getComandyLoginConnection(username, pwd, salt).let { capsule ->
try {
val para = Gson().toJson(capsule)
Comandy.instance?.request(para)?.let { result ->
@@ -72,7 +68,7 @@ class Member(private val pref: SharedPreferences, private val getString: (Int) -
* - **message**: 可以 toast 的信息
*/
suspend fun info() : LoginInfoStructure = withContext(Dispatchers.IO) {
- if (!pref.contains("token")) {
+ if (!hasLogin) {
val l = LoginInfoStructure()
l.code = 449
l.message = getString(R.string.noLogin)
@@ -80,16 +76,13 @@ class Member(private val pref: SharedPreferences, private val getString: (Int) -
}
try {
val data = DownloadTools.getHttpContent(
- getString(R.string.memberInfoApiUrl).format(CMApi.myHostApiUrl).let {
- CMApi.apiProxy?.wrap(it)?:it
+ getString(R.string.memberInfoApiUrl).format(Config.myHostApiUrl.value).let {
+ Config.apiProxy?.wrap(it)?:it
}
).decodeToString()
try {
val l = Gson().fromJson(data, LoginInfoStructure::class.java)
- if(l.code == 200) pref.edit()?.apply {
- putString("avatar", l.results.avatar)
- apply()
- }
+ if(l.code == 200) Config.avatar.value = l.results.avatar
l
} catch (e : Exception) {
val l = LoginInfoStructure()
@@ -106,28 +99,22 @@ class Member(private val pref: SharedPreferences, private val getString: (Int) -
}
suspend fun logout() = withContext(Dispatchers.IO) {
- pref.edit()?.apply {
- remove("token")
- remove("user_id")
- remove("username")
- remove("nickname")
- remove("avatar")
- apply()
- }
+ Config.token.value = ""
+ Config.user_id.value = null
+ Config.username.value = null
+ Config.nickname.value = null
+ Config.avatar.value = null
}
private suspend fun saveInfo(data: ByteArray) = data.inputStream().use { dataIn ->
try {
Gson().fromJson(dataIn.reader(), LoginInfoStructure::class.java)?.let { l ->
if(l.code == 200) {
- pref.edit()?.apply {
- putString("token", l.results?.token)
- putString("user_id", l.results?.user_id)
- putString("username", l.results?.username)
- putString("nickname", l.results?.nickname)
- apply()
- return@use info()
- }
+ Config.token.value = l.results?.token
+ Config.user_id.value = l.results?.user_id
+ Config.username.value = l.results?.username
+ Config.nickname.value = l.results.nickname
+ return@use info()
}
return@use l
}?: throw Exception(getString(R.string.login_parse_json_error))
@@ -137,35 +124,31 @@ class Member(private val pref: SharedPreferences, private val getString: (Int) -
}
private fun getLoginConnection(username: String, pwd: String, salt: Int) =
- getString(R.string.loginApiUrl).format(CMApi.myHostApiUrl).let {
- CMApi.apiProxy?.wrap(it)?:it
+ getString(R.string.loginApiUrl).format(Config.myHostApiUrl.value).let {
+ Config.apiProxy?.wrap(it)?:it
}.let {
DownloadTools.getApiConnection(it, "POST").apply {
- pref.apply {
- doOutput = true
- setRequestProperty("content-type", "application/x-www-form-urlencoded;charset=utf-8")
- setRequestProperty("platform", "3")
- setRequestProperty("accept", "application/json")
- val r = if(!getBoolean("settings_cat_net_sw_use_foreign", false)) "1" else "0"
- val pwdEncoded = Base64.encode("$pwd-$salt".toByteArray(), Base64.DEFAULT).decodeToString()
- outputStream.write("username=${URLEncoder.encode(username, Charset.defaultCharset().name())}&password=$pwdEncoded&salt=$salt&platform=3&authorization=Token+&version=$app_ver&source=copyApp®ion=$r&webp=1".toByteArray())
- }
+ doOutput = true
+ setRequestProperty("content-type", "application/x-www-form-urlencoded;charset=utf-8")
+ setRequestProperty("platform", "3")
+ setRequestProperty("accept", "application/json")
+ val r = if(!Config.net_use_foreign.value) "1" else "0"
+ val pwdEncoded = Base64.encode("$pwd-$salt".toByteArray(), Base64.DEFAULT).decodeToString()
+ outputStream.write("username=${URLEncoder.encode(username, Charset.defaultCharset().name())}&password=$pwdEncoded&salt=$salt&platform=3&authorization=Token+&version=${Config.app_ver.value}&source=copyApp®ion=$r&webp=1".toByteArray())
}
}
private fun getComandyLoginConnection(username: String, pwd: String, salt: Int) =
- getString(R.string.loginApiUrl).format(CMApi.myHostApiUrl).let {
- CMApi.apiProxy?.wrap(it)?:it
+ getString(R.string.loginApiUrl).format(Config.myHostApiUrl.value).let {
+ Config.apiProxy?.wrap(it)?:it
}.let {
- DownloadTools.getComandyApiConnection(it, "POST", null, pc_ua).apply {
- pref.apply {
- headers["content-type"] = "application/x-www-form-urlencoded;charset=utf-8"
- headers["platform"] = "3"
- headers["accept"] = "application/json"
- val r = if(!getBoolean("settings_cat_net_sw_use_foreign", false)) "1" else "0"
- val pwdEncoded = Base64.encode("$pwd-$salt".toByteArray(), Base64.DEFAULT).decodeToString()
- data = "username=${URLEncoder.encode(username, Charset.defaultCharset().name())}&password=$pwdEncoded&salt=$salt&platform=3&authorization=Token+&version=$app_ver&source=copyApp®ion=$r&webp=1"
- }
+ DownloadTools.getComandyApiConnection(it, "POST", null, Config.pc_ua).apply {
+ headers["content-type"] = "application/x-www-form-urlencoded;charset=utf-8"
+ headers["platform"] = "3"
+ headers["accept"] = "application/json"
+ val r = if(!Config.net_use_foreign.value) "1" else "0"
+ val pwdEncoded = Base64.encode("$pwd-$salt".toByteArray(), Base64.DEFAULT).decodeToString()
+ data = "username=${URLEncoder.encode(username, Charset.defaultCharset().name())}&password=$pwdEncoded&salt=$salt&platform=3&authorization=Token+&version=${Config.app_ver.value}&source=copyApp®ion=$r&webp=1"
}
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9e150cd..beeaa22 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,7 +1,7 @@
-
+
]>
拷贝漫画