mirror of
https://github.com/fumiama/copymanga.git
synced 2026-06-07 08:10:23 +08:00
2.0.beta5
0. 增加排行 1. 延长加载时间 2. 返回后停止下载/加载章节 3. 大幅提升章节加载速度 4. 修复加载中返回闪退 5. 修复专题加载异常
This commit is contained in:
@@ -28,8 +28,8 @@ android {
|
||||
applicationId 'top.fumiama.copymanga'
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 30
|
||||
versionCode 15
|
||||
versionName '2.0.beta4'
|
||||
versionCode 16
|
||||
versionName '2.0.beta5'
|
||||
resConfigs "zh", "zh-rCN"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
@@ -21,6 +21,7 @@ import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.net.toUri
|
||||
import androidx.drawerlayout.widget.DrawerLayout
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.findNavController
|
||||
import androidx.navigation.ui.AppBarConfiguration
|
||||
import androidx.navigation.ui.navigateUp
|
||||
@@ -33,8 +34,8 @@ import kotlinx.android.synthetic.main.activity_main.*
|
||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||
import kotlinx.android.synthetic.main.nav_header_main.*
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.tools.PropertiesTools
|
||||
import top.fumiama.copymanga.tools.UITools
|
||||
import top.fumiama.copymanga.tools.file.PropertiesTools
|
||||
import top.fumiama.copymanga.tools.api.UITools
|
||||
import top.fumiama.copymanga.ui.download.DownloadFragment
|
||||
import top.fumiama.copymanga.update.Update
|
||||
import java.io.File
|
||||
@@ -45,6 +46,7 @@ import java.lang.ref.WeakReference
|
||||
class MainActivity : AppCompatActivity() {
|
||||
var isDrawerClosed = true
|
||||
var menuMain: Menu? = null
|
||||
var navController: NavController? = null
|
||||
|
||||
private lateinit var appBarConfiguration: AppBarConfiguration
|
||||
private lateinit var p: PropertiesTools
|
||||
@@ -57,7 +59,7 @@ class MainActivity : AppCompatActivity() {
|
||||
//translucentStatusBar()
|
||||
coordiv.layoutParams.height = getStatusBarHeight()
|
||||
|
||||
val navController = findNavController(R.id.nav_host_fragment)
|
||||
navController = findNavController(R.id.nav_host_fragment)
|
||||
appBarConfiguration = AppBarConfiguration(
|
||||
setOf(
|
||||
R.id.nav_home,
|
||||
@@ -69,8 +71,8 @@ class MainActivity : AppCompatActivity() {
|
||||
R.id.nav_settings
|
||||
), drawer_layout
|
||||
)
|
||||
setupActionBarWithNavController(navController, appBarConfiguration)
|
||||
nav_view.setupWithNavController(navController)
|
||||
setupActionBarWithNavController(navController!!, appBarConfiguration)
|
||||
nav_view.setupWithNavController(navController!!)
|
||||
|
||||
p = PropertiesTools(File(filesDir, "database.prop"))
|
||||
headPic = File(getExternalFilesDir(""), "headPic")
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package top.fumiama.copymanga.template
|
||||
package top.fumiama.copymanga.template.general
|
||||
|
||||
import android.app.Activity
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import top.fumiama.copymanga.tools.PropertiesTools
|
||||
import top.fumiama.copymanga.tools.UITools
|
||||
import top.fumiama.copymanga.tools.file.PropertiesTools
|
||||
import top.fumiama.copymanga.tools.api.UITools
|
||||
import java.io.File
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package top.fumiama.copymanga.template
|
||||
package top.fumiama.copymanga.template.general
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
@@ -8,8 +8,9 @@ import android.view.View
|
||||
import androidx.fragment.app.Fragment
|
||||
import kotlinx.android.synthetic.main.line_header.view.*
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.template.ui.CardList
|
||||
import top.fumiama.copymanga.template.handler.MPATHandler
|
||||
import top.fumiama.copymanga.tools.UITools
|
||||
import top.fumiama.copymanga.tools.api.UITools
|
||||
import java.lang.Thread.sleep
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package top.fumiama.copymanga.template
|
||||
package top.fumiama.copymanga.template.general
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
@@ -1,9 +1,9 @@
|
||||
package top.fumiama.copymanga.template
|
||||
package top.fumiama.copymanga.template.general
|
||||
|
||||
import android.os.Bundle
|
||||
import kotlinx.android.synthetic.main.widget_titlebar.*
|
||||
|
||||
open class TitleActivityTemplate:ActivityTemplate() {
|
||||
open class TitleActivityTemplate: ActivityTemplate() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
ilogo.setOnClickListener {
|
||||
@@ -10,7 +10,7 @@ import android.widget.Toast
|
||||
import com.liaoinstan.springview.widget.SpringView
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.template.MangaPagesFragmentTemplate
|
||||
import top.fumiama.copymanga.template.general.MangaPagesFragmentTemplate
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package top.fumiama.copymanga.template
|
||||
package top.fumiama.copymanga.template.http
|
||||
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
@@ -8,10 +8,11 @@ import com.google.gson.Gson
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.json.ReturnBase
|
||||
import top.fumiama.copymanga.tools.DownloadTools
|
||||
import top.fumiama.copymanga.tools.TimeThread
|
||||
import top.fumiama.copymanga.tools.http.DownloadTools
|
||||
import top.fumiama.copymanga.tools.thread.TimeThread
|
||||
|
||||
open class AutoDownloadHandler(private val url: String, private val jsonClass: Class<*>, looper: Looper, private val callCheckMsg: Int = -1): Handler(looper) {
|
||||
var exit = false
|
||||
private var timeThread: TimeThread? = null
|
||||
private var checkTimes = 0
|
||||
override fun handleMessage(msg: Message) {
|
||||
@@ -28,12 +29,16 @@ open class AutoDownloadHandler(private val url: String, private val jsonClass: C
|
||||
fun startLoad() {
|
||||
sendEmptyMessage(0)
|
||||
}
|
||||
fun destroy() {
|
||||
exit = true
|
||||
}
|
||||
private fun download(){
|
||||
Thread{
|
||||
DownloadTools.getHttpContent(url,
|
||||
mainWeakReference?.get()?.getString(R.string.referUrl)!!,
|
||||
mainWeakReference?.get()?.getString(R.string.pc_ua)!!
|
||||
)?.let {
|
||||
if(exit) return@Thread
|
||||
val fi = it.inputStream()
|
||||
setGsonItem(Gson().fromJson(fi.reader(), jsonClass))
|
||||
fi.close()
|
||||
@@ -1,20 +1,21 @@
|
||||
package top.fumiama.copymanga.template
|
||||
package top.fumiama.copymanga.template.http
|
||||
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.tools.DownloadTools
|
||||
import top.fumiama.copymanga.tools.http.DownloadTools
|
||||
|
||||
class AutoDownloadThread(private val url: String, private val whenFinish: (result: ByteArray?)->Unit): Thread() {
|
||||
var exit = false
|
||||
override fun run() {
|
||||
super.run()
|
||||
var re: ByteArray? = null
|
||||
var c = 0
|
||||
while (re == null && c++ < 3){
|
||||
while (!exit && re == null && c++ < 3){
|
||||
re = DownloadTools.getHttpContent(url,
|
||||
mainWeakReference?.get()?.getString(R.string.referUrl)!!,
|
||||
mainWeakReference?.get()?.getString(R.string.pc_ua)!!
|
||||
)
|
||||
}
|
||||
whenFinish(re)
|
||||
if(!exit) whenFinish(re)
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package top.fumiama.copymanga.template
|
||||
package top.fumiama.copymanga.template.ui
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.net.Uri
|
||||
@@ -11,7 +11,7 @@ import kotlinx.android.synthetic.main.card_book.view.*
|
||||
import kotlinx.android.synthetic.main.line_horizonal_empty.view.*
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.tools.CMApi
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import java.io.File
|
||||
import java.lang.ref.WeakReference
|
||||
@@ -1,26 +1,26 @@
|
||||
package top.fumiama.copymanga.template
|
||||
package top.fumiama.copymanga.template.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import android.util.JsonReader
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.Navigation
|
||||
import com.google.gson.Gson
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.json.BookListStructure
|
||||
import top.fumiama.copymanga.json.TypeBookListStructure
|
||||
import top.fumiama.copymanga.tools.DownloadTools
|
||||
import java.io.File
|
||||
import top.fumiama.copymanga.template.general.MangaPagesFragmentTemplate
|
||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isTypeBook: Boolean = false): MangaPagesFragmentTemplate(inflateRes) {
|
||||
var offset = 0
|
||||
private val subUrl get() = getApiUrl()
|
||||
|
||||
private var ad: AutoDownloadThread? = null
|
||||
init {
|
||||
pageHandler = object : PageHandler {
|
||||
override fun addPage(){
|
||||
AutoDownloadThread(subUrl){
|
||||
ad = AutoDownloadThread(subUrl){
|
||||
if(isRefresh){
|
||||
page = 0
|
||||
isRefresh = false
|
||||
@@ -28,9 +28,13 @@ open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isT
|
||||
if(isTypeBook) {
|
||||
val bookList = Gson().fromJson(it?.decodeToString(), TypeBookListStructure::class.java)
|
||||
bookList?.apply {
|
||||
Log.d("MyICL", "offset:${results.offset}, total:${results.total}")
|
||||
if(results.offset < results.total) {
|
||||
if(code == 200) results.list.forEach { book ->
|
||||
cardList.addCard(book.comic.name, null, book.comic.cover, book.comic.path_word, null, null, false)
|
||||
if(code == 200) {
|
||||
results.list.forEach { book ->
|
||||
cardList.addCard(book.comic.name, null, book.comic.cover, book.comic.path_word, null, null, false)
|
||||
}
|
||||
offset += results.list.size
|
||||
}
|
||||
}
|
||||
page++
|
||||
@@ -38,16 +42,21 @@ open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isT
|
||||
} else {
|
||||
val bookList = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java)
|
||||
bookList?.apply {
|
||||
Log.d("MyICL", "offset:${results.offset}, total:${results.total}")
|
||||
if(results.offset < results.total) {
|
||||
if(code == 200) results.list.forEach{ book ->
|
||||
cardList.addCard(book.name, null, book.cover, book.path_word, null, null, false)
|
||||
if(code == 200) {
|
||||
results.list.forEach{ book ->
|
||||
cardList.addCard(book.name, null, book.cover, book.path_word, null, null, false)
|
||||
}
|
||||
offset += results.list.size
|
||||
}
|
||||
}
|
||||
page++
|
||||
}
|
||||
}
|
||||
onLoadFinish()
|
||||
}.start()
|
||||
}
|
||||
ad?.start()
|
||||
}
|
||||
override fun initCardList(weakReference: WeakReference<Fragment>) {
|
||||
cardList = CardList(weakReference, cardWidth, cardHeight, cardPerRow)
|
||||
@@ -72,4 +81,9 @@ open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isT
|
||||
open fun setListeners(){}
|
||||
|
||||
open fun onLoadFinish(){}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
ad?.exit = true
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package top.fumiama.copymanga.tools
|
||||
package top.fumiama.copymanga.tools.api
|
||||
|
||||
import com.bumptech.glide.load.model.LazyHeaders
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
@@ -9,7 +9,15 @@ import java.io.File
|
||||
object CMApi {
|
||||
var myGlideHeaders: LazyHeaders? = null
|
||||
get() {
|
||||
if(field === null) field = LazyHeaders.Builder().addHeader("referer", MainActivity.mainWeakReference?.get()?.getString(R.string.referUrl)!!).addHeader("User-Agent", MainActivity.mainWeakReference?.get()?.getString(R.string.pc_ua)!!).build()
|
||||
if(field === null)
|
||||
field = LazyHeaders.Builder()
|
||||
.addHeader("referer", MainActivity.mainWeakReference?.get()?.getString(R.string.referUrl)!!)
|
||||
.addHeader("User-Agent", MainActivity.mainWeakReference?.get()?.getString(R.string.pc_ua)!!)
|
||||
.addHeader("source", "copyApp")
|
||||
.addHeader("webp", "1")
|
||||
.addHeader("region", "1")
|
||||
.addHeader("platform", "3")
|
||||
.build()
|
||||
return field
|
||||
}
|
||||
fun getImgZipFileFromVM(exDir: File?, chapter2Return: Chapter2Return?) = File(exDir, "${chapter2Return?.results?.comic?.name}/${chapter2Return?.results?.chapter?.group_path_word}/${chapter2Return?.results?.chapter?.name}.zip")
|
||||
@@ -1,4 +1,4 @@
|
||||
package top.fumiama.copymanga.tools
|
||||
package top.fumiama.copymanga.tools.api
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
@@ -1,4 +1,4 @@
|
||||
package top.fumiama.copymanga.tools
|
||||
package top.fumiama.copymanga.tools.api
|
||||
|
||||
import android.app.Activity
|
||||
import android.app.AlertDialog
|
||||
@@ -1,4 +1,4 @@
|
||||
package top.fumiama.copymanga.tools
|
||||
package top.fumiama.copymanga.tools.file
|
||||
//PropertiesTools.kt
|
||||
//created by fumiama 20200724
|
||||
import android.util.Log
|
||||
@@ -1,13 +1,30 @@
|
||||
package top.fumiama.copymanga.tools
|
||||
package top.fumiama.copymanga.tools.http
|
||||
|
||||
import android.util.Log
|
||||
import top.fumiama.copymanga.tools.ssl.AllTrustManager
|
||||
import top.fumiama.copymanga.tools.ssl.IgnoreHostNameVerifier
|
||||
import java.io.File
|
||||
import java.net.HttpURLConnection
|
||||
import java.net.URL
|
||||
import java.security.SecureRandom
|
||||
import java.util.concurrent.Callable
|
||||
import java.util.concurrent.FutureTask
|
||||
import javax.net.ssl.HttpsURLConnection
|
||||
import javax.net.ssl.SSLContext
|
||||
|
||||
object DownloadTools {
|
||||
private val trustManager = AllTrustManager()
|
||||
private val sslContext: SSLContext = SSLContext.getInstance("SSL").let {
|
||||
it.init(null, arrayOf(trustManager), SecureRandom())
|
||||
it
|
||||
}
|
||||
private val ignoreHostNameVerifier = IgnoreHostNameVerifier()
|
||||
|
||||
init {
|
||||
HttpsURLConnection.setDefaultHostnameVerifier(ignoreHostNameVerifier)
|
||||
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.socketFactory)
|
||||
}
|
||||
|
||||
fun getHttpContent(Url: String, refer: String? = null, ua: String? = null): ByteArray? {
|
||||
Log.d("Mydl", "getHttp: $Url")
|
||||
var ret: ByteArray? = null
|
||||
@@ -15,9 +32,13 @@ object DownloadTools {
|
||||
try {
|
||||
val connection = URL(Url).openConnection() as HttpURLConnection
|
||||
connection.requestMethod = "GET"
|
||||
connection.connectTimeout = 10000
|
||||
connection.readTimeout = 10000
|
||||
connection.connectTimeout = 20000
|
||||
connection.readTimeout = 20000
|
||||
refer?.let { connection.setRequestProperty("referer", it) }
|
||||
connection.setRequestProperty("source", "copyApp")
|
||||
connection.setRequestProperty("webp", "1")
|
||||
connection.setRequestProperty("region", "1")
|
||||
connection.setRequestProperty("platform", "3")
|
||||
ua?.let { connection.setRequestProperty("User-agent", it) }
|
||||
|
||||
ret = connection.inputStream.readBytes()
|
||||
@@ -41,8 +62,12 @@ object DownloadTools {
|
||||
try {
|
||||
val connection = URL(Url).openConnection() as HttpURLConnection
|
||||
connection.requestMethod = "GET"
|
||||
connection.connectTimeout = 10000
|
||||
connection.readTimeout = 10000
|
||||
connection.connectTimeout = 20000
|
||||
connection.readTimeout = 20000
|
||||
connection.setRequestProperty("source", "copyApp")
|
||||
connection.setRequestProperty("webp", "1")
|
||||
connection.setRequestProperty("region", "1")
|
||||
connection.setRequestProperty("platform", "3")
|
||||
|
||||
if (f.exists()) f.delete()
|
||||
else f.parentFile?.mkdirs()
|
||||
@@ -72,8 +97,8 @@ object DownloadTools {
|
||||
try {
|
||||
val connection = URL(Url).openConnection() as HttpURLConnection
|
||||
connection.requestMethod = "GET"
|
||||
connection.connectTimeout = 10000
|
||||
connection.readTimeout = 10000
|
||||
connection.connectTimeout = 20000
|
||||
connection.readTimeout = 20000
|
||||
refer?.let { connection.setRequestProperty("referer", it) }
|
||||
|
||||
if (f.exists()) f.delete()
|
||||
@@ -97,8 +122,8 @@ object DownloadTools {
|
||||
try {
|
||||
val connection = URL(Url).openConnection() as HttpURLConnection
|
||||
connection.requestMethod = "GET"
|
||||
connection.connectTimeout = 10000
|
||||
connection.readTimeout = 10000
|
||||
connection.connectTimeout = 20000
|
||||
connection.readTimeout = 20000
|
||||
refer?.let { connection.setRequestProperty("referer", it) }
|
||||
|
||||
ret = connection.inputStream.readBytes()
|
||||
@@ -1,12 +1,12 @@
|
||||
package top.fumiama.copymanga.tools
|
||||
package top.fumiama.copymanga.tools.http
|
||||
|
||||
import android.util.Log
|
||||
import com.google.gson.Gson
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.json.Chapter2Return
|
||||
import top.fumiama.copymanga.template.AutoDownloadThread
|
||||
import top.fumiama.copymanga.tools.DownloadTools.getHttpContent
|
||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||
import top.fumiama.copymanga.tools.http.DownloadTools.getHttpContent
|
||||
import java.io.File
|
||||
import java.lang.Thread.sleep
|
||||
import java.util.zip.CRC32
|
||||
@@ -0,0 +1,17 @@
|
||||
package top.fumiama.copymanga.tools.ssl;
|
||||
|
||||
import java.security.cert.X509Certificate;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
|
||||
public class AllTrustManager implements X509TrustManager{
|
||||
@Override
|
||||
public void checkClientTrusted(X509Certificate[] chain, String authType) { }
|
||||
|
||||
@Override
|
||||
public void checkServerTrusted(X509Certificate[] chain, String authType) { }
|
||||
|
||||
@Override
|
||||
public X509Certificate[] getAcceptedIssuers() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package top.fumiama.copymanga.tools.ssl;
|
||||
|
||||
import javax.net.ssl.HostnameVerifier;
|
||||
import javax.net.ssl.SSLSession;
|
||||
|
||||
public class IgnoreHostNameVerifier implements HostnameVerifier {
|
||||
@Override
|
||||
public boolean verify(String hostname, SSLSession session) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package top.fumiama.copymanga.tools
|
||||
package top.fumiama.copymanga.tools.thread
|
||||
|
||||
import android.os.Handler
|
||||
|
||||
@@ -7,11 +7,11 @@ import android.view.View
|
||||
import androidx.navigation.Navigation
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.NoBackRefreshFragment
|
||||
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
||||
import java.lang.Thread.sleep
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class BookFragment:NoBackRefreshFragment(R.layout.fragment_book) {
|
||||
class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
|
||||
private lateinit var bookHandler: BookHandler
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
@@ -34,6 +34,7 @@ class BookFragment:NoBackRefreshFragment(R.layout.fragment_book) {
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) }
|
||||
bookHandler.destroy()
|
||||
}
|
||||
|
||||
private fun setMenuInvisible(menu: Menu){
|
||||
|
||||
@@ -4,15 +4,12 @@ import android.os.Bundle
|
||||
import android.os.Looper
|
||||
import android.os.Message
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewTreeObserver
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.navigation.Navigation
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.model.GlideUrl
|
||||
import com.bumptech.glide.load.model.LazyHeaders
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||
import kotlinx.android.synthetic.main.card_book.*
|
||||
@@ -24,15 +21,14 @@ import kotlinx.android.synthetic.main.line_chapter.view.*
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.json.BookInfoStructure
|
||||
import top.fumiama.copymanga.json.ReturnBase
|
||||
import top.fumiama.copymanga.json.ThemeStructure
|
||||
import top.fumiama.copymanga.template.AutoDownloadHandler
|
||||
import top.fumiama.copymanga.tools.CMApi
|
||||
import top.fumiama.copymanga.tools.GlideBlurTransformation
|
||||
import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import top.fumiama.copymanga.tools.api.GlideBlurTransformation
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class BookHandler(that: WeakReference<BookFragment>, path: String)
|
||||
:AutoDownloadHandler(
|
||||
: AutoDownloadHandler(
|
||||
that.get()?.getString(R.string.bookInfoApiUrl)?.let { String.format(it, path) } ?: "",
|
||||
BookInfoStructure::class.java,
|
||||
Looper.myLooper()!!){
|
||||
@@ -64,6 +60,7 @@ class BookHandler(that: WeakReference<BookFragment>, path: String)
|
||||
|
||||
override fun onError() {
|
||||
super.onError()
|
||||
if(exit) return
|
||||
if(!hasToastedError) {
|
||||
Toast.makeText(that?.context, R.string.null_book, Toast.LENGTH_SHORT).show()
|
||||
that?.rootView?.let { it1 ->
|
||||
@@ -80,6 +77,7 @@ class BookHandler(that: WeakReference<BookFragment>, path: String)
|
||||
override fun getGsonItem() = book
|
||||
override fun doWhenFinishDownload() {
|
||||
super.doWhenFinishDownload()
|
||||
if(exit) return
|
||||
inflateComponents()
|
||||
Thread{ for (i in 1..6) sendEmptyMessage(i) }.start()
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import kotlinx.android.synthetic.main.anchor_popular.view.*
|
||||
import kotlinx.android.synthetic.main.line_finish.*
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import java.lang.Thread.sleep
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package top.fumiama.copymanga.ui.cardflow.newest
|
||||
import android.view.View
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
package top.fumiama.copymanga.ui.cardflow.rank
|
||||
|
||||
import android.view.View
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import kotlinx.android.synthetic.main.fragment_rank.*
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import kotlinx.android.synthetic.main.line_rank.view.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import java.lang.Thread.sleep
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
class RankFragment : InfoCardLoader(R.layout.fragment_rank, R.id.action_nav_rank_to_nav_book, true) {
|
||||
private val sortWay = listOf("day", "week", "month", "total")
|
||||
private var sortValue = 0
|
||||
|
||||
override fun getApiUrl() =
|
||||
getString(R.string.rankApiUrl).let {
|
||||
String.format(
|
||||
it,
|
||||
page * 21,
|
||||
sortWay[sortValue]
|
||||
)
|
||||
}
|
||||
|
||||
override fun setListeners() {
|
||||
super.setListeners()
|
||||
frlai.lrt.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener {
|
||||
override fun onTabReselected(tab: TabLayout.Tab?) {}
|
||||
|
||||
override fun onTabSelected(tab: TabLayout.Tab?) {
|
||||
setSortValue(tab?.position?:0)
|
||||
}
|
||||
|
||||
override fun onTabUnselected(tab: TabLayout.Tab?) {}
|
||||
})
|
||||
}
|
||||
|
||||
override fun onLoadFinish() {
|
||||
super.onLoadFinish()
|
||||
mainWeakReference?.get()?.runOnUiThread {
|
||||
mypl.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
private fun setSortValue(value: Int) {
|
||||
sortValue = value
|
||||
Thread{
|
||||
sleep(400)
|
||||
mh?.sendEmptyMessage(4)
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ package top.fumiama.copymanga.ui.cardflow.recommend
|
||||
import android.view.View
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
|
||||
@@ -10,8 +10,8 @@ import kotlinx.android.synthetic.main.line_sort.*
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.json.FilterStructure
|
||||
import top.fumiama.copymanga.template.AutoDownloadThread
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import java.lang.Thread.sleep
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
|
||||
@@ -8,8 +8,8 @@ import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import kotlinx.android.synthetic.main.fragment_topic.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.json.TopicStructure
|
||||
import top.fumiama.copymanga.template.AutoDownloadThread
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
@@ -17,7 +17,7 @@ class TopicFragment : InfoCardLoader(R.layout.fragment_topic, R.id.action_nav_to
|
||||
private var type = 1
|
||||
override fun getApiUrl() =
|
||||
getString(R.string.topicContentApiUrl).let {
|
||||
String.format(it, arguments?.getString("path"), type, page * 21)
|
||||
String.format(it, arguments?.getString("path"), type, offset)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
||||
@@ -3,11 +3,11 @@ package top.fumiama.copymanga.ui.chapter
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.template.NoBackRefreshFragment
|
||||
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
||||
import java.lang.Thread.sleep
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class ChapterFragment:NoBackRefreshFragment(R.layout.fragment_chapters) {
|
||||
class ChapterFragment: NoBackRefreshFragment(R.layout.fragment_chapters) {
|
||||
var handler: ChapterHandler? = null
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
@@ -19,4 +19,9 @@ class ChapterFragment:NoBackRefreshFragment(R.layout.fragment_chapters) {
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
handler?.destroy()
|
||||
}
|
||||
}
|
||||
@@ -7,21 +7,21 @@ import android.widget.Toast
|
||||
import androidx.navigation.Navigation
|
||||
import kotlinx.android.synthetic.main.fragment_book.*
|
||||
import kotlinx.android.synthetic.main.fragment_chapters.*
|
||||
import kotlinx.android.synthetic.main.line_2chapters.view.*
|
||||
import kotlinx.android.synthetic.main.line_chapter.view.*
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.json.ChapterStructure
|
||||
import top.fumiama.copymanga.json.VolumeStructure
|
||||
import top.fumiama.copymanga.template.AutoDownloadHandler
|
||||
import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class ChapterHandler(that: WeakReference<ChapterFragment>, pw: String, gpw: String):AutoDownloadHandler(
|
||||
class ChapterHandler(that: WeakReference<ChapterFragment>, pw: String, gpw: String):
|
||||
AutoDownloadHandler(
|
||||
that.get()?.getString(R.string.groupInfoApiUrl)?.let { String.format(it, pw, gpw) } ?: "",
|
||||
VolumeStructure::class.java,
|
||||
Looper.myLooper()!!
|
||||
) {
|
||||
private val that = that.get()
|
||||
var hasToastedError = false
|
||||
private var hasToastedError = false
|
||||
get(){
|
||||
val re = field
|
||||
field = true
|
||||
@@ -46,6 +46,7 @@ class ChapterHandler(that: WeakReference<ChapterFragment>, pw: String, gpw: Stri
|
||||
|
||||
override fun onError() {
|
||||
super.onError()
|
||||
if(exit) return
|
||||
if(!hasToastedError) {
|
||||
Toast.makeText(that?.context, R.string.null_book, Toast.LENGTH_SHORT).show()
|
||||
that?.rootView?.let { it1 ->
|
||||
@@ -55,6 +56,7 @@ class ChapterHandler(that: WeakReference<ChapterFragment>, pw: String, gpw: Stri
|
||||
}
|
||||
override fun doWhenFinishDownload() {
|
||||
super.doWhenFinishDownload()
|
||||
if(exit) return
|
||||
Thread{ sendEmptyMessage(1) }.start()
|
||||
}
|
||||
private fun inflateChapters(){
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
package top.fumiama.copymanga.ui.comicdl
|
||||
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.Message
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import com.google.gson.Gson
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.json.ChapterStructure
|
||||
import top.fumiama.copymanga.json.VolumeStructure
|
||||
import top.fumiama.copymanga.template.AutoDownloadThread
|
||||
import top.fumiama.copymanga.template.NoBackRefreshFragment
|
||||
import top.fumiama.copymanga.tools.CMApi
|
||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import java.io.File
|
||||
import java.lang.Thread.sleep
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class ComicDlFragment:NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
||||
class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
||||
var handler: ComicDlHandler? = null
|
||||
var ads = emptyArray<AutoDownloadThread>()
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
exit = false
|
||||
if(isFirstInflate){
|
||||
when {
|
||||
arguments?.getBoolean("callFromOldDL", false) == true -> initOldComicData()
|
||||
@@ -41,10 +41,15 @@ class ComicDlFragment:NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
||||
mainWeakReference?.get()?.menuMain?.let { setMenuVisible(it) }
|
||||
}
|
||||
|
||||
/*override fun onDestroy() {
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) }
|
||||
}*/
|
||||
//mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) }
|
||||
handler?.mangaDlTools?.exit = true
|
||||
ads.forEach {
|
||||
it.exit = true
|
||||
}
|
||||
exit = true
|
||||
}
|
||||
|
||||
private fun start2load(volumes: Array<VolumeStructure>, isFromFile: Boolean = false, groupArray: Array<String>? =null){
|
||||
handler = ComicDlHandler(Looper.myLooper()!!,
|
||||
@@ -93,22 +98,29 @@ class ComicDlFragment:NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
||||
gpws.forEachIndexed { i, gpw ->
|
||||
Log.d("MyCDF", "下载:$gpw")
|
||||
var offset = 0
|
||||
val re = arrayOfNulls<VolumeStructure>(counts?.get(i)?:1)
|
||||
val times = (counts?.get(i)?:1) / 100
|
||||
val remain = (counts?.get(i)?:1) % 100
|
||||
val re = arrayOfNulls<VolumeStructure>(if(remain != 0) (times+1) else (times))
|
||||
Log.d("MyCDF", "${i}卷共${if(times == 0) 1 else times}次加载")
|
||||
do {
|
||||
counts?.set(i, counts[i] - 100)
|
||||
CMApi.getApiUrl(R.string.groupInfoApiUrl, pw, gpw, offset)?.let {
|
||||
AutoDownloadThread(it) { result ->
|
||||
//Log.d("MyCDF", "返回:${result?.decodeToString()}")
|
||||
if(exit) return
|
||||
val ad = AutoDownloadThread(it) { result ->
|
||||
Log.d("MyCDF", "第${i}卷返回")
|
||||
val r = Gson().fromJson(result?.decodeToString(), VolumeStructure::class.java)
|
||||
re[r.results.offset / 100] = r
|
||||
}.start()
|
||||
}
|
||||
ads += ad
|
||||
ad.start()
|
||||
offset += 100
|
||||
}
|
||||
} while ((counts?.get(i) ?: 0) > 0)
|
||||
Thread {
|
||||
var c = 0
|
||||
while (c++ < 80) {
|
||||
sleep(100)
|
||||
sleep(1000)
|
||||
if(exit) return@Thread
|
||||
if(re.all { it != null }) break
|
||||
}
|
||||
if(re.size > 1) {
|
||||
@@ -127,7 +139,8 @@ class ComicDlFragment:NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
||||
Thread {
|
||||
var c = 0
|
||||
while (c < 80 && volumes.size != gpws.size) {
|
||||
sleep(100)
|
||||
sleep(1000)
|
||||
if(exit) return@Thread
|
||||
Log.d("MyCDF", "已有:${volumes.size} 共:${gpws.size}")
|
||||
c++
|
||||
}
|
||||
@@ -149,5 +162,6 @@ class ComicDlFragment:NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
||||
|
||||
companion object {
|
||||
var json: String? = null
|
||||
var exit = false
|
||||
}
|
||||
}
|
||||
@@ -26,10 +26,10 @@ import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.json.ComicStructureOld
|
||||
import top.fumiama.copymanga.json.VolumeStructure
|
||||
import top.fumiama.copymanga.tools.CMApi
|
||||
import top.fumiama.copymanga.tools.MangaDlTools
|
||||
import top.fumiama.copymanga.tools.PropertiesTools
|
||||
import top.fumiama.copymanga.tools.UITools
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import top.fumiama.copymanga.tools.http.MangaDlTools
|
||||
import top.fumiama.copymanga.tools.file.PropertiesTools
|
||||
import top.fumiama.copymanga.tools.api.UITools
|
||||
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment.Companion.json
|
||||
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
|
||||
import top.fumiama.copymanga.views.ChapterToggleButton
|
||||
@@ -64,7 +64,7 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
||||
private var tbtnlist: Array<ChapterToggleButton> = arrayOf()
|
||||
private var tbtncnt = 0
|
||||
private var isNewTitle = false
|
||||
private val mangaDlTools = MangaDlTools()
|
||||
val mangaDlTools = MangaDlTools()
|
||||
private var multiSelect = false
|
||||
private var size = 0
|
||||
private var refreshSize = true
|
||||
|
||||
@@ -5,9 +5,7 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ArrayAdapter
|
||||
import android.widget.Toast
|
||||
import androidx.navigation.Navigation
|
||||
@@ -15,7 +13,7 @@ import kotlinx.android.synthetic.main.app_bar_main.*
|
||||
import kotlinx.android.synthetic.main.fragment_download.*
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.NoBackRefreshFragment
|
||||
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
||||
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
|
||||
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
|
||||
import java.io.File
|
||||
|
||||
@@ -7,13 +7,12 @@ import androidx.navigation.Navigation
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.model.GlideUrl
|
||||
import com.bumptech.glide.load.model.LazyHeaders
|
||||
import kotlinx.android.synthetic.main.fragment_home.*
|
||||
import kotlinx.android.synthetic.main.viewpage_horizonal.view.*
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.NoBackRefreshFragment
|
||||
import top.fumiama.copymanga.tools.CMApi
|
||||
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import java.lang.Thread.sleep
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
@@ -45,6 +44,11 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
||||
homeHandler = HomeHandler(WeakReference(this))
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
homeHandler.destroy()
|
||||
}
|
||||
|
||||
inner class ViewData(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
inner class RecyclerViewAdapter :
|
||||
RecyclerView.Adapter<ViewData>() {
|
||||
|
||||
@@ -20,16 +20,17 @@ import com.to.aboomy.pager2banner.ScaleInTransformer
|
||||
import kotlinx.android.synthetic.main.card_book.view.*
|
||||
import kotlinx.android.synthetic.main.fragment_home.*
|
||||
import kotlinx.android.synthetic.main.line_1bookline.view.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.json.ComicStructure
|
||||
import top.fumiama.copymanga.json.IndexStructure
|
||||
import top.fumiama.copymanga.template.AutoDownloadHandler
|
||||
import top.fumiama.copymanga.tools.CMApi
|
||||
import top.fumiama.copymanga.tools.UITools
|
||||
import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import top.fumiama.copymanga.tools.api.UITools
|
||||
import java.lang.Thread.sleep
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
class HomeHandler(that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
||||
that.get()?.getString(R.string.mainPageApiUrl) ?: "",
|
||||
IndexStructure::class.java,
|
||||
Looper.myLooper()!!,
|
||||
@@ -83,10 +84,12 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
}
|
||||
override fun onError() {
|
||||
super.onError()
|
||||
if(exit) return
|
||||
Toast.makeText(homeF?.context, R.string.web_error, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
override fun doWhenFinishDownload() {
|
||||
super.doWhenFinishDownload()
|
||||
if(exit) return
|
||||
try {
|
||||
Thread {
|
||||
sendEmptyMessage(7) //inflateBanner
|
||||
@@ -147,7 +150,9 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
comics += book.comic
|
||||
}
|
||||
}
|
||||
if(comics.size == 9) allocateLine(homeF?.getString(R.string.rank_list)?:"", R.drawable.img_novel_bill, comics)
|
||||
if(comics.size == 9) allocateLine(homeF?.getString(R.string.rank_list)?:"", R.drawable.img_novel_bill, comics) {
|
||||
mainWeakReference?.get()?.navController?.navigate(R.id.nav_rank)
|
||||
}
|
||||
}
|
||||
|
||||
private fun inflateHot(){
|
||||
@@ -305,7 +310,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
private fun setCards(cv: CardView, pw: String, name: String, img: String, isFinal: Boolean, isTopic: Boolean) {
|
||||
cv.tic.text = name
|
||||
homeF?.let {
|
||||
Glide.with(it).load(GlideUrl(img, CMApi.myGlideHeaders)).timeout(10000).into(cv.imic)
|
||||
Glide.with(it).load(GlideUrl(img, CMApi.myGlideHeaders)).timeout(20000).into(cv.imic)
|
||||
}
|
||||
if (isFinal) cv.sgnic.visibility = View.VISIBLE
|
||||
cv.setOnClickListener {
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
package top.fumiama.copymanga.ui.latest
|
||||
|
||||
import androidx.fragment.app.Fragment
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
class LatestFragment: Fragment()/*InfoCardLoader(R.layout.line_lazybooklines, R.id.action_nav_latest_to_nav_book, "name", "cover", "id") {
|
||||
override fun getApiUrl() = getString(R.string.recentUpdateApiUrl).let { String.format(it, page) }
|
||||
}*/
|
||||
@@ -1,93 +0,0 @@
|
||||
package top.fumiama.copymanga.ui.rank
|
||||
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.github.zawadz88.materialpopupmenu.popupMenu
|
||||
import com.google.gson.Gson
|
||||
import kotlinx.android.synthetic.main.anchor_popular.view.*
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.json.FilterStructure
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
import java.lang.Thread.sleep
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
class RankFragment: Fragment()/*: InfoCardLoader(R.layout.fragment_rank, R.id.action_nav_rank_to_nav_book, "name", "cover", "id") {
|
||||
private var type = 0
|
||||
private var pop_sub = 0
|
||||
private var filter: Array<FilterStructure>? = null
|
||||
get() {
|
||||
if (field == null) {
|
||||
context?.assets?.open(getString(R.string.assets_filter))?.let {
|
||||
field = Gson().fromJson(it.reader(), Array<FilterStructure>::class.java)
|
||||
it.close()
|
||||
}
|
||||
}
|
||||
return field
|
||||
}
|
||||
|
||||
override fun getApiUrl() =
|
||||
getString(R.string.rankApiUrl).let { String.format(it, pop_sub, type, page) }
|
||||
|
||||
override fun setListeners() {
|
||||
super.setListeners()
|
||||
setPop()
|
||||
setClasses()
|
||||
}
|
||||
|
||||
private fun setPop(){
|
||||
line_rank_pop.apt.setText(if(pop_sub == 1) R.string.menu_pop_sub else R.string.menu_pop_pop)
|
||||
line_rank_pop.setOnClickListener {
|
||||
val popupMenu = popupMenu {
|
||||
style = R.style.Widget_MPM_Menu_Dark_CustomBackground
|
||||
section {
|
||||
item {
|
||||
labelRes = if(pop_sub == 0) R.string.menu_pop_sub else R.string.menu_pop_pop
|
||||
labelColor = it.apt.currentTextColor
|
||||
iconDrawable =
|
||||
this@RankFragment.context?.let { it1 -> ContextCompat.getDrawable(it1, R.drawable.ic_refresh) } //optional
|
||||
iconColor = it.apt.currentTextColor
|
||||
callback = { //optional
|
||||
if(pop_sub == 0){
|
||||
pop_sub = 1
|
||||
it.apt.setText(R.string.menu_pop_sub)
|
||||
}else{
|
||||
pop_sub = 0
|
||||
it.apt.setText(R.string.menu_pop_pop)
|
||||
}
|
||||
Thread{
|
||||
sleep(400)
|
||||
mh?.sendEmptyMessage(4)
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.context?.let { it1 -> popupMenu.show(it1, it) }
|
||||
}
|
||||
}
|
||||
|
||||
private fun setClasses(){
|
||||
val items = filter?.get(0)?.items
|
||||
line_rank_class.apt.text = items?.get(0)?.tag_name?:getString(R.string.text_null)
|
||||
line_rank_class.setOnClickListener {
|
||||
val popupMenu = popupMenu {
|
||||
style = R.style.Widget_MPM_Menu_Dark_CustomBackground
|
||||
if(items != null) section {
|
||||
for(i in items.indices) item {
|
||||
label = items[i]?.tag_name
|
||||
labelColor = it.apt.currentTextColor
|
||||
callback = { //optional
|
||||
it.apt.text = label
|
||||
type = items[i]?.tag_id?:0
|
||||
Thread{
|
||||
sleep(400)
|
||||
mh?.sendEmptyMessage(4)
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.context?.let { it1 -> popupMenu.show(it1, it) }
|
||||
}
|
||||
}
|
||||
}*/
|
||||
@@ -1,12 +1,7 @@
|
||||
package top.fumiama.copymanga.ui.settings
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.template.NoBackRefreshFragment
|
||||
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
||||
|
||||
class SettingsFragment:NoBackRefreshFragment(R.layout.fragment_settings) {
|
||||
class SettingsFragment: NoBackRefreshFragment(R.layout.fragment_settings) {
|
||||
}
|
||||
@@ -5,7 +5,6 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import kotlinx.android.synthetic.main.fragment_sub.*
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
|
||||
class SubFragment : Fragment() {
|
||||
|
||||
@@ -15,8 +15,8 @@ import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.json.Chapter2Return
|
||||
import top.fumiama.copymanga.json.ChapterWithContent
|
||||
import top.fumiama.copymanga.json.ComicStructure
|
||||
import top.fumiama.copymanga.template.AutoDownloadHandler
|
||||
import top.fumiama.copymanga.tools.PropertiesTools
|
||||
import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
||||
import top.fumiama.copymanga.tools.file.PropertiesTools
|
||||
import top.fumiama.copymanga.ui.vm.ViewMangaActivity.Companion.comicName
|
||||
import top.fumiama.copymanga.ui.vm.ViewMangaActivity.Companion.pn
|
||||
import top.fumiama.copymanga.views.ScaleImageView
|
||||
@@ -113,12 +113,14 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
|
||||
}
|
||||
override fun onError() {
|
||||
super.onError()
|
||||
if(exit) return
|
||||
wv.get()?.toolsBox?.toastError("下载章节信息失败")
|
||||
}
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
override fun doWhenFinishDownload() {
|
||||
super.doWhenFinishDownload()
|
||||
if(exit) return
|
||||
prepareManga()
|
||||
}
|
||||
|
||||
|
||||
@@ -27,10 +27,10 @@ import kotlinx.android.synthetic.main.widget_titlebar.*
|
||||
import kotlinx.android.synthetic.main.widget_titlebar.view.*
|
||||
import kotlinx.android.synthetic.main.widget_viewmangainfo.*
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.template.TitleActivityTemplate
|
||||
import top.fumiama.copymanga.tools.CMApi
|
||||
import top.fumiama.copymanga.tools.DownloadTools
|
||||
import top.fumiama.copymanga.tools.TimeThread
|
||||
import top.fumiama.copymanga.template.general.TitleActivityTemplate
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import top.fumiama.copymanga.tools.http.DownloadTools
|
||||
import top.fumiama.copymanga.tools.thread.TimeThread
|
||||
import top.fumiama.copymanga.views.ScaleImageView
|
||||
import java.io.ByteArrayInputStream
|
||||
import java.io.ByteArrayOutputStream
|
||||
@@ -399,6 +399,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
||||
dlhandler?.sendEmptyMessage(0)
|
||||
tt.canDo = false
|
||||
dlhandler = null
|
||||
handler.destroy()
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ class SimpleKanban(private val client: Client, private val pwd: String) { //mu
|
||||
try {
|
||||
firstRecv = client.receiveRawMessage(4) //le
|
||||
val length = convert2Int(firstRecv)
|
||||
Log.d("MySK", "Msg len: $length")
|
||||
if(firstRecv.size > 4) re += firstRecv.copyOfRange(4, firstRecv.size)
|
||||
re += client.receiveRawMessage(length - re.size, setProgress = true)
|
||||
break
|
||||
@@ -53,6 +54,7 @@ class SimpleKanban(private val client: Client, private val pwd: String) { //mu
|
||||
if(firstRecv.decodeToString() == "null") "null"
|
||||
else {
|
||||
val length = convert2Int(firstRecv)
|
||||
Log.d("MySK", "Msg len: $length")
|
||||
var re = byteArrayOf()
|
||||
if(firstRecv.size > 4) re += firstRecv.copyOfRange(4, firstRecv.size)
|
||||
re += client.receiveRawMessage(length - re.size)
|
||||
|
||||
@@ -8,8 +8,8 @@ import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.FileProvider
|
||||
import kotlinx.android.synthetic.main.dialog_progress.view.*
|
||||
import top.fumiama.copymanga.tools.PropertiesTools
|
||||
import top.fumiama.copymanga.tools.UITools
|
||||
import top.fumiama.copymanga.tools.file.PropertiesTools
|
||||
import top.fumiama.copymanga.tools.api.UITools
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import java.io.File
|
||||
import java.security.MessageDigest
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="top.fumiama.copymanga.ui.rank.RankFragment">
|
||||
tools:context="top.fumiama.copymanga.ui.cardflow.rank.RankFragment">
|
||||
|
||||
<include
|
||||
android:id="@+id/frlai"
|
||||
layout="@layout/line_finish"
|
||||
layout="@layout/line_rank"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
||||
51
app/src/main/res/layout/line_rank.xml
Normal file
51
app/src/main/res/layout/line_rank.xml
Normal file
@@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<include
|
||||
layout="@layout/div_h"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="1dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.0"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/lrt" />
|
||||
|
||||
<com.google.android.material.tabs.TabLayout
|
||||
android:id="@+id/lrt"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<com.google.android.material.tabs.TabItem
|
||||
android:id="@+id/lrtifast"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/rank_fast" />
|
||||
|
||||
<com.google.android.material.tabs.TabItem
|
||||
android:id="@+id/lrtiweek"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/rank_week" />
|
||||
|
||||
<com.google.android.material.tabs.TabItem
|
||||
android:id="@+id/lrtimonth"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/rank_month" />
|
||||
|
||||
<com.google.android.material.tabs.TabItem
|
||||
android:id="@+id/lrtiall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/rank_all" />
|
||||
</com.google.android.material.tabs.TabLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -10,13 +10,6 @@
|
||||
android:name="top.fumiama.copymanga.ui.home.HomeFragment"
|
||||
android:label="@string/menu_home"
|
||||
tools:layout="@layout/fragment_home" >
|
||||
<action
|
||||
android:id="@+id/action_nav_home_to_nav_latest"
|
||||
app:destination="@id/nav_latest"
|
||||
app:enterAnim="@anim/slide_in_right"
|
||||
app:exitAnim="@anim/slide_out_left"
|
||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||
app:popExitAnim="@anim/slide_in_right_exit" />
|
||||
<action
|
||||
android:id="@+id/action_nav_home_to_nav_book"
|
||||
app:destination="@id/nav_book"
|
||||
@@ -70,7 +63,7 @@
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_rank"
|
||||
android:name="top.fumiama.copymanga.ui.rank.RankFragment"
|
||||
android:name="top.fumiama.copymanga.ui.cardflow.rank.RankFragment"
|
||||
android:label="@string/menu_rank"
|
||||
tools:layout="@layout/fragment_rank" >
|
||||
<action
|
||||
@@ -115,20 +108,6 @@
|
||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_latest"
|
||||
android:name="top.fumiama.copymanga.ui.latest.LatestFragment"
|
||||
android:label="@string/page_latest"
|
||||
tools:layout="@layout/line_lazybooklines" >
|
||||
<action
|
||||
android:id="@+id/action_nav_latest_to_nav_book"
|
||||
app:destination="@id/nav_book"
|
||||
app:enterAnim="@anim/slide_in_right"
|
||||
app:exitAnim="@anim/slide_out_left"
|
||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_settings"
|
||||
android:name="top.fumiama.copymanga.ui.settings.SettingsFragment"
|
||||
|
||||
@@ -29,21 +29,21 @@
|
||||
<string name="null_book">获取图书信息失败</string>
|
||||
<string name="web_error">网络错误</string>
|
||||
|
||||
<string name="mainPageApiUrl">https://api.copymanga.com/api/v3/h5/homeIndex</string>
|
||||
<string name="mainPageApiUrl">https://api.copymanga.com/api/v3/h5/homeIndex?platform=3</string>
|
||||
<string name="referUrl">"https://api.copymanga.com"</string>
|
||||
<string name="recentUpdateApiUrl">https://nnv3api.dmzj1.com/novel/recentUpdate/%1$d.json</string>
|
||||
<string name="rankApiUrl">https://nnv3api.dmzj1.com/novel/rank/%1$d/%2$d/%3$d.json</string>
|
||||
<string name="filterApiUrl">https://api.copymanga.com/api/v3/h5/filterIndex/comic/tags</string>
|
||||
<string name="sortApiUrl">https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s</string>
|
||||
<string name="bookInfoApiUrl">https://api.copymanga.com/api/v3/comic2/%1$s</string>
|
||||
<string name="groupInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d</string>
|
||||
<string name="chapterInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/chapter2/%2$s</string>
|
||||
<string name="rankApiUrl">https://api.copymanga.com/api/v3/ranks?limit=21&offset=%1$d&date_type=%2$s&platform=3</string>
|
||||
<string name="filterApiUrl">https://api.copymanga.com/api/v3/h5/filterIndex/comic/tags?platform=3</string>
|
||||
<string name="sortApiUrl">https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3</string>
|
||||
<string name="bookInfoApiUrl">https://api.copymanga.com/api/v3/comic2/%1$s?platform=3</string>
|
||||
<string name="groupInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d&platform=3</string>
|
||||
<string name="chapterInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/chapter2/%2$s?platform=3</string>
|
||||
<string name="chapterTxtUrl">https://nnv3api.dmzj1.com/novel/download/%1$d_%2$d_%3$d.txt</string>
|
||||
<string name="topicApiUrl">https://api.copymanga.com/api/v3/topic/%1$s</string>
|
||||
<string name="topicContentApiUrl">https://api.copymanga.com/api/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$d</string>
|
||||
<string name="recommendApiUrl">https://api.copymanga.com/api/v3/recs?pos=3200102&limit=21&offset=%1$d</string>
|
||||
<string name="newestApiUrl">https://api.copymanga.com/api/v3/update/newest?limit=21&offset=%1$d</string>
|
||||
<string name="finishApiUrl">https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&top=finish</string>
|
||||
<string name="topicApiUrl">https://api.copymanga.com/api/v3/topic/%1$s?platform=3</string>
|
||||
<string name="topicContentApiUrl">https://api.copymanga.com/api/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$d&platform=3</string>
|
||||
<string name="recommendApiUrl">https://api.copymanga.com/api/v3/recs?pos=3200102&limit=21&offset=%1$d&platform=3</string>
|
||||
<string name="newestApiUrl">https://api.copymanga.com/api/v3/update/newest?limit=21&offset=%1$d&platform=3</string>
|
||||
<string name="finishApiUrl">https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&top=finish&platform=3</string>
|
||||
|
||||
<string name="complete">已完结</string>
|
||||
|
||||
@@ -70,4 +70,9 @@
|
||||
<string name="rank_list">排行榜 ☟日周月 ☛冠亚季</string>
|
||||
<string name="hot_list">热门更新</string>
|
||||
<string name="new_list">全新上架</string>
|
||||
|
||||
<string name="rank_fast">上升最快</string>
|
||||
<string name="rank_week">近七天</string>
|
||||
<string name="rank_month">近三十天</string>
|
||||
<string name="rank_all">总榜单</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user