mirror of
https://github.com/fumiama/copymanga.git
synced 2026-06-05 07:20:23 +08:00
@@ -11,8 +11,8 @@ android {
|
|||||||
applicationId 'top.fumiama.copymanga'
|
applicationId 'top.fumiama.copymanga'
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 34
|
targetSdkVersion 34
|
||||||
versionCode 71
|
versionCode 72
|
||||||
versionName '2.5.0'
|
versionName '2.5.1'
|
||||||
resourceConfigurations += ['zh', 'zh-rCN']
|
resourceConfigurations += ['zh', 'zh-rCN']
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ object Config {
|
|||||||
"region",
|
"region",
|
||||||
if (net_use_foreign.value) "1" else "0"
|
if (net_use_foreign.value) "1" else "0"
|
||||||
)
|
)
|
||||||
.addHeader("platform", "3")
|
.addHeader("platform", platform.value)
|
||||||
.build()
|
.build()
|
||||||
return field
|
return field
|
||||||
}
|
}
|
||||||
@@ -78,7 +78,7 @@ object Config {
|
|||||||
mHostApiUrlsMutex.withLock {
|
mHostApiUrlsMutex.withLock {
|
||||||
if (mHostApiUrls.isNotEmpty()) return@runBlocking
|
if (mHostApiUrls.isNotEmpty()) return@runBlocking
|
||||||
try {
|
try {
|
||||||
val u = getString(R.string.networkApiUrl).format(networkApiUrl.value)
|
val u = getString(R.string.networkApiUrl).format(networkApiUrl.value, platform.value)
|
||||||
val r = Gson().fromJson((apiProxy?.comancry(u) {
|
val r = Gson().fromJson((apiProxy?.comancry(u) {
|
||||||
DownloadTools.getHttpContent(it, referer, pc_ua)
|
DownloadTools.getHttpContent(it, referer, pc_ua)
|
||||||
}?:DownloadTools.getHttpContent(u, referer, pc_ua)).decodeToString(), NetworkStructure::class.java)
|
}?:DownloadTools.getHttpContent(u, referer, pc_ua)).decodeToString(), NetworkStructure::class.java)
|
||||||
@@ -107,6 +107,7 @@ object Config {
|
|||||||
val navTextInfo = UserPreferenceString("navTextInfo", R.string.navTextInfo)
|
val navTextInfo = UserPreferenceString("navTextInfo", R.string.navTextInfo)
|
||||||
val proxy_key = PreferenceString(R.string.imgProxyCodeKeyID)
|
val proxy_key = PreferenceString(R.string.imgProxyCodeKeyID)
|
||||||
val app_ver = PreferenceString("settings_cat_general_et_app_version", R.string.app_ver)
|
val app_ver = PreferenceString("settings_cat_general_et_app_version", R.string.app_ver)
|
||||||
|
val platform = PreferenceString("settings_cat_general_et_platform", R.string.platform)
|
||||||
val token = UserPreferenceString("token", "", null)
|
val token = UserPreferenceString("token", "", null)
|
||||||
val pc_ua get() = MainActivity.mainWeakReference?.get()?.getString(R.string.pc_ua)?.format(app_ver.value)?:""
|
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 referer get() = MainActivity.mainWeakReference?.get()?.getString(R.string.referer)?.format(app_ver.value)?:""
|
||||||
@@ -143,5 +144,5 @@ object Config {
|
|||||||
|
|
||||||
fun getChapterInfoApiUrl(path: String?, uuid: String?, version: Int) =
|
fun getChapterInfoApiUrl(path: String?, uuid: String?, version: Int) =
|
||||||
MainActivity.mainWeakReference?.get()?.getString(R.string.chapterInfoApiUrl)
|
MainActivity.mainWeakReference?.get()?.getString(R.string.chapterInfoApiUrl)
|
||||||
?.format(myHostApiUrl.random(), path, if (version >= 2) "$version" else "" , uuid)
|
?.format(myHostApiUrl.random(), path, if (version >= 2) "$version" else "" , uuid, platform.value)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import top.fumiama.dmzj.copymanga.R
|
|||||||
import java.io.File
|
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) {
|
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(Config.myHostApiUrl.random(), path)
|
private val mBookApiUrl = getString(R.string.bookInfoApiUrl).format(Config.myHostApiUrl.random(), path, Config.platform.value)
|
||||||
private val mUserAgent = getString(R.string.pc_ua).format(Config.app_ver.value)
|
private val mUserAgent = getString(R.string.pc_ua).format(Config.app_ver.value)
|
||||||
private var mBook: BookInfoStructure? = null
|
private var mBook: BookInfoStructure? = null
|
||||||
private var mGroupPathWords = arrayOf<String>()
|
private var mGroupPathWords = arrayOf<String>()
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import top.fumiama.dmzj.copymanga.R
|
|||||||
class Shelf(private val getString: (Int) -> String) {
|
class Shelf(private val getString: (Int) -> String) {
|
||||||
private val apiUrl: String get() = getString(R.string.shelfOperateApiUrl).format(Config.myHostApiUrl.random())
|
private val apiUrl: String get() = getString(R.string.shelfOperateApiUrl).format(Config.myHostApiUrl.random())
|
||||||
private val queryApiUrlTemplate = getString(R.string.bookUserQueryApiUrl)
|
private val queryApiUrlTemplate = getString(R.string.bookUserQueryApiUrl)
|
||||||
private val addApiUrl get() = "$apiUrl?platform=3"
|
private val addApiUrl get() = "$apiUrl?platform=${Config.platform.value}"
|
||||||
private val delApiUrl get() = "${apiUrl}s?platform=3"
|
private val delApiUrl get() = "${apiUrl}s?platform=${Config.platform.value}"
|
||||||
suspend fun add(comicId: String): String = withContext(Dispatchers.IO) {
|
suspend fun add(comicId: String): String = withContext(Dispatchers.IO) {
|
||||||
if (comicId.isEmpty()) {
|
if (comicId.isEmpty()) {
|
||||||
return@withContext "空漫画ID"
|
return@withContext "空漫画ID"
|
||||||
@@ -68,7 +68,7 @@ class Shelf(private val getString: (Int) -> String) {
|
|||||||
|
|
||||||
suspend fun query(pathWord: String): BookQueryStructure? = withContext(Dispatchers.IO) {
|
suspend fun query(pathWord: String): BookQueryStructure? = withContext(Dispatchers.IO) {
|
||||||
try {
|
try {
|
||||||
val queryUrl = queryApiUrlTemplate.format(Config.myHostApiUrl.random(), pathWord)
|
val queryUrl = queryApiUrlTemplate.format(Config.myHostApiUrl.random(), pathWord, Config.platform.value)
|
||||||
(Config.apiProxy?.comancry(queryUrl) { url ->
|
(Config.apiProxy?.comancry(queryUrl) { url ->
|
||||||
DownloadTools.getHttpContent(url, Config.referer)
|
DownloadTools.getHttpContent(url, Config.referer)
|
||||||
}?:DownloadTools.getHttpContent(queryUrl, Config.referer)).let {
|
}?:DownloadTools.getHttpContent(queryUrl, Config.referer)).let {
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class Volume(private val path: String, private val groupPathWord: String, getStr
|
|||||||
return@withContext mVolume
|
return@withContext mVolume
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getApiUrl(offset: Int) = mGroupInfoApiUrlTemplate.format(Config.myHostApiUrl.random(), path, groupPathWord, offset)
|
private fun getApiUrl(offset: Int) = mGroupInfoApiUrlTemplate.format(Config.myHostApiUrl.random(), path, groupPathWord, offset, Config.platform.value)
|
||||||
private suspend fun download(re: Array<VolumeStructure?>, offset: Int, c: Int) = withContext(Dispatchers.IO) {
|
private suspend fun download(re: Array<VolumeStructure?>, offset: Int, c: Int) = withContext(Dispatchers.IO) {
|
||||||
Log.d("MyV", "下载偏移: $offset")
|
Log.d("MyV", "下载偏移: $offset")
|
||||||
getApiUrl(offset).let {
|
getApiUrl(offset).let {
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class Member(private val getString: (Int) -> String) {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
val u = getString(R.string.memberInfoApiUrl)
|
val u = getString(R.string.memberInfoApiUrl)
|
||||||
.format(Config.myHostApiUrl.random())
|
.format(Config.myHostApiUrl.random(), Config.platform.value)
|
||||||
val data = (Config.apiProxy?.comancry(u) {
|
val data = (Config.apiProxy?.comancry(u) {
|
||||||
DownloadTools.getHttpContent(it)
|
DownloadTools.getHttpContent(it)
|
||||||
}?:DownloadTools.getHttpContent(u)).decodeToString()
|
}?:DownloadTools.getHttpContent(u)).decodeToString()
|
||||||
@@ -97,7 +97,7 @@ class Member(private val getString: (Int) -> String) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun postLogin(username: String, pwd: String, salt: Int): ByteArray? =
|
private suspend fun postLogin(username: String, pwd: String, salt: Int): ByteArray? =
|
||||||
getString(R.string.loginApiUrl).format(Config.myHostApiUrl.random()).let { u ->
|
getString(R.string.loginApiUrl).format(Config.myHostApiUrl.random(), Config.platform.value).let { u ->
|
||||||
val use: suspend (String) -> ByteArray? = { it: String ->
|
val use: suspend (String) -> ByteArray? = { it: String ->
|
||||||
DownloadTools.getApiConnection(it, "POST").let { c ->
|
DownloadTools.getApiConnection(it, "POST").let { c ->
|
||||||
c.doOutput = true
|
c.doOutput = true
|
||||||
@@ -105,7 +105,7 @@ class Member(private val getString: (Int) -> String) {
|
|||||||
"content-type",
|
"content-type",
|
||||||
"application/x-www-form-urlencoded;charset=utf-8"
|
"application/x-www-form-urlencoded;charset=utf-8"
|
||||||
)
|
)
|
||||||
c.setRequestProperty("platform", "3")
|
c.setRequestProperty("platform", Config.platform.value)
|
||||||
c.setRequestProperty("accept", "application/json")
|
c.setRequestProperty("accept", "application/json")
|
||||||
val r = if (!Config.net_use_foreign.value) "1" else "0"
|
val r = if (!Config.net_use_foreign.value) "1" else "0"
|
||||||
val pwdEncoded =
|
val pwdEncoded =
|
||||||
@@ -116,7 +116,7 @@ class Member(private val getString: (Int) -> String) {
|
|||||||
username,
|
username,
|
||||||
Charset.defaultCharset().name()
|
Charset.defaultCharset().name()
|
||||||
)
|
)
|
||||||
}&password=$pwdEncoded&salt=$salt&platform=3&authorization=Token+&version=${Config.app_ver.value}&source=copyApp®ion=$r&webp=1".toByteArray()
|
}&password=$pwdEncoded&salt=$salt&platform=${Config.platform.value}&authorization=Token+&version=${Config.app_ver.value}&source=copyApp®ion=$r&webp=1".toByteArray()
|
||||||
)
|
)
|
||||||
c.outputStream.close()
|
c.outputStream.close()
|
||||||
val b = c.inputStream.readBytes()
|
val b = c.inputStream.readBytes()
|
||||||
@@ -129,11 +129,11 @@ class Member(private val getString: (Int) -> String) {
|
|||||||
|
|
||||||
|
|
||||||
private suspend fun postComandyLogin(username: String, pwd: String, salt: Int) =
|
private suspend fun postComandyLogin(username: String, pwd: String, salt: Int) =
|
||||||
getString(R.string.loginApiUrl).format(Config.myHostApiUrl.random()).let { u ->
|
getString(R.string.loginApiUrl).format(Config.myHostApiUrl.random(), Config.platform.value).let { u ->
|
||||||
val use: suspend (String) -> ByteArray? = { it: String ->
|
val use: suspend (String) -> ByteArray? = { it: String ->
|
||||||
DownloadTools.getComandyApiConnection(it, "POST", null, Config.pc_ua).apply {
|
DownloadTools.getComandyApiConnection(it, "POST", null, Config.pc_ua).apply {
|
||||||
headers["content-type"] = "application/x-www-form-urlencoded;charset=utf-8"
|
headers["content-type"] = "application/x-www-form-urlencoded;charset=utf-8"
|
||||||
headers["platform"] = "3"
|
headers["platform"] = Config.platform.value
|
||||||
headers["accept"] = "application/json"
|
headers["accept"] = "application/json"
|
||||||
val r = if (!Config.net_use_foreign.value) "1" else "0"
|
val r = if (!Config.net_use_foreign.value) "1" else "0"
|
||||||
val pwdEncoded =
|
val pwdEncoded =
|
||||||
@@ -143,7 +143,7 @@ class Member(private val getString: (Int) -> String) {
|
|||||||
username,
|
username,
|
||||||
Charset.defaultCharset().name()
|
Charset.defaultCharset().name()
|
||||||
)
|
)
|
||||||
}&password=$pwdEncoded&salt=$salt&platform=3&authorization=Token+&version=${Config.app_ver.value}&source=copyApp®ion=$r&webp=1"
|
}&password=$pwdEncoded&salt=$salt&platform=${Config.platform.value}&authorization=Token+&version=${Config.app_ver.value}&source=copyApp®ion=$r&webp=1"
|
||||||
}.let { capsule ->
|
}.let { capsule ->
|
||||||
try {
|
try {
|
||||||
val para = Gson().toJson(capsule)
|
val para = Gson().toJson(capsule)
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ object DownloadTools {
|
|||||||
Config.token.value?.let { tk ->
|
Config.token.value?.let { tk ->
|
||||||
setRequestProperty("authorization", "Token $tk")
|
setRequestProperty("authorization", "Token $tk")
|
||||||
}
|
}
|
||||||
setRequestProperty("platform", "3")
|
setRequestProperty("platform", Config.platform.value)
|
||||||
}
|
}
|
||||||
Log.d("MyDT", "getConnection: $url\n${connection.requestProperties.map { "${it.key}: ${it.value}" }.joinToString("\n")}")
|
Log.d("MyDT", "getConnection: $url\n${connection.requestProperties.map { "${it.key}: ${it.value}" }.joinToString("\n")}")
|
||||||
return connection
|
return connection
|
||||||
@@ -74,7 +74,7 @@ object DownloadTools {
|
|||||||
capsule.headers["authorization"] = "Token $tk"
|
capsule.headers["authorization"] = "Token $tk"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
capsule.headers["platform"] = "3"
|
capsule.headers["platform"] = Config.platform.value
|
||||||
capsule.headers["dt"] = SimpleDateFormat("yyyy.MM.dd", Locale.getDefault()).format(Calendar.getInstance().time)
|
capsule.headers["dt"] = SimpleDateFormat("yyyy.MM.dd", Locale.getDefault()).format(Calendar.getInstance().time)
|
||||||
Log.d("MyDT", "getComandyConnection: $url\n${capsule.headers.map { "${it.key}: ${it.value}" }.joinToString("\n")}")
|
Log.d("MyDT", "getComandyConnection: $url\n${capsule.headers.map { "${it.key}: ${it.value}" }.joinToString("\n")}")
|
||||||
capsule
|
capsule
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import top.fumiama.dmzj.copymanga.R
|
|||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
class HistoryFragment : InfoCardLoader(R.layout.fragment_history, R.id.action_nav_history_to_nav_book, isHistoryBook = true) {
|
class HistoryFragment : InfoCardLoader(R.layout.fragment_history, R.id.action_nav_history_to_nav_book, isHistoryBook = true) {
|
||||||
override fun getApiUrl() =
|
override fun getApiUrl() =
|
||||||
getString(R.string.historyApiUrl).format(Config.myHostApiUrl.random(), page * 21)
|
getString(R.string.historyApiUrl).format(Config.myHostApiUrl.random(), page * 21, Config.platform.value)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
if (MainActivity.member?.hasLogin != true) {
|
if (MainActivity.member?.hasLogin != true) {
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ import top.fumiama.dmzj.copymanga.R
|
|||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
class NewestFragment : InfoCardLoader(R.layout.fragment_newest, R.id.action_nav_newest_to_nav_book, true) {
|
class NewestFragment : InfoCardLoader(R.layout.fragment_newest, R.id.action_nav_newest_to_nav_book, true) {
|
||||||
override fun getApiUrl() =
|
override fun getApiUrl() =
|
||||||
getString(R.string.newestApiUrl).format(Config.myHostApiUrl.random(), page * 21)
|
getString(R.string.newestApiUrl).format(Config.myHostApiUrl.random(), page * 21, Config.platform.value)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,11 +48,12 @@ class RankFragment : InfoCardLoader(R.layout.fragment_rank, R.id.action_nav_rank
|
|||||||
|
|
||||||
override fun getApiUrl() =
|
override fun getApiUrl() =
|
||||||
getString(R.string.rankApiUrl).format(
|
getString(R.string.rankApiUrl).format(
|
||||||
Config.myHostApiUrl.random(),
|
Config.myHostApiUrl.random(),
|
||||||
page * 21,
|
page * 21,
|
||||||
sortWay[sortValue],
|
sortWay[sortValue],
|
||||||
audienceWay[audience]
|
audienceWay[audience],
|
||||||
)
|
Config.platform.value
|
||||||
|
)
|
||||||
|
|
||||||
override fun setListeners() {
|
override fun setListeners() {
|
||||||
super.setListeners()
|
super.setListeners()
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ import top.fumiama.dmzj.copymanga.R
|
|||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
class RecFragment : InfoCardLoader(R.layout.fragment_recommend, R.id.action_nav_recommend_to_nav_book, true) {
|
class RecFragment : InfoCardLoader(R.layout.fragment_recommend, R.id.action_nav_recommend_to_nav_book, true) {
|
||||||
override fun getApiUrl() =
|
override fun getApiUrl() =
|
||||||
getString(R.string.recommendApiUrl).format(Config.myHostApiUrl.random(), page * 21)
|
getString(R.string.recommendApiUrl).format(Config.myHostApiUrl.random(), page * 21, Config.platform.value)
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@ class SearchFragment : InfoCardLoader(R.layout.fragment_search, R.id.action_nav_
|
|||||||
private var query: String? = null
|
private var query: String? = null
|
||||||
private var type: String? = null
|
private var type: String? = null
|
||||||
override fun getApiUrl() =
|
override fun getApiUrl() =
|
||||||
getString(R.string.searchApiUrl).format(Config.myHostApiUrl.random(), page * 21, query, type)
|
getString(R.string.searchApiUrl).format(Config.myHostApiUrl.random(), page * 21, query, type, Config.platform.value)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|||||||
@@ -28,7 +28,8 @@ class ShelfFragment : InfoCardLoader(R.layout.fragment_shelf, R.id.action_nav_su
|
|||||||
getString(R.string.shelfApiUrl).format(
|
getString(R.string.shelfApiUrl).format(
|
||||||
Config.myHostApiUrl.random(),
|
Config.myHostApiUrl.random(),
|
||||||
page * 21,
|
page * 21,
|
||||||
sortWay[sortValue]
|
sortWay[sortValue],
|
||||||
|
Config.platform.value,
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
|||||||
@@ -25,12 +25,13 @@ class SortFragment : StatusCardFlow(0, R.id.action_nav_sort_to_nav_book, R.layou
|
|||||||
|
|
||||||
override fun getApiUrl() =
|
override fun getApiUrl() =
|
||||||
getString(R.string.sortApiUrl).format(
|
getString(R.string.sortApiUrl).format(
|
||||||
Config.myHostApiUrl.random(),
|
Config.myHostApiUrl.random(),
|
||||||
page * 21,
|
page * 21,
|
||||||
sortWay[sortValue],
|
sortWay[sortValue],
|
||||||
if(theme >= 0 && theme < (filter?.results?.theme?.size ?: 0)) (filter?.results?.theme?.get(theme)?.path_word ?: "") else "",
|
if(theme >= 0 && theme < (filter?.results?.theme?.size ?: 0)) (filter?.results?.theme?.get(theme)?.path_word ?: "") else "",
|
||||||
if(region >= 0 && region < (filter?.results?.top?.size ?: 0)) (filter?.results?.top?.get(region)?.path_word ?: "") else "",
|
if(region >= 0 && region < (filter?.results?.top?.size ?: 0)) (filter?.results?.top?.get(region)?.path_word ?: "") else "",
|
||||||
)
|
Config.platform.value,
|
||||||
|
)
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -42,7 +43,7 @@ class SortFragment : StatusCardFlow(0, R.id.action_nav_sort_to_nav_book, R.layou
|
|||||||
super.setListeners()
|
super.setListeners()
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
setProgress(5)
|
setProgress(5)
|
||||||
PausableDownloader(getString(R.string.filterApiUrl).format(Config.myHostApiUrl.random())) {
|
PausableDownloader(getString(R.string.filterApiUrl).format(Config.myHostApiUrl.random(), Config.platform.value)) {
|
||||||
if(ad?.exit == true) return@PausableDownloader
|
if(ad?.exit == true) return@PausableDownloader
|
||||||
it.let {
|
it.let {
|
||||||
it.inputStream().use { i ->
|
it.inputStream().use { i ->
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ import top.fumiama.dmzj.copymanga.R
|
|||||||
class TopicFragment : InfoCardLoader(R.layout.fragment_topic, R.id.action_nav_topic_to_nav_book) {
|
class TopicFragment : InfoCardLoader(R.layout.fragment_topic, R.id.action_nav_topic_to_nav_book) {
|
||||||
private var type = 1
|
private var type = 1
|
||||||
override fun getApiUrl() =
|
override fun getApiUrl() =
|
||||||
getString(R.string.topicContentApiUrl).format(Config.myHostApiUrl.random(), arguments?.getString("path"), type, offset)
|
getString(R.string.topicContentApiUrl).format(Config.myHostApiUrl.random(), arguments?.getString("path"), type, offset, Config.platform.value)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
setProgress(5)
|
setProgress(5)
|
||||||
PausableDownloader(getString(R.string.topicApiUrl).format(Config.myHostApiUrl.random(), arguments?.getString("path"))) { data ->
|
PausableDownloader(getString(R.string.topicApiUrl).format(Config.myHostApiUrl.random(), arguments?.getString("path"), Config.platform.value)) { data ->
|
||||||
setProgress(10)
|
setProgress(10)
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
if(ad?.exit == true) return@withContext
|
if(ad?.exit == true) return@withContext
|
||||||
|
|||||||
@@ -299,7 +299,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
|||||||
query = q.toString()
|
query = q.toString()
|
||||||
activity?.apply {
|
activity?.apply {
|
||||||
PausableDownloader(getString(R.string.searchApiUrl).format(Config.myHostApiUrl.random(), 0,
|
PausableDownloader(getString(R.string.searchApiUrl).format(Config.myHostApiUrl.random(), 0,
|
||||||
URLEncoder.encode(q.toString(), Charset.defaultCharset().name()), type)) {
|
URLEncoder.encode(q.toString(), Charset.defaultCharset().name()), type, Config.platform.value)) {
|
||||||
results = Gson().fromJson(it.decodeToString(), BookListStructure::class.java)
|
results = Gson().fromJson(it.decodeToString(), BookListStructure::class.java)
|
||||||
count = results?.results?.total?:0
|
count = results?.results?.total?:0
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ import java.lang.ref.WeakReference
|
|||||||
import java.util.concurrent.atomic.AtomicInteger
|
import java.util.concurrent.atomic.AtomicInteger
|
||||||
|
|
||||||
class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadHandler({
|
class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadHandler({
|
||||||
that.get()?.getString(R.string.mainPageApiUrl)!!.format(Config.myHostApiUrl.random())
|
that.get()?.getString(R.string.mainPageApiUrl)!!.format(Config.myHostApiUrl.random(), Config.platform.value)
|
||||||
},
|
},
|
||||||
IndexStructure::class.java,
|
IndexStructure::class.java,
|
||||||
that.get()
|
that.get()
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ open class StatusCardFlow(private val api: Int, nav: Int, inflateRes: Int,
|
|||||||
getString(api).format(
|
getString(api).format(
|
||||||
Config.myHostApiUrl.random(),
|
Config.myHostApiUrl.random(),
|
||||||
page * 21,
|
page * 21,
|
||||||
sortWay[sortValue]
|
sortWay[sortValue],
|
||||||
|
Config.platform.value,
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun setListeners() {
|
override fun setListeners() {
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ open class ThemeCardFlow(private val api: Int, nav: Int) : StatusCardFlow(0, nav
|
|||||||
Config.myHostApiUrl.random(),
|
Config.myHostApiUrl.random(),
|
||||||
page * 21,
|
page * 21,
|
||||||
sortWay[sortValue],
|
sortWay[sortValue],
|
||||||
theme
|
theme,
|
||||||
|
Config.platform.value,
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
<!ENTITY hosturl "api.copy-manga.com">
|
<!ENTITY hosturl "api.copy-manga.com">
|
||||||
<!ENTITY appver "2.3.0">
|
<!ENTITY appver "2.3.0">
|
||||||
<!ENTITY proxyurl "copymanga.azurewebsites.net">
|
<!ENTITY proxyurl "copymanga.azurewebsites.net">
|
||||||
|
<!ENTITY platform "1">
|
||||||
]>
|
]>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">拷贝漫画</string>
|
<string name="app_name">拷贝漫画</string>
|
||||||
@@ -63,30 +64,30 @@
|
|||||||
<string name="touch_img_error">预载图片头失败</string>
|
<string name="touch_img_error">预载图片头失败</string>
|
||||||
<string name="analyze_img_size_error">读取图片大小失败</string>
|
<string name="analyze_img_size_error">读取图片大小失败</string>
|
||||||
|
|
||||||
<string name="networkApiUrl">https://%1$s/api/v3/system/network2?platform=3</string>
|
<string name="networkApiUrl">https://%1$s/api/v3/system/network2?platform=%2$s</string>
|
||||||
<string name="mainPageApiUrl">https://%1$s/api/v3/h5/homeIndex?platform=3</string>
|
<string name="mainPageApiUrl">https://%1$s/api/v3/h5/homeIndex?platform=%2$s</string>
|
||||||
<string name="referUrl">https://%1$s</string>
|
<string name="referUrl">https://%1$s</string>
|
||||||
<string name="hostUrl">&hosturl;</string>
|
<string name="hostUrl">&hosturl;</string>
|
||||||
<string name="proxyUrl">&proxyurl;</string>
|
<string name="proxyUrl">&proxyurl;</string>
|
||||||
<string name="rankApiUrl">https://%1$s/api/v3/ranks?limit=21&offset=%2$d&date_type=%3$s&audience_type=%4$s&platform=3</string>
|
<string name="rankApiUrl">https://%1$s/api/v3/ranks?limit=21&offset=%2$d&date_type=%3$s&audience_type=%4$s&platform=%5$s</string>
|
||||||
<string name="searchApiUrl">https://%1$s/api/v3/search/comic?limit=21&offset=%2$d&q=%3$s&q_type=%4$s&platform=3</string>
|
<string name="searchApiUrl">https://%1$s/api/v3/search/comic?limit=21&offset=%2$d&q=%3$s&q_type=%4$s&platform=%5$s</string>
|
||||||
<string name="filterApiUrl">https://%1$s/api/v3/h5/filter/comic/tags?platform=3</string>
|
<string name="filterApiUrl">https://%1$s/api/v3/h5/filter/comic/tags?platform=%2$s</string>
|
||||||
<string name="sortApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&theme=%4$s&top=%5$s&platform=3</string>
|
<string name="sortApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&theme=%4$s&top=%5$s&platform=%6$s</string>
|
||||||
<string name="bookInfoApiUrl">https://%1$s/api/v3/comic2/%2$s?platform=3</string>
|
<string name="bookInfoApiUrl">https://%1$s/api/v3/comic2/%2$s?platform=%3$s</string>
|
||||||
<string name="bookUserQueryApiUrl">https://%1$s/api/v3/comic2/%2$s/query?platform=3</string>
|
<string name="bookUserQueryApiUrl">https://%1$s/api/v3/comic2/%2$s/query?platform=%3$s</string>
|
||||||
<string name="groupInfoApiUrl">https://%1$s/api/v3/comic/%2$s/group/%3$s/chapters?limit=100&offset=%4$d&platform=3</string>
|
<string name="groupInfoApiUrl">https://%1$s/api/v3/comic/%2$s/group/%3$s/chapters?limit=100&offset=%4$d&platform=%5$s</string>
|
||||||
<string name="chapterInfoApiUrl">https://%1$s/api/v3/comic/%2$s/chapter%3$s/%4$s?platform=3</string>
|
<string name="chapterInfoApiUrl">https://%1$s/api/v3/comic/%2$s/chapter%3$s/%4$s?platform=%5$s</string>
|
||||||
<string name="topicApiUrl">https://%1$s/api/v3/topic/%2$s?platform=3</string>
|
<string name="topicApiUrl">https://%1$s/api/v3/topic/%2$s?platform=%3$s</string>
|
||||||
<string name="topicContentApiUrl">https://%1$s/api/v3/topic/%2$s/contents?type=%3$d&limit=21&offset=%4$d&platform=3</string>
|
<string name="topicContentApiUrl">https://%1$s/api/v3/topic/%2$s/contents?type=%3$d&limit=21&offset=%4$d&platform=%5$s</string>
|
||||||
<string name="recommendApiUrl">https://%1$s/api/v3/recs?pos=3200102&limit=21&offset=%2$d&platform=3</string>
|
<string name="recommendApiUrl">https://%1$s/api/v3/recs?pos=3200102&limit=21&offset=%2$d&platform=%3$s</string>
|
||||||
<string name="newestApiUrl">https://%1$s/api/v3/update/newest?limit=21&offset=%2$d&platform=3</string>
|
<string name="newestApiUrl">https://%1$s/api/v3/update/newest?limit=21&offset=%2$d&platform=%3$s</string>
|
||||||
<string name="finishApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&top=finish&platform=3</string>
|
<string name="finishApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&top=finish&platform=%4$s</string>
|
||||||
<string name="authorApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&author=%4$s&platform=3</string>
|
<string name="authorApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&author=%4$s&platform=%5$s</string>
|
||||||
<string name="captionApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&theme=%4$s&platform=3</string>
|
<string name="captionApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&theme=%4$s&platform=%5$s</string>
|
||||||
<string name="loginApiUrl">https://%1$s/api/v3/login?platform=3</string>
|
<string name="loginApiUrl">https://%1$s/api/v3/login?platform=%2$s</string>
|
||||||
<string name="memberInfoApiUrl">https://%1$s/api/v3/member/info?platform=3</string>
|
<string name="memberInfoApiUrl">https://%1$s/api/v3/member/info?platform=%2$s</string>
|
||||||
<string name="historyApiUrl">https://%1$s/api/v3/member/browse/comics?limit=21&offset=%2$d&platform=3</string>
|
<string name="historyApiUrl">https://%1$s/api/v3/member/browse/comics?limit=21&offset=%2$d&platform=%3$s</string>
|
||||||
<string name="shelfApiUrl">https://%1$s/api/v3/member/collect/comics?limit=21&offset=%2$d&free_type=1&ordering=%3$s&platform=3</string>
|
<string name="shelfApiUrl">https://%1$s/api/v3/member/collect/comics?limit=21&offset=%2$d&free_type=1&ordering=%3$s&platform=%4$s</string>
|
||||||
<string name="shelfOperateApiUrl">https://%1$s/api/v3/member/collect/comic</string>
|
<string name="shelfOperateApiUrl">https://%1$s/api/v3/member/collect/comic</string>
|
||||||
|
|
||||||
<string name="imgProxyApiUrl">https://&proxyurl;/api/img?code=%1$s&url=%2$s</string>
|
<string name="imgProxyApiUrl">https://&proxyurl;/api/img?code=%1$s&url=%2$s</string>
|
||||||
@@ -115,6 +116,7 @@
|
|||||||
<string name="pc_ua">COPY/%1$s</string>
|
<string name="pc_ua">COPY/%1$s</string>
|
||||||
<string name="app_ver">&appver;</string>
|
<string name="app_ver">&appver;</string>
|
||||||
<string name="referer">com.copymanga.app-%1$s</string>
|
<string name="referer">com.copymanga.app-%1$s</string>
|
||||||
|
<string name="platform">&platform;</string>
|
||||||
|
|
||||||
<string name="menu_update_time">更新时间</string>
|
<string name="menu_update_time">更新时间</string>
|
||||||
<string name="menu_hot">热度</string>
|
<string name="menu_hot">热度</string>
|
||||||
@@ -154,6 +156,8 @@
|
|||||||
<string name="settings_cat_general_sb_summary_startup_menu">默认主页</string>
|
<string name="settings_cat_general_sb_summary_startup_menu">默认主页</string>
|
||||||
<string name="settings_cat_general_et_title_app_version">拷贝版本号</string>
|
<string name="settings_cat_general_et_title_app_version">拷贝版本号</string>
|
||||||
<string name="settings_cat_general_et_summary_app_version">默认&appver;</string>
|
<string name="settings_cat_general_et_summary_app_version">默认&appver;</string>
|
||||||
|
<string name="settings_cat_general_et_title_platform">平台版本号</string>
|
||||||
|
<string name="settings_cat_general_et_summary_platform">默认&platform;</string>
|
||||||
<string name="settings_cat_general_sb_card_per_row">每行加载卡片数偏移</string>
|
<string name="settings_cat_general_sb_card_per_row">每行加载卡片数偏移</string>
|
||||||
<string name="settings_cat_general_sm_card_per_row">默认为0表示无偏移, 在此基础上加减</string>
|
<string name="settings_cat_general_sm_card_per_row">默认为0表示无偏移, 在此基础上加减</string>
|
||||||
<string name="settings_cat_general_sw_disable_kanban_animation">不显示看板娘动画</string>
|
<string name="settings_cat_general_sw_disable_kanban_animation">不显示看板娘动画</string>
|
||||||
|
|||||||
@@ -47,6 +47,17 @@
|
|||||||
app:enableCopying="true"
|
app:enableCopying="true"
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
app:key="settings_cat_general_et_app_version" />
|
app:key="settings_cat_general_et_app_version" />
|
||||||
|
<EditTextPreference
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:defaultValue="@string/platform"
|
||||||
|
android:selectAllOnFocus="false"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:title="@string/settings_cat_general_et_title_platform"
|
||||||
|
android:summary="@string/settings_cat_general_et_summary_platform"
|
||||||
|
app:enableCopying="true"
|
||||||
|
app:iconSpaceReserved="false"
|
||||||
|
app:key="settings_cat_general_et_platform" />
|
||||||
<SeekBarPreference
|
<SeekBarPreference
|
||||||
android:defaultValue="0"
|
android:defaultValue="0"
|
||||||
android:max="8"
|
android:max="8"
|
||||||
|
|||||||
Reference in New Issue
Block a user