mirror of
https://github.com/fumiama/copymanga.git
synced 2026-06-28 14:50:29 +08:00
v2.0.beta18
新增 1. 自定义API地址 2. 图片代理 修复 1. 文本编辑框不跟随输入法上移 2. 获取图书信息失败(#26)
This commit is contained in:
1
.idea/gradle.xml
generated
1
.idea/gradle.xml
generated
@@ -14,6 +14,7 @@
|
|||||||
<option value="$PROJECT_DIR$/app" />
|
<option value="$PROJECT_DIR$/app" />
|
||||||
</set>
|
</set>
|
||||||
</option>
|
</option>
|
||||||
|
<option name="resolveExternalAnnotations" value="false" />
|
||||||
</GradleProjectSettings>
|
</GradleProjectSettings>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
1
.idea/misc.xml
generated
1
.idea/misc.xml
generated
@@ -1,4 +1,3 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="DesignSurface">
|
<component name="DesignSurface">
|
||||||
<option name="filePathToZoomLevelMap">
|
<option name="filePathToZoomLevelMap">
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ android {
|
|||||||
applicationId 'top.fumiama.copymanga'
|
applicationId 'top.fumiama.copymanga'
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 33
|
targetSdkVersion 33
|
||||||
versionCode 29
|
versionCode 30
|
||||||
versionName '2.0.beta17'
|
versionName '2.0.beta18'
|
||||||
resConfigs 'zh', 'zh-rCN'
|
resConfigs 'zh', 'zh-rCN'
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name="top.fumiama.copymanga.MainActivity"
|
android:name="top.fumiama.copymanga.MainActivity"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:theme="@style/AppTheme.NoActionBar"
|
android:theme="@style/AppTheme.Default"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
|
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
|
||||||
<activity
|
<activity
|
||||||
android:name="top.fumiama.copymanga.ui.vm.ViewMangaActivity"
|
android:name="top.fumiama.copymanga.ui.vm.ViewMangaActivity"
|
||||||
android:theme="@style/AppTheme.NoActionBar"/>
|
android:theme="@style/AppTheme.Default"/>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class LoginActivity:Activity() {
|
|||||||
putString("username", it.results?.username)
|
putString("username", it.results?.username)
|
||||||
putString("nickname", it.results?.nickname)
|
putString("nickname", it.results?.nickname)
|
||||||
apply()
|
apply()
|
||||||
DownloadTools.getHttpContent(getString(R.string.memberInfoApiUrl))?.decodeToString()?.let {
|
DownloadTools.getHttpContent(getString(R.string.memberInfoApiUrl).format(CMApi.myHostApiUrl))?.decodeToString()?.let {
|
||||||
val l = Gson().fromJson(it, LoginInfoStructure::class.java)
|
val l = Gson().fromJson(it, LoginInfoStructure::class.java)
|
||||||
if(l.code == 200) {
|
if(l.code == 200) {
|
||||||
putString("avatar", l.results.avatar)
|
putString("avatar", l.results.avatar)
|
||||||
|
|||||||
@@ -58,10 +58,13 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
mainWeakReference = WeakReference(this)
|
||||||
|
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
setSupportActionBar(toolbar)
|
setSupportActionBar(toolbar)
|
||||||
//translucentStatusBar()
|
//translucentStatusBar()
|
||||||
coordiv.layoutParams.height = getStatusBarHeight()
|
//coordiv.layoutParams.height = getStatusBarHeight()
|
||||||
|
|
||||||
navController = findNavController(R.id.nav_host_fragment)
|
navController = findNavController(R.id.nav_host_fragment)
|
||||||
appBarConfiguration = AppBarConfiguration(
|
appBarConfiguration = AppBarConfiguration(
|
||||||
@@ -79,7 +82,6 @@ class MainActivity : AppCompatActivity() {
|
|||||||
nav_view.setupWithNavController(navController!!)
|
nav_view.setupWithNavController(navController!!)
|
||||||
|
|
||||||
headPic = File(getExternalFilesDir(""), "headPic")
|
headPic = File(getExternalFilesDir(""), "headPic")
|
||||||
mainWeakReference = WeakReference(this)
|
|
||||||
drawer_layout.addDrawerListener(object : DrawerLayout.DrawerListener {
|
drawer_layout.addDrawerListener(object : DrawerLayout.DrawerListener {
|
||||||
override fun onDrawerClosed(drawerView: View) {
|
override fun onDrawerClosed(drawerView: View) {
|
||||||
Log.d("MyMain", "onDrawerClosed")
|
Log.d("MyMain", "onDrawerClosed")
|
||||||
@@ -290,14 +292,14 @@ class MainActivity : AppCompatActivity() {
|
|||||||
coordiv.layoutParams.height = getStatusBarHeight()
|
coordiv.layoutParams.height = getStatusBarHeight()
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
private fun getStatusBarHeight() =
|
/*private fun getStatusBarHeight() =
|
||||||
resources.getDimensionPixelOffset(
|
resources.getDimensionPixelOffset(
|
||||||
resources.getIdentifier(
|
resources.getIdentifier(
|
||||||
"status_bar_height",
|
"status_bar_height",
|
||||||
"dimen",
|
"dimen",
|
||||||
"android"
|
"android"
|
||||||
)
|
)
|
||||||
)
|
)*/
|
||||||
|
|
||||||
private fun checkUpdate(ignoreSkip: Boolean) {
|
private fun checkUpdate(ignoreSkip: Boolean) {
|
||||||
Thread{
|
Thread{
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package top.fumiama.copymanga.template.http
|
|||||||
|
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import top.fumiama.copymanga.tools.http.DownloadTools
|
import top.fumiama.copymanga.tools.http.DownloadTools
|
||||||
|
|
||||||
class AutoDownloadThread(private val url: String, private val whenFinish: (result: ByteArray?)->Unit): Thread() {
|
class AutoDownloadThread(private val url: String, private val whenFinish: (result: ByteArray?)->Unit): Thread() {
|
||||||
@@ -12,7 +13,7 @@ class AutoDownloadThread(private val url: String, private val whenFinish: (resul
|
|||||||
var c = 0
|
var c = 0
|
||||||
while (!exit && re == null && c++ < 3){
|
while (!exit && re == null && c++ < 3){
|
||||||
re = DownloadTools.getHttpContent(url,
|
re = DownloadTools.getHttpContent(url,
|
||||||
mainWeakReference?.get()?.getString(R.string.referUrl)!!,
|
mainWeakReference?.get()?.getString(R.string.referUrl)!!.format(CMApi.myHostApiUrl),
|
||||||
mainWeakReference?.get()?.getString(R.string.pc_ua)!!
|
mainWeakReference?.get()?.getString(R.string.pc_ua)!!
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,7 +94,10 @@ class CardList(
|
|||||||
it.tic.text = name
|
it.tic.text = name
|
||||||
if(!file.exists()){
|
if(!file.exists()){
|
||||||
that?.context?.let { context ->
|
that?.context?.let { context ->
|
||||||
if(!exitCardList) Glide.with(context).load(GlideUrl(head, CMApi.myGlideHeaders)).into(it.imic)
|
if(!exitCardList && head != null)
|
||||||
|
Glide.with(context).load(
|
||||||
|
GlideUrl(CMApi.proxy?.wrap(head)?:head, CMApi.myGlideHeaders)
|
||||||
|
).into(it.imic)
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
val img = File(file, "head.jpg")
|
val img = File(file, "head.jpg")
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import kotlinx.android.synthetic.main.anchor_popular.view.*
|
|||||||
import kotlinx.android.synthetic.main.line_finish.*
|
import kotlinx.android.synthetic.main.line_finish.*
|
||||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
|
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
@@ -14,13 +15,11 @@ open class StatusCardFlow(private val api: Int, nav: Int) : InfoCardLoader(R.lay
|
|||||||
var sortValue = 0
|
var sortValue = 0
|
||||||
|
|
||||||
override fun getApiUrl() =
|
override fun getApiUrl() =
|
||||||
getString(api).let {
|
getString(api).format(
|
||||||
String.format(
|
CMApi.myHostApiUrl,
|
||||||
it,
|
page * 21,
|
||||||
page * 21,
|
sortWay[sortValue]
|
||||||
sortWay[sortValue]
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setListeners() {
|
override fun setListeners() {
|
||||||
super.setListeners()
|
super.setListeners()
|
||||||
|
|||||||
@@ -3,19 +3,18 @@ package top.fumiama.copymanga.template.ui
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
|
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
open class ThemeCardFlow(private val api: Int, nav: Int) : StatusCardFlow(0, nav) {
|
open class ThemeCardFlow(private val api: Int, nav: Int) : StatusCardFlow(0, nav) {
|
||||||
private var theme = ""
|
private var theme = ""
|
||||||
override fun getApiUrl() =
|
override fun getApiUrl() =
|
||||||
getString(api).let {
|
getString(api).format(
|
||||||
String.format(
|
CMApi.myHostApiUrl,
|
||||||
it,
|
page * 21,
|
||||||
page * 21,
|
sortWay[sortValue],
|
||||||
sortWay[sortValue],
|
theme
|
||||||
theme
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
package top.fumiama.copymanga.tools.api
|
package top.fumiama.copymanga.tools.api
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.bumptech.glide.load.model.LazyHeaders
|
import com.bumptech.glide.load.model.LazyHeaders
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import top.fumiama.copymanga.MainActivity
|
import top.fumiama.copymanga.MainActivity
|
||||||
import top.fumiama.copymanga.tools.http.DownloadTools
|
import top.fumiama.copymanga.tools.http.DownloadTools
|
||||||
|
import top.fumiama.copymanga.tools.http.Proxy
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.net.URLEncoder
|
import java.net.URLEncoder
|
||||||
|
|
||||||
object CMApi {
|
object CMApi {
|
||||||
|
var proxy = if(Proxy.useProxy) Proxy() else null
|
||||||
var myGlideHeaders: LazyHeaders? = null
|
var myGlideHeaders: LazyHeaders? = null
|
||||||
get() {
|
get() {
|
||||||
MainActivity.mainWeakReference?.get()?.let {
|
MainActivity.mainWeakReference?.get()?.let {
|
||||||
@@ -28,10 +29,30 @@ object CMApi {
|
|||||||
}
|
}
|
||||||
return field
|
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 getZipFile(exDir: File?, manga: String, caption: CharSequence, name: CharSequence) = File(exDir, "$manga/$caption/$name.zip")
|
||||||
fun getApiUrl(id: Int, arg1: String?, arg2: String?) = MainActivity.mainWeakReference?.get()?.getString(id)?.let { String.format(it, arg1, arg2) }
|
fun getChapterInfoApiUrl(arg1: String?, arg2: String?) =
|
||||||
fun getApiUrl(id: Int, arg1: String?, arg2: String?, arg3: Int? = 0) = MainActivity.mainWeakReference?.get()?.getString(id)?.let { String.format(it, arg1, arg2, arg3) }
|
MainActivity.mainWeakReference?.get()?.getString(R.string.chapterInfoApiUrl)?.format(myHostApiUrl, arg1, arg2)
|
||||||
fun getLoginConnection(username: String, pwd: String, salt: Int) = MainActivity.mainWeakReference?.get()?.getString(R.string.loginApiUrl)?.let {
|
fun getGroupInfoApiUrl(arg1: String?, arg2: String?, arg3: Int? = 0) =
|
||||||
|
MainActivity.mainWeakReference?.get()?.getString(R.string.groupInfoApiUrl)?.format(myHostApiUrl, arg1, arg2, arg3)
|
||||||
|
fun getLoginConnection(username: String, pwd: String, salt: Int) =
|
||||||
|
MainActivity.mainWeakReference?.get()?.getString(R.string.loginApiUrl)?.format(myHostApiUrl)?.let {
|
||||||
DownloadTools.getConnection(it, "POST")?.apply {
|
DownloadTools.getConnection(it, "POST")?.apply {
|
||||||
MainActivity.mainWeakReference?.get()?.let {
|
MainActivity.mainWeakReference?.get()?.let {
|
||||||
PreferenceManager.getDefaultSharedPreferences(it).apply {
|
PreferenceManager.getDefaultSharedPreferences(it).apply {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package top.fumiama.copymanga.tools.http
|
package top.fumiama.copymanga.tools.http
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.lang.Thread.sleep
|
import java.lang.Thread.sleep
|
||||||
import java.util.zip.CRC32
|
import java.util.zip.CRC32
|
||||||
@@ -66,7 +67,8 @@ class DownloadPool(folder: String) {
|
|||||||
var tryTimes = 3
|
var tryTimes = 3
|
||||||
var s = false
|
var s = false
|
||||||
while (!s && tryTimes-- > 0){
|
while (!s && tryTimes-- > 0){
|
||||||
s = (DownloadTools.getHttpContent(imgUrls[index], -1))?.let { zip.write(it); true }?:false
|
val u = imgUrls[index]
|
||||||
|
s = (DownloadTools.getHttpContent(CMApi.proxy?.wrap(u)?:u, -1))?.let { zip.write(it); true }?:false
|
||||||
if (!s) sleep(2000)
|
if (!s) sleep(2000)
|
||||||
}
|
}
|
||||||
if(!s && tryTimes <= 0) {
|
if(!s && tryTimes <= 0) {
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import java.net.HttpURLConnection
|
|||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.util.concurrent.Callable
|
import java.util.concurrent.Callable
|
||||||
import java.util.concurrent.FutureTask
|
import java.util.concurrent.FutureTask
|
||||||
import javax.net.ssl.HttpsURLConnection
|
|
||||||
|
|
||||||
object DownloadTools {
|
object DownloadTools {
|
||||||
fun getConnection(url: String?, method: String = "GET", refer: String? = null, ua: String? = null) =
|
fun getConnection(url: String?, method: String = "GET", refer: String? = null, ua: String? = null) =
|
||||||
@@ -37,7 +36,7 @@ object DownloadTools {
|
|||||||
}
|
}
|
||||||
setRequestProperty("platform", "3")
|
setRequestProperty("platform", "3")
|
||||||
}
|
}
|
||||||
Log.d("Mydl", "getHttp: ${connection.getRequestProperties().map({ "${it.key}: ${it.value}" }).joinToString("\n")}")
|
Log.d("Mydl", "getHttp: ${connection.requestProperties.map { "${it.key}: ${it.value}" }.joinToString("\n")}")
|
||||||
connection
|
connection
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,12 +52,12 @@ object DownloadTools {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getHttpContent(Url: String, refer: String? = null, ua: String? = null): ByteArray? {
|
fun getHttpContent(u: String, refer: String? = null, ua: String? = null): ByteArray? {
|
||||||
Log.d("Mydl", "getHttp: $Url")
|
Log.d("Mydl", "getHttp: $u")
|
||||||
var ret: ByteArray? = null
|
var ret: ByteArray? = null
|
||||||
val task = FutureTask(Callable {
|
val task = FutureTask(Callable {
|
||||||
try {
|
try {
|
||||||
getConnection(Url, "GET", refer, ua)?.apply {
|
getConnection(u, "GET", refer, ua)?.apply {
|
||||||
ret = inputStream.readBytes()
|
ret = inputStream.readBytes()
|
||||||
disconnect()
|
disconnect()
|
||||||
}
|
}
|
||||||
@@ -76,12 +75,12 @@ object DownloadTools {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getHttpContent(Url: String, readSize: Int): ByteArray? {
|
fun getHttpContent(u: String, readSize: Int): ByteArray? {
|
||||||
Log.d("Mydl", "getHttp: $Url")
|
Log.d("Mydl", "getHttp: $u")
|
||||||
var ret: ByteArray? = null
|
var ret: ByteArray? = null
|
||||||
val task = FutureTask(Callable {
|
val task = FutureTask(Callable {
|
||||||
try {
|
try {
|
||||||
val connection = getNormalConnection(Url, "GET")
|
val connection = getNormalConnection(u, "GET")
|
||||||
val ci = connection?.inputStream
|
val ci = connection?.inputStream
|
||||||
if(readSize > 0) {
|
if(readSize > 0) {
|
||||||
ret = ByteArray(readSize)
|
ret = ByteArray(readSize)
|
||||||
|
|||||||
38
app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt
Normal file
38
app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package top.fumiama.copymanga.tools.http
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.preference.PreferenceManager
|
||||||
|
import top.fumiama.copymanga.MainActivity
|
||||||
|
import top.fumiama.dmzj.copymanga.R
|
||||||
|
import java.net.URLEncoder
|
||||||
|
import java.nio.charset.Charset
|
||||||
|
|
||||||
|
class Proxy(private val code: String) {
|
||||||
|
constructor(): this(
|
||||||
|
MainActivity.mainWeakReference?.get()?.let {
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(it).let {sp ->
|
||||||
|
sp.getString("settings_cat_net_et_img_proxy_code", "")
|
||||||
|
}
|
||||||
|
}?:""
|
||||||
|
)
|
||||||
|
|
||||||
|
fun wrap(u: String): String {
|
||||||
|
return MainActivity.mainWeakReference?.get()?.getString(R.string.imgProxyApiUrl)
|
||||||
|
?.format(code, URLEncoder.encode(u, Charset.defaultCharset().name()))
|
||||||
|
?:u
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val useProxy: Boolean
|
||||||
|
get() {
|
||||||
|
MainActivity.mainWeakReference?.get()?.let {
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(it).apply {
|
||||||
|
val b = getBoolean("settings_cat_net_sw_use_img_proxy", false)
|
||||||
|
Log.d("MyProxy", "use proxy: $b")
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,8 +40,7 @@ import java.lang.Thread.sleep
|
|||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
class BookHandler(private val th: WeakReference<BookFragment>, private val path: String)
|
class BookHandler(private val th: WeakReference<BookFragment>, private val path: String)
|
||||||
: AutoDownloadHandler(
|
: AutoDownloadHandler(th.get()?.getString(R.string.bookInfoApiUrl)?.format(CMApi.myHostApiUrl, path)?: "",
|
||||||
th.get()?.getString(R.string.bookInfoApiUrl)?.let { String.format(it, path) } ?: "",
|
|
||||||
BookInfoStructure::class.java,
|
BookInfoStructure::class.java,
|
||||||
Looper.myLooper()!!){
|
Looper.myLooper()!!){
|
||||||
private val that get() = th.get()
|
private val that get() = th.get()
|
||||||
@@ -132,13 +131,15 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
|||||||
(fbibinfo!!.parent as LinearLayout).removeAllViews()
|
(fbibinfo!!.parent as LinearLayout).removeAllViews()
|
||||||
fbl.addView(fbibinfo)
|
fbl.addView(fbibinfo)
|
||||||
}
|
}
|
||||||
val load = Glide.with(this).load(
|
book?.results?.comic?.cover?.let { cover ->
|
||||||
GlideUrl(book?.results?.comic?.cover, CMApi.myGlideHeaders)
|
val load = Glide.with(this).load(
|
||||||
).timeout(10000)
|
GlideUrl(CMApi.proxy?.wrap(cover)?:cover, CMApi.myGlideHeaders)
|
||||||
load.into(imic)
|
).timeout(10000)
|
||||||
context?.let { it1 -> GlideBlurTransformation(it1) }
|
load.into(imic)
|
||||||
?.let { it2 -> RequestOptions.bitmapTransform(it2) }
|
context?.let { it1 -> GlideBlurTransformation(it1) }
|
||||||
?.let { it3 -> load.apply(it3).into(lbibg) }
|
?.let { it2 -> RequestOptions.bitmapTransform(it2) }
|
||||||
|
?.let { it3 -> load.apply(it3).into(lbibg) }
|
||||||
|
}
|
||||||
imf.visibility = View.GONE
|
imf.visibility = View.GONE
|
||||||
fbl.addView(divider)
|
fbl.addView(divider)
|
||||||
}
|
}
|
||||||
@@ -246,7 +247,10 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
|||||||
var line: View? = null
|
var line: View? = null
|
||||||
val last = v.results.list.size - 1
|
val last = v.results.list.size - 1
|
||||||
v.results.list.onEachIndexed { i, it ->
|
v.results.list.onEachIndexed { i, it ->
|
||||||
ViewMangaActivity.urlArray += CMApi.getApiUrl(R.string.chapterInfoApiUrl, comic.path_word, it.uuid)?:""
|
ViewMangaActivity.urlArray += CMApi.getChapterInfoApiUrl(
|
||||||
|
comic.path_word,
|
||||||
|
it.uuid
|
||||||
|
)?:""
|
||||||
ViewMangaActivity.fileArray += CMApi.getZipFile(context?.getExternalFilesDir(""), comic.name, keys[iv], it.name)
|
ViewMangaActivity.fileArray += CMApi.getZipFile(context?.getExternalFilesDir(""), comic.name, keys[iv], it.name)
|
||||||
chapterNames += it.name
|
chapterNames += it.name
|
||||||
if(line == null) {
|
if(line == null) {
|
||||||
@@ -301,7 +305,7 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
|||||||
Log.d("MyBFH", "${i}卷共${if(times == 0) 1 else times}次加载")
|
Log.d("MyBFH", "${i}卷共${if(times == 0) 1 else times}次加载")
|
||||||
do {
|
do {
|
||||||
counts[i] = counts[i] - 100
|
counts[i] = counts[i] - 100
|
||||||
CMApi.getApiUrl(R.string.groupInfoApiUrl, path, gpw, offset)?.let {
|
CMApi.getGroupInfoApiUrl(path, gpw, offset)?.let {
|
||||||
Log.d("MyBFH", "get api: $it")
|
Log.d("MyBFH", "get api: $it")
|
||||||
if(ComicDlFragment.exit) return
|
if(ComicDlFragment.exit) return
|
||||||
val ad = AutoDownloadThread(it) { result ->
|
val ad = AutoDownloadThread(it) { result ->
|
||||||
|
|||||||
@@ -4,14 +4,13 @@ import android.view.View
|
|||||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||||
import top.fumiama.copymanga.MainActivity
|
import top.fumiama.copymanga.MainActivity
|
||||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||||
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import top.fumiama.dmzj.copymanga.R
|
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).let {
|
getString(R.string.historyApiUrl).format(CMApi.myHostApiUrl, page * 21)
|
||||||
String.format(it, page * 21)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onLoadFinish() {
|
override fun onLoadFinish() {
|
||||||
super.onLoadFinish()
|
super.onLoadFinish()
|
||||||
|
|||||||
@@ -4,14 +4,13 @@ import android.view.View
|
|||||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||||
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import top.fumiama.dmzj.copymanga.R
|
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).let {
|
getString(R.string.newestApiUrl).format(CMApi.myHostApiUrl, page * 21)
|
||||||
String.format(it, page * 21)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onLoadFinish() {
|
override fun onLoadFinish() {
|
||||||
super.onLoadFinish()
|
super.onLoadFinish()
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import kotlinx.android.synthetic.main.line_lazybooklines.*
|
|||||||
import kotlinx.android.synthetic.main.line_rank.view.*
|
import kotlinx.android.synthetic.main.line_rank.view.*
|
||||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||||
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import java.lang.Thread.sleep
|
import java.lang.Thread.sleep
|
||||||
|
|
||||||
@@ -16,13 +17,11 @@ class RankFragment : InfoCardLoader(R.layout.fragment_rank, R.id.action_nav_rank
|
|||||||
private var sortValue = 0
|
private var sortValue = 0
|
||||||
|
|
||||||
override fun getApiUrl() =
|
override fun getApiUrl() =
|
||||||
getString(R.string.rankApiUrl).let {
|
getString(R.string.rankApiUrl).format(
|
||||||
String.format(
|
CMApi.myHostApiUrl,
|
||||||
it,
|
|
||||||
page * 21,
|
page * 21,
|
||||||
sortWay[sortValue]
|
sortWay[sortValue]
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
override fun setListeners() {
|
override fun setListeners() {
|
||||||
super.setListeners()
|
super.setListeners()
|
||||||
|
|||||||
@@ -4,14 +4,13 @@ import android.view.View
|
|||||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||||
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import top.fumiama.dmzj.copymanga.R
|
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).let {
|
getString(R.string.recommendApiUrl).format(CMApi.myHostApiUrl, page * 21)
|
||||||
String.format(it, page * 21)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onLoadFinish() {
|
override fun onLoadFinish() {
|
||||||
super.onLoadFinish()
|
super.onLoadFinish()
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
|||||||
import top.fumiama.copymanga.json.FilterStructure
|
import top.fumiama.copymanga.json.FilterStructure
|
||||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||||
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import java.lang.Thread.sleep
|
import java.lang.Thread.sleep
|
||||||
|
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
@@ -22,20 +23,18 @@ class SortFragment : InfoCardLoader(R.layout.fragment_sort, R.id.action_nav_sort
|
|||||||
private var filter: FilterStructure? = null
|
private var filter: FilterStructure? = null
|
||||||
|
|
||||||
override fun getApiUrl() =
|
override fun getApiUrl() =
|
||||||
getString(R.string.sortApiUrl).let {
|
getString(R.string.sortApiUrl).format(
|
||||||
String.format(
|
CMApi.myHostApiUrl,
|
||||||
it,
|
|
||||||
page * 21,
|
page * 21,
|
||||||
sortWay[sortValue],
|
sortWay[sortValue],
|
||||||
if(theme >= 0) (filter?.results?.theme?.get(theme)?.path_word ?: "") else ""
|
if(theme >= 0) (filter?.results?.theme?.get(theme)?.path_word ?: "") else ""
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
override fun setListeners() {
|
override fun setListeners() {
|
||||||
super.setListeners()
|
super.setListeners()
|
||||||
setUpdate()
|
setUpdate()
|
||||||
setHot()
|
setHot()
|
||||||
AutoDownloadThread(getString(R.string.filterApiUrl)) {
|
AutoDownloadThread(getString(R.string.filterApiUrl).format(CMApi.myHostApiUrl)) {
|
||||||
if(ad?.exit == true) return@AutoDownloadThread
|
if(ad?.exit == true) return@AutoDownloadThread
|
||||||
it?.let {
|
it?.let {
|
||||||
filter = Gson().fromJson(it.inputStream().reader(), FilterStructure::class.java)
|
filter = Gson().fromJson(it.inputStream().reader(), FilterStructure::class.java)
|
||||||
|
|||||||
@@ -10,21 +10,18 @@ import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
|||||||
import top.fumiama.copymanga.json.TopicStructure
|
import top.fumiama.copymanga.json.TopicStructure
|
||||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||||
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
|
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
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).let {
|
getString(R.string.topicContentApiUrl).format(CMApi.myHostApiUrl, arguments?.getString("path"), type, offset)
|
||||||
String.format(it, arguments?.getString("path"), type, offset)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
AutoDownloadThread(getString(R.string.topicApiUrl).let {
|
AutoDownloadThread(getString(R.string.topicApiUrl).format(CMApi.myHostApiUrl, arguments?.getString("path"))) {
|
||||||
String.format(it, arguments?.getString("path"))
|
|
||||||
}) {
|
|
||||||
if(ad?.exit == true) return@AutoDownloadThread
|
if(ad?.exit == true) return@AutoDownloadThread
|
||||||
it?.apply {
|
it?.apply {
|
||||||
val r = inputStream().reader()
|
val r = inputStream().reader()
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package top.fumiama.copymanga.ui.comicdl
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.Menu
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
@@ -97,7 +96,7 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
|||||||
Log.d("MyCDF", "${i}卷共${if(times == 0) 1 else times}次加载")
|
Log.d("MyCDF", "${i}卷共${if(times == 0) 1 else times}次加载")
|
||||||
do {
|
do {
|
||||||
counts?.set(i, counts[i] - 100)
|
counts?.set(i, counts[i] - 100)
|
||||||
CMApi.getApiUrl(R.string.groupInfoApiUrl, pw, gpw, offset)?.let {
|
CMApi.getGroupInfoApiUrl(pw, gpw, offset)?.let {
|
||||||
if(exit) return
|
if(exit) return
|
||||||
val ad = AutoDownloadThread(it) { result ->
|
val ad = AutoDownloadThread(it) { result ->
|
||||||
Log.d("MyCDF", "第${i}卷返回")
|
Log.d("MyCDF", "第${i}卷返回")
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import android.os.Handler
|
|||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.os.Message
|
import android.os.Message
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.ViewTreeObserver
|
import android.view.ViewTreeObserver
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
@@ -116,7 +115,7 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragme
|
|||||||
data += chapter.name
|
data += chapter.name
|
||||||
data += chapter.uuid
|
data += chapter.uuid
|
||||||
data += caption
|
data += caption
|
||||||
data += CMApi.getApiUrl(R.string.chapterInfoApiUrl, chapter.comic_path_word, chapter.uuid)?:""
|
data += CMApi.getChapterInfoApiUrl(chapter.comic_path_word, chapter.uuid)?:""
|
||||||
obtainMessage(10, data).sendToTarget()
|
obtainMessage(10, data).sendToTarget()
|
||||||
}
|
}
|
||||||
sendEmptyMessage(12) //addDiv
|
sendEmptyMessage(12) //addDiv
|
||||||
@@ -407,7 +406,10 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragme
|
|||||||
)
|
)
|
||||||
isNewTitle = true
|
isNewTitle = true
|
||||||
for (chapter in group.chapters) {
|
for (chapter in group.chapters) {
|
||||||
val newUrl = CMApi.getApiUrl(R.string.chapterInfoApiUrl, chapter.url.substringAfter("/comic/").substringBefore('/'), chapter.url.substringAfterLast('/'))?:""
|
val newUrl = CMApi.getChapterInfoApiUrl(
|
||||||
|
chapter.url.substringAfter("/comic/").substringBefore('/'),
|
||||||
|
chapter.url.substringAfterLast('/')
|
||||||
|
)?:""
|
||||||
Log.d("MyCD", "Generate new url: $newUrl")
|
Log.d("MyCD", "Generate new url: $newUrl")
|
||||||
obtainMessage(10, arrayOf(chapter.name, "", group.name, newUrl)).sendToTarget()
|
obtainMessage(10, arrayOf(chapter.name, "", group.name, newUrl)).sendToTarget()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
|||||||
thisBanner?.cover?.let {
|
thisBanner?.cover?.let {
|
||||||
//Log.d("MyHomeFVP", "Load img: $it")
|
//Log.d("MyHomeFVP", "Load img: $it")
|
||||||
Glide.with(this@HomeFragment).load(
|
Glide.with(this@HomeFragment).load(
|
||||||
GlideUrl(it, CMApi.myGlideHeaders)
|
GlideUrl(CMApi.proxy?.wrap(it)?:it, CMApi.myGlideHeaders)
|
||||||
).timeout(10000).into(holder.itemView.vpi)
|
).timeout(10000).into(holder.itemView.vpi)
|
||||||
}
|
}
|
||||||
holder.itemView.vpt.text = thisBanner?.brief
|
holder.itemView.vpt.text = thisBanner?.brief
|
||||||
@@ -193,7 +193,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
|||||||
}
|
}
|
||||||
holder.itemView.tb.text = popular.toString()
|
holder.itemView.tb.text = popular.toString()
|
||||||
context?.let {
|
context?.let {
|
||||||
Glide.with(it).load(GlideUrl(cover, CMApi.myGlideHeaders)).into(holder.itemView.imic)
|
Glide.with(it).load(GlideUrl(CMApi.proxy?.wrap(cover)?:cover, CMApi.myGlideHeaders)).into(holder.itemView.imic)
|
||||||
}
|
}
|
||||||
holder.itemView.lwc.setOnClickListener {
|
holder.itemView.lwc.setOnClickListener {
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
@@ -208,7 +208,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
|||||||
|
|
||||||
fun refresh(query: CharSequence) {
|
fun refresh(query: CharSequence) {
|
||||||
mainWeakReference?.get()?.apply {
|
mainWeakReference?.get()?.apply {
|
||||||
AutoDownloadThread(String.format(getString(R.string.searchApiUrl), 0, query, type)) {
|
AutoDownloadThread(getString(R.string.searchApiUrl).format(CMApi.myHostApiUrl, 0, query, type)) {
|
||||||
results = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java)
|
results = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java)
|
||||||
runOnUiThread { notifyDataSetChanged() }
|
runOnUiThread { notifyDataSetChanged() }
|
||||||
}.start()
|
}.start()
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import java.lang.Thread.sleep
|
|||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
||||||
that.get()?.getString(R.string.mainPageApiUrl) ?: "",
|
that.get()?.getString(R.string.mainPageApiUrl)!!.format(CMApi.myHostApiUrl),
|
||||||
IndexStructure::class.java,
|
IndexStructure::class.java,
|
||||||
Looper.myLooper()!!,
|
Looper.myLooper()!!,
|
||||||
9
|
9
|
||||||
@@ -310,7 +310,7 @@ class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadH
|
|||||||
cv.tic.text = name
|
cv.tic.text = name
|
||||||
homeF?.let {
|
homeF?.let {
|
||||||
if(img.startsWith("http")) {
|
if(img.startsWith("http")) {
|
||||||
Glide.with(it).load(GlideUrl(img, CMApi.myGlideHeaders)).timeout(20000).into(cv.imic)
|
Glide.with(it).load(GlideUrl(CMApi.proxy?.wrap(img)?:img, CMApi.myGlideHeaders)).timeout(20000).into(cv.imic)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isFinal) cv.sgnic.visibility = View.VISIBLE
|
if (isFinal) cv.sgnic.visibility = View.VISIBLE
|
||||||
|
|||||||
@@ -170,8 +170,10 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
for (i in right until it.size) {
|
for (i in right until it.size) {
|
||||||
if(destroy) break
|
if(destroy) break
|
||||||
tasks?.let { tasks ->
|
tasks?.let { tasks ->
|
||||||
tasks[i] = DownloadTools.touch(it[i])
|
it[i]?.let { u ->
|
||||||
Thread.sleep(1000)
|
tasks[i] = DownloadTools.touch(CMApi.proxy?.wrap(u)?:u)
|
||||||
|
Thread.sleep(1000)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
@@ -180,8 +182,10 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
for (i in left downTo 0) {
|
for (i in left downTo 0) {
|
||||||
if(destroy) break
|
if(destroy) break
|
||||||
tasks?.let { tasks ->
|
tasks?.let { tasks ->
|
||||||
tasks[i] = DownloadTools.touch(it[i])
|
it[i]?.let { u ->
|
||||||
Thread.sleep(1000)
|
tasks[i] = DownloadTools.touch(CMApi.proxy?.wrap(u)?:u)
|
||||||
|
Thread.sleep(1000)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
@@ -198,7 +202,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
forEachIndexed{ i, it ->
|
forEachIndexed{ i, it ->
|
||||||
if(it != null) {
|
if(it != null) {
|
||||||
Thread{
|
Thread{
|
||||||
DownloadTools.getHttpContent(it, 1024)?.inputStream()?.let {
|
DownloadTools.getHttpContent(CMApi.proxy?.wrap(it)?:it, 1024)?.inputStream()?.let {
|
||||||
isCut[i] = canCut(it)
|
isCut[i] = canCut(it)
|
||||||
analyzedCnt[i] = true
|
analyzedCnt[i] = true
|
||||||
}
|
}
|
||||||
@@ -635,12 +639,12 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
val thisOneI = holder.itemView.onei
|
val thisOneI = holder.itemView.onei
|
||||||
Glide.with(this@ViewMangaActivity)
|
Glide.with(this@ViewMangaActivity)
|
||||||
.asBitmap()
|
.asBitmap()
|
||||||
.load(GlideUrl(it, CMApi.myGlideHeaders)
|
.load(GlideUrl(CMApi.proxy?.wrap(it)?:it, CMApi.myGlideHeaders)
|
||||||
).into(object : SimpleTarget<Bitmap>() {
|
).into(object : SimpleTarget<Bitmap>() {
|
||||||
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
|
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
|
||||||
thisOneI.setImageBitmap(cutBitmap(resource, isLeft))
|
thisOneI.setImageBitmap(cutBitmap(resource, isLeft))
|
||||||
} })
|
} })
|
||||||
} else Glide.with(this@ViewMangaActivity).load(GlideUrl(it, CMApi.myGlideHeaders)).into(holder.itemView.onei)
|
} else Glide.with(this@ViewMangaActivity).load(GlideUrl(CMApi.proxy?.wrap(it)?:it, CMApi.myGlideHeaders)).into(holder.itemView.onei)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import java.security.MessageDigest
|
|||||||
|
|
||||||
object Update {
|
object Update {
|
||||||
fun checkUpdate(activity: Activity, toolsBox: UITools, ignoreSkip: Boolean = false) = activity.apply{
|
fun checkUpdate(activity: Activity, toolsBox: UITools, ignoreSkip: Boolean = false) = activity.apply{
|
||||||
val client = Client("copymanga.v6.army", 12316)
|
val client = Client("reilia.fumiama.top", 13212)
|
||||||
val progressBar = layoutInflater.inflate(R.layout.dialog_progress, null, false)
|
val progressBar = layoutInflater.inflate(R.layout.dialog_progress, null, false)
|
||||||
val progressHandler = object : Client.Progress{
|
val progressHandler = object : Client.Progress{
|
||||||
override fun notify(progressPercentage: Int) {
|
override fun notify(progressPercentage: Int) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="16dp"
|
android:layout_height="16dp"
|
||||||
android:background="?attr/colorPrimarySurface"
|
android:background="?attr/colorPrimarySurface"
|
||||||
|
android:visibility="gone"
|
||||||
app:layout_scrollFlags="scroll|enterAlways" />
|
app:layout_scrollFlags="scroll|enterAlways" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.Toolbar
|
<androidx.appcompat.widget.Toolbar
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE resources [
|
||||||
|
<!ENTITY hosturl "api.mangacopy.com">
|
||||||
|
]>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">拷贝漫画</string>
|
<string name="app_name">拷贝漫画</string>
|
||||||
<string name="action_settings">设定</string>
|
<string name="action_settings">设定</string>
|
||||||
@@ -8,7 +12,7 @@
|
|||||||
<string name="menu_home">主页</string>
|
<string name="menu_home">主页</string>
|
||||||
<string name="menu_sort">分类</string>
|
<string name="menu_sort">分类</string>
|
||||||
<string name="menu_rank">排行</string>
|
<string name="menu_rank">排行</string>
|
||||||
<string name="app_description">©2022源文雨\n本应用为拷贝漫画的第三方客户端,数据均来源于网络,作者不对其中所呈现的任何内容负责。</string>
|
<string name="app_description">©2022–2023源文雨\n本应用为拷贝漫画的第三方客户端,数据均来源于网络,作者不对其中所呈现的任何内容负责。</string>
|
||||||
<string name="menu_history">浏览历史</string>
|
<string name="menu_history">浏览历史</string>
|
||||||
<string name="menu_sub">我的订阅</string>
|
<string name="menu_sub">我的订阅</string>
|
||||||
<string name="menu_download">我的下载</string>
|
<string name="menu_download">我的下载</string>
|
||||||
@@ -31,26 +35,28 @@
|
|||||||
<string name="null_book">获取图书信息失败</string>
|
<string name="null_book">获取图书信息失败</string>
|
||||||
<string name="web_error">网络错误</string>
|
<string name="web_error">网络错误</string>
|
||||||
|
|
||||||
<string name="mainPageApiUrl">https://api.copymanga.info/api/v3/h5/homeIndex?platform=3</string>
|
<string name="mainPageApiUrl">https://%1$s/api/v3/h5/homeIndex?platform=3</string>
|
||||||
<string name="referUrl">"https://api.copymanga.info"</string>
|
<string name="referUrl">https://%1$s</string>
|
||||||
<string name="hostUrl">"api.copymanga.info"</string>
|
<string name="hostUrl">&hosturl;</string>
|
||||||
<string name="rankApiUrl">https://api.copymanga.info/api/v3/ranks?limit=21&offset=%1$d&date_type=%2$s&platform=3</string>
|
<string name="rankApiUrl">https://%1$s/api/v3/ranks?limit=21&offset=%2$d&date_type=%3$s&platform=3</string>
|
||||||
<string name="searchApiUrl">https://api.copymanga.info/api/v3/search/comic?limit=21&offset=%1$d&q=%2$s&q_type=%3$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://api.copymanga.info/api/v3/h5/filterIndex/comic/tags?platform=3</string>
|
<string name="filterApiUrl">https://%1$s/api/v3/h5/filterIndex/comic/tags?platform=3</string>
|
||||||
<string name="sortApiUrl">https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3</string>
|
<string name="sortApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&theme=%4$s&platform=3</string>
|
||||||
<string name="bookInfoApiUrl">https://api.copymanga.info/api/v3/comic2/%1$s?platform=3</string>
|
<string name="bookInfoApiUrl">https://%1$s/api/v3/comic2/%2$s?platform=3</string>
|
||||||
<string name="groupInfoApiUrl">https://api.copymanga.info/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$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=3</string>
|
||||||
<string name="chapterInfoApiUrl">https://api.copymanga.info/api/v3/comic/%1$s/chapter2/%2$s?platform=3</string>
|
<string name="chapterInfoApiUrl">https://%1$s/api/v3/comic/%2$s/chapter2/%3$s?platform=3</string>
|
||||||
<string name="topicApiUrl">https://api.copymanga.info/api/v3/topic/%1$s?platform=3</string>
|
<string name="topicApiUrl">https://%1$s/api/v3/topic/%2$s?platform=3</string>
|
||||||
<string name="topicContentApiUrl">https://api.copymanga.info/api/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$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=3</string>
|
||||||
<string name="recommendApiUrl">https://api.copymanga.info/api/v3/recs?pos=3200102&limit=21&offset=%1$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://api.copymanga.info/api/v3/update/newest?limit=21&offset=%1$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://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$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=3</string>
|
||||||
<string name="authorApiUrl">https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&author=%3$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=3</string>
|
||||||
<string name="captionApiUrl">https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$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://api.copymanga.info/api/v3/login?platform=3</string>
|
<string name="loginApiUrl">https://%1$s/api/v3/login?platform=3</string>
|
||||||
<string name="memberInfoApiUrl">https://api.copymanga.info/api/v3/member/info?platform=3</string>
|
<string name="memberInfoApiUrl">https://%1$s/api/v3/member/info?platform=3</string>
|
||||||
<string name="historyApiUrl">https://api.copymanga.info/api/v3/member/browse/comics?limit=21&offset=%1$d&platform=3</string>
|
<string name="historyApiUrl">https://%1$s/api/v3/member/browse/comics?limit=21&offset=%2$d&platform=3</string>
|
||||||
|
|
||||||
|
<string name="imgProxyApiUrl">https://copymanga.azurewebsites.net/api/img?code=%1$s&url=%2$s</string>
|
||||||
|
|
||||||
<string name="complete">已完结</string>
|
<string name="complete">已完结</string>
|
||||||
|
|
||||||
@@ -90,7 +96,13 @@
|
|||||||
|
|
||||||
<string name="settings_cat_net">网络</string>
|
<string name="settings_cat_net">网络</string>
|
||||||
<string name="settings_cat_net_sw_use_foreign">使用海外线路</string>
|
<string name="settings_cat_net_sw_use_foreign">使用海外线路</string>
|
||||||
<string name="settings_cat_net_sm_use_foreign">不管使用什么线路, API访问均是海外, 只有图片CDN可能会变化, 请酌情选择使用</string>
|
<string name="settings_cat_net_sm_use_foreign">不管使用什么线路, API访问均是海外, 只有图片CDN可能会变化(也可能不变), 请酌情选择使用</string>
|
||||||
|
<string name="settings_cat_net_et_title_api_url">请求API网址</string>
|
||||||
|
<string name="settings_cat_net_et_summary_api_url">一般无需更改,除非拷贝漫画官方更改网址,默认:&hosturl;</string>
|
||||||
|
<string name="settings_cat_net_sw_use_img_proxy">使用图床代理(重启生效)</string>
|
||||||
|
<string name="settings_cat_net_sm_use_img_proxy">作者自建的图床代理,可缓解国内图片无法加载问题,但不保证100%解决,也不保证一直可用</string>
|
||||||
|
<string name="settings_cat_net_et_title_img_proxy">图床代理密钥(重启生效)</string>
|
||||||
|
<string name="settings_cat_net_et_summary_img_proxy">为避免滥用,代理密钥需加群(559748702)获得,且随时可能会刷新</string>
|
||||||
|
|
||||||
<string name="settings_cat_vm">漫画浏览</string>
|
<string name="settings_cat_vm">漫画浏览</string>
|
||||||
<string name="settings_cat_vm_sw_vol_turn">音量键翻页</string>
|
<string name="settings_cat_vm_sw_vol_turn">音量键翻页</string>
|
||||||
|
|||||||
@@ -4,6 +4,18 @@
|
|||||||
<!-- Customize your theme here. -->
|
<!-- Customize your theme here. -->
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTheme.Default" parent="Theme.MaterialComponents.DayNight">
|
||||||
|
<item name="windowActionBar">false</item>
|
||||||
|
<item name="windowNoTitle">true</item>
|
||||||
|
<item name="colorPrimary">@color/colorPrimary</item>
|
||||||
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
|
<!--
|
||||||
|
<item name="android:windowTranslucentStatus">true</item>
|
||||||
|
<item name="android:windowTranslucentNavigation">true</item>
|
||||||
|
-->
|
||||||
|
</style>
|
||||||
|
|
||||||
<style name="AppTheme.NoActionBar" parent="Theme.MaterialComponents.DayNight">
|
<style name="AppTheme.NoActionBar" parent="Theme.MaterialComponents.DayNight">
|
||||||
<item name="windowActionBar">false</item>
|
<item name="windowActionBar">false</item>
|
||||||
<item name="windowNoTitle">true</item>
|
<item name="windowNoTitle">true</item>
|
||||||
|
|||||||
@@ -10,6 +10,33 @@
|
|||||||
app:selectable="true"
|
app:selectable="true"
|
||||||
app:summary="@string/settings_cat_net_sm_use_foreign"
|
app:summary="@string/settings_cat_net_sm_use_foreign"
|
||||||
app:title="@string/settings_cat_net_sw_use_foreign" />
|
app:title="@string/settings_cat_net_sw_use_foreign" />
|
||||||
|
<EditTextPreference
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:defaultValue="@string/hostUrl"
|
||||||
|
android:selectAllOnFocus="false"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:title="@string/settings_cat_net_et_title_api_url"
|
||||||
|
android:summary="@string/settings_cat_net_et_summary_api_url"
|
||||||
|
app:enableCopying="true"
|
||||||
|
app:iconSpaceReserved="false"
|
||||||
|
app:key="settings_cat_net_et_api_url" />
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
app:iconSpaceReserved="false"
|
||||||
|
app:key="settings_cat_net_sw_use_img_proxy"
|
||||||
|
app:selectable="true"
|
||||||
|
app:summary="@string/settings_cat_net_sm_use_img_proxy"
|
||||||
|
app:title="@string/settings_cat_net_sw_use_img_proxy" />
|
||||||
|
<EditTextPreference
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:selectAllOnFocus="false"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:title="@string/settings_cat_net_et_title_img_proxy"
|
||||||
|
android:summary="@string/settings_cat_net_et_summary_img_proxy"
|
||||||
|
app:enableCopying="true"
|
||||||
|
app:iconSpaceReserved="false"
|
||||||
|
app:key="settings_cat_net_et_img_proxy_code" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ buildscript {
|
|||||||
maven { url "https://jitpack.io" }
|
maven { url "https://jitpack.io" }
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:8.1.0'
|
classpath 'com.android.tools.build:gradle:8.1.1'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
|
|||||||
Reference in New Issue
Block a user