From ac1ca712998f4fe03f8880d9dd5ab6a606d79898 Mon Sep 17 00:00:00 2001 From: Pupil Date: Sun, 16 Feb 2020 19:59:51 +0900 Subject: [PATCH] Proxy implemented --- app/build.gradle | 2 +- app/release/output.json | 2 +- app/src/main/java/xyz/quaver/pupil/Pupil.kt | 4 ++++ .../xyz/quaver/pupil/adapters/ReaderAdapter.kt | 9 --------- .../java/xyz/quaver/pupil/ui/ReaderActivity.kt | 15 ++++++++++++++- .../xyz/quaver/pupil/ui/dialog/ProxyDialog.kt | 12 +++++++++--- .../java/xyz/quaver/pupil/util/download/Cache.kt | 6 ++++-- .../quaver/pupil/util/download/DownloadWorker.kt | 7 +++++-- libpupil/src/main/java/xyz/quaver/Utils.kt | 4 ++++ .../src/main/java/xyz/quaver/hitomi/common.kt | 5 ++++- .../src/main/java/xyz/quaver/hitomi/galleries.kt | 3 ++- .../main/java/xyz/quaver/hitomi/galleryblock.kt | 3 ++- .../src/main/java/xyz/quaver/hitomi/reader.kt | 3 ++- .../src/main/java/xyz/quaver/hitomi/search.kt | 14 ++++++++++---- .../main/java/xyz/quaver/hiyobi/galleryblock.kt | 3 ++- .../src/main/java/xyz/quaver/hiyobi/reader.kt | 7 ++++--- 16 files changed, 68 insertions(+), 31 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d97d70da..f8499712 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,7 +20,7 @@ android { minSdkVersion 16 targetSdkVersion 29 versionCode 42 - versionName "4.6-beta4" + versionName "4.6-alpha4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true vectorDrawables.useSupportLibrary = true diff --git a/app/release/output.json b/app/release/output.json index 7f8176d4..c6369ae1 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":42,"versionName":"4.6-beta4","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":42,"versionName":"4.6-alpha4","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] \ No newline at end of file diff --git a/app/src/main/java/xyz/quaver/pupil/Pupil.kt b/app/src/main/java/xyz/quaver/pupil/Pupil.kt index 3d88be27..ff48c13e 100644 --- a/app/src/main/java/xyz/quaver/pupil/Pupil.kt +++ b/app/src/main/java/xyz/quaver/pupil/Pupil.kt @@ -31,7 +31,9 @@ import com.google.android.gms.common.GooglePlayServicesNotAvailableException import com.google.android.gms.common.GooglePlayServicesRepairableException import com.google.android.gms.security.ProviderInstaller import com.google.firebase.analytics.FirebaseAnalytics +import xyz.quaver.proxy import xyz.quaver.pupil.util.Histories +import xyz.quaver.pupil.util.getProxy import java.io.File class Pupil : MultiDexApplication() { @@ -46,6 +48,8 @@ class Pupil : MultiDexApplication() { override fun onCreate() { val preference = PreferenceManager.getDefaultSharedPreferences(this) + proxy = getProxy(this) + try { preference.getString("dl_location", null) } catch (e: Exception) { diff --git a/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt b/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt index 907950bb..7eda96d9 100644 --- a/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt +++ b/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt @@ -83,15 +83,6 @@ class ReaderAdapter(private val context: Context, var onItemClickListener : ((Int) -> (Unit))? = null - init { - CoroutineScope(Dispatchers.IO).launch { - reader = Cache(context).getReader(galleryID) - launch(Dispatchers.Main) { - notifyDataSetChanged() - } - } - } - class ViewHolder(val view: View) : RecyclerView.ViewHolder(view) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { diff --git a/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt index bde9a89e..7fdb1cd4 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt @@ -22,6 +22,7 @@ import android.content.Intent import android.graphics.drawable.Animatable import android.graphics.drawable.Drawable import android.os.Bundle +import android.util.Log import android.view.* import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity @@ -238,9 +239,11 @@ class ReaderActivity : AppCompatActivity() { } timer.schedule(1000, 1000) { + Log.i("PUPILD", "TIMER") if (worker.progress.indexOfKey(galleryID) < 0) //loading return@schedule + Log.i("PUPILD", "LOADEND") if (worker.progress[galleryID] == null) { //Gallery not found timer.cancel() Snackbar @@ -248,15 +251,25 @@ class ReaderActivity : AppCompatActivity() { .show() } + Log.i("PUPILD", "GALLERY") runOnUiThread { + Log.i("PUPILD", "UI") reader_download_progressbar.max = reader_recyclerview.adapter?.itemCount ?: 0 reader_download_progressbar.progress = worker.progress[galleryID]?.count { !it.isFinite() } ?: 0 reader_progressbar.max = reader_recyclerview.adapter?.itemCount ?: 0 + Log.i("PUPILD", "COUNTEND") if (title == getString(R.string.reader_loading)) { - val reader = (reader_recyclerview.adapter as ReaderAdapter).reader + Log.i("PUPILD", "LOADING") + val reader = Cache(this@ReaderActivity).getReaderOrNull(galleryID) + Log.i("PUPILD", "READER") if (reader != null) { + Log.i("PUPILD", "NOTNULL") + with (reader_recyclerview?.adapter as ReaderAdapter) { + this.reader = reader + notifyDataSetChanged() + } title = reader.title menu?.findItem(R.id.reader_menu_page_indicator)?.title = "$currentPage/${reader.galleryInfo.size}" diff --git a/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt b/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt index 645d6929..68eb1e0a 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt @@ -29,6 +29,7 @@ import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.preference.PreferenceManager import kotlinx.android.synthetic.main.dialog_proxy.view.* +import xyz.quaver.proxy import xyz.quaver.pupil.R import xyz.quaver.pupil.util.ProxyInfo import xyz.quaver.pupil.util.getProxyInfo @@ -114,9 +115,14 @@ class ProxyDialog(context: Context) : Dialog(context) { return@setOnClickListener } - PreferenceManager.getDefaultSharedPreferences(context).edit().putString("proxy", - json.stringify(ProxyInfo.serializer(), ProxyInfo(type, addr, port, username, password)) - ).apply() + ProxyInfo(type, addr, port, username, password).let { + + PreferenceManager.getDefaultSharedPreferences(context).edit().putString("proxy", + json.stringify(ProxyInfo.serializer(), it) + ).apply() + + proxy = it.proxy() + } dismiss() } diff --git a/app/src/main/java/xyz/quaver/pupil/util/download/Cache.kt b/app/src/main/java/xyz/quaver/pupil/util/download/Cache.kt index 46c94eeb..98d2e09c 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/download/Cache.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/download/Cache.kt @@ -155,9 +155,11 @@ class Cache(context: Context) : ContextWrapper(context) { var retval: Reader? = null for (source in sources) { - retval = kotlin.runCatching { + retval = try { source.value.invoke() - }.getOrNull() + } catch (e: Exception) { + null + } if (retval != null) break diff --git a/app/src/main/java/xyz/quaver/pupil/util/download/DownloadWorker.kt b/app/src/main/java/xyz/quaver/pupil/util/download/DownloadWorker.kt index 7ef2c97b..18638bc5 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/download/DownloadWorker.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/download/DownloadWorker.kt @@ -23,6 +23,7 @@ import android.content.Context import android.content.ContextWrapper import android.content.Intent import android.content.SharedPreferences +import android.util.Log import android.util.SparseArray import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat @@ -40,9 +41,9 @@ import xyz.quaver.hitomi.urlFromUrlFromHash import xyz.quaver.hiyobi.cookie import xyz.quaver.hiyobi.createImgList import xyz.quaver.hiyobi.user_agent +import xyz.quaver.proxy import xyz.quaver.pupil.R import xyz.quaver.pupil.ui.ReaderActivity -import xyz.quaver.pupil.util.getProxy import java.io.IOException import java.util.concurrent.Executors import java.util.concurrent.LinkedBlockingQueue @@ -160,7 +161,7 @@ class DownloadWorker private constructor(context: Context) : ContextWrapper(cont OkHttpClient.Builder() .addInterceptor(interceptor) .dispatcher(Dispatcher(Executors.newFixedThreadPool(4))) - .proxy(getProxy(this)) + .proxy(proxy) .build() fun stop() { @@ -263,6 +264,8 @@ class DownloadWorker private constructor(context: Context) : ContextWrapper(cont }.toMutableList()) exception.put(galleryID, reader.galleryInfo.map { null }.toMutableList()) + Log.i("PUPILD", "READER HERE!") + if (notification[galleryID] == null) initNotification(galleryID) diff --git a/libpupil/src/main/java/xyz/quaver/Utils.kt b/libpupil/src/main/java/xyz/quaver/Utils.kt index 777a1821..40e8b1b5 100644 --- a/libpupil/src/main/java/xyz/quaver/Utils.kt +++ b/libpupil/src/main/java/xyz/quaver/Utils.kt @@ -16,6 +16,10 @@ package xyz.quaver +import java.net.Proxy + +var proxy = Proxy.NO_PROXY + fun availableInHiyobi(galleryID: Int) : Boolean { return try { xyz.quaver.hiyobi.getReader(galleryID) diff --git a/libpupil/src/main/java/xyz/quaver/hitomi/common.kt b/libpupil/src/main/java/xyz/quaver/hitomi/common.kt index 7901fbef..8fe1f020 100644 --- a/libpupil/src/main/java/xyz/quaver/hitomi/common.kt +++ b/libpupil/src/main/java/xyz/quaver/hitomi/common.kt @@ -18,6 +18,7 @@ package xyz.quaver.hitomi import kotlinx.serialization.json.Json import kotlinx.serialization.list +import xyz.quaver.proxy import java.net.URL const val protocol = "https:" @@ -27,7 +28,9 @@ fun getGalleryInfo(galleryID: Int) = Json.nonstrict.parse( GalleryInfo.serializer().list, Regex("""\[.+]""").find( - URL("$protocol//$domain/galleries/$galleryID.js").readText() + URL("$protocol//$domain/galleries/$galleryID.js").openConnection(proxy).getInputStream().use { + it.reader().readText() + } )?.value ?: "[]" ) diff --git a/libpupil/src/main/java/xyz/quaver/hitomi/galleries.kt b/libpupil/src/main/java/xyz/quaver/hitomi/galleries.kt index 63d15b93..f0fe192f 100644 --- a/libpupil/src/main/java/xyz/quaver/hitomi/galleries.kt +++ b/libpupil/src/main/java/xyz/quaver/hitomi/galleries.kt @@ -18,6 +18,7 @@ package xyz.quaver.hitomi import kotlinx.serialization.Serializable import org.jsoup.Jsoup +import xyz.quaver.proxy import java.net.URLDecoder @Serializable @@ -36,7 +37,7 @@ data class Gallery( val thumbnails: List ) fun getGallery(galleryID: Int) : Gallery { - val url = Jsoup.connect("https://hitomi.la/galleries/$galleryID.html").get() + val url = Jsoup.connect("https://hitomi.la/galleries/$galleryID.html").proxy(proxy).get() .select("a").attr("href") val doc = Jsoup.connect(url).get() diff --git a/libpupil/src/main/java/xyz/quaver/hitomi/galleryblock.kt b/libpupil/src/main/java/xyz/quaver/hitomi/galleryblock.kt index e115f473..6040251d 100644 --- a/libpupil/src/main/java/xyz/quaver/hitomi/galleryblock.kt +++ b/libpupil/src/main/java/xyz/quaver/hitomi/galleryblock.kt @@ -19,6 +19,7 @@ package xyz.quaver.hitomi import kotlinx.serialization.Serializable import org.jsoup.Jsoup import xyz.quaver.Code +import xyz.quaver.proxy import java.net.URL import java.net.URLDecoder import java.nio.ByteBuffer @@ -78,7 +79,7 @@ data class GalleryBlock( fun getGalleryBlock(galleryID: Int) : GalleryBlock? { val url = "$protocol//$domain/$galleryblockdir/$galleryID$extension" - val doc = Jsoup.connect(url).get() + val doc = Jsoup.connect(url).proxy(proxy).get() val galleryUrl = doc.selectFirst(".lillie").attr("href") diff --git a/libpupil/src/main/java/xyz/quaver/hitomi/reader.kt b/libpupil/src/main/java/xyz/quaver/hitomi/reader.kt index 228ce069..11b7b775 100644 --- a/libpupil/src/main/java/xyz/quaver/hitomi/reader.kt +++ b/libpupil/src/main/java/xyz/quaver/hitomi/reader.kt @@ -19,6 +19,7 @@ package xyz.quaver.hitomi import kotlinx.serialization.Serializable import org.jsoup.Jsoup import xyz.quaver.Code +import xyz.quaver.proxy fun getReferer(galleryID: Int) = "https://hitomi.la/reader/$galleryID.html" @@ -38,7 +39,7 @@ data class Reader(val code: Code, val title: String, val galleryInfo: List) : List { + print("PUPILD: NOZOMI REQUEST: $area:$tag ($language)") val nozomiAddress = when(area) { null -> "$protocol//$domain/$compressed_nozomi_prefix/$tag-$language$nozomiextension" else -> "$protocol//$domain/$compressed_nozomi_prefix/$area/$tag-$language$nozomiextension" } - val bytes = URL(nozomiAddress).readBytes() + val bytes = URL(nozomiAddress).openConnection(proxy).getInputStream().use { + it.readBytes() + } val nozomi = ArrayList() @@ -184,6 +189,7 @@ fun getGalleryIDsFromNozomi(area: String?, tag: String, language: String) : List while (arrayBuffer.hasRemaining()) nozomi.add(arrayBuffer.int) + print("PUPILD: NOZOMI REQUEST END: $area:$tag ($language)") return nozomi } @@ -238,7 +244,7 @@ fun getNodeAtAddress(field: String, address: Long) : Node? { fun getURLAtRange(url: String, range: LongRange) : ByteArray? { try { - with (URL(url).openConnection() as HttpsURLConnection) { + with (URL(url).openConnection(proxy) as HttpsURLConnection) { requestMethod = "GET" setRequestProperty("Range", "bytes=${range.first}-${range.last}") diff --git a/libpupil/src/main/java/xyz/quaver/hiyobi/galleryblock.kt b/libpupil/src/main/java/xyz/quaver/hiyobi/galleryblock.kt index 756ae243..6b324ce9 100644 --- a/libpupil/src/main/java/xyz/quaver/hiyobi/galleryblock.kt +++ b/libpupil/src/main/java/xyz/quaver/hiyobi/galleryblock.kt @@ -20,11 +20,12 @@ import org.jsoup.Jsoup import xyz.quaver.Code import xyz.quaver.hitomi.GalleryBlock import xyz.quaver.hitomi.protocol +import xyz.quaver.proxy fun getGalleryBlock(galleryID: Int) : GalleryBlock? { val url = "$protocol//$hiyobi/info/$galleryID" - val doc = Jsoup.connect(url).get() + val doc = Jsoup.connect(url).proxy(proxy).get() val galleryBlock = doc.selectFirst(".gallery-content") diff --git a/libpupil/src/main/java/xyz/quaver/hiyobi/reader.kt b/libpupil/src/main/java/xyz/quaver/hiyobi/reader.kt index 873f0ce1..067ce6da 100644 --- a/libpupil/src/main/java/xyz/quaver/hiyobi/reader.kt +++ b/libpupil/src/main/java/xyz/quaver/hiyobi/reader.kt @@ -23,6 +23,7 @@ import xyz.quaver.Code import xyz.quaver.hitomi.GalleryInfo import xyz.quaver.hitomi.Reader import xyz.quaver.hitomi.protocol +import xyz.quaver.proxy import java.net.URL import javax.net.ssl.HttpsURLConnection @@ -47,7 +48,7 @@ fun renewCookie() : String { val url = "https://$hiyobi/" try { - with(URL(url).openConnection() as HttpsURLConnection) { + with(URL(url).openConnection(proxy) as HttpsURLConnection) { setRequestProperty("User-Agent", user_agent) connectTimeout = 2000 connect() @@ -62,12 +63,12 @@ fun getReader(galleryID: Int) : Reader { val reader = "https://$hiyobi/reader/$galleryID" val url = "https://$hiyobi/data/json/${galleryID}_list.json" - val title = Jsoup.connect(reader).get().title() + val title = Jsoup.connect(reader).proxy(proxy).get().title() @Suppress("EXPERIMENTAL_API_USAGE") val galleryInfo = Json.parse( GalleryInfo.serializer().list, - with(URL(url).openConnection() as HttpsURLConnection) { + with(URL(url).openConnection(proxy) as HttpsURLConnection) { setRequestProperty("User-Agent", user_agent) setRequestProperty("Cookie", cookie) connectTimeout = 2000