diff --git a/app/build.gradle b/app/build.gradle
index b9ea9be..4fb6225 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,8 +11,8 @@ android {
applicationId "top.fumiama.copymanga"
minSdkVersion 23
targetSdkVersion 30
- versionCode 3
- versionName '1.1.1'
+ versionCode 4
+ versionName '1.1.2'
resConfigs "zh", "zh-rCN"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -36,11 +36,11 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
- debug{
+ /*debug{
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- }
+ }*/
}
}
@@ -49,7 +49,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.2'
//implementation 'androidx.appcompat:appcompat:1.2.0'
- implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.viewpager2:viewpager2:1.0.0'
//implementation 'com.google.android.material:material:1.2.1'
@@ -59,6 +59,7 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
implementation 'com.google.code.gson:gson:2.8.6'
+ //implementation 'com.liaoinstan.springview:library:1.7.0'
}
andResGuard {
@@ -93,7 +94,7 @@ andResGuard {
"*.gif",
]
sevenzip {
- artifact = 'com.tencent.mm:SevenZip:1.2.19'
+ artifact = 'com.tencent.mm:SevenZip:1.2.20'
//path = "/usr/local/bin/7za"
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 93dc311..2d18a56 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -18,5 +18,6 @@
+
\ No newline at end of file
diff --git a/app/src/main/assets/i.js b/app/src/main/assets/i.js
index 8d2be1a..77ab9ef 100644
--- a/app/src/main/assets/i.js
+++ b/app/src/main/assets/i.js
@@ -38,6 +38,7 @@ if (typeof (loaded) == "undefined") {
if (url.endsWith("/index")) invoke.pinTitle();
else if (url.indexOf("/comicContent/") > 0) setTimeout(function () { invoke.loadChapter() }, 1000);
else if (url.indexOf("/details/comic/") > 0) GM.loadComic(url);
+ else if (url.indexOf("/personal") > 0) GM.enterProfile();
}
modify();
invoke.urlChangeListener(modify);
diff --git a/app/src/main/java/top/fumiama/copymanga/activity/DlActivity.kt b/app/src/main/java/top/fumiama/copymanga/activity/DlActivity.kt
index 739b17f..df5b71f 100644
--- a/app/src/main/java/top/fumiama/copymanga/activity/DlActivity.kt
+++ b/app/src/main/java/top/fumiama/copymanga/activity/DlActivity.kt
@@ -42,7 +42,7 @@ class DlActivity : Activity() {
var tbtnUrlList = arrayListOf()
private val handler = DlHandler(this)
private var btnw = 0
- private var cdwnHeight = 0
+ private var cdwnWidth = 0
private var canDl = false
private lateinit var toolsBox: ToolsBox
lateinit var mangaDlTools: MangaDlTools
@@ -64,16 +64,14 @@ class DlActivity : Activity() {
super.onDestroy()
}
- private fun showDlCard() {
+ private fun showDlCard(){
//ObjectAnimator.ofFloat(csdwn, "alpha", 0.3f, 0.9f).setDuration(233).start()
- ObjectAnimator.ofFloat(csdwn, "translationY", cdwnHeight.toFloat(), 0f).setDuration(233)
- .start()
+ ObjectAnimator.ofFloat(csdwn, "translationX", cdwnWidth.toFloat() * 0.9f, 0f).setDuration(233).start()
}
- private fun hideDlCard() {
+ private fun hideDlCard(){
//ObjectAnimator.ofFloat(csdwn, "alpha", 0.9f, 0.3f).setDuration(233).start()
- ObjectAnimator.ofFloat(csdwn, "translationY", 0f, cdwnHeight.toFloat()).setDuration(233)
- .start()
+ ObjectAnimator.ofFloat(csdwn, "translationX", 0f, cdwnWidth.toFloat() * 0.9f).setDuration(233).start()
}
private fun fillChapters() {
@@ -87,7 +85,11 @@ class DlActivity : Activity() {
sleep(2333)
for (i in tbtnlist.listIterator()) {
if (i.isChecked) dlMethod(i)
- if (!canDl) break
+ if (!canDl) {
+ checkedChapter -= dldChapter
+ dldChapter = 0
+ break
+ }
}
if (canDl) {
haveDlStarted = false
@@ -107,34 +109,33 @@ class DlActivity : Activity() {
csdwn.viewTreeObserver.addOnGlobalLayoutListener(object :
ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
- cdwnHeight = csdwn.height
- Log.d("MyDl", "Get csdwn height: $cdwnHeight")
+ cdwnWidth = csdwn.width
csdwn.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
dllazys.onScrollListener = object : LazyScrollView.OnScrollListener {
- override fun onBottom() {
- if (csdwn.translationY > 0f) showDlCard()
- }
+ override fun onBottom() {}
override fun onScroll() {
if (csdwn.translationY == 0f) hideDlCard()
}
- override fun onTop() {
- if (csdwn.translationY > 0f) showDlCard()
- }
+ override fun onTop() {}
}
cdwn.setOnClickListener {
- pdwn.progress = 0
- if (canDl || checkedChapter == 0) canDl = false
+ if (csdwn.translationX != 0f) showDlCard()
+ else if (checkedChapter == 0) hideDlCard()
else {
- haveDlStarted = true
- canDl = true
- handler.sendEmptyMessage(9)
- Toast.makeText(this, "准备下载...", Toast.LENGTH_SHORT).show()
- fillChapters()
- Thread { dlThead { downloadChapterPages(it) } }.start()
+ pdwn.progress = 0
+ if (canDl || checkedChapter == 0) canDl = false
+ else {
+ haveDlStarted = true
+ canDl = true
+ handler.sendEmptyMessage(9)
+ Toast.makeText(this, "准备下载...", Toast.LENGTH_SHORT).show()
+ fillChapters()
+ Thread { dlThead { downloadChapterPages(it) } }.start()
+ }
}
}
cdwn.setOnLongClickListener {
@@ -177,7 +178,6 @@ class DlActivity : Activity() {
handler.obtainMessage(if (succeed) 1 else -1, tbtnlist.indexOf(i), 0)
.sendToTarget()
}
-
override fun handleMessage(succeed: Boolean, pageNow: Int) {
handler.obtainMessage(
5,
@@ -186,6 +186,13 @@ class DlActivity : Activity() {
succeed
).sendToTarget()
}
+ override fun handleMessage(pageNow: Int){
+ handler.obtainMessage(
+ 10,
+ tbtnlist.indexOf(i),
+ pageNow
+ ).sendToTarget()
+ }
}
mangaDlTools.dlChapterAndPackIntoZip(
File("${getExternalFilesDir("")}/$comicName/${i.hint}/${i.textOn}.zip"),
@@ -231,13 +238,12 @@ class DlActivity : Activity() {
null,
"取消",
{
+ if (checkedChapter == 0) {
+ it.tbtn.isChecked = true
+ tdwn.text = "$dldChapter/${++checkedChapter}"
+ }
Thread {
- handler.obtainMessage(
- 7,
- tbtnlist.indexOf(it.tbtn),
- 0,
- zipf
- ).sendToTarget()
+ handler.sendEmptyMessage(7)
}.start()
})
}
@@ -245,11 +251,10 @@ class DlActivity : Activity() {
}
}
- fun deleteChapters(zipf: File, index: Int) {
+ fun deleteChapters() {
for (i in tbtnlist) {
if (i.isChecked) {
- val f =
- File("${getExternalFilesDir("")}/$comicName/${i.hint}/${i.textOn}.zip")
+ val f = File("${getExternalFilesDir("")}/$comicName/${i.hint}/${i.textOn}.zip")
if (f.exists()) {
deleteChapter(f, i)
checkedChapter--
diff --git a/app/src/main/java/top/fumiama/copymanga/activity/DlListActivity.kt b/app/src/main/java/top/fumiama/copymanga/activity/DlListActivity.kt
new file mode 100644
index 0000000..b6e30e1
--- /dev/null
+++ b/app/src/main/java/top/fumiama/copymanga/activity/DlListActivity.kt
@@ -0,0 +1,41 @@
+package top.fumiama.copymanga.activity
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import android.widget.ArrayAdapter
+import kotlinx.android.synthetic.main.activity_dlist.*
+import kotlinx.android.synthetic.main.widget_titlebar.*
+import top.fumiama.copymanga.R
+import java.io.File
+
+class DlListActivity:Activity() {
+ private var exDir: File? = null
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_dlist)
+ val titleText = intent.getStringExtra("title")
+ ttitle.text = titleText?.substringAfterLast("/")
+ exDir = getExternalFilesDir("")
+ val innerDir = titleText?.substringAfter("我的下载")
+ File(exDir, innerDir?:"").list()?.let {
+ mylv.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, it)
+ mylv.setOnItemClickListener { _, _, position, _ ->
+ val chosenFile = File(exDir, "$innerDir/${it[position]}")
+ val newTitle = "$titleText/${it[position]}"
+ //Toast.makeText(this, "进入$chosenFile", Toast.LENGTH_SHORT).show()
+ if (chosenFile.isDirectory) startActivity(
+ Intent(
+ this,
+ DlListActivity::class.java
+ ).putExtra("title", newTitle)
+ )
+ else{
+ ViewMangaActivity.zipFile = chosenFile
+ ViewMangaActivity.titleText = it[position]
+ startActivity(Intent(this, ViewMangaActivity::class.java))
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/top/fumiama/copymanga/activity/MainActivity.kt b/app/src/main/java/top/fumiama/copymanga/activity/MainActivity.kt
index 9717d98..22f5aff 100644
--- a/app/src/main/java/top/fumiama/copymanga/activity/MainActivity.kt
+++ b/app/src/main/java/top/fumiama/copymanga/activity/MainActivity.kt
@@ -10,6 +10,7 @@ import android.webkit.WebView
import kotlinx.android.synthetic.main.activity_main.*
import top.fumiama.copymanga.R
import top.fumiama.copymanga.handler.MainHandler
+import top.fumiama.copymanga.tool.ToolsBox
import top.fumiama.copymanga.view.JSWebView
import top.fumiama.copymanga.web.JS
import top.fumiama.copymanga.web.JSHidden
@@ -18,23 +19,30 @@ import java.lang.ref.WeakReference
class MainActivity: Activity() {
var wh: JSWebView? = null
+ var toolsBox: ToolsBox? = null
@SuppressLint("JavascriptInterface")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
wm = WeakReference(this)
- mh = Looper.myLooper()?.let { MainHandler(it) }
+ mh = MainHandler(Looper.getMainLooper())
+ toolsBox = ToolsBox(wm as WeakReference)
+ toolsBox?.netinfo?.let {
+ if(it == "无网络" || it == "错误"){
+ Thread{mh?.sendEmptyMessage(6)}.start()
+ }else{
+ WebView.setWebContentsDebuggingEnabled(true)
+ w.setWebViewClient("i.js")
+ w.webChromeClient = WebChromeClient()
+ w.loadJSInterface(JS())
+ w.loadUrl(getString(R.string.web_home))
- WebView.setWebContentsDebuggingEnabled(true)
- w.setWebViewClient("i.js")
- w.webChromeClient = WebChromeClient()
- w.loadJSInterface(JS())
- w.loadUrl(getString(R.string.web_home))
-
- wh = JSWebView(this, getString(R.string.pc_ua))
- wh?.setWebViewClient("h.js")
- wh?.loadJSInterface(JSHidden())
+ wh = JSWebView(this, getString(R.string.pc_ua))
+ wh?.setWebViewClient("h.js")
+ wh?.loadJSInterface(JSHidden())
+ }
+ }
}
override fun onBackPressed() {
@@ -43,7 +51,10 @@ class MainActivity: Activity() {
}
fun onFabClicked(v: View){
- startActivity(Intent(this, DlActivity::class.java))
+ startActivity(
+ Intent(this, (if(mh?.showDlList == true) DlListActivity::class else DlActivity::class).java)
+ .putExtra("title", "./我的下载")
+ )
}
companion object{
diff --git a/app/src/main/java/top/fumiama/copymanga/activity/ViewMangaActivity.kt b/app/src/main/java/top/fumiama/copymanga/activity/ViewMangaActivity.kt
index 3f852f1..3c5b6d7 100644
--- a/app/src/main/java/top/fumiama/copymanga/activity/ViewMangaActivity.kt
+++ b/app/src/main/java/top/fumiama/copymanga/activity/ViewMangaActivity.kt
@@ -3,9 +3,12 @@ package top.fumiama.copymanga.activity
import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.app.Activity
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
import android.os.Bundle
import android.os.Handler
import android.os.Message
+import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -31,6 +34,8 @@ import java.io.File
import java.lang.ref.WeakReference
import java.text.SimpleDateFormat
import java.util.*
+import java.util.zip.ZipFile
+import java.util.zip.ZipInputStream
class ViewMangaActivity : Activity() {
@@ -47,6 +52,8 @@ class ViewMangaActivity : Activity() {
var infoDrawerDelta = 0f
lateinit var toolsBox: ToolsBox
private lateinit var p: PropertiesTools
+ private var mangaZip = zipFile
+ private val dlZip2View = mangaZip != null
var pageNum = 1
get() {
field = getPageNumber()
@@ -85,14 +92,15 @@ class ViewMangaActivity : Activity() {
tt.canDo = true
tt.start()
ttitle.text = titleText
+ isearch.visibility = View.VISIBLE
try {
- count = imgUrls.size
+ count = if (mangaZip != null) countZipItems() else imgUrls.size
} catch (e: Exception) {
e.printStackTrace()
toolsBox.toastError("分析图片url错误")
}
try {
- prepareItems(count)
+ prepareItems()
} catch (e: Exception) {
e.printStackTrace()
toolsBox.toastError("准备控件错误")
@@ -115,10 +123,28 @@ class ViewMangaActivity : Activity() {
else if (notUseVP) currentItem = num - 1 else vp.currentItem = num - 1
}
+ private fun getImgBitmap(position: Int): Bitmap? {
+ if (position >= count || position < 0) return null
+ else {
+ val zip = ZipFile(mangaZip)
+ //if (q == 100)
+ return BitmapFactory.decodeStream(zip.getInputStream(zip.getEntry("${position}.webp")))
+ /*else {
+ val out = ByteArrayOutputStream()
+ try {
+ BitmapFactory.decodeStream(zip.getInputStream(zip.getEntry("${position}.jpg")))
+ } catch (e: Exception) {
+ e.printStackTrace()
+ return null
+ }?.compress(Bitmap.CompressFormat.JPEG, q, out)
+ return BitmapFactory.decodeStream(ByteArrayInputStream(out.toByteArray()))
+ }*/
+ }
+ }
+
private fun loadOneImg() {
- Glide.with(this@ViewMangaActivity).load(
- imgUrls[currentItem]
- ).placeholder(R.drawable.bg_comment).into(onei)
+ if(dlZip2View) onei.setImageBitmap(getImgBitmap(currentItem))
+ else Glide.with(this@ViewMangaActivity).load(imgUrls[currentItem]).placeholder(R.drawable.bg_comment).into(onei)
updateSeekBar()
}
@@ -128,9 +154,9 @@ class ViewMangaActivity : Activity() {
}
@SuppressLint("SetTextI18n")
- private fun prepareItems(size: Int) {
+ private fun prepareItems() {
prepareVP()
- prepareInfoBar(size)
+ prepareInfoBar(count)
if (notUseVP) loadOneImg() else prepareIdBtVH()
toolsBox.dp2px(67)?.let { setIdPosition(it) }
prepareIdBtFullScreen()
@@ -233,6 +259,28 @@ class ViewMangaActivity : Activity() {
}
}
+ private fun countZipItems(): Int {
+ var c = 0
+ try {
+ val exist = mangaZip?.exists() == true
+ if (!exist) return 0
+ else {
+ Log.d("Myvm", "zipf: $mangaZip")
+ val zip = ZipInputStream(mangaZip?.inputStream()?.buffered())
+ var entry = zip.nextEntry
+ while (entry != null) {
+ if (!entry.isDirectory) c++
+ entry = zip.nextEntry
+ }
+ zip.closeEntry()
+ zip.close()
+ }
+ } catch (e: Exception) {
+ toolsBox.toastError("读取zip错误!")
+ }
+ return c
+ }
+
fun scrollBack() {
pageNum--
}
@@ -278,7 +326,11 @@ class ViewMangaActivity : Activity() {
@SuppressLint("ClickableViewAccessibility", "SetTextI18n")
override fun onBindViewHolder(holder: ViewData, position: Int) {
val pos = if (r2l) count - position - 1 else position
- Glide.with(this@ViewMangaActivity).load(imgUrls[pos]).placeholder(R.drawable.bg_comment).into(holder.itemView.onei)
+ if(dlZip2View) getImgBitmap(pos)?.let {
+ //Glide.with(this@ViewMangaActivity).load(it).placeholder(R.drawable.bg_comment).into(holder.itemView.onei)
+ holder.itemView.onei.setImageBitmap(it)
+ }
+ else Glide.with(this@ViewMangaActivity).load(imgUrls[pos]).placeholder(R.drawable.bg_comment).timeout(10000).into(holder.itemView.onei)
}
override fun getItemCount(): Int {
@@ -359,8 +411,24 @@ class ViewMangaActivity : Activity() {
companion object {
var va: WeakReference? = null
var imgUrls = arrayOf()
+ var zipFile: File? = null
+ get() {
+ val re = field
+ if(field != null) field = null
+ return re
+ }
var titleText = "Null"
var nextChapterUrl: String? = null
+ get() {
+ val re = field
+ if(field != null) field = null
+ return re
+ }
var previousChapterUrl: String? = null
+ get() {
+ val re = field
+ if(field != null) field = null
+ return re
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/top/fumiama/copymanga/handler/DlHandler.kt b/app/src/main/java/top/fumiama/copymanga/handler/DlHandler.kt
index b4a8d4a..075be2b 100644
--- a/app/src/main/java/top/fumiama/copymanga/handler/DlHandler.kt
+++ b/app/src/main/java/top/fumiama/copymanga/handler/DlHandler.kt
@@ -2,6 +2,7 @@ package top.fumiama.copymanga.handler
import android.annotation.SuppressLint
import android.os.Handler
+import android.os.Looper
import android.os.Message
import android.widget.Toast
import kotlinx.android.synthetic.main.widget_downloadbar.*
@@ -38,11 +39,13 @@ class DlHandler(activity: DlActivity) : Handler() {
-1 -> {
d?.tbtnlist?.get(msg.arg1)?.setBackgroundResource(R.drawable.rndbg_error)
d!!.dldChapter--
+ //Looper.prepare()
Toast.makeText(
d,
"下载${d.tbtnlist[msg.arg1].textOn}失败",
Toast.LENGTH_SHORT
).show()
+ //Looper.loop()
d.updateProgressBar()
}
4 -> {
@@ -74,17 +77,28 @@ class DlHandler(activity: DlActivity) : Handler() {
?.getImgsCountByHash(d.tbtnUrlList[msg.arg1].substringAfterLast("/")) ?: 0
)
if (!(msg.obj as Boolean)) {
+ //Looper.prepare()
Toast.makeText(
d,
"下载${d?.tbtnlist?.get(msg.arg1)?.textOn}的第${msg.arg2}页失败",
Toast.LENGTH_SHORT
).show()
+ //Looper.loop()
}
}
6 -> d?.tdwn?.text = "${d?.dldChapter}/${d?.checkedChapter}"
- 7 -> d?.deleteChapters(msg.obj as File, msg.arg1)
+ 7 -> d?.deleteChapters()
8 -> d?.cdwn?.setCardBackgroundColor(d.resources.getColor(R.color.colorBlue))
9 -> d?.cdwn?.setCardBackgroundColor(d.resources.getColor(R.color.colorRed))
+ 10 -> {
+ //Looper.prepare()
+ Toast.makeText(
+ d,
+ "下载${d?.tbtnlist?.get(msg.arg1)?.textOn}的第${msg.arg2}页失败,尝试重新下载...",
+ Toast.LENGTH_SHORT
+ ).show()
+ //Looper.loop()
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/top/fumiama/copymanga/handler/MainHandler.kt b/app/src/main/java/top/fumiama/copymanga/handler/MainHandler.kt
index 12fe290..a9d3238 100644
--- a/app/src/main/java/top/fumiama/copymanga/handler/MainHandler.kt
+++ b/app/src/main/java/top/fumiama/copymanga/handler/MainHandler.kt
@@ -19,6 +19,7 @@ import top.fumiama.copymanga.tool.MangaDlTools.Companion.wmdlt
class MainHandler(looper: Looper):Handler(looper) {
var saveUrlsOnly = false
+ var showDlList = false
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
when(msg.what){
@@ -27,6 +28,7 @@ class MainHandler(looper: Looper):Handler(looper) {
3 -> updateLoadProgress(msg.arg1)
4 -> setFab(msg.obj as String)
5 -> hideFab()
+ 6 -> setFab2DlList()
}
}
private fun loadUrlInHiddenWebView(url: String){wm?.get()?.wh?.loadUrl(url)}
@@ -55,10 +57,16 @@ class MainHandler(looper: Looper):Handler(looper) {
if(progress == 100) it.pw.postDelayed({it.pw.visibility = View.GONE}, 500)
}
}
+ private fun showFab() {wm?.get()?.fab?.visibility = View.VISIBLE}
+ private fun hideFab() {wm?.get()?.fab?.visibility = View.GONE}
private fun setFab(content: String){
//Log.d("MyMH", "Get chapter json: $content")
+ showDlList = false
comicStructure = Gson().fromJson(content.reader(), Array::class.java)
- wm?.get()?.fab?.visibility = View.VISIBLE
+ showFab()
+ }
+ private fun setFab2DlList(){
+ showDlList = true
+ showFab()
}
- private fun hideFab() {wm?.get()?.fab?.visibility = View.GONE}
}
\ No newline at end of file
diff --git a/app/src/main/java/top/fumiama/copymanga/tool/DownloadTools.kt b/app/src/main/java/top/fumiama/copymanga/tool/DownloadTools.kt
index 611646c..5d4d3a2 100644
--- a/app/src/main/java/top/fumiama/copymanga/tool/DownloadTools.kt
+++ b/app/src/main/java/top/fumiama/copymanga/tool/DownloadTools.kt
@@ -1,14 +1,13 @@
package top.fumiama.copymanga.tool
import android.util.Log
-import java.io.File
import java.net.HttpURLConnection
import java.net.URL
import java.util.concurrent.Callable
import java.util.concurrent.FutureTask
class DownloadTools {
- fun getHttpContent(Url: String, refer: String? = null): ByteArray? {
+ fun getHttpContent(Url: String, refer: String? = null, ua: String? = null): ByteArray? {
Log.d("Mydl", "getHttp: $Url")
var ret: ByteArray? = null
val task = FutureTask(Callable {
@@ -18,6 +17,7 @@ class DownloadTools {
connection.connectTimeout = 10000
connection.readTimeout = 10000
refer?.let { connection.setRequestProperty("referer", it) }
+ ua?.let { connection.setRequestProperty("User-agent", it) }
ret = connection.inputStream.readBytes()
connection.disconnect()
diff --git a/app/src/main/java/top/fumiama/copymanga/tool/MangaDlTools.kt b/app/src/main/java/top/fumiama/copymanga/tool/MangaDlTools.kt
index 217b642..07f6d57 100644
--- a/app/src/main/java/top/fumiama/copymanga/tool/MangaDlTools.kt
+++ b/app/src/main/java/top/fumiama/copymanga/tool/MangaDlTools.kt
@@ -1,11 +1,14 @@
package top.fumiama.copymanga.tool
+import android.os.Looper
+import android.widget.Toast
import top.fumiama.copymanga.R
import top.fumiama.copymanga.activity.DlActivity
import top.fumiama.copymanga.data.ComicStructure
import top.fumiama.copymanga.view.JSWebView
import top.fumiama.copymanga.web.JSHidden
import java.io.File
+import java.lang.Thread.sleep
import java.lang.ref.WeakReference
import java.util.zip.CRC32
import java.util.zip.CheckedOutputStream
@@ -60,8 +63,16 @@ class MangaDlTools(activity: DlActivity) {
var succeed = true
for (i in it.indices) {
zip.putNextEntry(ZipEntry("$i.webp"))
- val s = dl.getHttpContent(it[i])?.let { zip.write(it); true } ?: false
- if (!s) succeed = s
+ var tryTimes = 3
+ var s = false
+ while (!s && tryTimes-- > 0){
+ s = dl.getHttpContent(it[i], d?.getString(R.string.web_home_www), d?.getString(R.string.pc_ua))?.let { zip.write(it); true } ?: false
+ if (!s) {
+ onDownloadedListener?.handleMessage(i + 1)
+ sleep(2000)
+ }
+ }
+ if(tryTimes == 0) succeed = false
onDownloadedListener?.handleMessage(s, i + 1)
zip.flush()
if (exit) break
@@ -76,6 +87,7 @@ class MangaDlTools(activity: DlActivity) {
interface OnDownloadedListener {
fun handleMessage(succeed: Boolean)
fun handleMessage(succeed: Boolean, pageNow: Int)
+ fun handleMessage(pageNow: Int)
}
companion object {
diff --git a/app/src/main/java/top/fumiama/copymanga/web/JS.kt b/app/src/main/java/top/fumiama/copymanga/web/JS.kt
index fafbb2a..e43508f 100644
--- a/app/src/main/java/top/fumiama/copymanga/web/JS.kt
+++ b/app/src/main/java/top/fumiama/copymanga/web/JS.kt
@@ -22,4 +22,8 @@ class JS {
fun hideFab(){
Thread{mh?.sendEmptyMessage(5)}.start()
}
+ @JavascriptInterface
+ fun enterProfile(){
+ Thread{mh?.sendEmptyMessage(6)}.start()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_dlist.xml b/app/src/main/res/layout/activity_dlist.xml
new file mode 100644
index 0000000..95b2348
--- /dev/null
+++ b/app/src/main/res/layout/activity_dlist.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 1ece29f..d8ee88f 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,6 +1,7 @@
@@ -23,13 +24,16 @@
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginEnd="24dp"
- android:layout_marginBottom="24dp"
+ android:alpha="0.8"
android:background="@drawable/rndbg_round"
android:foreground="@drawable/ic_dl"
android:foregroundGravity="center"
android:onClick="onFabClicked"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="@+id/w" />
+ app:layout_constraintEnd_toEndOf="@+id/w"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.275"
+ tools:visibility="visible" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/widget_titlebar.xml b/app/src/main/res/layout/widget_titlebar.xml
index 15e34b6..7a93bc6 100644
--- a/app/src/main/res/layout/widget_titlebar.xml
+++ b/app/src/main/res/layout/widget_titlebar.xml
@@ -37,6 +37,7 @@
android:layout_height="28dp"
android:layout_marginEnd="8dp"
android:src="@drawable/ic_edit"
+ android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
diff --git a/build.gradle b/build.gradle
index b4bf01a..c9fcacf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,14 +1,14 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = "1.4.10"
+ ext.kotlin_version = '1.4.21'
repositories {
google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.1.0'
+ classpath 'com.android.tools.build:gradle:4.1.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.19'
+ classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.20'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files