diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt index b006171e6..24987bff5 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -349,7 +349,7 @@ class LibraryUpdateService( } } LibraryGroup.BY_SOURCE -> { - val sourceExtra = groupExtra.nullIfBlank()?.toIntOrNull() + val sourceExtra = groupExtra?.nullIfBlank()?.toIntOrNull() val source = libraryManga.map { it.source } .distinct() .sorted() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedController.kt index de57f2341..6b67f9ee6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedController.kt @@ -124,7 +124,7 @@ open class SourceFeedController : } override fun onSearchViewQueryTextSubmit(query: String?) { - onBrowseClick(query.nullIfBlank()) + onBrowseClick(query?.nullIfBlank()) } override fun onSearchViewQueryTextChange(newText: String?) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt index 389665a59..42bfe95d6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt @@ -54,7 +54,6 @@ import exh.source.PERV_EDEN_IT_SOURCE_ID import exh.source.isEhBasedManga import exh.source.mangaDexSourceIds import exh.source.nHentaiSourceIds -import exh.ui.LoaderManager import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import kotlinx.coroutines.delay @@ -121,7 +120,6 @@ class LibraryController( // Favorites private var favoritesSyncJob: Job? = null - val loaderManager = LoaderManager() // <-- EH init { @@ -462,7 +460,7 @@ class LibraryController( .setTitle(R.string.favorites_sync) .setMessage(R.string.favorites_sync_conformation_message) .setPositiveButton(android.R.string.ok) { _, _ -> - presenter.favoritesSync.runSync() + presenter.runSync() } .setNegativeButton(android.R.string.cancel, null) .show() 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 c99666057..3b470593b 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -168,13 +168,12 @@ class LibraryPresenter( var groupType = preferences.groupLibraryBy().get() - private val libraryIsGrouped - get() = groupType != LibraryGroup.UNGROUPED - private val loggedServices by lazy { trackManager.services.filter { it.isLogged } } - private val services = trackManager.services.associate { service -> - service.id to context.getString(service.nameRes()) + private val services by lazy { + trackManager.services.associate { service -> + service.id to context.getString(service.nameRes()) + } } /** @@ -570,7 +569,7 @@ class LibraryPresenter( var editedCategories = categories val items = if (groupType == LibraryGroup.BY_DEFAULT) { map - } else if (!libraryIsGrouped) { + } else if (groupType == LibraryGroup.UNGROUPED) { editedCategories = listOf(Category(0, "All", 0, 0)) mapOf( 0L to map.values.flatten().distinctBy { it.manga.id }, @@ -1123,9 +1122,8 @@ class LibraryPresenter( return map to categories } - override fun onDestroy() { - super.onDestroy() - favoritesSync.onDestroy() + fun runSync() { + favoritesSync.runSync(presenterScope) } // SY <-- } diff --git a/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt b/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt index b862aac41..2f57be2f3 100644 --- a/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt +++ b/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt @@ -37,8 +37,6 @@ import exh.util.ignore import exh.util.wifiManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch import okhttp3.FormBody @@ -60,8 +58,6 @@ class FavoritesSyncHelper(val context: Context) { private val prefs: PreferencesHelper by injectLazy() - private val scope = CoroutineScope(Job() + Dispatchers.Main) - private val exh by lazy { Injekt.get().get(EXH_SOURCE_ID) as? EHentai ?: EHentai(0, true, context) @@ -81,7 +77,7 @@ class FavoritesSyncHelper(val context: Context) { val status: MutableStateFlow = MutableStateFlow(FavoritesSyncStatus.Idle(context)) @Synchronized - fun runSync() { + fun runSync(scope: CoroutineScope) { if (status.value !is FavoritesSyncStatus.Idle) { return } @@ -407,10 +403,6 @@ class FavoritesSyncHelper(val context: Context) { class IgnoredException : RuntimeException() - fun onDestroy() { - scope.cancel() - } - companion object { private val THROTTLE_WARN = 1.seconds } diff --git a/app/src/main/java/exh/ui/LoaderManager.kt b/app/src/main/java/exh/ui/LoaderManager.kt deleted file mode 100644 index 7ee55ad2f..000000000 --- a/app/src/main/java/exh/ui/LoaderManager.kt +++ /dev/null @@ -1,55 +0,0 @@ -package exh.ui - -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import java.util.UUID -import kotlin.coroutines.CoroutineContext -import kotlin.coroutines.EmptyCoroutineContext - -typealias LoadingHandle = String - -/** - * Class used to manage loader UIs - */ -class LoaderManager(parentContext: CoroutineContext = EmptyCoroutineContext) : CoroutineScope { - override val coroutineContext = Dispatchers.Main + parentContext - - private val openLoadingHandles = mutableListOf() - var loadingChangeListener: (suspend (newIsLoading: Boolean) -> Unit)? = null - - fun openProgressBar(): LoadingHandle { - val (handle, shouldUpdateLoadingStatus) = synchronized(this) { - val handle = UUID.randomUUID().toString() - openLoadingHandles += handle - handle to (openLoadingHandles.size == 1) - } - - if (shouldUpdateLoadingStatus) { - launch { - updateLoadingStatus(true) - } - } - - return handle - } - - @Synchronized - fun closeProgressBar(handle: LoadingHandle?) { - if (handle == null) return - - val shouldUpdateLoadingStatus = synchronized(this) { - openLoadingHandles.remove(handle) && openLoadingHandles.isEmpty() - } - - if (shouldUpdateLoadingStatus) { - launch { - updateLoadingStatus(false) - } - } - } - - private suspend fun updateLoadingStatus(newStatus: Boolean) { - loadingChangeListener?.invoke(newStatus) - } -} diff --git a/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt b/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt index 2ad94317f..befe8e5d4 100644 --- a/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt +++ b/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt @@ -8,8 +8,7 @@ import eu.kanade.tachiyomi.util.lang.withIOContext import exh.GalleryAddEvent import exh.GalleryAdder import exh.log.xLogE -import exh.util.dropEmpty -import exh.util.trimAll +import exh.util.trimOrNull import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ensureActive @@ -30,25 +29,21 @@ class BatchAddPresenter : BasePresenter() { fun addGalleries(context: Context, galleries: String) { eventFlow = MutableSharedFlow(1) - val regex = - """[0-9]*?\.[a-z0-9]*?:""".toRegex() - val testedGalleries = if (regex.containsMatchIn(galleries)) { + val splitGalleries = if (ehVisitedRegex.containsMatchIn(galleries)) { val url = if (preferences.enableExhentai().get()) { "https://exhentai.org/g/" } else { "https://e-hentai.org/g/" } - regex.findAll(galleries).map { galleryKeys -> + ehVisitedRegex.findAll(galleries).map { galleryKeys -> val linkParts = galleryKeys.value.split(".") url + linkParts[0] + "/" + linkParts[1].replace(":", "") - }.joinToString(separator = "\n") + }.toList() } else { - galleries + galleries.split("\n") + .mapNotNull(String::trimOrNull) } - val splitGalleries = testedGalleries.split("\n") - .trimAll() - .dropEmpty() progressFlow.value = 0 progressTotalFlow.value = splitGalleries.size @@ -92,5 +87,7 @@ class BatchAddPresenter : BasePresenter() { const val STATE_IDLE = 0 const val STATE_INPUT_TO_PROGRESS = 1 const val STATE_PROGRESS_TO_INPUT = 2 + + val ehVisitedRegex = """[0-9]*?\.[a-z0-9]*?:""".toRegex() } } diff --git a/app/src/main/java/exh/util/StringUtil.kt b/app/src/main/java/exh/util/StringUtil.kt index 53d9b2d22..a0d5cbea2 100644 --- a/app/src/main/java/exh/util/StringUtil.kt +++ b/app/src/main/java/exh/util/StringUtil.kt @@ -10,13 +10,6 @@ fun String.removeArticles(): String { return replace(articleRegex, "") } -fun String.trimOrNull(): String? { - val trimmed = trim() - return trimmed.ifBlank { null } -} +fun String.trimOrNull() = trim().nullIfBlank() -fun String?.nullIfBlank(): String? = if (isNullOrBlank()) { - null -} else { - this -} +fun String.nullIfBlank(): String? = ifBlank { null }