diff --git a/app/build.gradle b/app/build.gradle index 51e73b3..e01d39c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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" diff --git a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt index 3600ab0..8c5a93c 100644 --- a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt +++ b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt @@ -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") diff --git a/app/src/main/java/top/fumiama/copymanga/template/ActivityTemplate.kt b/app/src/main/java/top/fumiama/copymanga/template/general/ActivityTemplate.kt similarity index 86% rename from app/src/main/java/top/fumiama/copymanga/template/ActivityTemplate.kt rename to app/src/main/java/top/fumiama/copymanga/template/general/ActivityTemplate.kt index 7f5adb4..7d3a9c7 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/ActivityTemplate.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/general/ActivityTemplate.kt @@ -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 diff --git a/app/src/main/java/top/fumiama/copymanga/template/MangaPagesFragmentTemplate.kt b/app/src/main/java/top/fumiama/copymanga/template/general/MangaPagesFragmentTemplate.kt similarity index 93% rename from app/src/main/java/top/fumiama/copymanga/template/MangaPagesFragmentTemplate.kt rename to app/src/main/java/top/fumiama/copymanga/template/general/MangaPagesFragmentTemplate.kt index 0b6a47a..2b8969e 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/MangaPagesFragmentTemplate.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/general/MangaPagesFragmentTemplate.kt @@ -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 diff --git a/app/src/main/java/top/fumiama/copymanga/template/NoBackRefreshFragment.kt b/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt similarity index 93% rename from app/src/main/java/top/fumiama/copymanga/template/NoBackRefreshFragment.kt rename to app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt index 0b8075b..ae06c04 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/NoBackRefreshFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt @@ -1,4 +1,4 @@ -package top.fumiama.copymanga.template +package top.fumiama.copymanga.template.general import android.os.Bundle import android.view.LayoutInflater diff --git a/app/src/main/java/top/fumiama/copymanga/template/TitleActivityTemplate.kt b/app/src/main/java/top/fumiama/copymanga/template/general/TitleActivityTemplate.kt similarity index 72% rename from app/src/main/java/top/fumiama/copymanga/template/TitleActivityTemplate.kt rename to app/src/main/java/top/fumiama/copymanga/template/general/TitleActivityTemplate.kt index 9188164..4881822 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/TitleActivityTemplate.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/general/TitleActivityTemplate.kt @@ -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 { diff --git a/app/src/main/java/top/fumiama/copymanga/template/handler/MPATHandler.kt b/app/src/main/java/top/fumiama/copymanga/template/handler/MPATHandler.kt index 961aabe..1cf52fb 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/handler/MPATHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/handler/MPATHandler.kt @@ -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 diff --git a/app/src/main/java/top/fumiama/copymanga/template/AutoDownloadHandler.kt b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt similarity index 88% rename from app/src/main/java/top/fumiama/copymanga/template/AutoDownloadHandler.kt rename to app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt index ec21ea1..2697d85 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/AutoDownloadHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt @@ -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() diff --git a/app/src/main/java/top/fumiama/copymanga/template/AutoDownloadThread.kt b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadThread.kt similarity index 73% rename from app/src/main/java/top/fumiama/copymanga/template/AutoDownloadThread.kt rename to app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadThread.kt index b45aabe..8ff0e48 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/AutoDownloadThread.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadThread.kt @@ -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) } } \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/template/CardList.kt b/app/src/main/java/top/fumiama/copymanga/template/ui/CardList.kt similarity index 97% rename from app/src/main/java/top/fumiama/copymanga/template/CardList.kt rename to app/src/main/java/top/fumiama/copymanga/template/ui/CardList.kt index 07eb45c..414b398 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/CardList.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/ui/CardList.kt @@ -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 diff --git a/app/src/main/java/top/fumiama/copymanga/template/InfoCardLoader.kt b/app/src/main/java/top/fumiama/copymanga/template/ui/InfoCardLoader.kt similarity index 65% rename from app/src/main/java/top/fumiama/copymanga/template/InfoCardLoader.kt rename to app/src/main/java/top/fumiama/copymanga/template/ui/InfoCardLoader.kt index e73c8a6..98aa74f 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/InfoCardLoader.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/ui/InfoCardLoader.kt @@ -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) { 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 + } } \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/tools/CMApi.kt b/app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt similarity index 63% rename from app/src/main/java/top/fumiama/copymanga/tools/CMApi.kt rename to app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt index 58365cc..9421d35 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/CMApi.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/api/CMApi.kt @@ -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") diff --git a/app/src/main/java/top/fumiama/copymanga/tools/GlideBlurTransformation.kt b/app/src/main/java/top/fumiama/copymanga/tools/api/GlideBlurTransformation.kt similarity index 98% rename from app/src/main/java/top/fumiama/copymanga/tools/GlideBlurTransformation.kt rename to app/src/main/java/top/fumiama/copymanga/tools/api/GlideBlurTransformation.kt index 8b325c4..810880c 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/GlideBlurTransformation.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/api/GlideBlurTransformation.kt @@ -1,4 +1,4 @@ -package top.fumiama.copymanga.tools +package top.fumiama.copymanga.tools.api import android.content.Context import android.graphics.Bitmap diff --git a/app/src/main/java/top/fumiama/copymanga/tools/UITools.kt b/app/src/main/java/top/fumiama/copymanga/tools/api/UITools.kt similarity index 99% rename from app/src/main/java/top/fumiama/copymanga/tools/UITools.kt rename to app/src/main/java/top/fumiama/copymanga/tools/api/UITools.kt index 640e7cf..53d5ddb 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/UITools.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/api/UITools.kt @@ -1,4 +1,4 @@ -package top.fumiama.copymanga.tools +package top.fumiama.copymanga.tools.api import android.app.Activity import android.app.AlertDialog diff --git a/app/src/main/java/top/fumiama/copymanga/tools/PropertiesTools.kt b/app/src/main/java/top/fumiama/copymanga/tools/file/PropertiesTools.kt similarity index 97% rename from app/src/main/java/top/fumiama/copymanga/tools/PropertiesTools.kt rename to app/src/main/java/top/fumiama/copymanga/tools/file/PropertiesTools.kt index feb7246..a02d961 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/PropertiesTools.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/file/PropertiesTools.kt @@ -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 diff --git a/app/src/main/java/top/fumiama/copymanga/tools/DownloadTools.kt b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt similarity index 70% rename from app/src/main/java/top/fumiama/copymanga/tools/DownloadTools.kt rename to app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt index db05f84..c4d46de 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/DownloadTools.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt @@ -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() diff --git a/app/src/main/java/top/fumiama/copymanga/tools/MangaDlTools.kt b/app/src/main/java/top/fumiama/copymanga/tools/http/MangaDlTools.kt similarity index 95% rename from app/src/main/java/top/fumiama/copymanga/tools/MangaDlTools.kt rename to app/src/main/java/top/fumiama/copymanga/tools/http/MangaDlTools.kt index c3e6cf3..33177f3 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/MangaDlTools.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/http/MangaDlTools.kt @@ -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 diff --git a/app/src/main/java/top/fumiama/copymanga/tools/ssl/AllTrustManager.java b/app/src/main/java/top/fumiama/copymanga/tools/ssl/AllTrustManager.java new file mode 100644 index 0000000..157e756 --- /dev/null +++ b/app/src/main/java/top/fumiama/copymanga/tools/ssl/AllTrustManager.java @@ -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; + } +} diff --git a/app/src/main/java/top/fumiama/copymanga/tools/ssl/IgnoreHostNameVerifier.java b/app/src/main/java/top/fumiama/copymanga/tools/ssl/IgnoreHostNameVerifier.java new file mode 100644 index 0000000..08c6578 --- /dev/null +++ b/app/src/main/java/top/fumiama/copymanga/tools/ssl/IgnoreHostNameVerifier.java @@ -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; + } +} diff --git a/app/src/main/java/top/fumiama/copymanga/tools/TimeThread.kt b/app/src/main/java/top/fumiama/copymanga/tools/thread/TimeThread.kt similarity index 90% rename from app/src/main/java/top/fumiama/copymanga/tools/TimeThread.kt rename to app/src/main/java/top/fumiama/copymanga/tools/thread/TimeThread.kt index f5c76cc..5d29f1b 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/TimeThread.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/thread/TimeThread.kt @@ -1,4 +1,4 @@ -package top.fumiama.copymanga.tools +package top.fumiama.copymanga.tools.thread import android.os.Handler diff --git a/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt index 266afbb..ce0edd1 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt @@ -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){ diff --git a/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt index 380554d..1e3d085 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt @@ -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, 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, 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, path: String) override fun getGsonItem() = book override fun doWhenFinishDownload() { super.doWhenFinishDownload() + if(exit) return inflateComponents() Thread{ for (i in 1..6) sendEmptyMessage(i) }.start() } diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/finish/FinishFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/finish/FinishFragment.kt index e40c47e..62352ba 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/finish/FinishFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/finish/FinishFragment.kt @@ -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 diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/newest/NewestFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/newest/NewestFragment.kt index ba47786..2e61074 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/newest/NewestFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/newest/NewestFragment.kt @@ -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 diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt new file mode 100644 index 0000000..1ed4c4b --- /dev/null +++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt @@ -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() + } +} \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/recommend/RecFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/recommend/RecFragment.kt index d6f923c..750fdfc 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/recommend/RecFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/recommend/RecFragment.kt @@ -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 diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt index ec1f2bd..ef8424b 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/sort/SortFragment.kt @@ -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 diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/topic/TopicFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/topic/TopicFragment.kt index 615f80c..04ba8ff 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/topic/TopicFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/topic/TopicFragment.kt @@ -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?) { diff --git a/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterFragment.kt index 7a952f8..ec8e03c 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterFragment.kt @@ -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() + } } \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterHandler.kt index f7c9d62..87e0025 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterHandler.kt @@ -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, pw: String, gpw: String):AutoDownloadHandler( +class ChapterHandler(that: WeakReference, 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, 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, pw: String, gpw: Stri } override fun doWhenFinishDownload() { super.doWhenFinishDownload() + if(exit) return Thread{ sendEmptyMessage(1) }.start() } private fun inflateChapters(){ diff --git a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt index 3f40fd4..a0a9c73 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt @@ -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() 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, isFromFile: Boolean = false, groupArray: Array? =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(counts?.get(i)?:1) + val times = (counts?.get(i)?:1) / 100 + val remain = (counts?.get(i)?:1) % 100 + val re = arrayOfNulls(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 } } \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt index d42058f..d4e23f8 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt @@ -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, priva private var tbtnlist: Array = 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 diff --git a/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt index 781e0de..816c387 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt @@ -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 diff --git a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt index 50d814b..17ec674 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt @@ -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() { diff --git a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt index 9155d91..d10766f 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt @@ -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) :AutoDownloadHandler( +class HomeHandler(that: WeakReference) : AutoDownloadHandler( that.get()?.getString(R.string.mainPageApiUrl) ?: "", IndexStructure::class.java, Looper.myLooper()!!, @@ -83,10 +84,12 @@ class HomeHandler(that: WeakReference) :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) :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) :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 { diff --git a/app/src/main/java/top/fumiama/copymanga/ui/latest/LatestFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/latest/LatestFragment.kt deleted file mode 100644 index 78a511a..0000000 --- a/app/src/main/java/top/fumiama/copymanga/ui/latest/LatestFragment.kt +++ /dev/null @@ -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) } -}*/ \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/rank/RankFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/rank/RankFragment.kt deleted file mode 100644 index 5eacb4e..0000000 --- a/app/src/main/java/top/fumiama/copymanga/ui/rank/RankFragment.kt +++ /dev/null @@ -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? = null - get() { - if (field == null) { - context?.assets?.open(getString(R.string.assets_filter))?.let { - field = Gson().fromJson(it.reader(), Array::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) } - } - } -}*/ \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt index b868b03..d986ec0 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt @@ -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) { } \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/sub/SubFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/sub/SubFragment.kt index 1fccdfc..add5393 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/sub/SubFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/sub/SubFragment.kt @@ -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() { diff --git a/app/src/main/java/top/fumiama/copymanga/ui/vm/VMHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/vm/VMHandler.kt index 37d9045..df650cc 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/vm/VMHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/vm/VMHandler.kt @@ -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() } diff --git a/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt b/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt index 6549f49..b6f9086 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt @@ -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() } diff --git a/app/src/main/java/top/fumiama/copymanga/update/SimpleKanban.kt b/app/src/main/java/top/fumiama/copymanga/update/SimpleKanban.kt index 293e0ea..68f0fba 100644 --- a/app/src/main/java/top/fumiama/copymanga/update/SimpleKanban.kt +++ b/app/src/main/java/top/fumiama/copymanga/update/SimpleKanban.kt @@ -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) diff --git a/app/src/main/java/top/fumiama/copymanga/update/Update.kt b/app/src/main/java/top/fumiama/copymanga/update/Update.kt index 375e862..4fa2c17 100644 --- a/app/src/main/java/top/fumiama/copymanga/update/Update.kt +++ b/app/src/main/java/top/fumiama/copymanga/update/Update.kt @@ -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 diff --git a/app/src/main/res/layout/fragment_rank.xml b/app/src/main/res/layout/fragment_rank.xml index 47b79f9..3b8799f 100644 --- a/app/src/main/res/layout/fragment_rank.xml +++ b/app/src/main/res/layout/fragment_rank.xml @@ -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"> + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 8f12628..9937e66 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -10,13 +10,6 @@ android:name="top.fumiama.copymanga.ui.home.HomeFragment" android:label="@string/menu_home" tools:layout="@layout/fragment_home" > - - - - - 获取图书信息失败 网络错误 - https://api.copymanga.com/api/v3/h5/homeIndex + https://api.copymanga.com/api/v3/h5/homeIndex?platform=3 "https://api.copymanga.com" https://nnv3api.dmzj1.com/novel/recentUpdate/%1$d.json - https://nnv3api.dmzj1.com/novel/rank/%1$d/%2$d/%3$d.json - https://api.copymanga.com/api/v3/h5/filterIndex/comic/tags - https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s - https://api.copymanga.com/api/v3/comic2/%1$s - https://api.copymanga.com/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d - https://api.copymanga.com/api/v3/comic/%1$s/chapter2/%2$s + https://api.copymanga.com/api/v3/ranks?limit=21&offset=%1$d&date_type=%2$s&platform=3 + https://api.copymanga.com/api/v3/h5/filterIndex/comic/tags?platform=3 + https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3 + https://api.copymanga.com/api/v3/comic2/%1$s?platform=3 + https://api.copymanga.com/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d&platform=3 + https://api.copymanga.com/api/v3/comic/%1$s/chapter2/%2$s?platform=3 https://nnv3api.dmzj1.com/novel/download/%1$d_%2$d_%3$d.txt - https://api.copymanga.com/api/v3/topic/%1$s - https://api.copymanga.com/api/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$d - https://api.copymanga.com/api/v3/recs?pos=3200102&limit=21&offset=%1$d - https://api.copymanga.com/api/v3/update/newest?limit=21&offset=%1$d - https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&top=finish + https://api.copymanga.com/api/v3/topic/%1$s?platform=3 + https://api.copymanga.com/api/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$d&platform=3 + https://api.copymanga.com/api/v3/recs?pos=3200102&limit=21&offset=%1$d&platform=3 + https://api.copymanga.com/api/v3/update/newest?limit=21&offset=%1$d&platform=3 + https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&top=finish&platform=3 已完结 @@ -70,4 +70,9 @@ 排行榜 ☟日周月 ☛冠亚季 热门更新 全新上架 + + 上升最快 + 近七天 + 近三十天 + 总榜单 \ No newline at end of file