mirror of
https://github.com/fumiama/copymanga.git
synced 2026-06-04 23:10:23 +08:00
@@ -11,8 +11,8 @@ android {
|
||||
applicationId 'top.fumiama.copymanga'
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 34
|
||||
versionCode 71
|
||||
versionName '2.5.0'
|
||||
versionCode 72
|
||||
versionName '2.5.1'
|
||||
resourceConfigurations += ['zh', 'zh-rCN']
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
@@ -55,7 +55,7 @@ object Config {
|
||||
"region",
|
||||
if (net_use_foreign.value) "1" else "0"
|
||||
)
|
||||
.addHeader("platform", "3")
|
||||
.addHeader("platform", platform.value)
|
||||
.build()
|
||||
return field
|
||||
}
|
||||
@@ -78,7 +78,7 @@ object Config {
|
||||
mHostApiUrlsMutex.withLock {
|
||||
if (mHostApiUrls.isNotEmpty()) return@runBlocking
|
||||
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) {
|
||||
DownloadTools.getHttpContent(it, referer, pc_ua)
|
||||
}?:DownloadTools.getHttpContent(u, referer, pc_ua)).decodeToString(), NetworkStructure::class.java)
|
||||
@@ -107,6 +107,7 @@ object Config {
|
||||
val navTextInfo = UserPreferenceString("navTextInfo", R.string.navTextInfo)
|
||||
val proxy_key = PreferenceString(R.string.imgProxyCodeKeyID)
|
||||
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 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)?:""
|
||||
@@ -143,5 +144,5 @@ object Config {
|
||||
|
||||
fun getChapterInfoApiUrl(path: String?, uuid: String?, version: Int) =
|
||||
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
|
||||
|
||||
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 var mBook: BookInfoStructure? = null
|
||||
private var mGroupPathWords = arrayOf<String>()
|
||||
|
||||
@@ -12,8 +12,8 @@ import top.fumiama.dmzj.copymanga.R
|
||||
class Shelf(private val getString: (Int) -> String) {
|
||||
private val apiUrl: String get() = getString(R.string.shelfOperateApiUrl).format(Config.myHostApiUrl.random())
|
||||
private val queryApiUrlTemplate = getString(R.string.bookUserQueryApiUrl)
|
||||
private val addApiUrl get() = "$apiUrl?platform=3"
|
||||
private val delApiUrl get() = "${apiUrl}s?platform=3"
|
||||
private val addApiUrl get() = "$apiUrl?platform=${Config.platform.value}"
|
||||
private val delApiUrl get() = "${apiUrl}s?platform=${Config.platform.value}"
|
||||
suspend fun add(comicId: String): String = withContext(Dispatchers.IO) {
|
||||
if (comicId.isEmpty()) {
|
||||
return@withContext "空漫画ID"
|
||||
@@ -68,7 +68,7 @@ class Shelf(private val getString: (Int) -> String) {
|
||||
|
||||
suspend fun query(pathWord: String): BookQueryStructure? = withContext(Dispatchers.IO) {
|
||||
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 ->
|
||||
DownloadTools.getHttpContent(url, Config.referer)
|
||||
}?:DownloadTools.getHttpContent(queryUrl, Config.referer)).let {
|
||||
|
||||
@@ -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(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) {
|
||||
Log.d("MyV", "下载偏移: $offset")
|
||||
getApiUrl(offset).let {
|
||||
|
||||
@@ -49,7 +49,7 @@ class Member(private val getString: (Int) -> String) {
|
||||
}
|
||||
try {
|
||||
val u = getString(R.string.memberInfoApiUrl)
|
||||
.format(Config.myHostApiUrl.random())
|
||||
.format(Config.myHostApiUrl.random(), Config.platform.value)
|
||||
val data = (Config.apiProxy?.comancry(u) {
|
||||
DownloadTools.getHttpContent(it)
|
||||
}?: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? =
|
||||
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 ->
|
||||
DownloadTools.getApiConnection(it, "POST").let { c ->
|
||||
c.doOutput = true
|
||||
@@ -105,7 +105,7 @@ class Member(private val getString: (Int) -> String) {
|
||||
"content-type",
|
||||
"application/x-www-form-urlencoded;charset=utf-8"
|
||||
)
|
||||
c.setRequestProperty("platform", "3")
|
||||
c.setRequestProperty("platform", Config.platform.value)
|
||||
c.setRequestProperty("accept", "application/json")
|
||||
val r = if (!Config.net_use_foreign.value) "1" else "0"
|
||||
val pwdEncoded =
|
||||
@@ -116,7 +116,7 @@ class Member(private val getString: (Int) -> String) {
|
||||
username,
|
||||
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()
|
||||
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) =
|
||||
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 ->
|
||||
DownloadTools.getComandyApiConnection(it, "POST", null, Config.pc_ua).apply {
|
||||
headers["content-type"] = "application/x-www-form-urlencoded;charset=utf-8"
|
||||
headers["platform"] = "3"
|
||||
headers["platform"] = Config.platform.value
|
||||
headers["accept"] = "application/json"
|
||||
val r = if (!Config.net_use_foreign.value) "1" else "0"
|
||||
val pwdEncoded =
|
||||
@@ -143,7 +143,7 @@ class Member(private val getString: (Int) -> String) {
|
||||
username,
|
||||
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 ->
|
||||
try {
|
||||
val para = Gson().toJson(capsule)
|
||||
|
||||
@@ -46,7 +46,7 @@ object DownloadTools {
|
||||
Config.token.value?.let { 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")}")
|
||||
return connection
|
||||
@@ -74,7 +74,7 @@ object DownloadTools {
|
||||
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)
|
||||
Log.d("MyDT", "getComandyConnection: $url\n${capsule.headers.map { "${it.key}: ${it.value}" }.joinToString("\n")}")
|
||||
capsule
|
||||
|
||||
@@ -11,7 +11,7 @@ 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(Config.myHostApiUrl.random(), page * 21)
|
||||
getString(R.string.historyApiUrl).format(Config.myHostApiUrl.random(), page * 21, Config.platform.value)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
if (MainActivity.member?.hasLogin != true) {
|
||||
|
||||
@@ -7,5 +7,5 @@ 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(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() =
|
||||
getString(R.string.rankApiUrl).format(
|
||||
Config.myHostApiUrl.random(),
|
||||
page * 21,
|
||||
sortWay[sortValue],
|
||||
audienceWay[audience]
|
||||
)
|
||||
Config.myHostApiUrl.random(),
|
||||
page * 21,
|
||||
sortWay[sortValue],
|
||||
audienceWay[audience],
|
||||
Config.platform.value
|
||||
)
|
||||
|
||||
override fun setListeners() {
|
||||
super.setListeners()
|
||||
|
||||
@@ -7,5 +7,5 @@ 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(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 type: String? = null
|
||||
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?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
@@ -28,7 +28,8 @@ class ShelfFragment : InfoCardLoader(R.layout.fragment_shelf, R.id.action_nav_su
|
||||
getString(R.string.shelfApiUrl).format(
|
||||
Config.myHostApiUrl.random(),
|
||||
page * 21,
|
||||
sortWay[sortValue]
|
||||
sortWay[sortValue],
|
||||
Config.platform.value,
|
||||
)
|
||||
|
||||
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() =
|
||||
getString(R.string.sortApiUrl).format(
|
||||
Config.myHostApiUrl.random(),
|
||||
page * 21,
|
||||
sortWay[sortValue],
|
||||
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 "",
|
||||
)
|
||||
Config.myHostApiUrl.random(),
|
||||
page * 21,
|
||||
sortWay[sortValue],
|
||||
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 "",
|
||||
Config.platform.value,
|
||||
)
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
@@ -42,7 +43,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(Config.myHostApiUrl.random())) {
|
||||
PausableDownloader(getString(R.string.filterApiUrl).format(Config.myHostApiUrl.random(), Config.platform.value)) {
|
||||
if(ad?.exit == true) return@PausableDownloader
|
||||
it.let {
|
||||
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) {
|
||||
private var type = 1
|
||||
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?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
lifecycleScope.launch {
|
||||
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)
|
||||
withContext(Dispatchers.IO) {
|
||||
if(ad?.exit == true) return@withContext
|
||||
|
||||
@@ -299,7 +299,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
||||
query = q.toString()
|
||||
activity?.apply {
|
||||
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)
|
||||
count = results?.results?.total?:0
|
||||
withContext(Dispatchers.Main) {
|
||||
|
||||
@@ -40,7 +40,7 @@ import java.lang.ref.WeakReference
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
||||
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,
|
||||
that.get()
|
||||
|
||||
@@ -20,7 +20,8 @@ open class StatusCardFlow(private val api: Int, nav: Int, inflateRes: Int,
|
||||
getString(api).format(
|
||||
Config.myHostApiUrl.random(),
|
||||
page * 21,
|
||||
sortWay[sortValue]
|
||||
sortWay[sortValue],
|
||||
Config.platform.value,
|
||||
)
|
||||
|
||||
override fun setListeners() {
|
||||
|
||||
@@ -15,7 +15,8 @@ open class ThemeCardFlow(private val api: Int, nav: Int) : StatusCardFlow(0, nav
|
||||
Config.myHostApiUrl.random(),
|
||||
page * 21,
|
||||
sortWay[sortValue],
|
||||
theme
|
||||
theme,
|
||||
Config.platform.value,
|
||||
)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<!ENTITY hosturl "api.copy-manga.com">
|
||||
<!ENTITY appver "2.3.0">
|
||||
<!ENTITY proxyurl "copymanga.azurewebsites.net">
|
||||
<!ENTITY platform "1">
|
||||
]>
|
||||
<resources>
|
||||
<string name="app_name">拷贝漫画</string>
|
||||
@@ -63,30 +64,30 @@
|
||||
<string name="touch_img_error">预载图片头失败</string>
|
||||
<string name="analyze_img_size_error">读取图片大小失败</string>
|
||||
|
||||
<string name="networkApiUrl">https://%1$s/api/v3/system/network2?platform=3</string>
|
||||
<string name="mainPageApiUrl">https://%1$s/api/v3/h5/homeIndex?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=%2$s</string>
|
||||
<string name="referUrl">https://%1$s</string>
|
||||
<string name="hostUrl">&hosturl;</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="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="filterApiUrl">https://%1$s/api/v3/h5/filter/comic/tags?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=3</string>
|
||||
<string name="bookInfoApiUrl">https://%1$s/api/v3/comic2/%2$s?platform=3</string>
|
||||
<string name="bookUserQueryApiUrl">https://%1$s/api/v3/comic2/%2$s/query?platform=3</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="chapterInfoApiUrl">https://%1$s/api/v3/comic/%2$s/chapter%3$s/%4$s?platform=3</string>
|
||||
<string name="topicApiUrl">https://%1$s/api/v3/topic/%2$s?platform=3</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="recommendApiUrl">https://%1$s/api/v3/recs?pos=3200102&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</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="authorApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&author=%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=3</string>
|
||||
<string name="loginApiUrl">https://%1$s/api/v3/login?platform=3</string>
|
||||
<string name="memberInfoApiUrl">https://%1$s/api/v3/member/info?platform=3</string>
|
||||
<string name="historyApiUrl">https://%1$s/api/v3/member/browse/comics?limit=21&offset=%2$d&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=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=%5$s</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=%6$s</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$s</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=%5$s</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=%5$s</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$s</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=%5$s</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=%2$s</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$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=%4$s</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>
|
||||
@@ -115,6 +116,7 @@
|
||||
<string name="pc_ua">COPY/%1$s</string>
|
||||
<string name="app_ver">&appver;</string>
|
||||
<string name="referer">com.copymanga.app-%1$s</string>
|
||||
<string name="platform">&platform;</string>
|
||||
|
||||
<string name="menu_update_time">更新时间</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_et_title_app_version">拷贝版本号</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_sm_card_per_row">默认为0表示无偏移, 在此基础上加减</string>
|
||||
<string name="settings_cat_general_sw_disable_kanban_animation">不显示看板娘动画</string>
|
||||
|
||||
@@ -47,6 +47,17 @@
|
||||
app:enableCopying="true"
|
||||
app:iconSpaceReserved="false"
|
||||
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
|
||||
android:defaultValue="0"
|
||||
android:max="8"
|
||||
|
||||
Reference in New Issue
Block a user