From c00eaae62b3aca942bd0ca50a1b62443e4132d88 Mon Sep 17 00:00:00 2001 From: len Date: Fri, 3 Mar 2017 17:42:46 +0100 Subject: [PATCH 1/4] AS 2.3 and Kotlin 1.1 --- app/build.gradle | 2 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 47dc227aa..807fa589e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -209,7 +209,7 @@ dependencies { } buildscript { - ext.kotlin_version = '1.0.6' + ext.kotlin_version = '1.1.0' repositories { mavenCentral() } diff --git a/build.gradle b/build.gradle index ace27396b..993857423 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.3.0' classpath 'com.github.ben-manes:gradle-versions-plugin:0.13.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 53d374f58..d3a155582 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Aug 27 15:18:00 CEST 2016 +#Fri Mar 03 16:14:18 CET 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip From 5c67161dce376c964f001318a0096883928b26a6 Mon Sep 17 00:00:00 2001 From: len Date: Fri, 3 Mar 2017 18:18:06 +0100 Subject: [PATCH 2/4] Minor changes for Kotlin 1.1 --- .../kanade/tachiyomi/source/online/YamlHttpSource.kt | 3 +-- .../tachiyomi/ui/base/fragment/FragmentMixin.kt | 4 ++-- .../tachiyomi/ui/catalogue/CatalogueFragment.kt | 3 ++- .../eu/kanade/tachiyomi/ui/library/LibraryFragment.kt | 3 ++- .../kanade/tachiyomi/ui/library/LibraryPresenter.kt | 11 ++++------- .../tachiyomi/ui/manga/chapter/ChaptersFragment.kt | 3 ++- .../ui/recent_updates/RecentChaptersFragment.kt | 3 ++- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/YamlHttpSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/YamlHttpSource.kt index 2d907a53b..e73681d23 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/YamlHttpSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/YamlHttpSource.kt @@ -176,8 +176,7 @@ class YamlHttpSource(mappings: Map<*, *>) : HttpSource() { val pages = mutableListOf() - // TODO lazy initialization in Kotlin 1.1 - val document = Jsoup.parse(body, url) + val document by lazy { Jsoup.parse(body, url) } with(map.pages) { // Capture a list of values where page urls will be resolved. diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/fragment/FragmentMixin.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/fragment/FragmentMixin.kt index 1f43336c6..24c766182 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/fragment/FragmentMixin.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/fragment/FragmentMixin.kt @@ -1,6 +1,6 @@ package eu.kanade.tachiyomi.ui.base.fragment -import android.support.v7.app.AppCompatActivity +import android.support.v4.app.FragmentActivity import eu.kanade.tachiyomi.ui.base.activity.ActivityMixin interface FragmentMixin { @@ -13,7 +13,7 @@ interface FragmentMixin { (getActivity() as ActivityMixin).setToolbarTitle(getString(resourceId)) } - fun getActivity(): AppCompatActivity + fun getActivity(): FragmentActivity fun getString(resource: Int): String } \ No newline at end of file diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueFragment.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueFragment.kt index 15af1ad94..8c9639098 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueFragment.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueFragment.kt @@ -4,6 +4,7 @@ import android.content.res.Configuration import android.os.Bundle import android.support.design.widget.Snackbar import android.support.v4.widget.DrawerLayout +import android.support.v7.app.AppCompatActivity import android.support.v7.widget.* import android.view.* import android.widget.ArrayAdapter @@ -155,7 +156,7 @@ open class CatalogueFragment : BaseRxFragment(), setupRecycler() // Create toolbar spinner - val themedContext = activity.supportActionBar?.themedContext ?: activity + val themedContext = (activity as AppCompatActivity).supportActionBar?.themedContext ?: activity val spinnerAdapter = ArrayAdapter(themedContext, android.R.layout.simple_spinner_item, presenter.sources) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryFragment.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryFragment.kt index c0663516b..916022439 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryFragment.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryFragment.kt @@ -9,6 +9,7 @@ import android.support.design.widget.TabLayout import android.support.v4.graphics.drawable.DrawableCompat import android.support.v4.view.ViewPager import android.support.v4.widget.DrawerLayout +import android.support.v7.app.AppCompatActivity import android.support.v7.view.ActionMode import android.support.v7.widget.SearchView import android.view.* @@ -356,7 +357,7 @@ class LibraryFragment : BaseRxFragment(), ActionMode.Callback */ fun createActionModeIfNeeded() { if (actionMode == null) { - actionMode = activity.startSupportActionMode(this) + actionMode = (activity as AppCompatActivity).startSupportActionMode(this) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index b1990ef80..8be382b6f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -177,12 +177,9 @@ class LibraryPresenter : BasePresenter() { private fun applySort(map: Map>): Map> { val sortingMode = preferences.librarySortingMode().getOrDefault() - // TODO lazy initialization in kotlin 1.1 - var lastReadManga: Map? = null - if (sortingMode == LibrarySort.LAST_READ) { + val lastReadManga by lazy { var counter = 0 - lastReadManga = db.getLastReadManga().executeAsBlocking() - .associate { it.id!! to counter++ } + db.getLastReadManga().executeAsBlocking().associate { it.id!! to counter++ } } val sortFn: (Manga, Manga) -> Int = { manga1, manga2 -> @@ -190,8 +187,8 @@ class LibraryPresenter : BasePresenter() { LibrarySort.ALPHA -> manga1.title.compareTo(manga2.title) LibrarySort.LAST_READ -> { // Get index of manga, set equal to list if size unknown. - val manga1LastRead = lastReadManga!![manga1.id!!] ?: lastReadManga!!.size - val manga2LastRead = lastReadManga!![manga2.id!!] ?: lastReadManga!!.size + val manga1LastRead = lastReadManga[manga1.id!!] ?: lastReadManga.size + val manga2LastRead = lastReadManga[manga2.id!!] ?: lastReadManga.size manga1LastRead.compareTo(manga2LastRead) } LibrarySort.LAST_UPDATED -> manga2.last_update.compareTo(manga1.last_update) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersFragment.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersFragment.kt index 7997bfb9c..359706dee 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersFragment.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersFragment.kt @@ -6,6 +6,7 @@ import android.content.Intent import android.os.Bundle import android.support.design.widget.Snackbar import android.support.v4.app.DialogFragment +import android.support.v7.app.AppCompatActivity import android.support.v7.view.ActionMode import android.support.v7.widget.DividerItemDecoration import android.support.v7.widget.LinearLayoutManager @@ -420,7 +421,7 @@ class ChaptersFragment : BaseRxFragment(), ActionMode.Callbac override fun onListItemLongClick(position: Int) { if (actionMode == null) - actionMode = activity.startSupportActionMode(this) + actionMode = (activity as AppCompatActivity).startSupportActionMode(this) toggleSelection(position) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersFragment.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersFragment.kt index 607f732b9..338f28d51 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersFragment.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersFragment.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.recent_updates import android.os.Bundle import android.support.v4.app.DialogFragment +import android.support.v7.app.AppCompatActivity import android.support.v7.view.ActionMode import android.support.v7.widget.DividerItemDecoration import android.support.v7.widget.LinearLayoutManager @@ -142,7 +143,7 @@ class RecentChaptersFragment: */ override fun onItemLongClick(position: Int) { if (actionMode == null) - actionMode = activity.startSupportActionMode(this) + actionMode = (activity as AppCompatActivity).startSupportActionMode(this) toggleSelection(position) } From 582bb3e2ca65eea43517047abacabfc7b27d3756 Mon Sep 17 00:00:00 2001 From: len Date: Fri, 3 Mar 2017 18:45:25 +0100 Subject: [PATCH 3/4] Handle a few more possible external directories before Lollipop --- .../java/eu/kanade/tachiyomi/util/DiskUtil.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/DiskUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/DiskUtil.kt index cf289506b..e710bbc0f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/DiskUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/DiskUtil.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.util import android.content.Context +import android.os.Build import android.os.Environment import android.support.v4.content.ContextCompat import android.support.v4.os.EnvironmentCompat @@ -73,8 +74,9 @@ object DiskUtil { /** * Returns the root folders of all the available external storages. */ - fun getExternalStorages(context: Context): List { - return ContextCompat.getExternalFilesDirs(context, null) + fun getExternalStorages(context: Context): Collection { + val directories = mutableSetOf() + directories += ContextCompat.getExternalFilesDirs(context, null) .filterNotNull() .mapNotNull { val file = File(it.absolutePath.substringBefore("/Android/")) @@ -85,6 +87,15 @@ object DiskUtil { null } } + + if (Build.VERSION.SDK_INT < 21) { + val extStorages = System.getenv("SECONDARY_STORAGE") + if (extStorages != null) { + directories += extStorages.split(":").map(::File) + } + } + + return directories } /** From 6020cd011df4bfed5b2342186c0064242a67a695 Mon Sep 17 00:00:00 2001 From: Gilfar Date: Fri, 3 Mar 2017 22:53:54 +0100 Subject: [PATCH 4/4] Fix #692. Mangasee needs proper headers for data requests. (#694) --- .../tachiyomi/source/online/english/Mangasee.kt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangasee.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangasee.kt index abac69d58..b0aa2a8c7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangasee.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Mangasee.kt @@ -4,6 +4,7 @@ import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.source.model.* import eu.kanade.tachiyomi.source.online.ParsedHttpSource import okhttp3.FormBody +import okhttp3.Headers import okhttp3.HttpUrl import okhttp3.Request import org.jsoup.nodes.Document @@ -27,11 +28,16 @@ class Mangasee : ParsedHttpSource() { private val indexPattern = Pattern.compile("-index-(.*?)-") + private val catalogHeaders = Headers.Builder().apply { + add("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64)") + add("Host", "mangaseeonline.us") + }.build() + override fun popularMangaSelector() = "div.requested > div.row" override fun popularMangaRequest(page: Int): Request { val (body, requestUrl) = convertQueryToPost(page, "$baseUrl/search/request.php?sortBy=popularity&sortOrder=descending") - return POST(requestUrl, headers, body.build()) + return POST(requestUrl, catalogHeaders, body.build()) } override fun popularMangaFromElement(element: Element): SManga { @@ -74,7 +80,7 @@ class Mangasee : ParsedHttpSource() { if (genresNo.isNotEmpty()) url.addQueryParameter("genreNo", genresNo.joinToString(",")) val (body, requestUrl) = convertQueryToPost(page, url.toString()) - return POST(requestUrl, headers, body.build()) + return POST(requestUrl, catalogHeaders, body.build()) } private fun convertQueryToPost(page: Int, url: String): Pair { @@ -164,7 +170,7 @@ class Mangasee : ParsedHttpSource() { override fun latestUpdatesRequest(page: Int): Request { val url = "http://mangaseeonline.net/home/latest.request.php" val (body, requestUrl) = convertQueryToPost(page, url) - return POST(requestUrl, headers, body.build()) + return POST(requestUrl, catalogHeaders, body.build()) } override fun latestUpdatesFromElement(element: Element): SManga {