From f6d9c7f5500083858a7011e9d863b73212bcf6b0 Mon Sep 17 00:00:00 2001 From: Pupil Date: Sun, 9 Feb 2020 17:11:35 +0900 Subject: [PATCH] Bug fix Networking optimized --- app/build.gradle | 4 +- app/release/output.json | 2 +- app/src/main/AndroidManifest.xml | 2 +- app/src/main/java/xyz/quaver/pupil/Pupil.kt | 6 +- .../pupil/adapters/GalleryBlockAdapter.kt | 7 +- .../quaver/pupil/adapters/ReaderAdapter.kt | 15 ++-- .../xyz/quaver/pupil/ui/ReaderActivity.kt | 4 +- .../xyz/quaver/pupil/util/download/Cache.kt | 90 +++++++++++-------- .../pupil/util/download/DownloadWorker.kt | 3 + .../quaver/pupil/util/download/Metadata.kt | 10 +-- .../main/java/xyz/quaver/pupil/util/file.kt | 12 ++- .../main/java/xyz/quaver/pupil/util/update.kt | 2 +- app/src/main/res/xml/file_paths.xml | 3 +- .../test/java/xyz/quaver/hitomi/UnitTest.kt | 2 +- 14 files changed, 97 insertions(+), 65 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1db9f8aa..a52c571a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,8 +19,8 @@ android { applicationId "xyz.quaver.pupil" minSdkVersion 16 targetSdkVersion 29 - versionCode 33 - versionName "5.0" + versionCode 35 + versionName "5.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true vectorDrawables.useSupportLibrary = true diff --git a/app/release/output.json b/app/release/output.json index 28c17fcc..453bdcb1 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":33,"versionName":"5.0","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":35,"versionName":"5.2","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/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 62e797a8..09fe339b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,7 +22,7 @@ tools:replace="android:theme"> diff --git a/app/src/main/java/xyz/quaver/pupil/Pupil.kt b/app/src/main/java/xyz/quaver/pupil/Pupil.kt index 90785a19..b6619207 100644 --- a/app/src/main/java/xyz/quaver/pupil/Pupil.kt +++ b/app/src/main/java/xyz/quaver/pupil/Pupil.kt @@ -49,7 +49,11 @@ class Pupil : MultiDexApplication() { histories = Histories(File(ContextCompat.getDataDir(this), "histories.json")) favorites = Histories(File(ContextCompat.getDataDir(this), "favorites.json")) - val download = preference.getString("dl_location", null) + val download = try { + preference.getString("dl_location", null) + } catch (e: Exception) { + preference.edit().remove("dl_location").apply() + } if (download == null) { val default = ContextCompat.getExternalFilesDirs(this, null)[0] diff --git a/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt b/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt index d7dcdec2..b8c83ebe 100644 --- a/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt +++ b/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt @@ -129,7 +129,12 @@ class GalleryBlockAdapter(context: Context, private val galleries: List') - - return galleryBlock.firstOrNull { - mirrors.contains(it.code.name) - } ?: galleryBlock.firstOrNull() + return galleryBlock } fun getReaderOrNull(galleryID: Int): Reader? { - val metadata = getCachedMetadata(galleryID) - - val mirrors = preference.getString("mirrors", "")!!.split('>') - - return metadata?.readers?.firstOrNull { - mirrors.contains(it.code.name) - } ?: metadata?.readers?.firstOrNull() + return getCachedMetadata(galleryID)?.reader } suspend fun getReader(galleryID: Int): Reader? { val metadata = getCachedMetadata(galleryID) + val mirrors = preference.getString("mirrors", null)?.split('>') ?: listOf() - val readers = if (metadata?.readers == null) { - listOf( - { xyz.quaver.hitomi.getReader(galleryID) }, - { xyz.quaver.hiyobi.getReader(galleryID) } - ).map { - CoroutineScope(Dispatchers.IO).async { - kotlin.runCatching { - it.invoke() - }.getOrNull() - } - }.awaitAll().filterNotNull() - } else { - metadata.readers + val sources = mapOf( + Code.HITOMI to { xyz.quaver.hitomi.getReader(galleryID) }, + Code.HIYOBI to { xyz.quaver.hiyobi.getReader(galleryID) } + ).let { + if (mirrors.isNotEmpty()) + it.toSortedMap( + Comparator { o1, o2 -> + mirrors.indexOf(o1.name) - mirrors.indexOf(o2.name) + } + ) + else + it } - if (readers.isNotEmpty()) + val reader = if (metadata?.reader == null) { + CoroutineScope(Dispatchers.IO).async { + var retval: Reader? = null + + for (source in sources) { + retval = kotlin.runCatching { + source.value.invoke() + }.getOrNull() + + if (retval != null) + break + } + + retval + }.await() + } else + metadata.reader + + if (reader != null) setCachedMetadata( galleryID, - Metadata(Cache(this).getCachedMetadata(galleryID), readers = readers) + Metadata(Cache(this).getCachedMetadata(galleryID), readers = reader) ) - val mirrors = preference.getString("mirrors", "")!!.split('>') - - return readers.firstOrNull { - mirrors.contains(it.code.name) - } ?: readers.firstOrNull() + return reader } fun getImages(galleryID: Int): List? { 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 3ac2414f..0029f5f6 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 @@ -279,6 +279,9 @@ class DownloadWorker private constructor(context: Context) : ContextWrapper(cont progress.put(galleryID, reader.galleryInfo.map { 0F }.toMutableList()) exception.put(galleryID, reader.galleryInfo.map { null }.toMutableList()) + if (notification[galleryID] == null) + initNotification(galleryID) + notification[galleryID].setContentTitle(reader.title) notify(galleryID) diff --git a/app/src/main/java/xyz/quaver/pupil/util/download/Metadata.kt b/app/src/main/java/xyz/quaver/pupil/util/download/Metadata.kt index 69d51e90..1ec0c80a 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/download/Metadata.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/download/Metadata.kt @@ -25,20 +25,20 @@ import xyz.quaver.hitomi.Reader @Serializable data class Metadata( val thumbnail: String? = null, - val galleryBlock: List? = null, - val readers: List? = null, + val galleryBlock: GalleryBlock? = null, + val reader: Reader? = null, val isDownloading: Boolean? = null ) { constructor( metadata: Metadata?, thumbnail: String? = null, - galleryBlock: List? = null, - readers: List? = null, + galleryBlock: GalleryBlock? = null, + readers: Reader? = null, isDownloading: Boolean? = null ) : this( thumbnail ?: metadata?.thumbnail, galleryBlock ?: metadata?.galleryBlock, - readers ?: metadata?.readers, + readers ?: metadata?.reader, isDownloading ?: metadata?.isDownloading ) } \ No newline at end of file diff --git a/app/src/main/java/xyz/quaver/pupil/util/file.kt b/app/src/main/java/xyz/quaver/pupil/util/file.kt index bf952028..9edef922 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/file.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/file.kt @@ -20,6 +20,7 @@ package xyz.quaver.pupil.util import android.content.Context import android.net.Uri +import androidx.core.content.FileProvider import androidx.documentfile.provider.DocumentFile import androidx.preference.PreferenceManager import java.io.File @@ -33,7 +34,10 @@ fun getCachedGallery(context: Context, galleryID: Int) = fun getDownloadDirectory(context: Context) : DocumentFile? { val uri = PreferenceManager.getDefaultSharedPreferences(context).getString("dl_location", null).let { - Uri.parse(it) + if (it != null) + Uri.parse(it) + else + return null } return if (uri.toString().startsWith("file")) @@ -42,6 +46,12 @@ fun getDownloadDirectory(context: Context) : DocumentFile? { DocumentFile.fromTreeUri(context, uri) } +fun convertUpdateUri(context: Context, uri: Uri) : Uri = + if (uri.toString().startsWith("file")) + FileProvider.getUriForFile(context, context.applicationContext.packageName + ".provider", File(uri.path!!.substringAfter("file:///"))) + else + uri + fun URL.download(context: Context, to: DocumentFile, onDownloadProgress: ((Long, Long) -> Unit)? = null) { context.contentResolver.openOutputStream(to.uri).use { out -> out!! diff --git a/app/src/main/java/xyz/quaver/pupil/util/update.kt b/app/src/main/java/xyz/quaver/pupil/util/update.kt index c75f4dac..820e24fe 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/update.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/update.kt @@ -168,7 +168,7 @@ fun checkUpdate(context: AppCompatActivity, force: Boolean = false) { val install = Intent(Intent.ACTION_VIEW).apply { flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_GRANT_READ_URI_PERMISSION - setDataAndType(target.uri, MimeTypeMap.getSingleton().getMimeTypeFromExtension("apk")) + setDataAndType(convertUpdateUri(context, target.uri), MimeTypeMap.getSingleton().getMimeTypeFromExtension("apk")) } builder.apply { diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml index 5992f8d4..25ccb28c 100644 --- a/app/src/main/res/xml/file_paths.xml +++ b/app/src/main/res/xml/file_paths.xml @@ -17,6 +17,7 @@ ~ along with this program. If not, see . --> - + + \ No newline at end of file diff --git a/libpupil/src/test/java/xyz/quaver/hitomi/UnitTest.kt b/libpupil/src/test/java/xyz/quaver/hitomi/UnitTest.kt index 42147471..84c79a75 100644 --- a/libpupil/src/test/java/xyz/quaver/hitomi/UnitTest.kt +++ b/libpupil/src/test/java/xyz/quaver/hitomi/UnitTest.kt @@ -75,7 +75,7 @@ class UnitTest { @Test fun test_getReader() { - val reader = getReader(1442740) + val reader = getReader(1567569) print(reader) }