diff --git a/app/build.gradle b/app/build.gradle index 40e186d0fa..0cfb495996 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,7 +30,7 @@ android { applicationId 'io.github.landwarderer.futon' minSdk = 23 targetSdk = 36 - versionCode project.hasProperty('versionCode') ? project.property('versionCode').toInteger() : 90613 + versionCode project.hasProperty('versionCode') ? project.property('versionCode').toInteger() : 90614 versionName project.hasProperty('versionName') ? project.property('versionName') : '9.6.13' generatedDensities = [] testInstrumentationRunner 'io.github.landwarderer.futon.HiltTestRunner' @@ -124,7 +124,7 @@ android { unitTests.includeAndroidResources true unitTests.returnDefaultValues false kotlinOptions { - freeCompilerArgs += ['-opt-in=io.github.landwarderer.futon.parsers.InternalParsersApi'] + freeCompilerArgs += ['-opt-in=org.koitharu.kotatsu.parsers.InternalParsersApi'] } } applicationVariants.configureEach { variant -> @@ -145,7 +145,7 @@ dependencies { parsersVersion = System.getProperty('parsersVersionOverride') } //noinspection UseTomlInstead - implementation("com.github.AppFuton:futon-parsers:$parsersVersion") { + implementation("com.github.clquwu:kotatsu-parsers-redo:$parsersVersion") { exclude group: 'org.json', module: 'json' } diff --git a/app/src/androidTest/kotlin/io/github/landwarderer/futon/SampleData.kt b/app/src/androidTest/kotlin/io/github/landwarderer/futon/SampleData.kt index ac0cbc5cd1..541cf04a02 100644 --- a/app/src/androidTest/kotlin/io/github/landwarderer/futon/SampleData.kt +++ b/app/src/androidTest/kotlin/io/github/landwarderer/futon/SampleData.kt @@ -12,8 +12,8 @@ import okio.buffer import okio.source import io.github.landwarderer.futon.core.model.FavouriteCategory import io.github.landwarderer.futon.core.model.MangaSource -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource import java.time.Instant import java.util.Date import kotlin.reflect.KClass diff --git a/app/src/debug/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt b/app/src/debug/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt index 7eadd3be07..02d52ec279 100644 --- a/app/src/debug/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt +++ b/app/src/debug/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt @@ -2,14 +2,14 @@ package io.github.landwarderer.futon.core.parser import io.github.landwarderer.futon.core.cache.MemoryContentCache import io.github.landwarderer.futon.core.model.TestMangaSource -import io.github.landwarderer.futon.parsers.MangaLoaderContext -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaListFilterCapabilities -import io.github.landwarderer.futon.parsers.model.MangaListFilterOptions -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.SortOrder import java.util.EnumSet /* diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/AlternativesUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/AlternativesUseCase.kt index ba27a00ab9..48cff8df75 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/AlternativesUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/AlternativesUseCase.kt @@ -9,10 +9,10 @@ import kotlinx.coroutines.sync.withPermit import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.util.ext.toLocale import io.github.landwarderer.futon.explore.data.MangaSourcesRepository -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.search.domain.SearchKind import io.github.landwarderer.futon.search.domain.SearchV2Helper import java.util.Locale diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/AutoFixUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/AutoFixUseCase.kt index b863790fc4..cc053f11e7 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/AutoFixUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/AutoFixUseCase.kt @@ -16,8 +16,8 @@ import io.github.landwarderer.futon.core.model.parcelable.ParcelableManga import io.github.landwarderer.futon.core.parser.MangaDataRepository import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.util.ext.concat -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import java.util.concurrent.TimeUnit import javax.inject.Inject import kotlin.coroutines.cancellation.CancellationException diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/MigrateUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/MigrateUseCase.kt index c95e0fe69f..996d7fb391 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/MigrateUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/domain/MigrateUseCase.kt @@ -9,9 +9,9 @@ import io.github.landwarderer.futon.details.domain.ProgressUpdateUseCase import io.github.landwarderer.futon.history.data.HistoryEntity import io.github.landwarderer.futon.history.data.toMangaHistory import io.github.landwarderer.futon.list.domain.ReadingProgress.Companion.PROGRESS_NONE -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.scrobbling.common.domain.Scrobbler import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingStatus import io.github.landwarderer.futon.tracker.data.TrackEntity diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AlternativesActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AlternativesActivity.kt index e465e9d437..f73333623a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AlternativesActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AlternativesActivity.kt @@ -29,7 +29,7 @@ import io.github.landwarderer.futon.list.ui.adapter.emptyStateListAD import io.github.landwarderer.futon.list.ui.adapter.loadingFooterAD import io.github.landwarderer.futon.list.ui.adapter.loadingStateAD import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import javax.inject.Inject @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AlternativesViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AlternativesViewModel.kt index 210dadbf15..5009f1aa93 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AlternativesViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AlternativesViewModel.kt @@ -32,9 +32,9 @@ import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.LoadingFooter import io.github.landwarderer.futon.list.ui.model.LoadingState import io.github.landwarderer.futon.list.ui.model.MangaGridModel -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.suspendlazy.getOrDefault -import io.github.landwarderer.futon.parsers.util.suspendlazy.suspendLazy +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.suspendlazy.getOrDefault +import org.koitharu.kotatsu.parsers.util.suspendlazy.suspendLazy import javax.inject.Inject @HiltViewModel diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AutoFixService.kt b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AutoFixService.kt index 646c2c095c..1c36c9339a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AutoFixService.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/AutoFixService.kt @@ -29,8 +29,8 @@ import io.github.landwarderer.futon.core.util.ext.powerManager import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.core.util.ext.toBitmapOrNull import io.github.landwarderer.futon.core.util.ext.withPartialWakeLock -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.runBlocking import javax.inject.Inject import androidx.appcompat.R as appcompatR diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/MangaAlternativeModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/MangaAlternativeModel.kt index b7f5d41159..078045880c 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/MangaAlternativeModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/alternatives/ui/MangaAlternativeModel.kt @@ -3,7 +3,7 @@ package io.github.landwarderer.futon.alternatives.ui import io.github.landwarderer.futon.core.model.chaptersCount import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.MangaGridModel -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga data class MangaAlternativeModel( val mangaModel: MangaGridModel, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/BackupRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/BackupRepository.kt index cbb640c612..a74d09a3b7 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/BackupRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/BackupRepository.kt @@ -37,7 +37,7 @@ import io.github.landwarderer.futon.core.util.progress.Progress import io.github.landwarderer.futon.explore.data.MangaSourcesRepository import io.github.landwarderer.futon.filter.data.PersistableFilter import io.github.landwarderer.futon.filter.data.SavedFiltersRepository -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.reader.data.TapGridSettings import java.io.InputStream import java.io.OutputStream diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/model/BookmarkBackup.kt b/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/model/BookmarkBackup.kt index 812303f43e..5cc3cfdaba 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/model/BookmarkBackup.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/model/BookmarkBackup.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import io.github.landwarderer.futon.bookmarks.data.BookmarkEntity import io.github.landwarderer.futon.core.db.entity.MangaWithTags -import io.github.landwarderer.futon.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.mapToSet @Serializable class BookmarkBackup( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/model/MangaBackup.kt b/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/model/MangaBackup.kt index 64a7ba7415..5836404e0a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/model/MangaBackup.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/backups/data/model/MangaBackup.kt @@ -4,8 +4,8 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import io.github.landwarderer.futon.core.db.entity.MangaEntity import io.github.landwarderer.futon.core.db.entity.MangaWithTags -import io.github.landwarderer.futon.parsers.model.RATING_UNKNOWN -import io.github.landwarderer.futon.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.util.mapToSet @Serializable class MangaBackup( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/backups/domain/ExternalBackupStorage.kt b/app/src/main/kotlin/io/github/landwarderer/futon/backups/domain/ExternalBackupStorage.kt index 8e21331a4d..e3da527456 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/backups/domain/ExternalBackupStorage.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/backups/domain/ExternalBackupStorage.kt @@ -7,7 +7,7 @@ import androidx.documentfile.provider.DocumentFile import dagger.hilt.android.qualifiers.ApplicationContext import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runInterruptible import okio.buffer diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/backups/ui/periodical/TelegramBackupUploader.kt b/app/src/main/kotlin/io/github/landwarderer/futon/backups/ui/periodical/TelegramBackupUploader.kt index b6c0dbc9e1..9e961cc7ab 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/backups/ui/periodical/TelegramBackupUploader.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/backups/ui/periodical/TelegramBackupUploader.kt @@ -15,10 +15,10 @@ import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.nav.AppRouter import io.github.landwarderer.futon.core.network.BaseHttpClient import io.github.landwarderer.futon.core.prefs.AppSettings -import io.github.landwarderer.futon.parsers.util.await -import io.github.landwarderer.futon.parsers.util.json.getBooleanOrDefault -import io.github.landwarderer.futon.parsers.util.json.getStringOrNull -import io.github.landwarderer.futon.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.await +import org.koitharu.kotatsu.parsers.util.json.getBooleanOrDefault +import org.koitharu.kotatsu.parsers.util.json.getStringOrNull +import org.koitharu.kotatsu.parsers.util.parseJson import java.io.File import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/data/EntityMapping.kt b/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/data/EntityMapping.kt index 95bae6fefb..de1cd3a79f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/data/EntityMapping.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/data/EntityMapping.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.bookmarks.data import io.github.landwarderer.futon.bookmarks.domain.Bookmark -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import java.time.Instant fun BookmarkEntity.toBookmark(manga: Manga) = Bookmark( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/domain/Bookmark.kt b/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/domain/Bookmark.kt index d81a660b71..ee98333c13 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/domain/Bookmark.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/domain/Bookmark.kt @@ -3,8 +3,8 @@ package io.github.landwarderer.futon.bookmarks.domain import io.github.landwarderer.futon.core.util.MimeTypes import io.github.landwarderer.futon.core.util.ext.isImage import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaPage import java.time.Instant data class Bookmark( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/domain/BookmarksRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/domain/BookmarksRepository.kt index 66cd990405..a22e0f360e 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/domain/BookmarksRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/domain/BookmarksRepository.kt @@ -14,7 +14,7 @@ import io.github.landwarderer.futon.core.db.entity.toManga import io.github.landwarderer.futon.core.ui.util.ReversibleHandle import io.github.landwarderer.futon.core.util.ext.mapItems import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/ui/AllBookmarksFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/ui/AllBookmarksFragment.kt index beebb46ecd..30f0ecbe31 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/ui/AllBookmarksFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/ui/AllBookmarksFragment.kt @@ -38,7 +38,7 @@ import io.github.landwarderer.futon.list.ui.adapter.ListStateHolderListener import io.github.landwarderer.futon.list.ui.adapter.TypedListSpacingDecoration import io.github.landwarderer.futon.list.ui.model.ListHeader import io.github.landwarderer.futon.main.ui.owners.AppBarOwner -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.reader.ui.PageSaveHelper import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/ui/AllBookmarksViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/ui/AllBookmarksViewModel.kt index 3d2cb0d0f0..28e73b94b7 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/ui/AllBookmarksViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/bookmarks/ui/AllBookmarksViewModel.kt @@ -21,7 +21,7 @@ import io.github.landwarderer.futon.list.ui.model.ListHeader import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.LoadingState import io.github.landwarderer.futon.list.ui.model.toErrorState -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.reader.ui.PageSaveHelper import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/browser/BaseBrowserActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/browser/BaseBrowserActivity.kt index 7c14c171b4..c8e4921b7f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/browser/BaseBrowserActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/browser/BaseBrowserActivity.kt @@ -17,8 +17,8 @@ import io.github.landwarderer.futon.core.ui.BaseActivity import io.github.landwarderer.futon.core.util.ext.configureForParser import io.github.landwarderer.futon.core.util.ext.consumeAll import io.github.landwarderer.futon.databinding.ActivityBrowserBinding -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.nullIfEmpty import javax.inject.Inject @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/browser/BrowserActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/browser/BrowserActivity.kt index 774ec25e9d..c993b5dbd6 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/browser/BrowserActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/browser/BrowserActivity.kt @@ -16,7 +16,7 @@ import io.github.landwarderer.futon.core.nav.router import io.github.landwarderer.futon.core.parser.ParserMangaRepository import io.github.landwarderer.futon.core.util.ext.getDisplayMessage import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource import kotlinx.coroutines.launch @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/browser/cloudflare/CloudFlareActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/browser/cloudflare/CloudFlareActivity.kt index 824c6a75cc..3782d29c8c 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/browser/cloudflare/CloudFlareActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/browser/cloudflare/CloudFlareActivity.kt @@ -3,6 +3,7 @@ package io.github.landwarderer.futon.browser.cloudflare import android.content.Context import android.content.Intent import android.os.Bundle +import android.util.Log import android.view.Menu import android.view.MenuItem import androidx.activity.result.contract.ActivityResultContract @@ -10,6 +11,12 @@ import androidx.core.view.isInvisible import androidx.lifecycle.lifecycleScope import com.google.android.material.snackbar.Snackbar import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.runInterruptible +import kotlinx.coroutines.yield +import okhttp3.HttpUrl +import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import io.github.landwarderer.futon.R import io.github.landwarderer.futon.browser.BaseBrowserActivity import io.github.landwarderer.futon.core.exceptions.CloudFlareProtectedException @@ -20,16 +27,11 @@ import io.github.landwarderer.futon.core.network.cookies.MutableCookieJar import io.github.landwarderer.futon.core.parser.ParserMangaRepository import io.github.landwarderer.futon.core.util.ext.getDisplayMessage import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.network.CloudFlareHelper -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.runInterruptible -import kotlinx.coroutines.yield -import okhttp3.HttpUrl -import okhttp3.HttpUrl.Companion.toHttpUrlOrNull +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.network.CloudFlareHelper +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import javax.inject.Inject @AndroidEntryPoint @@ -52,7 +54,19 @@ class CloudFlareActivity : BaseBrowserActivity(), CloudFlareCallback { finishAfterTransition() return } - cfClient = CloudFlareClient(cookieJar, this, adBlock, url) + + // Check if source needs header interception + val needsInterception = shouldUseInterception(source, repository) + Log.d(TAG, "Source: ${source.name}, needsInterception: $needsInterception") + + cfClient = if (needsInterception) { + Log.d(TAG, "Using CloudFlareInterceptClient with header filtering") + CloudFlareInterceptClient(cookieJar, this, adBlock, url) + } else { + Log.d(TAG, "Using regular CloudFlareClient (no interception)") + CloudFlareClient(cookieJar, this, adBlock, url) + } + viewBinding.webView.webViewClient = cfClient lifecycleScope.launch { try { @@ -141,6 +155,31 @@ class CloudFlareActivity : BaseBrowserActivity(), CloudFlareCallback { } } + private fun shouldUseInterception(source: MangaSource, repository: ParserMangaRepository?): Boolean { + Log.d(TAG, "shouldUseInterception called for source: ${source.name}") + Log.d(TAG, "Repository type: ${repository?.javaClass?.simpleName}") + + if (repository !is ParserMangaRepository) { + Log.d(TAG, "Repository is not ParserMangaRepository, returning false") + return false + } + + // Check if parser has InterceptCloudflare ConfigKey + val configKeys = repository.getConfigKeys() + Log.d(TAG, "Config keys count: ${configKeys.size}") + Log.d(TAG, "Config keys: ${configKeys.map { it.javaClass.simpleName }}") + + val interceptKey = configKeys.filterIsInstance().firstOrNull() + Log.d(TAG, "InterceptCloudflare key found: ${interceptKey != null}") + if (interceptKey != null) { + Log.d(TAG, "InterceptCloudflare defaultValue: ${interceptKey.defaultValue}") + } + + val result = interceptKey?.defaultValue == true + Log.d(TAG, "Returning: $result") + return result + } + class Contract : ActivityResultContract() { override fun createIntent(context: Context, input: CloudFlareProtectedException): Intent { return AppRouter.cloudFlareResolveIntent(context, input) diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/browser/cloudflare/CloudFlareClient.kt b/app/src/main/kotlin/io/github/landwarderer/futon/browser/cloudflare/CloudFlareClient.kt index a4ebbcbe64..7159f25986 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/browser/cloudflare/CloudFlareClient.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/browser/cloudflare/CloudFlareClient.kt @@ -5,11 +5,11 @@ import android.webkit.WebView import io.github.landwarderer.futon.browser.BrowserClient import io.github.landwarderer.futon.core.network.cookies.MutableCookieJar import io.github.landwarderer.futon.core.network.webview.adblock.AdBlock -import io.github.landwarderer.futon.parsers.network.CloudFlareHelper +import org.koitharu.kotatsu.parsers.network.CloudFlareHelper private const val LOOP_COUNTER = 3 -class CloudFlareClient( +open class CloudFlareClient( private val cookieJar: MutableCookieJar, private val callback: CloudFlareCallback, adBlock: AdBlock, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/browser/cloudflare/CloudFlareInterceptClient.kt b/app/src/main/kotlin/io/github/landwarderer/futon/browser/cloudflare/CloudFlareInterceptClient.kt new file mode 100644 index 0000000000..7eab7f3b83 --- /dev/null +++ b/app/src/main/kotlin/io/github/landwarderer/futon/browser/cloudflare/CloudFlareInterceptClient.kt @@ -0,0 +1,138 @@ +package io.github.landwarderer.futon.browser.cloudflare + +import android.graphics.Bitmap +import android.util.Log +import android.webkit.WebResourceRequest +import android.webkit.WebResourceResponse +import android.webkit.WebView +import okhttp3.OkHttpClient +import okhttp3.Request +import io.github.landwarderer.futon.core.network.cookies.MutableCookieJar +import io.github.landwarderer.futon.core.network.webview.adblock.AdBlock +import java.net.URI +import java.util.Locale +import java.util.concurrent.TimeUnit + +private const val TAG = "CFInterceptClient" + +/** + * CloudFlare client with header interception to bypass blocking + * Filters out sec-ch-ua, sec-ch-ua-full-version-list, and x-requested-with headers + */ +class CloudFlareInterceptClient( + private val cookieJar: MutableCookieJar, + callback: CloudFlareCallback, + adBlock: AdBlock, + targetUrl: String, +) : CloudFlareClient(cookieJar, callback, adBlock, targetUrl) { + + private val targetUri = runCatching { URI(targetUrl) }.getOrNull() + + // Headers we want to block + private val blockedHeaders = setOf( + "sec-ch-ua", + "sec-ch-ua-full-version-list", + "x-requested-with" + ) + + override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { + super.onPageStarted(view, url, favicon) + Log.d(TAG, "Page started with interception enabled: $url") + } + + override fun shouldInterceptRequest(view: WebView?, request: WebResourceRequest?): WebResourceResponse? { + if (request == null) return null + + try { + if (!shouldReplayRequest(request)) { + return super.shouldInterceptRequest(view, request) + } + + Log.d(TAG, "Intercepting request: ${request.url}") + + val client = OkHttpClient.Builder() + .cookieJar(cookieJar) + .connectTimeout(15, TimeUnit.SECONDS) + .readTimeout(15, TimeUnit.SECONDS) + .build() + + val requestBuilder = Request.Builder() + .url(request.url.toString()) + .method(request.method, null) + + // Filter headers using blocklist - keep everything except blocked headers + val blockedCount = mutableListOf() + for ((key, value) in request.requestHeaders) { + val lowerKey = key.lowercase(Locale.ROOT) + if (!blockedHeaders.contains(lowerKey)) { + requestBuilder.addHeader(key, value) + } else { + blockedCount.add(key) + } + } + if (blockedCount.isNotEmpty()) { + Log.d(TAG, "Blocked headers: ${blockedCount.joinToString(", ")}") + } + + val response = client.newCall(requestBuilder.build()).execute() + + val contentType = response.header("Content-Type") + val mimeType: String + val charset: String? + + if (contentType != null) { + val parts = contentType.split(";") + mimeType = parts[0].trim() + charset = parts.find { it.trim().startsWith("charset=", ignoreCase = true) } + ?.substringAfter("=")?.trim() + } else { + mimeType = "text/html" + charset = "UTF-8" + } + + return WebResourceResponse(mimeType, charset, response.body?.byteStream()).apply { + val headers = mutableMapOf() + response.headers.forEach { headers[it.first] = it.second } + responseHeaders = headers + } + } catch (e: Exception) { + Log.e(TAG, "Error intercepting request: ${request.url}", e) + return null + } + } + + private fun shouldReplayRequest(request: WebResourceRequest): Boolean { + if (request.method != "GET") { + Log.d(TAG, "Skipping non-GET request: ${request.method} ${request.url}") + return false + } + if (!request.isForMainFrame) { + return false + } + if (!hasBlockedHeaders(request)) { + return false + } + val requestUri = runCatching { URI(request.url.toString()) }.getOrNull() ?: return false + val sameOrigin = requestUri.scheme.equals(targetUri?.scheme, ignoreCase = true) + && requestUri.host.equals(targetUri?.host, ignoreCase = true) + && normalizedPort(requestUri) == normalizedPort(targetUri) + if (!sameOrigin) { + Log.d(TAG, "Skipping off-origin main frame request: ${request.url}") + } + return sameOrigin + } + + private fun hasBlockedHeaders(request: WebResourceRequest): Boolean { + return request.requestHeaders.keys.any { it.lowercase(Locale.ROOT) in blockedHeaders } + } + + private fun normalizedPort(uri: URI?): Int { + if (uri == null) return -1 + return when { + uri.port != -1 -> uri.port + uri.scheme.equals("https", ignoreCase = true) -> 443 + uri.scheme.equals("http", ignoreCase = true) -> 80 + else -> -1 + } + } +} diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/AppModule.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/AppModule.kt index 153a6b7c70..23e3e831f5 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/AppModule.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/AppModule.kt @@ -61,7 +61,7 @@ import io.github.landwarderer.futon.local.domain.model.LocalManga import io.github.landwarderer.futon.main.domain.CoverRestoreInterceptor import io.github.landwarderer.futon.main.ui.protect.AppProtectHelper import io.github.landwarderer.futon.main.ui.protect.ScreenshotPolicyHelper -import io.github.landwarderer.futon.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaLoaderContext import io.github.landwarderer.futon.search.ui.MangaSuggestionsProvider import io.github.landwarderer.futon.sync.domain.SyncController import io.github.landwarderer.futon.widget.WidgetUpdater diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/BaseApp.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/BaseApp.kt index dbb198838f..cd2f35a50b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/BaseApp.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/BaseApp.kt @@ -25,7 +25,7 @@ import io.github.landwarderer.futon.core.util.ext.processLifecycleScope import io.github.landwarderer.futon.local.data.LocalStorageChanges import io.github.landwarderer.futon.local.data.index.LocalMangaIndex import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.util.suspendlazy.getOrNull +import org.koitharu.kotatsu.parsers.util.suspendlazy.getOrNull import io.github.landwarderer.futon.settings.work.WorkScheduleManager import java.security.Security import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/cache/ExpiringLruCache.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/cache/ExpiringLruCache.kt index e4461c7064..0b160d7ab1 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/cache/ExpiringLruCache.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/cache/ExpiringLruCache.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.core.cache import io.github.landwarderer.futon.core.util.SynchronizedSieveCache -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource import java.util.concurrent.TimeUnit import io.github.landwarderer.futon.core.cache.MemoryContentCache.Key as CacheKey diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/cache/MemoryContentCache.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/cache/MemoryContentCache.kt index 5c5b95f9eb..856ab8d4e3 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/cache/MemoryContentCache.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/cache/MemoryContentCache.kt @@ -4,9 +4,9 @@ import android.app.Application import android.content.ComponentCallbacks2 import android.content.res.Configuration import io.github.landwarderer.futon.core.util.ext.isLowRamDevice -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaSource import java.util.concurrent.TimeUnit import javax.inject.Inject import javax.inject.Singleton diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/db/DatabasePrePopulateCallback.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/db/DatabasePrePopulateCallback.kt index 8a589edb07..ebcc2425c4 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/db/DatabasePrePopulateCallback.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/db/DatabasePrePopulateCallback.kt @@ -4,7 +4,7 @@ import android.content.res.Resources import androidx.room.RoomDatabase import androidx.sqlite.db.SupportSQLiteDatabase import io.github.landwarderer.futon.R -import io.github.landwarderer.futon.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.SortOrder class DatabasePrePopulateCallback(private val resources: Resources) : RoomDatabase.Callback() { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/db/dao/MangaSourcesDao.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/db/dao/MangaSourcesDao.kt index 9cfe68168c..703043b655 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/db/dao/MangaSourcesDao.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/db/dao/MangaSourcesDao.kt @@ -16,8 +16,8 @@ import kotlinx.coroutines.isActive import io.github.landwarderer.futon.BuildConfig import io.github.landwarderer.futon.core.db.entity.MangaSourceEntity import io.github.landwarderer.futon.explore.data.SourcesSortOrder -import io.github.landwarderer.futon.parsers.network.CloudFlareHelper -import io.github.landwarderer.futon.parsers.network.CloudFlareHelper.PROTECTION_CAPTCHA +import org.koitharu.kotatsu.parsers.network.CloudFlareHelper +import org.koitharu.kotatsu.parsers.network.CloudFlareHelper.PROTECTION_CAPTCHA @Dao abstract class MangaSourcesDao { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/db/entity/EntityMapping.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/db/entity/EntityMapping.kt index 0883631dfb..5864d44101 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/db/entity/EntityMapping.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/db/entity/EntityMapping.kt @@ -1,17 +1,17 @@ package io.github.landwarderer.futon.core.db.entity import io.github.landwarderer.futon.core.model.MangaSource -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaState -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.util.longHashCode -import io.github.landwarderer.futon.parsers.util.mapToSet -import io.github.landwarderer.futon.parsers.util.nullIfEmpty -import io.github.landwarderer.futon.parsers.util.toArraySet -import io.github.landwarderer.futon.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.longHashCode +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.toArraySet +import org.koitharu.kotatsu.parsers.util.toTitleCase private const val VALUES_DIVIDER = '\n' diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/db/migrations/Migration16To17.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/db/migrations/Migration16To17.kt index 506e67ca00..b1795ddd15 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/db/migrations/Migration16To17.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/db/migrations/Migration16To17.kt @@ -4,7 +4,7 @@ import android.content.Context import androidx.preference.PreferenceManager import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase -import io.github.landwarderer.futon.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaParserSource class Migration16To17(context: Context) : Migration(16, 17) { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/db/migrations/Migration8To9.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/db/migrations/Migration8To9.kt index ebbfdee250..5546f6a987 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/db/migrations/Migration8To9.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/db/migrations/Migration8To9.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.core.db.migrations import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase -import io.github.landwarderer.futon.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.SortOrder class Migration8To9 : Migration(8, 9) { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareBlockedException.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareBlockedException.kt index 7825556f7a..d51c85f538 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareBlockedException.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareBlockedException.kt @@ -1,8 +1,8 @@ package io.github.landwarderer.futon.core.exceptions import io.github.landwarderer.futon.core.model.UnknownMangaSource -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.network.CloudFlareHelper +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.network.CloudFlareHelper class CloudFlareBlockedException( override val url: String, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareException.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareException.kt index 13041fceba..1decaefae3 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareException.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareException.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.core.exceptions import okio.IOException -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource abstract class CloudFlareException( message: String, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareProtectedException.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareProtectedException.kt index 27a5aecf27..bbacb533d0 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareProtectedException.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/CloudFlareProtectedException.kt @@ -2,8 +2,8 @@ package io.github.landwarderer.futon.core.exceptions import okhttp3.Headers import io.github.landwarderer.futon.core.model.UnknownMangaSource -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.network.CloudFlareHelper +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.network.CloudFlareHelper class CloudFlareProtectedException( override val url: String, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/EmptyMangaException.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/EmptyMangaException.kt index a699837cb8..5f36d66c66 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/EmptyMangaException.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/EmptyMangaException.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.core.exceptions import io.github.landwarderer.futon.details.ui.pager.EmptyMangaReason -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga class EmptyMangaException( val reason: EmptyMangaReason?, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/InteractiveActionRequiredException.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/InteractiveActionRequiredException.kt index 1e44e427ef..3e8d37ee36 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/InteractiveActionRequiredException.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/InteractiveActionRequiredException.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.core.exceptions import okio.IOException -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource class InteractiveActionRequiredException( val source: MangaSource, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/UnsupportedSourceException.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/UnsupportedSourceException.kt index 9aaed3eed0..f6711ae4f5 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/UnsupportedSourceException.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/UnsupportedSourceException.kt @@ -1,6 +1,6 @@ package io.github.landwarderer.futon.core.exceptions -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga class UnsupportedSourceException( message: String?, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/CaptchaHandler.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/CaptchaHandler.kt index d2ab4376d5..12f8953854 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/CaptchaHandler.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/CaptchaHandler.kt @@ -46,10 +46,10 @@ import io.github.landwarderer.futon.core.util.ext.mangaSourceExtra import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.core.util.ext.processLifecycleScope import io.github.landwarderer.futon.core.util.ext.toBitmapOrNull -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.network.CloudFlareHelper -import io.github.landwarderer.futon.parsers.util.mapToArray -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.network.CloudFlareHelper +import org.koitharu.kotatsu.parsers.util.mapToArray +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/DialogErrorObserver.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/DialogErrorObserver.kt index 9e1018d098..4f65a3f3d6 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/DialogErrorObserver.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/DialogErrorObserver.kt @@ -8,7 +8,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.util.ext.getDisplayMessage import io.github.landwarderer.futon.core.util.ext.isSerializable -import io.github.landwarderer.futon.parsers.exception.ParseException +import org.koitharu.kotatsu.parsers.exception.ParseException class DialogErrorObserver( host: View, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/ExceptionResolver.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/ExceptionResolver.kt index eaa845ab94..017b8e6a7c 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/ExceptionResolver.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/ExceptionResolver.kt @@ -27,10 +27,10 @@ import io.github.landwarderer.futon.core.ui.dialog.buildAlertDialog import io.github.landwarderer.futon.core.util.ext.isHttpUrl import io.github.landwarderer.futon.core.util.ext.restartApplication import io.github.landwarderer.futon.details.ui.pager.EmptyMangaReason -import io.github.landwarderer.futon.parsers.exception.AuthRequiredException -import io.github.landwarderer.futon.parsers.exception.NotFoundException -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.exception.AuthRequiredException +import org.koitharu.kotatsu.parsers.exception.NotFoundException +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource import io.github.landwarderer.futon.scrobbling.common.domain.ScrobblerAuthRequiredException import io.github.landwarderer.futon.scrobbling.common.ui.ScrobblerAuthHelper import io.github.landwarderer.futon.settings.sources.auth.SourceAuthActivity diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/SnackbarErrorObserver.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/SnackbarErrorObserver.kt index 5e4e6bf78a..84fca8380a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/SnackbarErrorObserver.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/exceptions/resolve/SnackbarErrorObserver.kt @@ -9,7 +9,7 @@ import io.github.landwarderer.futon.core.util.ext.getDisplayMessage import io.github.landwarderer.futon.core.util.ext.isSerializable import io.github.landwarderer.futon.main.ui.owners.BottomNavOwner import io.github.landwarderer.futon.main.ui.owners.BottomSheetOwner -import io.github.landwarderer.futon.parsers.exception.ParseException +import org.koitharu.kotatsu.parsers.exception.ParseException class SnackbarErrorObserver( host: View, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/github/AppUpdateRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/github/AppUpdateRepository.kt index cd2098e5c2..6ffc408f2f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/github/AppUpdateRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/github/AppUpdateRepository.kt @@ -7,8 +7,8 @@ import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.network.BaseHttpClient import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.util.await -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.await +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/github/VersionId.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/github/VersionId.kt index 7220d434fb..21edbdad90 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/github/VersionId.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/github/VersionId.kt @@ -1,6 +1,6 @@ package io.github.landwarderer.futon.core.github -import io.github.landwarderer.futon.parsers.util.digits +import org.koitharu.kotatsu.parsers.util.digits import java.util.Locale data class VersionId( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/image/BitmapDecoderCompat.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/image/BitmapDecoderCompat.kt index 308992ed82..54dbc9050f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/image/BitmapDecoderCompat.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/image/BitmapDecoderCompat.kt @@ -14,7 +14,7 @@ import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.core.util.ext.readByteBuffer import io.github.landwarderer.futon.core.util.ext.toByteBuffer import io.github.landwarderer.futon.core.util.ext.toMimeTypeOrNull -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import okio.IOException import okio.buffer import okio.source diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/image/MangaSourceHeaderInterceptor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/image/MangaSourceHeaderInterceptor.kt index 89a6c5b96d..ff3bda33b6 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/image/MangaSourceHeaderInterceptor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/image/MangaSourceHeaderInterceptor.kt @@ -6,7 +6,7 @@ import coil3.request.ImageResult import io.github.landwarderer.futon.core.model.unwrap import io.github.landwarderer.futon.core.network.CommonHeaders import io.github.landwarderer.futon.core.util.ext.mangaSourceKey -import io.github.landwarderer.futon.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaParserSource class MangaSourceHeaderInterceptor : Interceptor { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/GenericSortOrder.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/GenericSortOrder.kt index 9d1c5bda0e..9c7bbca39c 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/GenericSortOrder.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/GenericSortOrder.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.core.model import androidx.annotation.StringRes import io.github.landwarderer.futon.R -import io.github.landwarderer.futon.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.SortOrder @Deprecated("") enum class GenericSortOrder( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/Manga.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/Manga.kt index f6ecc0864f..ce2b3f5765 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/Manga.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/Manga.kt @@ -14,15 +14,15 @@ import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.ui.model.MangaOverride import io.github.landwarderer.futon.core.util.ext.iterator import io.github.landwarderer.futon.details.ui.model.ChapterListItem -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.Demographic -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaState -import io.github.landwarderer.futon.parsers.util.findById -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.Demographic +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.util.findById +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.mapToSet import com.google.android.material.R as materialR @JvmName("mangaIds") diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSource.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSource.kt index 231e924286..97ad54b86b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSource.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSource.kt @@ -14,10 +14,10 @@ import io.github.landwarderer.futon.core.parser.external.ExternalMangaSource import io.github.landwarderer.futon.core.util.ext.getDisplayName import io.github.landwarderer.futon.core.util.ext.toLocale import io.github.landwarderer.futon.core.util.ext.toLocaleOrNull -import io.github.landwarderer.futon.parsers.model.ContentType -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.splitTwoParts +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.splitTwoParts import java.util.Locale data object LocalMangaSource : MangaSource { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSourceInfo.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSourceInfo.kt index 9016a3f50e..0c7f1088ce 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSourceInfo.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSourceInfo.kt @@ -1,6 +1,6 @@ package io.github.landwarderer.futon.core.model -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource data class MangaSourceInfo( val mangaSource: MangaSource, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSourceSerializer.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSourceSerializer.kt index 552ed5d51f..612632fab2 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSourceSerializer.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/MangaSourceSerializer.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.descriptors.serialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource object MangaSourceSerializer : KSerializer { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/MangaSourceParceler.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/MangaSourceParceler.kt index 77d7add2b2..dd147be913 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/MangaSourceParceler.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/MangaSourceParceler.kt @@ -3,7 +3,7 @@ package io.github.landwarderer.futon.core.model.parcelable import android.os.Parcel import kotlinx.parcelize.Parceler import io.github.landwarderer.futon.core.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource class MangaSourceParceler : Parceler { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableChapter.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableChapter.kt index 7b5f85f19e..d6a61040e8 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableChapter.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableChapter.kt @@ -5,7 +5,7 @@ import android.os.Parcelable import kotlinx.parcelize.Parceler import kotlinx.parcelize.Parcelize import io.github.landwarderer.futon.core.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaChapter @Parcelize data class ParcelableChapter( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableManga.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableManga.kt index 1035715f9f..8180493d4e 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableManga.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableManga.kt @@ -9,7 +9,7 @@ import io.github.landwarderer.futon.core.util.ext.readParcelableCompat import io.github.landwarderer.futon.core.util.ext.readSerializableCompat import io.github.landwarderer.futon.core.util.ext.readStringSet import io.github.landwarderer.futon.core.util.ext.writeStringSet -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga @Parcelize data class ParcelableManga( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaListFilter.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaListFilter.kt index a21dffd985..1607926f19 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaListFilter.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaListFilter.kt @@ -9,11 +9,11 @@ import io.github.landwarderer.futon.core.util.ext.readEnumSet import io.github.landwarderer.futon.core.util.ext.readParcelableCompat import io.github.landwarderer.futon.core.util.ext.readSerializableCompat import io.github.landwarderer.futon.core.util.ext.writeEnumSet -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.ContentType -import io.github.landwarderer.futon.parsers.model.Demographic -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.Demographic +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaState object MangaListFilterParceler : Parceler { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaPage.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaPage.kt index 9352d75312..e6b767d611 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaPage.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaPage.kt @@ -6,7 +6,7 @@ import kotlinx.parcelize.Parceler import kotlinx.parcelize.Parcelize import kotlinx.parcelize.TypeParceler import io.github.landwarderer.futon.core.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaPage object MangaPageParceler : Parceler { override fun create(parcel: Parcel) = MangaPage( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaTags.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaTags.kt index a77b3497ad..98c70c3ac7 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaTags.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/model/parcelable/ParcelableMangaTags.kt @@ -6,7 +6,7 @@ import kotlinx.parcelize.Parceler import kotlinx.parcelize.Parcelize import kotlinx.parcelize.TypeParceler import io.github.landwarderer.futon.core.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.MangaTag object MangaTagParceler : Parceler { override fun create(parcel: Parcel) = MangaTag( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/AppRouter.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/AppRouter.kt index 340af3e6cd..88367ddeed 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/AppRouter.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/AppRouter.kt @@ -77,15 +77,15 @@ import io.github.landwarderer.futon.local.ui.ImportDialogFragment import io.github.landwarderer.futon.local.ui.info.LocalInfoDialog import io.github.landwarderer.futon.main.ui.MainActivity import io.github.landwarderer.futon.main.ui.welcome.WelcomeSheet -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.util.ellipsize -import io.github.landwarderer.futon.parsers.util.isNullOrEmpty -import io.github.landwarderer.futon.parsers.util.mapToArray +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.ellipsize +import org.koitharu.kotatsu.parsers.util.isNullOrEmpty +import org.koitharu.kotatsu.parsers.util.mapToArray import io.github.landwarderer.futon.reader.ui.colorfilter.ColorFilterConfigActivity import io.github.landwarderer.futon.reader.ui.config.ReaderConfigSheet import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblerService diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/MangaIntent.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/MangaIntent.kt index b0d9246d13..3fee21c9b1 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/MangaIntent.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/MangaIntent.kt @@ -9,7 +9,7 @@ import io.github.landwarderer.futon.core.nav.AppRouter.Companion.KEY_ID import io.github.landwarderer.futon.core.nav.AppRouter.Companion.KEY_MANGA import io.github.landwarderer.futon.core.util.ext.getParcelableCompat import io.github.landwarderer.futon.core.util.ext.getParcelableExtraCompat -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga class MangaIntent private constructor( @JvmField val manga: Manga?, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/ReaderIntent.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/ReaderIntent.kt index 2a3dc93ed5..b0f33fc1da 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/ReaderIntent.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/nav/ReaderIntent.kt @@ -5,7 +5,7 @@ import android.content.Intent import io.github.landwarderer.futon.BuildConfig import io.github.landwarderer.futon.bookmarks.domain.Bookmark import io.github.landwarderer.futon.core.model.parcelable.ParcelableManga -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.reader.ui.ReaderActivity import io.github.landwarderer.futon.reader.ui.ReaderState diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/CloudFlareInterceptor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/CloudFlareInterceptor.kt index 8ad3e33cdb..64dfcb05c3 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/CloudFlareInterceptor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/CloudFlareInterceptor.kt @@ -5,8 +5,8 @@ import okhttp3.Response import okio.IOException import io.github.landwarderer.futon.core.exceptions.CloudFlareBlockedException import io.github.landwarderer.futon.core.exceptions.CloudFlareProtectedException -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.network.CloudFlareHelper +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.network.CloudFlareHelper class CloudFlareInterceptor : Interceptor { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/CommonHeadersInterceptor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/CommonHeadersInterceptor.kt index b76b99b00a..eb78d2b621 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/CommonHeadersInterceptor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/CommonHeadersInterceptor.kt @@ -7,10 +7,10 @@ import io.github.landwarderer.futon.core.parser.MangaLoaderContextImpl import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.parser.ParserMangaRepository import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.mergeWith -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.mergeWith +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import okhttp3.Headers import okhttp3.Interceptor import okhttp3.Interceptor.Chain diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/NetworkModule.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/NetworkModule.kt index 4ec8f2e5f3..8bb75f04db 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/NetworkModule.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/NetworkModule.kt @@ -1,7 +1,6 @@ package io.github.landwarderer.futon.core.network import android.content.Context -import android.util.Log import dagger.Binds import dagger.Module import dagger.Provides @@ -17,6 +16,7 @@ import io.github.landwarderer.futon.core.network.imageproxy.RealImageProxyInterc import io.github.landwarderer.futon.core.network.proxy.ProxyProvider import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.util.ext.assertNotInMainThread +import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.local.data.LocalStorageManager import okhttp3.Cache import okhttp3.CookieJar @@ -44,7 +44,7 @@ interface NetworkModule { ): MutableCookieJar = runCatching { AndroidCookieJar() }.getOrElse { e -> - Log.e("NetworkModule::provideCookieJar", e.stackTraceToString()) + e.printStackTraceDebug("NetworkModule::provideCookieJar") // WebView is not available PreferencesCookieJar(context) } @@ -73,9 +73,13 @@ interface NetworkModule { proxySelector(proxyProvider.selector) proxyAuthenticator(proxyProvider.authenticator) dns(DoHManager(cache, settings)) - installExtraCertificates(contextProvider.get()) - applyTlsConfiguration() + if (settings.isSSLBypassEnabled) { + disableCertificateVerification() + } else { + installExtraCertificates(contextProvider.get()) + } cache(cache) + //addInterceptor(GZipInterceptor()) addInterceptor(CloudFlareInterceptor()) addInterceptor(RateLimitInterceptor()) if (BuildConfig.DEBUG) { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/RateLimitInterceptor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/RateLimitInterceptor.kt index ff1b4eab45..e3f72802f8 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/RateLimitInterceptor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/RateLimitInterceptor.kt @@ -3,7 +3,7 @@ package io.github.landwarderer.futon.core.network import okhttp3.Interceptor import okhttp3.Response import okhttp3.internal.closeQuietly -import io.github.landwarderer.futon.parsers.exception.TooManyRequestExceptions +import org.koitharu.kotatsu.parsers.exception.TooManyRequestExceptions import java.time.ZonedDateTime import java.time.format.DateTimeFormatter import java.util.concurrent.TimeUnit diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/SSLUtils.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/SSLUtils.kt index 62206db1bf..64e745030f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/SSLUtils.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/SSLUtils.kt @@ -6,67 +6,33 @@ import android.content.res.AssetManager import android.util.Log import io.github.landwarderer.futon.BuildConfig import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import okhttp3.CipherSuite -import okhttp3.ConnectionSpec import okhttp3.OkHttpClient -import okhttp3.TlsVersion import okhttp3.tls.HandshakeCertificates -import org.conscrypt.Conscrypt import java.security.SecureRandom import java.security.cert.CertificateFactory import java.security.cert.X509Certificate import javax.net.ssl.SSLContext +import javax.net.ssl.SSLSocketFactory import javax.net.ssl.X509TrustManager -@SuppressLint("CustomX509TrustManager, TrustAllX509TrustManager") -fun OkHttpClient.Builder.applyTlsConfiguration() = also { builder -> +@SuppressLint("CustomX509TrustManager") +fun OkHttpClient.Builder.disableCertificateVerification() = also { builder -> runCatching { val trustAllCerts = object : X509TrustManager { - override fun checkClientTrusted(p0: Array?, p1: String?) {} - override fun checkServerTrusted(p0: Array?, p1: String?) {} + override fun checkClientTrusted(chain: Array, authType: String) = Unit + + override fun checkServerTrusted(chain: Array, authType: String) = Unit + override fun getAcceptedIssuers(): Array = emptyArray() } - - val sslContext = SSLContext.getInstance("TLS", Conscrypt.newProvider()) + val sslContext = SSLContext.getInstance("SSL") sslContext.init(null, arrayOf(trustAllCerts), SecureRandom()) - - val spec = ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) - .tlsVersions( - TlsVersion.TLS_1_3, - TlsVersion.TLS_1_2, - TlsVersion.TLS_1_1, - TlsVersion.TLS_1_0, - ) - .cipherSuites( - CipherSuite.TLS_AES_128_GCM_SHA256, - CipherSuite.TLS_AES_256_GCM_SHA384, - CipherSuite.TLS_CHACHA20_POLY1305_SHA256, - CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, - CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, - ) - .build() - - builder.sslSocketFactory(sslContext.socketFactory, trustAllCerts) - builder.connectionSpecs(listOf(spec, ConnectionSpec.CLEARTEXT)) + val sslSocketFactory: SSLSocketFactory = sslContext.socketFactory + builder.sslSocketFactory(sslSocketFactory, trustAllCerts) builder.hostnameVerifier { _, _ -> true } - - // "Fake" browser to avoid 403s/Handshake blocks because Cloudflare checks the User-Agent - // against the TLS Fingerprint and if they don't match, it triggers a challenge or a block. - builder.addInterceptor { chain -> - val request = chain.request().newBuilder() - .header( - "User-Agent", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36", - ) - .header("Sec-CH-UA", "\"Chromium\";v=\"146\", \"Not(A:Brand\";v=\"24\", \"Google Chrome\";v=\"146\"") - .header("Sec-CH-UA-Mobile", "?0") - .header("Sec-CH-UA-Platform", "\"Windows\"") - .build() - chain.proceed(request) - } - }.onFailure { it.printStackTraceDebug("SSLUtils::applyTlsConfiguration") } + }.onFailure { + it.printStackTraceDebug() + } } fun OkHttpClient.Builder.installExtraCertificates(context: Context) = also { builder -> @@ -88,7 +54,9 @@ private fun loadCert(context: Context, path: String): X509Certificate? = runCatc context.assets.open(path, AssetManager.ACCESS_STREAMING).use { cf.generateCertificate(it) } as X509Certificate -}.onFailure { it.printStackTraceDebug("SSLUtils::loadCert") } +}.onFailure { e -> + e.printStackTraceDebug() +} .onSuccess { if (BuildConfig.DEBUG) { Log.i("ExtraCerts", "Loaded cert $path") diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/imageproxy/BaseImageProxyInterceptor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/imageproxy/BaseImageProxyInterceptor.kt index a19de274fb..2e9d0fec5e 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/imageproxy/BaseImageProxyInterceptor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/imageproxy/BaseImageProxyInterceptor.kt @@ -17,9 +17,9 @@ import org.jsoup.HttpStatusException import io.github.landwarderer.futon.BuildConfig import io.github.landwarderer.futon.core.exceptions.CloudFlareBlockedException import io.github.landwarderer.futon.core.util.ext.ensureSuccess -import io.github.landwarderer.futon.parsers.util.await -import io.github.landwarderer.futon.parsers.util.isHttpOrHttps -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.await +import org.koitharu.kotatsu.parsers.util.isHttpOrHttps +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import java.net.HttpURLConnection import java.util.Collections diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/imageproxy/RealImageProxyInterceptor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/imageproxy/RealImageProxyInterceptor.kt index aa3ca21c93..7b2810d0f0 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/imageproxy/RealImageProxyInterceptor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/imageproxy/RealImageProxyInterceptor.kt @@ -10,7 +10,7 @@ import okhttp3.Response import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.prefs.observeAsStateFlow import io.github.landwarderer.futon.core.util.ext.processLifecycleScope -import io.github.landwarderer.futon.parsers.util.await +import org.koitharu.kotatsu.parsers.util.await import javax.inject.Inject import javax.inject.Singleton diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/CaptchaContinuationClient.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/CaptchaContinuationClient.kt index a7f450aaf0..e2ae4a1c76 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/CaptchaContinuationClient.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/CaptchaContinuationClient.kt @@ -1,30 +1,82 @@ package io.github.landwarderer.futon.core.network.webview import android.graphics.Bitmap +import android.webkit.WebResourceRequest +import android.webkit.WebResourceResponse import android.webkit.WebView import io.github.landwarderer.futon.core.network.cookies.MutableCookieJar -import io.github.landwarderer.futon.parsers.network.CloudFlareHelper +import org.koitharu.kotatsu.parsers.network.CloudFlareHelper import kotlin.coroutines.Continuation +import okhttp3.OkHttpClient +import okhttp3.Request +import java.util.concurrent.TimeUnit +import kotlin.toString class CaptchaContinuationClient( - private val cookieJar: MutableCookieJar, - private val targetUrl: String, - continuation: Continuation, + private val cookieJar: MutableCookieJar, + private val targetUrl: String, + continuation: Continuation, ) : ContinuationResumeWebViewClient(continuation) { - private val oldClearance = CloudFlareHelper.getClearanceCookie(cookieJar, targetUrl) + private val oldClearance = CloudFlareHelper.getClearanceCookie(cookieJar, targetUrl) - override fun onPageFinished(view: WebView?, url: String?) = Unit + override fun onPageFinished(view: WebView?, url: String?) = Unit - override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { - super.onPageStarted(view, url, favicon) - checkClearance(view) - } + override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { + super.onPageStarted(view, url, favicon) + checkClearance(view) + } - private fun checkClearance(view: WebView?) { - val clearance = CloudFlareHelper.getClearanceCookie(cookieJar, targetUrl) - if (clearance != null && clearance != oldClearance) { - resumeContinuation(view) - } - } + override fun shouldInterceptRequest(view: WebView?, request: WebResourceRequest?): WebResourceResponse? { + if (request == null) return null + + try { + // Skip POST requests + if (request.method == "POST") { + return super.shouldInterceptRequest(view, request) + } + + val client = OkHttpClient.Builder() + .connectTimeout(15, TimeUnit.SECONDS) + .readTimeout(15, TimeUnit.SECONDS) + .build() + + val requestBuilder = Request.Builder() + .url(request.url.toString()) + .method(request.method, null) + + val blockedHeaders = setOf( + "sec-ch-ua", + "sec-ch-ua-mobile", + "sec-ch-ua-platform", + "x-requested-with", + ) + // Add all headers except blocked + request.requestHeaders.forEach { (key, value) -> + if (key.lowercase() !in blockedHeaders) { + requestBuilder.addHeader(key, value) + } + } + + val response = client.newCall(requestBuilder.build()).execute() + + val contentType = response.header("Content-Type", "text/html") + val mimeType = contentType?.split(";")?.get(0)?.trim() ?: "text/html" + val charset = contentType?.substringAfter("charset=", "UTF-8")?.trim() ?: "UTF-8" + + return WebResourceResponse(mimeType, charset, response.body?.byteStream()).apply { + val headers = mutableMapOf() + response.headers.forEach { headers[it.first] = it.second } + setResponseHeaders(headers) + } + } catch (e: Exception) { + return null + } + } + private fun checkClearance(view: WebView?) { + val clearance = CloudFlareHelper.getClearanceCookie(cookieJar, targetUrl) + if (clearance != null && clearance != oldClearance) { + resumeContinuation(view) + } + } } diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/IntercptedRequest.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/IntercptedRequest.kt new file mode 100644 index 0000000000..3e38f2daf9 --- /dev/null +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/IntercptedRequest.kt @@ -0,0 +1,88 @@ +package io.github.landwarderer.futon.core.network.webview + +/** + * Represents a WebView request that was intercepted during page loading. + * Contains the URL, HTTP method, headers, and timestamp of the request. + */ +data class InterceptedRequest( + /** + * The full URL of the intercepted request + */ + val url: String, + + /** + * HTTP method (GET, POST, etc.) + */ + val method: String, + + /** + * Request headers as key-value pairs + */ + val headers: Map, + + /** + * Timestamp when the request was intercepted (System.currentTimeMillis()) + */ + val timestamp: Long, + + /** + * Optional request body for POST requests + */ + val body: String? = null, +) { + /** + * Extract parameter value from URL query string + */ + fun getQueryParameter(name: String): String? { + val query = url.substringAfter('?', "") + if (query.isEmpty()) return null + + return query.split('&') + .map { it.split('=', limit = 2) } + .find { it.size == 2 && it[0] == name } + ?.get(1) + } + + /** + * Check if URL matches a pattern + */ + fun urlMatches(pattern: Regex): Boolean = pattern.containsMatchIn(url) + + /** + * Check if URL contains a specific substring + */ + fun urlContains(substring: String): Boolean = url.contains(substring, ignoreCase = true) +} + +/** + * Callback interface for WebView request interception + */ +interface WebViewRequestInterceptor { + /** + * Called when a request is intercepted. + * Return true to capture this request, false to ignore it. + */ + fun shouldCaptureRequest(request: InterceptedRequest): Boolean + + /** + * Called when interception is complete (timeout or manual stop) + */ + fun onInterceptionComplete(capturedRequests: List) + + /** + * Called if interception fails due to error + */ + fun onInterceptionError(error: Throwable) +} + +/** + * Configuration for WebView request interception + */ +// kotlin +data class InterceptionConfig( + val timeoutMs: Long, + val maxRequests: Int = 100, + val urlPattern: Regex? = null, + val filterScript: String? = null, // JS containing predicate (last return) + val pageScript: String? = null // JS to actually run in the page +) diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/RequestInterceptorWebViewClient.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/RequestInterceptorWebViewClient.kt new file mode 100644 index 0000000000..7aa9308a82 --- /dev/null +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/RequestInterceptorWebViewClient.kt @@ -0,0 +1,142 @@ +package io.github.landwarderer.futon.core.network.webview + +import android.util.Log +import android.webkit.WebResourceRequest +import android.webkit.WebResourceResponse +import android.webkit.WebView +import androidx.annotation.WorkerThread +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import io.github.landwarderer.futon.browser.BrowserCallback +import io.github.landwarderer.futon.browser.BrowserClient +import io.github.landwarderer.futon.core.network.webview.adblock.AdBlock +import java.util.Collections +import java.util.concurrent.atomic.AtomicBoolean + +/** + * WebViewClient that intercepts and captures HTTP requests for VRF token extraction + * and other dynamic data extraction from AJAX requests. + */ +class RequestInterceptorWebViewClient( + callback: BrowserCallback, + adBlock: AdBlock?, + private val config: InterceptionConfig, + private val interceptor: WebViewRequestInterceptor, +) : BrowserClient(callback, adBlock) { + + private val capturedRequests = Collections.synchronizedList(mutableListOf()) + private val mutex = Mutex() + private val isCapturing = AtomicBoolean(true) + private val startTime = System.currentTimeMillis() + private val scriptInjected = AtomicBoolean(false) + + @WorkerThread + override fun shouldInterceptRequest( + view: WebView?, + request: WebResourceRequest? + ): WebResourceResponse? { + // Always call parent first for ad blocking and other functionality + val parentResponse = super.shouldInterceptRequest(view, request) + + // Capture request if still within timeout and capturing + if (isCapturing.get() && request != null && !isTimeoutReached()) { + captureRequestIfMatches(request) + } + + return parentResponse + } + + override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { + // Capture navigation events (like window.location.href = "...") + if (isCapturing.get() && request != null && !isTimeoutReached()) { + if (captureRequestIfMatches(request)) { + return true // Stop the WebView from loading the intercepted URL + } + } + return super.shouldOverrideUrlLoading(view, request) + } + + override fun onPageFinished(view: WebView, url: String) { + super.onPageFinished(view, url) + val script = config.pageScript + if (!script.isNullOrBlank() && scriptInjected.compareAndSet(false, true)) { + Log.d(TAG_VRF, "Injecting pageScript for URL: $url") + view.evaluateJavascript(script, null) + } else if (!script.isNullOrBlank()) { + Log.v(TAG_VRF, "PageScript already injected, skipping for URL: $url") + } + } + + /** + * @return true if the request was captured + */ + private fun captureRequestIfMatches(request: WebResourceRequest): Boolean { + try { + val interceptedRequest = InterceptedRequest( + url = request.url.toString(), + method = request.method, + headers = request.requestHeaders, + timestamp = System.currentTimeMillis() + ) + + // Check if request matches filtering criteria + val shouldCapture = when { + capturedRequests.size >= config.maxRequests -> false + config.urlPattern != null && !interceptedRequest.urlMatches(config.urlPattern) -> false + else -> interceptor.shouldCaptureRequest(interceptedRequest) + } + + if (shouldCapture) { + val shouldComplete = synchronized(capturedRequests) { + capturedRequests.add(interceptedRequest) + capturedRequests.size >= config.maxRequests + } + + // If we've reached maxRequests, stop capturing immediately + if (shouldComplete) { + Log.d(TAG_VRF, "Reached maxRequests (${config.maxRequests}), stopping capture immediately") + stopCapturing() + } + return true + } + } catch (e: Exception) { + // Don't let interception errors break the WebView + interceptor.onInterceptionError(e) + } + return false + } + + private fun isTimeoutReached(): Boolean { + return System.currentTimeMillis() - startTime > config.timeoutMs + } + + private fun completeInterception() { + try { + val finalRequests = synchronized(capturedRequests) { + capturedRequests.toList() + } + interceptor.onInterceptionComplete(finalRequests) + } catch (e: Exception) { + interceptor.onInterceptionError(e) + } + } + + /** + * Manually stop capturing requests before timeout + */ + fun stopCapturing() { + if (isCapturing.compareAndSet(true, false)) { + completeInterception() + } + } + + /** + * Get currently captured requests (thread-safe) + */ + fun getCapturedRequests(): List { + return synchronized(capturedRequests) { + capturedRequests.toList() + } + } +} diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/WebViewExecutor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/WebViewExecutor.kt index 5358b8cec3..a6636d83e9 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/WebViewExecutor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/WebViewExecutor.kt @@ -2,11 +2,18 @@ package io.github.landwarderer.futon.core.network.webview import android.content.Context import android.util.AndroidRuntimeException +import android.webkit.WebResourceRequest import android.webkit.WebSettings import android.webkit.WebView import android.webkit.WebViewClient import androidx.annotation.MainThread import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withContext +import kotlinx.coroutines.withTimeout import io.github.landwarderer.futon.core.exceptions.CloudFlareException import io.github.landwarderer.futon.core.network.CommonHeaders import io.github.landwarderer.futon.core.network.cookies.MutableCookieJar @@ -15,20 +22,17 @@ import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.parser.ParserMangaRepository import io.github.landwarderer.futon.core.util.ext.configureForParser import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.suspendCancellableCoroutine -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock -import kotlinx.coroutines.withContext -import kotlinx.coroutines.withTimeout +import io.github.landwarderer.futon.core.util.ext.sanitizeHeaderValue +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import java.lang.ref.WeakReference import javax.inject.Inject import javax.inject.Provider import javax.inject.Singleton import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine +import kotlin.ranges.contains @Singleton class WebViewExecutor @Inject constructor( @@ -51,28 +55,109 @@ class WebViewExecutor @Inject constructor( } } - suspend fun evaluateJs(baseUrl: String?, script: String): String? = mutex.withLock { - withContext(Dispatchers.Main.immediate) { - val webView = obtainWebView() - try { - if (!baseUrl.isNullOrEmpty()) { - suspendCoroutine { cont -> - webView.webViewClient = ContinuationResumeWebViewClient(cont) - webView.loadDataWithBaseURL(baseUrl, " ", "text/html", null, null) - } - } - suspendCoroutine { cont -> - webView.evaluateJavascript(script) { result -> - cont.resume(result?.takeUnless { it == "null" }) - } - } - } finally { - webView.reset() - } - } - } + suspend fun evaluateJs( + baseUrl: String?, + script: String, + timeoutMs: Long = 15000L, + preserveCookies: Boolean = false + ): String? = mutex.withLock { + withContext(Dispatchers.Main.immediate) { + val webView = obtainWebView() + val handler = android.os.Handler(android.os.Looper.getMainLooper()) + + try { + if (baseUrl.isNullOrEmpty()) { + return@withContext suspendCoroutine { cont -> + webView.evaluateJavascript(script) { cont.resume(it.takeUnless { r -> r == "null" }) } + } + } + + val baseUri = android.net.Uri.parse(baseUrl) + val originalHost = baseUri.host + + suspendCoroutine { continuation -> + var hasResumed = false + + val resumeOnce: (String?) -> Unit = { result -> + if (!hasResumed) { + hasResumed = true + handler.removeCallbacksAndMessages(null) + // Immediately stop further loading/polling + webView.stopLoading() + continuation.resume(result) + } + } + + val contentPoller = object : Runnable { + val startTime = System.currentTimeMillis() + override fun run() { + if (hasResumed) return + if (System.currentTimeMillis() - startTime >= timeoutMs) { + return + } + webView.evaluateJavascript(script) { result -> + if (hasResumed) return@evaluateJavascript + val content = result?.takeUnless { it == "null" } + if (!content.isNullOrBlank()) { + println("DEBUG: Content found via polling. Returning immediately.") + resumeOnce(content) + } else { + handler.postDelayed(this, 1000) + } + } + } + } + + webView.webViewClient = object : WebViewClient() { + override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { + val url = request?.url ?: return false + val requestHost = url.host + if (originalHost != null && requestHost != null && requestHost.contains(originalHost)) { + return false + } + println("DEBUG: Blocked redirect to external domain: $url") + return true + } + + override fun onPageFinished(view: WebView?, url: String?) { + super.onPageFinished(view, url) + if (hasResumed || url == "about:blank") return + println("DEBUG: onPageFinished. Checking content...") + view?.evaluateJavascript(script) { result -> + if (hasResumed) return@evaluateJavascript + val content = result?.takeUnless { it == "null" } + if (!content.isNullOrBlank()) { + println("DEBUG: Content found on pageFinished. Returning immediately.") + resumeOnce(content) + } + } + } + } + + val headers = mapOf("Accept-Language" to "en-EN,en;q=0.9") + if (preserveCookies) { + webView.loadDataWithBaseURL(baseUrl, " ", "text/html", null, null) + } else { + webView.loadUrl(baseUrl, headers) + } - suspend fun tryResolveCaptcha(exception: CloudFlareException, timeout: Long): Boolean = mutex.withLock { + handler.postDelayed(contentPoller, 1000) + + handler.postDelayed({ + if (!hasResumed) { + println("ERROR: Overall operation timed out.") + resumeOnce(null) + } + }, timeoutMs) + } + } finally { + // If already resumed, stopLoading() was called; this is a safety call. + webView.stopLoading() + } + } + } + + suspend fun tryResolveCaptcha(exception: CloudFlareException, timeout: Long): Boolean = mutex.withLock { runCatchingCancellable { withContext(Dispatchers.Main.immediate) { val webView = obtainWebView() @@ -100,29 +185,24 @@ class WebViewExecutor @Inject constructor( }.isSuccess } - private suspend fun obtainWebView(): WebView { - webViewCached?.get()?.let { - return it - } - return withContext(Dispatchers.Main.immediate) { - webViewCached?.get()?.let { - return@withContext it - } - WebView(context).also { - it.configureForParser(null) - webViewCached = WeakReference(it) - proxyProvider.applyWebViewConfig() - it.onResume() - it.resumeTimers() - } - } - } + @MainThread + private fun obtainWebView(): WebView = webViewCached?.get() ?: WebView(context).also { + it.configureForParser(null) + webViewCached = WeakReference(it) + } private fun MangaSource.getUserAgent(): String? { val repository = mangaRepositoryFactoryProvider.get().create(this) as? ParserMangaRepository return repository?.getRequestHeaders()?.get(CommonHeaders.USER_AGENT) } + @MainThread + fun getDefaultUserAgentSync() = runCatching { + obtainWebView().settings.userAgentString.sanitizeHeaderValue().trim().nullIfEmpty() + }.onFailure { e -> + e.printStackTraceDebug() + }.getOrNull() + @MainThread private fun WebView.reset() { stopLoading() diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/WebViewRequestInterceptorExecutor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/WebViewRequestInterceptorExecutor.kt new file mode 100644 index 0000000000..664e6e0997 --- /dev/null +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/WebViewRequestInterceptorExecutor.kt @@ -0,0 +1,327 @@ +package io.github.landwarderer.futon.core.network.webview + +import android.content.Context +import android.os.Handler +import android.os.Looper +import android.util.Log +import android.webkit.PermissionRequest +import android.webkit.WebChromeClient +import android.webkit.WebView +import androidx.annotation.MainThread +import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.withContext +import kotlinx.coroutines.withTimeout +import io.github.landwarderer.futon.browser.BrowserCallback +import io.github.landwarderer.futon.core.network.webview.adblock.AdBlock +import io.github.landwarderer.futon.core.util.ext.configureForParser +import java.lang.ref.WeakReference +import javax.inject.Inject +import javax.inject.Singleton +import kotlin.coroutines.resume +import kotlin.coroutines.resumeWithException + +const val TAG_VRF = "MF_VRF" + +@Singleton +class WebViewRequestInterceptorExecutor @Inject constructor( + @ApplicationContext private val context: Context, + private val adBlock: AdBlock?, +) { + + private var webViewCached: WeakReference? = null + private val mainHandler = Handler(Looper.getMainLooper()) + private val activeWebViews = mutableSetOf>() + + suspend fun interceptRequests( + url: String, + config: InterceptionConfig + ): List = withTimeout(config.timeoutMs + 5000) { + Log.d(TAG_VRF, "interceptRequests start url=$url injectPageScript=${!config.pageScript.isNullOrBlank()} hasFilterScript=${!config.filterScript.isNullOrBlank()}") + withContext(Dispatchers.Main) { + suspendCancellableCoroutine { continuation -> + val resultDeferred = CompletableDeferred>() + + val interceptor = object : WebViewRequestInterceptor { + override fun shouldCaptureRequest(request: InterceptedRequest): Boolean { + val urlOk = config.urlPattern?.containsMatchIn(request.url) ?: true + val scriptOk = try { + if (config.filterScript.isNullOrBlank()) true + else evaluateFilterPredicate(config.filterScript, request.url) + } catch (e: Throwable) { + Log.w(TAG_VRF, "Filter error ${e.message}") + false + } + val match = urlOk && scriptOk + Log.v(TAG_VRF, "REQ url=${request.url} method=${request.method} urlOk=$urlOk scriptOk=$scriptOk match=$match") + return match + } + + override fun onInterceptionComplete(capturedRequests: List) { + Log.d(TAG_VRF, "Interception complete captured=${capturedRequests.size}") + if (!resultDeferred.isCompleted) { + resultDeferred.complete(capturedRequests) + } + } + + override fun onInterceptionError(error: Throwable) { + Log.w(TAG_VRF, "Interception error", error) + if (!resultDeferred.isCompleted) { + resultDeferred.completeExceptionally(error) + } + } + } + + val callback = object : BrowserCallback { + override fun onLoadingStateChanged(isLoading: Boolean) { + Log.v(TAG_VRF, "Loading state changed isLoading=$isLoading") + } + override fun onTitleChanged(title: CharSequence, subtitle: CharSequence?) { + Log.v(TAG_VRF, "Title changed title=$title subtitle=$subtitle") + } + override fun onHistoryChanged() { + Log.v(TAG_VRF, "History changed") + } + } + + var webView: WebView? = null + try { + webView = obtainWebView() + val client = RequestInterceptorWebViewClient(callback, adBlock, config, interceptor) + webView.webViewClient = client + + webView.webChromeClient = object : WebChromeClient() { + override fun onPermissionRequest(request: PermissionRequest?) { + if (request?.resources?.contains(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID) == true) { + request.grant(request.resources) + } else { + super.onPermissionRequest(request) + } + } + } + + webView.loadUrl(url) + + val timeoutRunnable = Runnable { + Log.w(TAG_VRF, "Timeout, stopping capture") + client.stopCapturing() + } + mainHandler.postDelayed(timeoutRunnable, config.timeoutMs) + + resultDeferred.invokeOnCompletion { ex -> + mainHandler.removeCallbacks(timeoutRunnable) + // Clean up WebView after operation completes - must run on main thread + webView?.let { wv -> + Log.d(TAG_VRF, "Cleaning up WebView after operation") + if (Thread.currentThread() == Looper.getMainLooper().thread) { + // Already on main thread, destroy immediately + wv.stopLoading() + wv.destroy() + removeWebViewFromTracking(wv) + if (ex != null) continuation.resumeWithException(ex) + else continuation.resume(resultDeferred.getCompleted()) + } else { + // Must post to main thread, but wait for completion + mainHandler.post { + wv.stopLoading() + wv.destroy() + removeWebViewFromTracking(wv) + if (ex != null) continuation.resumeWithException(ex) + else continuation.resume(resultDeferred.getCompleted()) + } + } + } ?: run { + // No WebView to clean up, resume immediately + if (ex != null) continuation.resumeWithException(ex) + else continuation.resume(resultDeferred.getCompleted()) + } + } + continuation.invokeOnCancellation { + client.stopCapturing() + mainHandler.removeCallbacks(timeoutRunnable) + // Clean up WebView on cancellation - must run on main thread + webView?.let { wv -> + Log.d(TAG_VRF, "Cleaning up WebView on cancellation") + if (Thread.currentThread() == Looper.getMainLooper().thread) { + // Already on main thread, destroy immediately + wv.stopLoading() + wv.destroy() + removeWebViewFromTracking(wv) + } else { + // Must post to main thread for cleanup + mainHandler.post { + wv.stopLoading() + wv.destroy() + removeWebViewFromTracking(wv) + } + } + } + if (!resultDeferred.isCompleted) resultDeferred.cancel() + } + } catch (e: Exception) { + // Clean up WebView on exception - must run on main thread + webView?.let { wv -> + Log.d(TAG_VRF, "Cleaning up WebView on exception") + if (Thread.currentThread() == Looper.getMainLooper().thread) { + // Already on main thread, destroy immediately + wv.destroy() + removeWebViewFromTracking(wv) + continuation.resumeWithException(e) + } else { + // Must post to main thread, then resume with exception + mainHandler.post { + wv.destroy() + removeWebViewFromTracking(wv) + continuation.resumeWithException(e) + } + } + } ?: continuation.resumeWithException(e) + } + } + } + } + + suspend fun captureWebViewUrls( + pageUrl: String, + urlPattern: Regex, + timeout: Long = 30000L + ): List { + val config = InterceptionConfig( + timeoutMs = timeout, + urlPattern = urlPattern, + maxRequests = 1 + ) + return interceptRequests(pageUrl, config) + .also { Log.d(TAG_VRF, "captureWebViewUrls matched=${it.size}") } + .map { it.url } + } + + @MainThread + private fun obtainWebView(): WebView { + // Clean up any previous WebView instances + cleanupOldWebViews() + + val wv = WebView(context).apply { + configureForParser(null) + // Clear any existing state + clearHistory() + clearCache(true) + } + Log.d(TAG_VRF, "Created fresh WebView instance") + + // Track this WebView + val webViewRef = WeakReference(wv) + webViewCached = webViewRef + synchronized(activeWebViews) { + activeWebViews.add(webViewRef) + } + + return wv + } + + @MainThread + private fun cleanupOldWebViews() { + synchronized(activeWebViews) { + val iterator = activeWebViews.iterator() + while (iterator.hasNext()) { + val ref = iterator.next() + val webView = ref.get() + if (webView == null) { + // WebView was garbage collected + iterator.remove() + } else { + // Destroy still-active WebView + Log.d(TAG_VRF, "Destroying previous WebView instance") + webView.destroy() + iterator.remove() + } + } + } + webViewCached = null + } + + @MainThread + private fun removeWebViewFromTracking(webView: WebView) { + synchronized(activeWebViews) { + activeWebViews.removeAll { it.get() == webView || it.get() == null } + } + if (webViewCached?.get() == webView) { + webViewCached = null + } + } +} + +// If you added evaluateFilterPredicate earlier, keep it here. +fun evaluateFilterPredicate(script: String, requestUrl: String): Boolean { + Log.v(TAG_VRF, "Full script: '$script'") + + val returnIdx = script.lastIndexOf("return") + if (returnIdx == -1) { + Log.v(TAG_VRF, "No return in script, capturing all. url=$requestUrl") + return true + } + + // Extract everything after "return " until end of script, then remove semicolon if present + val afterReturn = script.substring(returnIdx + 6).trim() + val expr = if (afterReturn.endsWith(";")) { + afterReturn.dropLast(1).trim() + } else { + afterReturn + } + + if (expr.isEmpty()) { + Log.v(TAG_VRF, "Empty return expression, capturing all. url=$requestUrl") + return true + } + + Log.v(TAG_VRF, "Evaluating predicate for url=$requestUrl expr='$expr'") + + // Simple check for url.includes('vrf=') - handle it directly without complex parsing + if (expr == "url.includes('vrf=')" || expr == """url.includes("vrf=")""") { + val contains = requestUrl.contains("vrf=") + val status = if (contains) "Predicate MATCH" else "Predicate MISS" + Log.d(TAG_VRF, "$status url=$requestUrl expr=$expr contains=$contains") + return contains + } + + // Fallback to complex parsing for other expressions + val orClauses = expr.split("||").map { it.trim() } + for (clause in orClauses) { + val andTerms = clause.trim().trim('(', ')') + .split("&&").map { it.trim() }.filter { it.isNotEmpty() } + var allMatch = true + + Log.v(TAG_VRF, "Checking clause: '$clause' with ${andTerms.size} AND terms") + + for (term in andTerms) { + Log.v(TAG_VRF, "Processing term: '$term'") + + // Handle url.includes('...') or url.includes("...") + val singleQuoteMatch = Regex("""url\.includes\(\s*'([^']*)'\s*\)""").find(term) + val doubleQuoteMatch = Regex("""url\.includes\(\s*"([^"]*)"\s*\)""").find(term) + + val match = singleQuoteMatch ?: doubleQuoteMatch + if (match != null) { + val needle = match.groupValues[1] + val contains = requestUrl.contains(needle) + Log.v(TAG_VRF, "Term: '$term' -> needle: '$needle' -> contains: $contains") + if (!contains) { + allMatch = false + break + } + } else { + Log.v(TAG_VRF, "Term does not match url.includes pattern: '$term'") + allMatch = false + break + } + } + if (allMatch) { + Log.d(TAG_VRF, "Predicate MATCH url=$requestUrl clause='$clause'") + return true + } + } + Log.d(TAG_VRF, "Predicate MISS url=$requestUrl expr='$expr'") + return false +} diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/adblock/AdBlock.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/adblock/AdBlock.kt index d26a9b3ef8..e0358d804d 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/adblock/AdBlock.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/network/webview/adblock/AdBlock.kt @@ -10,9 +10,9 @@ import io.github.landwarderer.futon.core.network.CommonHeaders import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.util.ext.isNotEmpty import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.util.await -import io.github.landwarderer.futon.parsers.util.requireBody -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.await +import org.koitharu.kotatsu.parsers.util.requireBody +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.OkHttpClient diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/os/AppShortcutManager.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/os/AppShortcutManager.kt index 5e4388590a..54b5e30f00 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/os/AppShortcutManager.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/os/AppShortcutManager.kt @@ -30,11 +30,11 @@ import io.github.landwarderer.futon.core.util.ext.mangaSourceExtra import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.core.util.ext.processLifecycleScope import io.github.landwarderer.futon.history.data.HistoryRepository -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.mapNotNullToSet -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/os/AppValidator.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/os/AppValidator.kt index 02da60edaa..74a8d50bf1 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/os/AppValidator.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/os/AppValidator.kt @@ -6,7 +6,7 @@ import android.content.pm.PackageManager import androidx.core.content.pm.PackageInfoCompat import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.Dispatchers -import io.github.landwarderer.futon.parsers.util.suspendlazy.suspendLazy +import org.koitharu.kotatsu.parsers.util.suspendlazy.suspendLazy import javax.inject.Inject import javax.inject.Singleton diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/os/RomCompat.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/os/RomCompat.kt index 13130cbb95..07b46b2892 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/os/RomCompat.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/os/RomCompat.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.core.os import kotlinx.coroutines.Dispatchers import org.jetbrains.annotations.Blocking -import io.github.landwarderer.futon.parsers.util.suspendlazy.suspendLazy +import org.koitharu.kotatsu.parsers.util.suspendlazy.suspendLazy import java.io.InputStreamReader object RomCompat { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/BitmapWrapper.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/BitmapWrapper.kt index 62746d3602..25aebe62c9 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/BitmapWrapper.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/BitmapWrapper.kt @@ -2,8 +2,8 @@ package io.github.landwarderer.futon.core.parser import android.graphics.Canvas import androidx.core.graphics.createBitmap -import io.github.landwarderer.futon.parsers.bitmap.Bitmap -import io.github.landwarderer.futon.parsers.bitmap.Rect +import org.koitharu.kotatsu.parsers.bitmap.Bitmap +import org.koitharu.kotatsu.parsers.bitmap.Rect import java.io.OutputStream import android.graphics.Bitmap as AndroidBitmap import android.graphics.Rect as AndroidRect diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/CachingMangaRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/CachingMangaRepository.kt index 5c7ad873b4..9ac9435771 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/CachingMangaRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/CachingMangaRepository.kt @@ -14,10 +14,10 @@ import io.github.landwarderer.futon.core.cache.MemoryContentCache import io.github.landwarderer.futon.core.cache.SafeDeferred import io.github.landwarderer.futon.core.util.MultiMutex import io.github.landwarderer.futon.core.util.ext.processLifecycleScope -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable abstract class CachingMangaRepository( private val cache: MemoryContentCache, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/EmptyMangaRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/EmptyMangaRepository.kt index 3b9b1e16e2..5cce9d3b1a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/EmptyMangaRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/EmptyMangaRepository.kt @@ -1,14 +1,14 @@ package io.github.landwarderer.futon.core.parser import io.github.landwarderer.futon.core.exceptions.UnsupportedSourceException -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaListFilterCapabilities -import io.github.landwarderer.futon.parsers.model.MangaListFilterOptions -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.SortOrder import java.util.EnumSet open class EmptyMangaRepository(override val source: MangaSource) : MangaRepository { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaDataRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaDataRepository.kt index e0b8cc6ede..3c94bc2d31 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaDataRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaDataRepository.kt @@ -26,10 +26,10 @@ import io.github.landwarderer.futon.core.os.AppShortcutManager import io.github.landwarderer.futon.core.prefs.ReaderMode import io.github.landwarderer.futon.core.ui.model.MangaOverride import io.github.landwarderer.futon.core.util.ext.toFileOrNull -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.util.nullIfEmpty import io.github.landwarderer.futon.reader.domain.ReaderColorFilter import javax.inject.Inject import javax.inject.Provider diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaLinkResolver.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaLinkResolver.kt index c1090ce18c..3e93874a5e 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaLinkResolver.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaLinkResolver.kt @@ -7,15 +7,15 @@ import io.github.landwarderer.futon.core.model.MangaSource import io.github.landwarderer.futon.core.model.UnknownMangaSource import io.github.landwarderer.futon.core.model.isNsfw import io.github.landwarderer.futon.core.util.ext.isHttpUrl -import io.github.landwarderer.futon.parsers.MangaLoaderContext -import io.github.landwarderer.futon.parsers.exception.NotFoundException -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.almostEquals -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.levenshteinDistance -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.exception.NotFoundException +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.almostEquals +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.levenshteinDistance +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import javax.inject.Inject @Reusable diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaLoaderContextImpl.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaLoaderContextImpl.kt index 750af6d125..4bc8cbae2b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaLoaderContextImpl.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaLoaderContextImpl.kt @@ -5,6 +5,8 @@ import android.content.Context import android.util.Base64 import androidx.core.os.LocaleListCompat import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withTimeout import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient @@ -20,71 +22,184 @@ import io.github.landwarderer.futon.core.prefs.SourceSettings import io.github.landwarderer.futon.core.util.ext.toList import io.github.landwarderer.futon.core.util.ext.toMimeType import io.github.landwarderer.futon.core.util.ext.use -import io.github.landwarderer.futon.parsers.MangaLoaderContext -import io.github.landwarderer.futon.parsers.MangaParser -import io.github.landwarderer.futon.parsers.bitmap.Bitmap -import io.github.landwarderer.futon.parsers.config.MangaSourceConfig -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.network.UserAgents -import io.github.landwarderer.futon.parsers.util.map +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaParser +import org.koitharu.kotatsu.parsers.bitmap.Bitmap +import org.koitharu.kotatsu.parsers.config.MangaSourceConfig +import org.koitharu.kotatsu.parsers.model.MangaSource +import io.github.landwarderer.futon.core.network.webview.WebViewRequestInterceptorExecutor +import org.koitharu.kotatsu.parsers.webview.InterceptedRequest +import org.koitharu.kotatsu.parsers.webview.InterceptionConfig as ParsersInterceptionConfig +import org.koitharu.kotatsu.parsers.network.UserAgents +import org.koitharu.kotatsu.parsers.util.map import java.util.Locale import java.util.concurrent.TimeUnit import javax.inject.Inject import javax.inject.Singleton +import kotlin.coroutines.EmptyCoroutineContext +import kotlin.io.use @Singleton class MangaLoaderContextImpl @Inject constructor( - @MangaHttpClient override val httpClient: OkHttpClient, - override val cookieJar: MutableCookieJar, - @ApplicationContext private val androidContext: Context, - private val webViewExecutor: WebViewExecutor, + @MangaHttpClient override val httpClient: OkHttpClient, + override val cookieJar: MutableCookieJar, + @ApplicationContext private val androidContext: Context, + private val webViewExecutor: WebViewExecutor, + private val webViewRequestInterceptorExecutor: WebViewRequestInterceptorExecutor, ) : MangaLoaderContext() { - private val jsTimeout = TimeUnit.SECONDS.toMillis(4) - - @Deprecated("Provide a base url") - @SuppressLint("SetJavaScriptEnabled") - override suspend fun evaluateJs(script: String): String? = evaluateJs("", script) - - override suspend fun evaluateJs(baseUrl: String, script: String): String? = withTimeout(jsTimeout) { - webViewExecutor.evaluateJs(baseUrl, script) - } - - override fun getDefaultUserAgent(): String = webViewExecutor.defaultUserAgent ?: UserAgents.FIREFOX_MOBILE - - override fun getConfig(source: MangaSource): MangaSourceConfig { - return SourceSettings(androidContext, source) - } - - override fun encodeBase64(data: ByteArray): String { - return Base64.encodeToString(data, Base64.NO_WRAP) - } - - override fun decodeBase64(data: String): ByteArray { - return Base64.decode(data, Base64.DEFAULT) - } - - override fun getPreferredLocales(): List { - return LocaleListCompat.getAdjustedDefault().toList() - } - - override fun requestBrowserAction( - parser: MangaParser, - url: String, - ): Nothing = throw InteractiveActionRequiredException(parser.source, url) - - override fun redrawImageResponse(response: Response, redraw: (image: Bitmap) -> Bitmap): Response { - return response.map { body -> - BitmapDecoderCompat.decode(body.byteStream(), body.contentType()?.toMimeType(), isMutable = true) - .use { bitmap -> - (redraw(BitmapWrapper.create(bitmap)) as BitmapWrapper).use { result -> - Buffer().also { - result.compressTo(it.outputStream()) - }.asResponseBody("image/jpeg".toMediaType()) - } - } - } - } - - override fun createBitmap(width: Int, height: Int): Bitmap = BitmapWrapper.create(width, height) + private val webViewUserAgent by lazy { obtainWebViewUserAgent() } + + @Deprecated("Provide a base url") + @SuppressLint("SetJavaScriptEnabled") + override suspend fun evaluateJs(script: String): String? = evaluateJs("", script, timeout = 10000L) + + override suspend fun evaluateJs(baseUrl: String, script: String, timeout: Long): String? = + webViewExecutor.evaluateJs(baseUrl, script, timeoutMs = timeout) + + override fun getDefaultUserAgent(): String = webViewUserAgent + + override fun getConfig(source: MangaSource): MangaSourceConfig { + return SourceSettings(androidContext, source) + } + + override fun encodeBase64(data: ByteArray): String { + return Base64.encodeToString(data, Base64.NO_WRAP) + } + + override fun decodeBase64(data: String): ByteArray { + return Base64.decode(data, Base64.DEFAULT) + } + + override fun getPreferredLocales(): List { + return LocaleListCompat.getAdjustedDefault().toList() + } + + override fun requestBrowserAction( + parser: MangaParser, + url: String, + ): Nothing = throw InteractiveActionRequiredException(parser.source, url) + + override fun redrawImageResponse(response: Response, redraw: (image: Bitmap) -> Bitmap): Response { + return response.map { body -> + BitmapDecoderCompat.decode(body.byteStream(), body.contentType()?.toMimeType(), isMutable = true) + .use { bitmap -> + (redraw(BitmapWrapper.create(bitmap)) as BitmapWrapper).use { result -> + Buffer().also { + result.compressTo(it.outputStream()) + }.asResponseBody("image/jpeg".toMediaType()) + } + } + } + } + + override fun createBitmap(width: Int, height: Int): Bitmap = BitmapWrapper.create(width, height) + + // kotlin + override suspend fun interceptWebViewRequests( + url: String, + interceptorScript: String, + timeout: Long + ): List { + val config = io.github.landwarderer.futon.core.network.webview.InterceptionConfig( + timeoutMs = timeout, + maxRequests = 100, + filterScript = interceptorScript + ) + + val captured = webViewRequestInterceptorExecutor.interceptRequests(url, config) + return captured.map { appRequest -> + InterceptedRequest( + url = appRequest.url, + method = appRequest.method, + headers = appRequest.headers, + timestamp = appRequest.timestamp, + body = appRequest.body + ) + } + } + + // New method to support InterceptionConfig with pageScript + override suspend fun interceptWebViewRequests( + url: String, + config: ParsersInterceptionConfig + ): List { + val appConfig = io.github.landwarderer.futon.core.network.webview.InterceptionConfig( + timeoutMs = config.timeoutMs, + maxRequests = config.maxRequests, + urlPattern = config.urlPattern, + filterScript = config.filterScript, + pageScript = config.pageScript // This is the key part that was missing! + ) + + val captured = webViewRequestInterceptorExecutor.interceptRequests(url, appConfig) + return captured.map { appRequest -> + InterceptedRequest( + url = appRequest.url, + method = appRequest.method, + headers = appRequest.headers, + timestamp = appRequest.timestamp, + body = appRequest.body + ) + } + } + + private fun evaluateFilterPredicate(script: String, requestUrl: String): Boolean { + // Extract the last `return ...;` expression from the script + val returnIdx = script.lastIndexOf("return") + if (returnIdx == -1) { + // No explicit return -> default to capturing + return true + } + val afterReturn = script.substring(returnIdx + "return".length) + val expr = afterReturn.substringBefore(";").trim().ifEmpty { return true } + + // Support expressions like: + // url.includes('a') && url.includes('b') || url.includes('c') + // Split by OR + val orClauses = expr.split("||").map { it.trim() } + for (clause in orClauses) { + // Remove wrapping parentheses + val normalized = clause.trim().trim('(', ')').trim() + // Split by AND + val andTerms = normalized.split("&&").map { it.trim() }.filter { it.isNotEmpty() } + var allMatch = true + for (term in andTerms) { + // Only support url.includes('') terms for now + val m = Regex("""url\.includes\(\s*(['"])(.*?)\1\s*\)""").find(term) + if (m != null) { + val needle = m.groupValues[2] + if (!requestUrl.contains(needle)) { + allMatch = false + break + } + } else { + // Unknown term -> fail this clause + allMatch = false + break + } + } + if (allMatch) return true + } + return false + } + + override suspend fun captureWebViewUrls( + pageUrl: String, + urlPattern: Regex, + timeout: Long + ): List { + return webViewRequestInterceptorExecutor.captureWebViewUrls(pageUrl, urlPattern, timeout) + } + + private fun obtainWebViewUserAgent(): String { + val mainDispatcher = Dispatchers.Main.immediate + return if (!mainDispatcher.isDispatchNeeded(EmptyCoroutineContext)) { + webViewExecutor.getDefaultUserAgentSync() + } else { + runBlocking(mainDispatcher) { + webViewExecutor.getDefaultUserAgentSync() + } + } ?: UserAgents.FIREFOX_MOBILE + } } diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaRepository.kt index 2bdbd17e90..be2884495b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MangaRepository.kt @@ -12,16 +12,16 @@ import io.github.landwarderer.futon.core.model.UnknownMangaSource import io.github.landwarderer.futon.core.parser.external.ExternalMangaRepository import io.github.landwarderer.futon.core.parser.external.ExternalMangaSource import io.github.landwarderer.futon.local.data.LocalMangaRepository -import io.github.landwarderer.futon.parsers.MangaLoaderContext -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaListFilterCapabilities -import io.github.landwarderer.futon.parsers.model.MangaListFilterOptions -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.SortOrder import java.lang.ref.WeakReference import javax.inject.Inject import javax.inject.Singleton diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MirrorSwitcher.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MirrorSwitcher.kt index 6c2d4a6f9b..4ae244c1a7 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MirrorSwitcher.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/MirrorSwitcher.kt @@ -8,9 +8,9 @@ import okhttp3.Request import io.github.landwarderer.futon.BuildConfig import io.github.landwarderer.futon.core.network.MangaHttpClient import io.github.landwarderer.futon.core.prefs.AppSettings -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.util.await -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.util.await +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import java.util.EnumSet import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/ParserMangaRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/ParserMangaRepository.kt index cc4de12746..2da9559988 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/ParserMangaRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/ParserMangaRepository.kt @@ -8,21 +8,21 @@ import io.github.landwarderer.futon.core.exceptions.CloudFlareProtectedException import io.github.landwarderer.futon.core.exceptions.InteractiveActionRequiredException import io.github.landwarderer.futon.core.exceptions.ProxyConfigException import io.github.landwarderer.futon.core.prefs.SourceSettings -import io.github.landwarderer.futon.parsers.MangaParser -import io.github.landwarderer.futon.parsers.MangaParserAuthProvider -import io.github.landwarderer.futon.parsers.config.ConfigKey -import io.github.landwarderer.futon.parsers.exception.AuthRequiredException -import io.github.landwarderer.futon.parsers.model.Favicons -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaListFilterCapabilities -import io.github.landwarderer.futon.parsers.model.MangaListFilterOptions -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable -import io.github.landwarderer.futon.parsers.util.suspendlazy.suspendLazy +import org.koitharu.kotatsu.parsers.MangaParser +import org.koitharu.kotatsu.parsers.MangaParserAuthProvider +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.exception.AuthRequiredException +import org.koitharu.kotatsu.parsers.model.Favicons +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.suspendlazy.suspendLazy class ParserMangaRepository( private val parser: MangaParser, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalMangaRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalMangaRepository.kt index 0fd9cdee03..e36d7c2dec 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalMangaRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalMangaRepository.kt @@ -4,14 +4,14 @@ import android.content.ContentResolver import io.github.landwarderer.futon.core.cache.MemoryContentCache import io.github.landwarderer.futon.core.parser.CachingMangaRepository import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaListFilterCapabilities -import io.github.landwarderer.futon.parsers.model.MangaListFilterOptions -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.util.suspendlazy.suspendLazy +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.suspendlazy.suspendLazy import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runInterruptible import java.util.EnumSet diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalMangaSource.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalMangaSource.kt index a2ee6e5d97..a7713e1786 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalMangaSource.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalMangaSource.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.core.parser.external import android.content.Context -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource data class ExternalMangaSource( val packageName: String, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalPluginContentSource.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalPluginContentSource.kt index 816d4c3907..68cbc4d92a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalPluginContentSource.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/external/ExternalPluginContentSource.kt @@ -7,23 +7,23 @@ import androidx.collection.ArraySet import androidx.core.net.toUri import org.jetbrains.annotations.Blocking import io.github.landwarderer.futon.core.exceptions.IncompatiblePluginException -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.ContentType -import io.github.landwarderer.futon.parsers.model.Demographic -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaListFilterCapabilities -import io.github.landwarderer.futon.parsers.model.MangaListFilterOptions -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.MangaState -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.util.find -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.mapNotNullToSet -import io.github.landwarderer.futon.parsers.util.nullIfEmpty -import io.github.landwarderer.futon.parsers.util.splitTwoParts +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.Demographic +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.find +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.splitTwoParts import java.util.EnumSet import java.util.Locale diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/favicon/FaviconFetcher.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/favicon/FaviconFetcher.kt index c03f8d4d79..5ee94eea35 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/favicon/FaviconFetcher.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/favicon/FaviconFetcher.kt @@ -33,7 +33,7 @@ import io.github.landwarderer.futon.core.util.ext.toMimeTypeOrNull import io.github.landwarderer.futon.local.data.FaviconCache import io.github.landwarderer.futon.local.data.LocalMangaRepository import io.github.landwarderer.futon.local.data.LocalStorageCache -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.ensureActive import kotlinx.coroutines.runInterruptible diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/favicon/FaviconUri.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/favicon/FaviconUri.kt index f8baa45204..5c7cab2fc8 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/favicon/FaviconUri.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/parser/favicon/FaviconUri.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.core.parser.favicon import android.net.Uri -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource const val URI_SCHEME_FAVICON = "favicon" diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/AppSettings.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/AppSettings.kt index dc8de1b4b7..4f7bd95e7a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/AppSettings.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/AppSettings.kt @@ -32,11 +32,11 @@ import io.github.landwarderer.futon.core.util.ext.takeIfReadable import io.github.landwarderer.futon.core.util.ext.toUriOrNull import io.github.landwarderer.futon.explore.data.SourcesSortOrder import io.github.landwarderer.futon.list.domain.ListSortOrder -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.util.find -import io.github.landwarderer.futon.parsers.util.mapNotNullToSet -import io.github.landwarderer.futon.parsers.util.mapToSet -import io.github.landwarderer.futon.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.find +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.nullIfEmpty import io.github.landwarderer.futon.reader.domain.ReaderColorFilter import java.io.File import java.net.Proxy diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/ColorScheme.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/ColorScheme.kt index c844ce5da4..0cf650cb84 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/ColorScheme.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/ColorScheme.kt @@ -5,7 +5,7 @@ import androidx.annotation.StringRes import androidx.annotation.StyleRes import com.google.android.material.color.DynamicColors import io.github.landwarderer.futon.R -import io.github.landwarderer.futon.parsers.util.find +import org.koitharu.kotatsu.parsers.util.find @Keep enum class ColorScheme( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/SourceSettings.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/SourceSettings.kt index 71c818a220..5539b02bc3 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/SourceSettings.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/prefs/SourceSettings.kt @@ -6,12 +6,12 @@ import androidx.core.content.edit import io.github.landwarderer.futon.core.util.ext.getEnumValue import io.github.landwarderer.futon.core.util.ext.putEnumValue import io.github.landwarderer.futon.core.util.ext.sanitizeHeaderValue -import io.github.landwarderer.futon.parsers.config.ConfigKey -import io.github.landwarderer.futon.parsers.config.MangaSourceConfig -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.config.MangaSourceConfig +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.nullIfEmpty import io.github.landwarderer.futon.settings.utils.validation.DomainValidator import java.io.File @@ -47,6 +47,8 @@ class SourceSettings(context: Context, source: MangaSource) : MangaSourceConfig is ConfigKey.ShowSuspiciousContent -> prefs.getBoolean(key.key, key.defaultValue) is ConfigKey.SplitByTranslations -> prefs.getBoolean(key.key, key.defaultValue) is ConfigKey.PreferredImageServer -> prefs.getString(key.key, key.defaultValue)?.nullIfEmpty() + is ConfigKey.DisableUpdateChecking -> prefs.getBoolean(key.key, key.defaultValue) + is ConfigKey.InterceptCloudflare -> prefs.getBoolean(key.key, key.defaultValue) } as T } @@ -57,6 +59,10 @@ class SourceSettings(context: Context, source: MangaSource) : MangaSourceConfig is ConfigKey.UserAgent -> putString(key.key, (value as String?)?.sanitizeHeaderValue()) is ConfigKey.SplitByTranslations -> putBoolean(key.key, value as Boolean) is ConfigKey.PreferredImageServer -> putString(key.key, value as String? ?: "") + is ConfigKey.InterceptCloudflare -> putBoolean(key.key, value as Boolean) + is ConfigKey.DisableUpdateChecking -> { + // Read-only parser flag; keep it parser-controlled. + } } } diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/ReorderableListAdapter.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/ReorderableListAdapter.kt index 72a8cd271e..b6b60337dc 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/ReorderableListAdapter.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/ReorderableListAdapter.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.flow.FlowCollector import kotlinx.coroutines.withContext import io.github.landwarderer.futon.list.ui.adapter.ListItemType import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.util.move +import org.koitharu.kotatsu.parsers.util.move import java.util.LinkedList open class ReorderableListAdapter : ListDelegationAdapter>(), FlowCollector?> { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/image/FaviconView.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/image/FaviconView.kt index 2e0276f3ca..0078ab08c7 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/image/FaviconView.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/image/FaviconView.kt @@ -15,7 +15,7 @@ import io.github.landwarderer.futon.core.image.CoilImageView import io.github.landwarderer.futon.core.parser.favicon.faviconUri import io.github.landwarderer.futon.core.util.ext.isAnimationsEnabled import io.github.landwarderer.futon.core.util.ext.mangaSourceExtra -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource class FaviconView @JvmOverloads constructor( context: Context, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/model/MangaOverride.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/model/MangaOverride.kt index 6d618c5fcf..560460fd75 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/model/MangaOverride.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/model/MangaOverride.kt @@ -1,6 +1,6 @@ package io.github.landwarderer.futon.core.ui.model -import io.github.landwarderer.futon.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.ContentRating data class MangaOverride( val coverUrl: String?, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/model/SortOrder.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/model/SortOrder.kt index 26e88b9cba..1991b4aa56 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/model/SortOrder.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/model/SortOrder.kt @@ -3,25 +3,25 @@ package io.github.landwarderer.futon.core.ui.model import androidx.annotation.StringRes import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.model.SortDirection -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.model.SortOrder.ADDED -import io.github.landwarderer.futon.parsers.model.SortOrder.ADDED_ASC -import io.github.landwarderer.futon.parsers.model.SortOrder.ALPHABETICAL -import io.github.landwarderer.futon.parsers.model.SortOrder.ALPHABETICAL_DESC -import io.github.landwarderer.futon.parsers.model.SortOrder.NEWEST -import io.github.landwarderer.futon.parsers.model.SortOrder.NEWEST_ASC -import io.github.landwarderer.futon.parsers.model.SortOrder.POPULARITY -import io.github.landwarderer.futon.parsers.model.SortOrder.POPULARITY_ASC -import io.github.landwarderer.futon.parsers.model.SortOrder.POPULARITY_HOUR -import io.github.landwarderer.futon.parsers.model.SortOrder.POPULARITY_MONTH -import io.github.landwarderer.futon.parsers.model.SortOrder.POPULARITY_TODAY -import io.github.landwarderer.futon.parsers.model.SortOrder.POPULARITY_WEEK -import io.github.landwarderer.futon.parsers.model.SortOrder.POPULARITY_YEAR -import io.github.landwarderer.futon.parsers.model.SortOrder.RATING -import io.github.landwarderer.futon.parsers.model.SortOrder.RATING_ASC -import io.github.landwarderer.futon.parsers.model.SortOrder.RELEVANCE -import io.github.landwarderer.futon.parsers.model.SortOrder.UPDATED -import io.github.landwarderer.futon.parsers.model.SortOrder.UPDATED_ASC +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.SortOrder.ADDED +import org.koitharu.kotatsu.parsers.model.SortOrder.ADDED_ASC +import org.koitharu.kotatsu.parsers.model.SortOrder.ALPHABETICAL +import org.koitharu.kotatsu.parsers.model.SortOrder.ALPHABETICAL_DESC +import org.koitharu.kotatsu.parsers.model.SortOrder.NEWEST +import org.koitharu.kotatsu.parsers.model.SortOrder.NEWEST_ASC +import org.koitharu.kotatsu.parsers.model.SortOrder.POPULARITY +import org.koitharu.kotatsu.parsers.model.SortOrder.POPULARITY_ASC +import org.koitharu.kotatsu.parsers.model.SortOrder.POPULARITY_HOUR +import org.koitharu.kotatsu.parsers.model.SortOrder.POPULARITY_MONTH +import org.koitharu.kotatsu.parsers.model.SortOrder.POPULARITY_TODAY +import org.koitharu.kotatsu.parsers.model.SortOrder.POPULARITY_WEEK +import org.koitharu.kotatsu.parsers.model.SortOrder.POPULARITY_YEAR +import org.koitharu.kotatsu.parsers.model.SortOrder.RATING +import org.koitharu.kotatsu.parsers.model.SortOrder.RATING_ASC +import org.koitharu.kotatsu.parsers.model.SortOrder.RELEVANCE +import org.koitharu.kotatsu.parsers.model.SortOrder.UPDATED +import org.koitharu.kotatsu.parsers.model.SortOrder.UPDATED_ASC @get:StringRes val SortOrder.titleRes: Int diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/util/ReversibleHandle.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/util/ReversibleHandle.kt index 2e2e551f9d..d6a598e6b8 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/util/ReversibleHandle.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/util/ReversibleHandle.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.core.ui.util import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.core.util.ext.processLifecycleScope -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.NonCancellable diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/util/SpanSizeResolver.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/util/SpanSizeResolver.kt index c11c57c93e..63dc4e8770 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/util/SpanSizeResolver.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/util/SpanSizeResolver.kt @@ -4,7 +4,7 @@ import android.view.View import androidx.annotation.Px import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView -import io.github.landwarderer.futon.parsers.util.toIntUp +import org.koitharu.kotatsu.parsers.util.toIntUp import kotlin.math.abs class SpanSizeResolver( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/ChipsView.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/ChipsView.kt index 288fd8e100..402d848989 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/ChipsView.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/ChipsView.kt @@ -34,7 +34,7 @@ import io.github.landwarderer.futon.core.ui.image.ChipIconTarget import io.github.landwarderer.futon.core.util.ext.enqueueWith import io.github.landwarderer.futon.core.util.ext.getThemeColor import io.github.landwarderer.futon.core.util.ext.setProgressIcon -import io.github.landwarderer.futon.parsers.util.ifZero +import org.koitharu.kotatsu.parsers.util.ifZero import javax.inject.Inject import com.google.android.material.R as materialR diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/DotsIndicator.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/DotsIndicator.kt index 379eb13034..65484c5b23 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/DotsIndicator.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/DotsIndicator.kt @@ -15,7 +15,7 @@ import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.util.ext.getThemeColorStateList import io.github.landwarderer.futon.core.util.ext.measureDimension import io.github.landwarderer.futon.core.util.ext.resolveDp -import io.github.landwarderer.futon.parsers.util.toIntUp +import org.koitharu.kotatsu.parsers.util.toIntUp import com.google.android.material.R as materialR class DotsIndicator @JvmOverloads constructor( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/SegmentedBarView.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/SegmentedBarView.kt index 019c36c439..d96c550dc3 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/SegmentedBarView.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/ui/widgets/SegmentedBarView.kt @@ -16,7 +16,7 @@ import androidx.interpolator.view.animation.FastOutSlowInInterpolator import io.github.landwarderer.futon.core.util.ext.getAnimationDuration import io.github.landwarderer.futon.core.util.ext.isAnimationsEnabled import io.github.landwarderer.futon.core.util.ext.resolveDp -import io.github.landwarderer.futon.parsers.util.replaceWith +import org.koitharu.kotatsu.parsers.util.replaceWith class SegmentedBarView @JvmOverloads constructor( context: Context, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/FutonColors.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/FutonColors.kt index 7b2b0fe085..10acf5e0ae 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/FutonColors.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/FutonColors.kt @@ -7,7 +7,7 @@ import androidx.core.graphics.ColorUtils import com.google.android.material.R import com.google.android.material.color.MaterialColors import io.github.landwarderer.futon.core.util.ext.getThemeColor -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import kotlin.math.absoluteValue object FutonColors { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/LocaleUtils.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/LocaleUtils.kt index effd67d039..80801692ed 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/LocaleUtils.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/LocaleUtils.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.core.util import android.graphics.Paint import androidx.core.graphics.PaintCompat -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty import java.util.Locale object LocaleUtils { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/MimeTypes.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/MimeTypes.kt index f60066930b..e3060dd1c7 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/MimeTypes.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/MimeTypes.kt @@ -5,9 +5,9 @@ import android.webkit.MimeTypeMap import org.jetbrains.annotations.Blocking import io.github.landwarderer.futon.core.util.ext.MimeType import io.github.landwarderer.futon.core.util.ext.toMimeTypeOrNull -import io.github.landwarderer.futon.parsers.util.nullIfEmpty -import io.github.landwarderer.futon.parsers.util.removeSuffix -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.removeSuffix +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import java.io.File import java.nio.file.Files import coil3.util.MimeTypeMap as CoilMimeTypeMap diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ShareHelper.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ShareHelper.kt index ae97d7ee77..9cdae092df 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ShareHelper.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ShareHelper.kt @@ -8,7 +8,7 @@ import androidx.core.content.FileProvider import io.github.landwarderer.futon.BuildConfig import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.model.appUrl -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import java.io.File private const val TYPE_TEXT = "text/plain" diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Android.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Android.kt index 52682ed0d7..66b3b5c70a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Android.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Android.kt @@ -46,7 +46,7 @@ import androidx.work.CoroutineWorker import io.github.landwarderer.futon.BuildConfig import io.github.landwarderer.futon.R import io.github.landwarderer.futon.main.ui.MainActivity -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Bundle.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Bundle.kt index 3b2e0aa5f5..4dad85284d 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Bundle.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Bundle.kt @@ -11,7 +11,7 @@ import androidx.core.content.IntentCompat import androidx.core.os.BundleCompat import androidx.core.os.ParcelCompat import androidx.lifecycle.SavedStateHandle -import io.github.landwarderer.futon.parsers.util.toArraySet +import org.koitharu.kotatsu.parsers.util.toArraySet import java.io.Serializable import java.util.EnumSet diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Coil.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Coil.kt index f9019898b2..5481d5c107 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Coil.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Coil.kt @@ -18,8 +18,8 @@ import coil3.toBitmap import okio.buffer import io.github.landwarderer.futon.bookmarks.domain.Bookmark import io.github.landwarderer.futon.core.image.RegionBitmapDecoder -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource fun ImageRequest.Builder.enqueueWith(loader: ImageLoader) = loader.enqueue(build()) diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/ContentResolver.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/ContentResolver.kt index e653ae5093..7773e1764b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/ContentResolver.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/ContentResolver.kt @@ -9,8 +9,8 @@ import android.provider.DocumentsContract import android.provider.OpenableColumns import androidx.annotation.RequiresApi import androidx.core.net.toFile -import io.github.landwarderer.futon.parsers.util.nullIfEmpty -import io.github.landwarderer.futon.parsers.util.removeSuffix +import org.koitharu.kotatsu.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.removeSuffix import java.io.File import java.lang.reflect.Array as ArrayReflect diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Coroutines.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Coroutines.kt index cf4ce8baa6..f1bd260a87 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Coroutines.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Coroutines.kt @@ -12,8 +12,8 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.plus import io.github.landwarderer.futon.core.util.AcraCoroutineErrorHandler import io.github.landwarderer.futon.core.util.RetainedLifecycleCoroutineScope -import io.github.landwarderer.futon.parsers.util.cancelAll -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.cancelAll +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlin.coroutines.CoroutineContext import kotlin.coroutines.EmptyCoroutineContext import kotlin.coroutines.cancellation.CancellationException diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Flow.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Flow.kt index bb839ccf62..28f3d003d1 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Flow.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Flow.kt @@ -21,8 +21,8 @@ import kotlinx.coroutines.flow.transform import kotlinx.coroutines.flow.transformLatest import kotlinx.coroutines.flow.transformWhile import kotlinx.coroutines.flow.update -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable -import io.github.landwarderer.futon.parsers.util.suspendlazy.SuspendLazy +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.suspendlazy.SuspendLazy import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicInteger diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/LocaleList.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/LocaleList.kt index cb9327caa9..a0ef307e12 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/LocaleList.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/LocaleList.kt @@ -3,8 +3,8 @@ package io.github.landwarderer.futon.core.util.ext import android.content.Context import androidx.core.os.LocaleListCompat import io.github.landwarderer.futon.R -import io.github.landwarderer.futon.parsers.util.Set -import io.github.landwarderer.futon.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.Set +import org.koitharu.kotatsu.parsers.util.toTitleCase import java.util.Locale operator fun LocaleListCompat.iterator(): ListIterator = LocaleListCompatIterator(this) diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/String.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/String.kt index 7b1946f1a4..5888173755 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/String.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/String.kt @@ -3,8 +3,8 @@ package io.github.landwarderer.futon.core.util.ext import android.content.Context import androidx.collection.arraySetOf import io.github.landwarderer.futon.R -import io.github.landwarderer.futon.parsers.util.ellipsize -import io.github.landwarderer.futon.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.ellipsize +import org.koitharu.kotatsu.parsers.util.nullIfEmpty import java.util.UUID fun String.toUUIDOrNull(): UUID? = try { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Throwable.kt b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Throwable.kt index 7bfcf10b40..20b2b7e36e 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Throwable.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/core/util/ext/Throwable.kt @@ -35,17 +35,17 @@ import io.github.landwarderer.futon.core.exceptions.UnsupportedSourceException import io.github.landwarderer.futon.core.exceptions.WrapperIOException import io.github.landwarderer.futon.core.exceptions.WrongPasswordException import io.github.landwarderer.futon.core.exceptions.resolve.ExceptionResolver -import io.github.landwarderer.futon.parsers.ErrorMessages.FILTER_BOTH_LOCALE_GENRES_NOT_SUPPORTED -import io.github.landwarderer.futon.parsers.ErrorMessages.FILTER_BOTH_STATES_GENRES_NOT_SUPPORTED -import io.github.landwarderer.futon.parsers.ErrorMessages.FILTER_MULTIPLE_GENRES_NOT_SUPPORTED -import io.github.landwarderer.futon.parsers.ErrorMessages.FILTER_MULTIPLE_STATES_NOT_SUPPORTED -import io.github.landwarderer.futon.parsers.ErrorMessages.SEARCH_NOT_SUPPORTED -import io.github.landwarderer.futon.parsers.exception.AuthRequiredException -import io.github.landwarderer.futon.parsers.exception.ContentUnavailableException -import io.github.landwarderer.futon.parsers.exception.NotFoundException -import io.github.landwarderer.futon.parsers.exception.ParseException -import io.github.landwarderer.futon.parsers.exception.TooManyRequestExceptions -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.ErrorMessages.FILTER_BOTH_LOCALE_GENRES_NOT_SUPPORTED +import org.koitharu.kotatsu.parsers.ErrorMessages.FILTER_BOTH_STATES_GENRES_NOT_SUPPORTED +import org.koitharu.kotatsu.parsers.ErrorMessages.FILTER_MULTIPLE_GENRES_NOT_SUPPORTED +import org.koitharu.kotatsu.parsers.ErrorMessages.FILTER_MULTIPLE_STATES_NOT_SUPPORTED +import org.koitharu.kotatsu.parsers.ErrorMessages.SEARCH_NOT_SUPPORTED +import org.koitharu.kotatsu.parsers.exception.AuthRequiredException +import org.koitharu.kotatsu.parsers.exception.ContentUnavailableException +import org.koitharu.kotatsu.parsers.exception.NotFoundException +import org.koitharu.kotatsu.parsers.exception.ParseException +import org.koitharu.kotatsu.parsers.exception.TooManyRequestExceptions +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty import io.github.landwarderer.futon.scrobbling.common.domain.ScrobblerAuthRequiredException import java.io.File import java.net.ConnectException diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/data/MangaDetails.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/data/MangaDetails.kt index 21e9d80dfb..34f5f03989 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/data/MangaDetails.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/data/MangaDetails.kt @@ -5,11 +5,11 @@ import io.github.landwarderer.futon.core.model.isLocal import io.github.landwarderer.futon.core.model.withOverride import io.github.landwarderer.futon.core.ui.model.MangaOverride import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaState -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.nullIfEmpty import io.github.landwarderer.futon.reader.data.filterChapters import java.util.Locale diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsInteractor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsInteractor.kt index 076bbdd73f..ddc30da36a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsInteractor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsInteractor.kt @@ -16,8 +16,8 @@ import io.github.landwarderer.futon.favourites.domain.FavouritesRepository import io.github.landwarderer.futon.history.data.HistoryRepository import io.github.landwarderer.futon.local.data.LocalMangaRepository import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.scrobbling.common.domain.Scrobbler import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingInfo import io.github.landwarderer.futon.tracker.domain.TrackingRepository diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsLoadUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsLoadUseCase.kt index 1f8ff0684f..3429787c42 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsLoadUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/DetailsLoadUseCase.kt @@ -28,11 +28,11 @@ import io.github.landwarderer.futon.details.data.MangaDetails import io.github.landwarderer.futon.explore.domain.RecoverMangaUseCase import io.github.landwarderer.futon.local.data.LocalMangaRepository import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.exception.NotFoundException -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.nullIfEmpty -import io.github.landwarderer.futon.parsers.util.recoverNotNull -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.exception.NotFoundException +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.recoverNotNull +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import javax.inject.Inject class DetailsLoadUseCase @Inject constructor( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/ProgressUpdateUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/ProgressUpdateUseCase.kt index d9030bb4dd..f6c746e076 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/ProgressUpdateUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/ProgressUpdateUseCase.kt @@ -6,7 +6,7 @@ import io.github.landwarderer.futon.core.os.NetworkState import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.list.domain.ReadingProgress.Companion.PROGRESS_NONE import io.github.landwarderer.futon.local.data.LocalMangaRepository -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import javax.inject.Inject class ProgressUpdateUseCase @Inject constructor( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/ReadingTimeUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/ReadingTimeUseCase.kt index 95f1faf6fc..ef90116313 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/ReadingTimeUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/ReadingTimeUseCase.kt @@ -4,7 +4,7 @@ import io.github.landwarderer.futon.core.model.MangaHistory import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.details.data.MangaDetails import io.github.landwarderer.futon.details.data.ReadingTime -import io.github.landwarderer.futon.parsers.util.findById +import org.koitharu.kotatsu.parsers.util.findById import io.github.landwarderer.futon.stats.data.StatsRepository import java.util.concurrent.TimeUnit import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/RelatedMangaUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/RelatedMangaUseCase.kt index e6c9436c01..46c33d3d8f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/RelatedMangaUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/domain/RelatedMangaUseCase.kt @@ -2,8 +2,8 @@ package io.github.landwarderer.futon.details.domain import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import javax.inject.Inject class RelatedMangaUseCase @Inject constructor( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/service/MangaPrefetchService.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/service/MangaPrefetchService.kt index 883bc6eaf1..b2f2d8b020 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/service/MangaPrefetchService.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/service/MangaPrefetchService.kt @@ -15,11 +15,11 @@ import io.github.landwarderer.futon.core.util.ext.getParcelableExtraCompat import io.github.landwarderer.futon.core.util.ext.isPowerSaveMode import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.history.data.HistoryRepository -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.findById -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.findById +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import javax.inject.Inject @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/ChaptersMapper.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/ChaptersMapper.kt index 0e7a23a64e..5373eaa599 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/ChaptersMapper.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/ChaptersMapper.kt @@ -8,7 +8,7 @@ import io.github.landwarderer.futon.details.ui.model.ChapterListItem import io.github.landwarderer.futon.details.ui.model.toListItem import io.github.landwarderer.futon.list.ui.model.ListHeader import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.mapToSet fun MangaDetails.mapChapters( currentChapterId: Long, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsActivity.kt index b6856846a6..99d1b75be2 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsActivity.kt @@ -99,12 +99,12 @@ import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.MangaListModel import io.github.landwarderer.futon.list.ui.size.StaticItemSizeResolver import io.github.landwarderer.futon.main.ui.owners.BottomSheetOwner -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.nullIfEmpty -import io.github.landwarderer.futon.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.toTitleCase import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingInfo import javax.inject.Inject import kotlin.math.roundToInt diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsErrorObserver.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsErrorObserver.kt index 50c52905c3..6da34dacfa 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsErrorObserver.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsErrorObserver.kt @@ -8,8 +8,8 @@ import io.github.landwarderer.futon.core.exceptions.resolve.ExceptionResolver import io.github.landwarderer.futon.core.util.ext.getDisplayMessage import io.github.landwarderer.futon.core.util.ext.isNetworkError import io.github.landwarderer.futon.core.util.ext.isSerializable -import io.github.landwarderer.futon.parsers.exception.NotFoundException -import io.github.landwarderer.futon.parsers.exception.ParseException +import org.koitharu.kotatsu.parsers.exception.NotFoundException +import org.koitharu.kotatsu.parsers.exception.ParseException class DetailsErrorObserver( override val activity: DetailsActivity, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsViewModel.kt index d98323faa1..6619d40315 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/DetailsViewModel.kt @@ -46,9 +46,9 @@ import io.github.landwarderer.futon.list.ui.model.MangaListModel import io.github.landwarderer.futon.local.data.LocalStorageChanges import io.github.landwarderer.futon.local.domain.DeleteLocalMangaUseCase import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.findById -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.findById +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.reader.ui.ReaderState import io.github.landwarderer.futon.scrobbling.common.domain.Scrobbler import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingInfo diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/model/ChapterListItem.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/model/ChapterListItem.kt index 0b63ff2524..2805be39e0 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/model/ChapterListItem.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/model/ChapterListItem.kt @@ -5,7 +5,7 @@ import android.text.format.DateUtils import org.jsoup.internal.StringUtil.StringJoiner import io.github.landwarderer.futon.core.model.getLocalizedTitle import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaChapter import kotlin.experimental.and data class ChapterListItem( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/model/ListModelConversionExt.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/model/ListModelConversionExt.kt index 7c4e3cbf92..f2b0e3184a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/model/ListModelConversionExt.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/model/ListModelConversionExt.kt @@ -6,7 +6,7 @@ import io.github.landwarderer.futon.details.ui.model.ChapterListItem.Companion.F import io.github.landwarderer.futon.details.ui.model.ChapterListItem.Companion.FLAG_GRID import io.github.landwarderer.futon.details.ui.model.ChapterListItem.Companion.FLAG_NEW import io.github.landwarderer.futon.details.ui.model.ChapterListItem.Companion.FLAG_UNREAD -import io.github.landwarderer.futon.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaChapter import kotlin.experimental.or fun MangaChapter.toListItem( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/ChaptersPagesViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/ChaptersPagesViewModel.kt index c57e82db3d..b2fb03a8db 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/ChaptersPagesViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/ChaptersPagesViewModel.kt @@ -43,8 +43,8 @@ import io.github.landwarderer.futon.history.data.HistoryRepository import io.github.landwarderer.futon.list.domain.ListFilterOption import io.github.landwarderer.futon.local.domain.DeleteLocalMangaUseCase import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaState import io.github.landwarderer.futon.reader.ui.ReaderActivity import io.github.landwarderer.futon.reader.ui.ReaderState import io.github.landwarderer.futon.reader.ui.ReaderViewModel diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/bookmarks/BookmarksViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/bookmarks/BookmarksViewModel.kt index 215cbdbba4..4ebd2ce81c 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/bookmarks/BookmarksViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/bookmarks/BookmarksViewModel.kt @@ -27,7 +27,7 @@ import io.github.landwarderer.futon.list.ui.model.EmptyState import io.github.landwarderer.futon.list.ui.model.ListHeader import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.LoadingState -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.reader.ui.PageSaveHelper import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/pages/MangaPageFetcher.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/pages/MangaPageFetcher.kt index 067b56955d..ae55a0f23d 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/pages/MangaPageFetcher.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/pages/MangaPageFetcher.kt @@ -26,10 +26,10 @@ import io.github.landwarderer.futon.core.util.ext.isNetworkUri import io.github.landwarderer.futon.core.util.ext.toMimeTypeOrNull import io.github.landwarderer.futon.local.data.LocalStorageCache import io.github.landwarderer.futon.local.data.PageCache -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.util.mimeType -import io.github.landwarderer.futon.parsers.util.requireBody -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.util.mimeType +import org.koitharu.kotatsu.parsers.util.requireBody +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.reader.domain.PageLoader import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/pages/MangaPageKeyer.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/pages/MangaPageKeyer.kt index d87d7c227f..7ca59d2065 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/pages/MangaPageKeyer.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/pager/pages/MangaPageKeyer.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.details.ui.pager.pages import coil3.key.Keyer import coil3.request.Options -import io.github.landwarderer.futon.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaPage class MangaPageKeyer : Keyer { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/related/RelatedListViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/related/RelatedListViewModel.kt index cb700e61f8..5ce22c9f47 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/related/RelatedListViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/details/ui/related/RelatedListViewModel.kt @@ -19,7 +19,7 @@ import io.github.landwarderer.futon.list.ui.model.LoadingState import io.github.landwarderer.futon.list.ui.model.toErrorState import io.github.landwarderer.futon.local.data.LocalStorageChanges import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/download/domain/DownloadState.kt b/app/src/main/kotlin/io/github/landwarderer/futon/download/domain/DownloadState.kt index e44d5f824b..79f635c3ee 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/download/domain/DownloadState.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/download/domain/DownloadState.kt @@ -3,7 +3,7 @@ package io.github.landwarderer.futon.download.domain import androidx.work.Data import io.github.landwarderer.futon.list.domain.ReadingProgress.Companion.PROGRESS_NONE import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import java.time.Instant data class DownloadState( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/ChaptersSelectMacro.kt b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/ChaptersSelectMacro.kt index 3e17708a98..240cbc41f2 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/ChaptersSelectMacro.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/ChaptersSelectMacro.kt @@ -2,8 +2,8 @@ package io.github.landwarderer.futon.download.ui.dialog import androidx.collection.ArraySet import androidx.collection.LongLongMap -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet interface ChaptersSelectMacro { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/DownloadDialogFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/DownloadDialogFragment.kt index 2d12db397d..dbe84aba15 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/DownloadDialogFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/DownloadDialogFragment.kt @@ -32,7 +32,7 @@ import io.github.landwarderer.futon.core.util.ext.parentView import io.github.landwarderer.futon.core.util.ext.showOrHide import io.github.landwarderer.futon.databinding.DialogDownloadBinding import io.github.landwarderer.futon.main.ui.owners.BottomNavOwner -import io.github.landwarderer.futon.parsers.util.format +import org.koitharu.kotatsu.parsers.util.format import io.github.landwarderer.futon.settings.storage.DirectoryModel @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/DownloadDialogViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/DownloadDialogViewModel.kt index 4c8c863c6d..ed867b9706 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/DownloadDialogViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/dialog/DownloadDialogViewModel.kt @@ -22,11 +22,11 @@ import io.github.landwarderer.futon.download.ui.worker.DownloadWorker import io.github.landwarderer.futon.history.data.HistoryRepository import io.github.landwarderer.futon.local.data.LocalMangaRepository import io.github.landwarderer.futon.local.data.LocalStorageManager -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.mapToSet -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable -import io.github.landwarderer.futon.parsers.util.sizeOrZero -import io.github.landwarderer.futon.parsers.util.suspendlazy.suspendLazy +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.sizeOrZero +import org.koitharu.kotatsu.parsers.util.suspendlazy.suspendLazy import io.github.landwarderer.futon.settings.storage.DirectoryModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadItemAD.kt b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadItemAD.kt index be6419de3f..1fe5514afe 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadItemAD.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadItemAD.kt @@ -22,7 +22,7 @@ import io.github.landwarderer.futon.download.ui.list.chapters.downloadChapterAD import io.github.landwarderer.futon.list.ui.ListModelDiffCallback import io.github.landwarderer.futon.list.ui.adapter.ListItemType import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.util.format +import org.koitharu.kotatsu.parsers.util.format fun downloadItemAD( lifecycleOwner: LifecycleOwner, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadItemModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadItemModel.kt index b8618d8db1..cc87440c42 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadItemModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadItemModel.kt @@ -12,7 +12,7 @@ import io.github.landwarderer.futon.core.util.ext.getThemeColor import io.github.landwarderer.futon.download.ui.list.chapters.DownloadChapter import io.github.landwarderer.futon.list.ui.ListModelDiffCallback import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import java.time.Instant import java.util.UUID import androidx.appcompat.R as appcompatR diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadsViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadsViewModel.kt index 686d0f47e5..2257792e99 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadsViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/list/DownloadsViewModel.kt @@ -41,9 +41,9 @@ import io.github.landwarderer.futon.list.ui.model.LoadingState import io.github.landwarderer.futon.local.data.LocalMangaRepository import io.github.landwarderer.futon.local.data.LocalStorageChanges import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.mapToSet -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import java.util.LinkedList import java.util.UUID import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadNotificationFactory.kt b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadNotificationFactory.kt index 92159c739a..cf5a14e742 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadNotificationFactory.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadNotificationFactory.kt @@ -32,9 +32,9 @@ import io.github.landwarderer.futon.core.util.ext.mangaSourceExtra import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.download.domain.DownloadState import io.github.landwarderer.futon.download.ui.list.DownloadsActivity -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.format -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.format +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import java.util.UUID diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadSlowdownDispatcher.kt b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadSlowdownDispatcher.kt index ae19075825..962d5cd491 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadSlowdownDispatcher.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadSlowdownDispatcher.kt @@ -5,7 +5,7 @@ import androidx.collection.MutableObjectLongMap import kotlinx.coroutines.delay import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.parser.ParserMangaRepository -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource import javax.inject.Inject import javax.inject.Singleton diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadTask.kt b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadTask.kt index a26d2bad37..45aa3d48cb 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadTask.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadTask.kt @@ -4,7 +4,7 @@ import android.os.Parcelable import androidx.work.Data import kotlinx.parcelize.Parcelize import io.github.landwarderer.futon.core.prefs.DownloadFormat -import io.github.landwarderer.futon.parsers.util.find +import org.koitharu.kotatsu.parsers.util.find import java.io.File @Parcelize diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadWorker.kt b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadWorker.kt index b2b3970eaa..4964cb378f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadWorker.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/download/ui/worker/DownloadWorker.kt @@ -65,14 +65,14 @@ import io.github.landwarderer.futon.local.data.input.LocalMangaParser import io.github.landwarderer.futon.local.data.output.LocalMangaOutput import io.github.landwarderer.futon.local.domain.MangaLock import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.exception.TooManyRequestExceptions -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.mapToSet -import io.github.landwarderer.futon.parsers.util.requireBody -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.exception.TooManyRequestExceptions +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.requireBody +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.reader.domain.PageLoader import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/explore/data/MangaSourcesRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/explore/data/MangaSourcesRepository.kt index bd30028e2d..88df97bf46 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/explore/data/MangaSourcesRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/explore/data/MangaSourcesRepository.kt @@ -29,12 +29,12 @@ import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.prefs.observeAsFlow import io.github.landwarderer.futon.core.ui.util.ReversibleHandle import io.github.landwarderer.futon.core.util.ext.flattenLatest -import io.github.landwarderer.futon.parsers.model.ContentType -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.network.CloudFlareHelper -import io.github.landwarderer.futon.parsers.util.mapNotNullToSet -import io.github.landwarderer.futon.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.network.CloudFlareHelper +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.mapToSet import java.util.Collections import java.util.EnumSet import java.util.concurrent.atomic.AtomicBoolean diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/explore/domain/ExploreRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/explore/domain/ExploreRepository.kt index e513b6df06..fdb03a50a5 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/explore/domain/ExploreRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/explore/domain/ExploreRepository.kt @@ -7,11 +7,11 @@ import io.github.landwarderer.futon.core.util.ext.asArrayList import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.explore.data.MangaSourcesRepository import io.github.landwarderer.futon.history.data.HistoryRepository -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.almostEquals -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.almostEquals +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.suggestions.domain.TagsBlacklist import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/explore/domain/RecoverMangaUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/explore/domain/RecoverMangaUseCase.kt index 0861a54300..06c7214469 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/explore/domain/RecoverMangaUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/explore/domain/RecoverMangaUseCase.kt @@ -4,9 +4,9 @@ import io.github.landwarderer.futon.core.model.isLocal import io.github.landwarderer.futon.core.parser.MangaDataRepository import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import javax.inject.Inject class RecoverMangaUseCase @Inject constructor( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/ExploreFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/ExploreFragment.kt index d0927777f7..2139eb8f84 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/ExploreFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/ExploreFragment.kt @@ -42,8 +42,8 @@ import io.github.landwarderer.futon.explore.ui.adapter.ExploreListEventListener import io.github.landwarderer.futon.explore.ui.model.MangaSourceItem import io.github.landwarderer.futon.list.ui.adapter.TypedListSpacingDecoration import io.github.landwarderer.futon.list.ui.model.ListHeader -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaParserSource @AndroidEntryPoint class ExploreFragment : diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/ExploreViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/ExploreViewModel.kt index c6c2dae5d0..bc518f9fd5 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/ExploreViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/ExploreViewModel.kt @@ -33,9 +33,9 @@ import io.github.landwarderer.futon.list.ui.model.ListHeader import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.LoadingState import io.github.landwarderer.futon.list.ui.model.MangaCompactListModel -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.suggestions.domain.SuggestionRepository import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/adapter/ExploreAdapter.kt b/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/adapter/ExploreAdapter.kt index 49b42f8fde..722c8fabe9 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/adapter/ExploreAdapter.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/adapter/ExploreAdapter.kt @@ -8,7 +8,7 @@ import io.github.landwarderer.futon.list.ui.adapter.emptyHintAD import io.github.landwarderer.futon.list.ui.adapter.listHeaderAD import io.github.landwarderer.futon.list.ui.adapter.loadingStateAD import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga class ExploreAdapter( listener: ExploreListEventListener, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/adapter/ExploreAdapterDelegates.kt b/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/adapter/ExploreAdapterDelegates.kt index dc9fa62eef..dd9c5c1ba5 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/adapter/ExploreAdapterDelegates.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/adapter/ExploreAdapterDelegates.kt @@ -27,7 +27,7 @@ import io.github.landwarderer.futon.explore.ui.model.RecommendationsItem import io.github.landwarderer.futon.list.ui.adapter.ListItemType import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.MangaCompactListModel -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga fun exploreButtonsAD( clickListener: View.OnClickListener, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/model/MangaSourceItem.kt b/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/model/MangaSourceItem.kt index 635b1cb051..b041562aa5 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/model/MangaSourceItem.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/explore/ui/model/MangaSourceItem.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.explore.ui.model import io.github.landwarderer.futon.core.model.MangaSourceInfo import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.util.longHashCode +import org.koitharu.kotatsu.parsers.util.longHashCode data class MangaSourceItem( val source: MangaSourceInfo, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/favourites/domain/FavouritesRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/favourites/domain/FavouritesRepository.kt index 335aae7d9f..3cfbe98bac 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/favourites/domain/FavouritesRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/favourites/domain/FavouritesRepository.kt @@ -25,9 +25,9 @@ import io.github.landwarderer.futon.favourites.data.toMangaList import io.github.landwarderer.futon.favourites.domain.model.Cover import io.github.landwarderer.futon.list.domain.ListFilterOption import io.github.landwarderer.futon.list.domain.ListSortOrder -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.levenshteinDistance +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.levenshteinDistance import io.github.landwarderer.futon.search.domain.SearchKind import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/favourites/domain/LocalFavoritesObserver.kt b/app/src/main/kotlin/io/github/landwarderer/futon/favourites/domain/LocalFavoritesObserver.kt index 2a20f7a0b3..91f2db45cd 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/favourites/domain/LocalFavoritesObserver.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/favourites/domain/LocalFavoritesObserver.kt @@ -10,7 +10,7 @@ import io.github.landwarderer.futon.list.domain.ListFilterOption import io.github.landwarderer.futon.list.domain.ListSortOrder import io.github.landwarderer.futon.local.data.index.LocalMangaIndex import io.github.landwarderer.futon.local.domain.LocalObserveMapper -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import javax.inject.Inject @Reusable diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/favourites/ui/list/FavouritesListViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/favourites/ui/list/FavouritesListViewModel.kt index 404fd47b54..eb2ebb7ab8 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/favourites/ui/list/FavouritesListViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/favourites/ui/list/FavouritesListViewModel.kt @@ -37,7 +37,7 @@ import io.github.landwarderer.futon.list.ui.model.EmptyState import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.LoadingState import io.github.landwarderer.futon.list.ui.model.toErrorState -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject import io.github.landwarderer.futon.local.data.LocalStorageChanges diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/MangaListFilterSerializer.kt b/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/MangaListFilterSerializer.kt index 9f01d4feca..4c88eae2bd 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/MangaListFilterSerializer.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/MangaListFilterSerializer.kt @@ -14,12 +14,12 @@ import kotlinx.serialization.encoding.encodeStructure import kotlinx.serialization.serializer import io.github.landwarderer.futon.core.model.MangaSource import io.github.landwarderer.futon.core.util.ext.toLocaleOrNull -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.ContentType -import io.github.landwarderer.futon.parsers.model.Demographic -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaState -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.Demographic +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.MangaTag import java.util.Locale object MangaListFilterSerializer : KSerializer { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/PersistableFilter.kt b/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/PersistableFilter.kt index 9027bb2d27..c8ec38bdfa 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/PersistableFilter.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/PersistableFilter.kt @@ -4,8 +4,8 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.json.JsonIgnoreUnknownKeys import io.github.landwarderer.futon.core.model.MangaSourceSerializer -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaSource @Serializable @JsonIgnoreUnknownKeys diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/SavedFiltersRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/SavedFiltersRepository.kt index f411179581..a225ac54d7 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/SavedFiltersRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/filter/data/SavedFiltersRepository.kt @@ -7,8 +7,8 @@ import dagger.Reusable import dagger.hilt.android.qualifiers.ApplicationContext import io.github.landwarderer.futon.core.util.ext.observeChanges import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaSource import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChanged diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterCoordinator.kt b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterCoordinator.kt index 3b466cb266..62773f86c1 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterCoordinator.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterCoordinator.kt @@ -30,19 +30,19 @@ import io.github.landwarderer.futon.filter.data.PersistableFilter import io.github.landwarderer.futon.filter.data.SavedFiltersRepository import io.github.landwarderer.futon.filter.ui.model.FilterProperty import io.github.landwarderer.futon.filter.ui.tags.TagTitleComparator -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.ContentType -import io.github.landwarderer.futon.parsers.model.Demographic -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaState -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.model.YEAR_MIN -import io.github.landwarderer.futon.parsers.util.ifZero -import io.github.landwarderer.futon.parsers.util.nullIfEmpty -import io.github.landwarderer.futon.parsers.util.suspendlazy.suspendLazy +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.Demographic +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.YEAR_MIN +import org.koitharu.kotatsu.parsers.util.ifZero +import org.koitharu.kotatsu.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.suspendlazy.suspendLazy import io.github.landwarderer.futon.remotelist.ui.RemoteListFragment import io.github.landwarderer.futon.search.domain.MangaSearchRepository import java.util.Calendar diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterHeaderFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterHeaderFragment.kt index 68ae2e94e0..bb8bc777b6 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterHeaderFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterHeaderFragment.kt @@ -18,12 +18,12 @@ import io.github.landwarderer.futon.core.util.ext.observe import io.github.landwarderer.futon.databinding.FragmentFilterHeaderBinding import io.github.landwarderer.futon.filter.data.PersistableFilter import io.github.landwarderer.futon.filter.ui.model.FilterHeaderModel -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.ContentType -import io.github.landwarderer.futon.parsers.model.Demographic -import io.github.landwarderer.futon.parsers.model.MangaState -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.model.YEAR_UNKNOWN +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.Demographic +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.YEAR_UNKNOWN import java.util.Locale import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterHeaderProducer.kt b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterHeaderProducer.kt index 75c5db36eb..41f5fef28b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterHeaderProducer.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/FilterHeaderProducer.kt @@ -8,11 +8,11 @@ import io.github.landwarderer.futon.core.ui.widgets.ChipsView import io.github.landwarderer.futon.filter.data.PersistableFilter import io.github.landwarderer.futon.filter.ui.model.FilterHeaderModel import io.github.landwarderer.futon.filter.ui.model.FilterProperty -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaListFilterCapabilities -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.util.toTitleCase import io.github.landwarderer.futon.search.domain.MangaSearchRepository import javax.inject.Inject import androidx.appcompat.R as appcompatR diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/model/FilterHeaderModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/model/FilterHeaderModel.kt index a392d18ce1..99cb32aa60 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/model/FilterHeaderModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/model/FilterHeaderModel.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.filter.ui.model import io.github.landwarderer.futon.core.ui.widgets.ChipsView -import io.github.landwarderer.futon.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.SortOrder data class FilterHeaderModel( val chips: Collection, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/model/TagCatalogItem.kt b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/model/TagCatalogItem.kt index 6f2c19dfe9..62f78aefc4 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/model/TagCatalogItem.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/model/TagCatalogItem.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.filter.ui.model import io.github.landwarderer.futon.list.ui.ListModelDiffCallback import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.MangaTag data class TagCatalogItem( val tag: MangaTag, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/sheet/FilterSheetFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/sheet/FilterSheetFragment.kt index de25e1f643..07ae8c363c 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/sheet/FilterSheetFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/sheet/FilterSheetFragment.kt @@ -46,15 +46,15 @@ import io.github.landwarderer.futon.filter.data.PersistableFilter import io.github.landwarderer.futon.filter.data.PersistableFilter.Companion.MAX_TITLE_LENGTH import io.github.landwarderer.futon.filter.ui.FilterCoordinator import io.github.landwarderer.futon.filter.ui.model.FilterProperty -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.ContentType -import io.github.landwarderer.futon.parsers.model.Demographic -import io.github.landwarderer.futon.parsers.model.MangaState -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.model.YEAR_UNKNOWN -import io.github.landwarderer.futon.parsers.util.mapToSet -import io.github.landwarderer.futon.parsers.util.toIntUp +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.Demographic +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.YEAR_UNKNOWN +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.toIntUp import java.util.Locale import java.util.TreeSet diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/tags/TagTitleComparator.kt b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/tags/TagTitleComparator.kt index 2bfb54d8f9..536049a858 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/tags/TagTitleComparator.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/tags/TagTitleComparator.kt @@ -1,6 +1,6 @@ package io.github.landwarderer.futon.filter.ui.tags -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.MangaTag import java.text.Collator import java.util.Locale diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/tags/TagsCatalogViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/tags/TagsCatalogViewModel.kt index f7ae4bc131..b5b0de5212 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/tags/TagsCatalogViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/filter/ui/tags/TagsCatalogViewModel.kt @@ -23,8 +23,8 @@ import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.LoadingState import io.github.landwarderer.futon.list.ui.model.toErrorFooter import io.github.landwarderer.futon.list.ui.model.toErrorState -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaTag @HiltViewModel(assistedFactory = TagsCatalogViewModel.Factory::class) class TagsCatalogViewModel @AssistedInject constructor( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryLocalObserver.kt b/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryLocalObserver.kt index ae166cb4f8..aa37473320 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryLocalObserver.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryLocalObserver.kt @@ -9,7 +9,7 @@ import io.github.landwarderer.futon.list.domain.ListFilterOption import io.github.landwarderer.futon.list.domain.ListSortOrder import io.github.landwarderer.futon.local.data.index.LocalMangaIndex import io.github.landwarderer.futon.local.domain.LocalObserveMapper -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import javax.inject.Inject @Reusable diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryRepository.kt index 68fc42c7aa..f79823f053 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/history/data/HistoryRepository.kt @@ -24,11 +24,11 @@ import io.github.landwarderer.futon.history.domain.model.MangaWithHistory import io.github.landwarderer.futon.list.domain.ListFilterOption import io.github.landwarderer.futon.list.domain.ListSortOrder import io.github.landwarderer.futon.list.domain.ReadingProgress -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.util.findById -import io.github.landwarderer.futon.parsers.util.levenshteinDistance +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.util.findById +import org.koitharu.kotatsu.parsers.util.levenshteinDistance import io.github.landwarderer.futon.scrobbling.common.domain.Scrobbler import io.github.landwarderer.futon.scrobbling.common.domain.tryScrobble import io.github.landwarderer.futon.search.domain.SearchKind diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/HistoryUpdateUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/HistoryUpdateUseCase.kt index 8d25d9d68e..01a6d97343 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/HistoryUpdateUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/HistoryUpdateUseCase.kt @@ -3,8 +3,8 @@ package io.github.landwarderer.futon.history.domain import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.core.util.ext.processLifecycleScope import io.github.landwarderer.futon.history.data.HistoryRepository -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.reader.ui.ReaderState import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/MarkAsReadUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/MarkAsReadUseCase.kt index 4121514227..78219a2f07 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/MarkAsReadUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/MarkAsReadUseCase.kt @@ -6,7 +6,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.supervisorScope import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.history.data.HistoryRepository -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import javax.inject.Inject @Reusable diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/model/MangaWithHistory.kt b/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/model/MangaWithHistory.kt index 26c6fddc45..a2c6c44487 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/model/MangaWithHistory.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/history/domain/model/MangaWithHistory.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.history.domain.model import io.github.landwarderer.futon.core.model.MangaHistory -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga data class MangaWithHistory( val manga: Manga, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/history/ui/HistoryListViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/history/ui/HistoryListViewModel.kt index 33cb71e897..f1f0bcdac5 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/history/ui/HistoryListViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/history/ui/HistoryListViewModel.kt @@ -39,7 +39,7 @@ import io.github.landwarderer.futon.list.ui.model.ListHeader import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.LoadingState import io.github.landwarderer.futon.list.ui.model.toErrorState -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import java.time.Instant import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/image/ui/CoverImageView.kt b/app/src/main/kotlin/io/github/landwarderer/futon/image/ui/CoverImageView.kt index c08ddf5503..177a0d0cd9 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/image/ui/CoverImageView.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/image/ui/CoverImageView.kt @@ -38,12 +38,12 @@ import io.github.landwarderer.futon.core.util.ext.isNetworkError import io.github.landwarderer.futon.core.util.ext.mangaExtra import io.github.landwarderer.futon.core.util.ext.mangaSourceExtra import io.github.landwarderer.futon.favourites.domain.model.Cover -import io.github.landwarderer.futon.parsers.exception.ContentUnavailableException -import io.github.landwarderer.futon.parsers.exception.ParseException -import io.github.landwarderer.futon.parsers.exception.TooManyRequestExceptions -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.exception.ContentUnavailableException +import org.koitharu.kotatsu.parsers.exception.ParseException +import org.koitharu.kotatsu.parsers.exception.TooManyRequestExceptions +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaSource import io.github.landwarderer.futon.reader.ui.pager.ReaderPage import kotlin.coroutines.resume import androidx.appcompat.R as appcompatR diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/image/ui/CoverStackView.kt b/app/src/main/kotlin/io/github/landwarderer/futon/image/ui/CoverStackView.kt index a3e8948a18..f4285b430c 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/image/ui/CoverStackView.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/image/ui/CoverStackView.kt @@ -19,8 +19,8 @@ import io.github.landwarderer.futon.core.ui.widgets.StackLayout import io.github.landwarderer.futon.core.util.ext.getThemeColor import io.github.landwarderer.futon.databinding.ViewCoverStackBinding import io.github.landwarderer.futon.favourites.domain.model.Cover -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource class CoverStackView @JvmOverloads constructor( context: Context, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/ListFilterOption.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/ListFilterOption.kt index 79d0cb2fad..d1b693f085 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/ListFilterOption.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/ListFilterOption.kt @@ -9,9 +9,9 @@ import io.github.landwarderer.futon.core.model.LocalMangaSource import io.github.landwarderer.futon.core.model.unwrap import io.github.landwarderer.futon.core.parser.external.ExternalMangaSource import io.github.landwarderer.futon.core.parser.favicon.faviconUri -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag sealed interface ListFilterOption { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/ListSortOrder.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/ListSortOrder.kt index 9f2dbf51d7..d4cae037ec 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/ListSortOrder.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/ListSortOrder.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.list.domain import androidx.annotation.StringRes import io.github.landwarderer.futon.R -import io.github.landwarderer.futon.parsers.util.find +import org.koitharu.kotatsu.parsers.util.find import java.util.EnumSet enum class ListSortOrder( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/MangaListMapper.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/MangaListMapper.kt index 06cf7b1b3e..29fa9e6623 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/MangaListMapper.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/MangaListMapper.kt @@ -19,8 +19,8 @@ import io.github.landwarderer.futon.list.ui.model.MangaDetailedListModel import io.github.landwarderer.futon.list.ui.model.MangaGridModel import io.github.landwarderer.futon.list.ui.model.MangaListModel import io.github.landwarderer.futon.local.data.index.LocalMangaIndex -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaTag import io.github.landwarderer.futon.tracker.domain.TrackingRepository import io.github.landwarderer.futon.tracker.domain.model.TrackingLogItem import io.github.landwarderer.futon.tracker.ui.feed.model.FeedItem diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/MangaListQuickFilter.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/MangaListQuickFilter.kt index 9d96bb5d44..b40455c89e 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/MangaListQuickFilter.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/domain/MangaListQuickFilter.kt @@ -6,8 +6,8 @@ import kotlinx.coroutines.flow.asStateFlow import io.github.landwarderer.futon.core.model.toChipModel import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.list.ui.model.QuickFilter -import io.github.landwarderer.futon.parsers.util.suspendlazy.getOrNull -import io.github.landwarderer.futon.parsers.util.suspendlazy.suspendLazy +import org.koitharu.kotatsu.parsers.util.suspendlazy.getOrNull +import org.koitharu.kotatsu.parsers.util.suspendlazy.suspendLazy abstract class MangaListQuickFilter( private val settings: AppSettings, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/MangaListFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/MangaListFragment.kt index 8e0d166a95..1649c05af2 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/MangaListFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/MangaListFragment.kt @@ -54,8 +54,8 @@ import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.MangaListModel import io.github.landwarderer.futon.list.ui.size.DynamicItemSizeResolver import io.github.landwarderer.futon.main.ui.owners.AppBarOwner -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaTag import io.github.landwarderer.futon.search.ui.MangaListActivity import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/MangaListViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/MangaListViewModel.kt index 13dd376caf..44de787083 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/MangaListViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/MangaListViewModel.kt @@ -23,7 +23,7 @@ import io.github.landwarderer.futon.core.ui.util.ReversibleAction import io.github.landwarderer.futon.core.util.ext.MutableEventFlow import io.github.landwarderer.futon.list.domain.ListFilterOption import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.local.data.LocalStorageChanges import io.github.landwarderer.futon.local.domain.model.LocalManga diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/adapter/BadgeADUtil.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/adapter/BadgeADUtil.kt index 6fee984f55..255d8db6ab 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/adapter/BadgeADUtil.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/adapter/BadgeADUtil.kt @@ -10,7 +10,7 @@ import com.google.android.material.badge.BadgeDrawable import com.google.android.material.badge.BadgeUtils import com.google.android.material.badge.ExperimentalBadgeUtils import io.github.landwarderer.futon.R -import io.github.landwarderer.futon.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.nullIfEmpty @Deprecated("") @CheckResult diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/adapter/MangaDetailsClickListener.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/adapter/MangaDetailsClickListener.kt index c09fd62229..6396c4c2d6 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/adapter/MangaDetailsClickListener.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/adapter/MangaDetailsClickListener.kt @@ -3,8 +3,8 @@ package io.github.landwarderer.futon.list.ui.adapter import android.view.View import io.github.landwarderer.futon.core.ui.list.OnListItemClickListener import io.github.landwarderer.futon.list.ui.model.MangaListModel -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaTag interface MangaDetailsClickListener : OnListItemClickListener { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/config/ListConfigViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/config/ListConfigViewModel.kt index 65c499d65d..ffb8b5cebf 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/config/ListConfigViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/config/ListConfigViewModel.kt @@ -12,7 +12,7 @@ import io.github.landwarderer.futon.core.util.ext.sortedByOrdinal import io.github.landwarderer.futon.favourites.domain.FavouritesRepository import io.github.landwarderer.futon.favourites.ui.list.FavouritesListFragment.Companion.NO_ID import io.github.landwarderer.futon.list.domain.ListSortOrder -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import javax.inject.Inject @HiltViewModel diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/ListHeader.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/ListHeader.kt index 026ff8f108..b1eee4fc2d 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/ListHeader.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/ListHeader.kt @@ -4,7 +4,7 @@ import android.content.Context import androidx.annotation.StringRes import io.github.landwarderer.futon.core.model.getLocalizedTitle import io.github.landwarderer.futon.core.ui.model.DateTimeAgo -import io.github.landwarderer.futon.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaChapter data class ListHeader private constructor( private val textRaw: Any, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/ListModelExt.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/ListModelExt.kt index 64dd4e6e99..1b3d464200 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/ListModelExt.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/ListModelExt.kt @@ -4,7 +4,7 @@ import androidx.annotation.StringRes import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.exceptions.resolve.ExceptionResolver import io.github.landwarderer.futon.core.util.ext.getDisplayIcon -import io.github.landwarderer.futon.parsers.util.ifZero +import org.koitharu.kotatsu.parsers.util.ifZero fun Throwable.toErrorState(canRetry: Boolean = true, @StringRes secondaryAction: Int = 0) = ErrorState( exception = this, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaCompactListModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaCompactListModel.kt index 54a34de6ac..f4e50e4910 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaCompactListModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaCompactListModel.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.list.ui.model import io.github.landwarderer.futon.core.ui.model.MangaOverride -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga data class MangaCompactListModel( override val manga: Manga, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaDetailedListModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaDetailedListModel.kt index be911f0650..104ed41ebc 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaDetailedListModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaDetailedListModel.kt @@ -5,7 +5,7 @@ import io.github.landwarderer.futon.core.ui.widgets.ChipsView import io.github.landwarderer.futon.list.domain.ReadingProgress import io.github.landwarderer.futon.list.ui.ListModelDiffCallback.Companion.PAYLOAD_ANYTHING_CHANGED import io.github.landwarderer.futon.list.ui.ListModelDiffCallback.Companion.PAYLOAD_PROGRESS_CHANGED -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga data class MangaDetailedListModel( override val manga: Manga, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaGridModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaGridModel.kt index 814b01ff8b..877682241b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaGridModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaGridModel.kt @@ -4,7 +4,7 @@ import io.github.landwarderer.futon.core.ui.model.MangaOverride import io.github.landwarderer.futon.list.domain.ReadingProgress import io.github.landwarderer.futon.list.ui.ListModelDiffCallback.Companion.PAYLOAD_ANYTHING_CHANGED import io.github.landwarderer.futon.list.ui.ListModelDiffCallback.Companion.PAYLOAD_PROGRESS_CHANGED -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga data class MangaGridModel( override val manga: Manga, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaListModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaListModel.kt index cb69b19577..7939633f5b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaListModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/model/MangaListModel.kt @@ -7,9 +7,9 @@ import io.github.landwarderer.futon.core.model.getTitle import io.github.landwarderer.futon.core.model.withOverride import io.github.landwarderer.futon.core.ui.model.MangaOverride import io.github.landwarderer.futon.list.ui.ListModelDiffCallback.Companion.PAYLOAD_ANYTHING_CHANGED -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty sealed class MangaListModel : ListModel { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/preview/PreviewFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/preview/PreviewFragment.kt index 6dcba193fa..5af1dfcd7f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/preview/PreviewFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/list/ui/preview/PreviewFragment.kt @@ -19,9 +19,9 @@ import io.github.landwarderer.futon.core.util.ext.observe import io.github.landwarderer.futon.core.util.ext.textAndVisible import io.github.landwarderer.futon.databinding.FragmentPreviewBinding import io.github.landwarderer.futon.filter.ui.FilterCoordinator -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty import io.github.landwarderer.futon.search.ui.MangaListActivity @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalMangaRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalMangaRepository.kt index e67d11aa3e..a12631e0c3 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalMangaRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalMangaRepository.kt @@ -18,18 +18,18 @@ import io.github.landwarderer.futon.local.data.output.LocalMangaOutput import io.github.landwarderer.futon.local.data.output.LocalMangaUtil import io.github.landwarderer.futon.local.domain.MangaLock import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaListFilterCapabilities -import io.github.landwarderer.futon.parsers.model.MangaListFilterOptions -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.util.levenshteinDistance -import io.github.landwarderer.futon.parsers.util.mapToSet -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.levenshteinDistance +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalStorageCache.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalStorageCache.kt index ab714cdb11..df018d64ec 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalStorageCache.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalStorageCache.kt @@ -14,9 +14,9 @@ import io.github.landwarderer.futon.core.util.ext.subdir import io.github.landwarderer.futon.core.util.ext.takeIfReadable import io.github.landwarderer.futon.core.util.ext.takeIfWriteable import io.github.landwarderer.futon.core.util.ext.writeAllCancellable -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable -import io.github.landwarderer.futon.parsers.util.suspendlazy.suspendLazy +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.suspendlazy.suspendLazy import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runInterruptible import kotlinx.coroutines.withContext diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalStorageManager.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalStorageManager.kt index 54fc5227fa..8cbe219246 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalStorageManager.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/LocalStorageManager.kt @@ -27,7 +27,7 @@ import io.github.landwarderer.futon.core.util.ext.isReadable import io.github.landwarderer.futon.core.util.ext.isWriteable import io.github.landwarderer.futon.core.util.ext.resolveFile import io.github.landwarderer.futon.core.util.ext.takeIfWriteable -import io.github.landwarderer.futon.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.mapToSet import java.io.File import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/MangaIndex.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/MangaIndex.kt index d254730bfa..447ae37ed4 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/MangaIndex.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/MangaIndex.kt @@ -5,23 +5,23 @@ import io.github.landwarderer.futon.BuildConfig import io.github.landwarderer.futon.core.model.MangaSource import io.github.landwarderer.futon.core.model.isLocal import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaState -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.model.RATING_UNKNOWN -import io.github.landwarderer.futon.parsers.util.json.getBooleanOrDefault -import io.github.landwarderer.futon.parsers.util.json.getEnumValueOrNull -import io.github.landwarderer.futon.parsers.util.json.getFloatOrDefault -import io.github.landwarderer.futon.parsers.util.json.getIntOrDefault -import io.github.landwarderer.futon.parsers.util.json.getLongOrDefault -import io.github.landwarderer.futon.parsers.util.json.getStringOrNull -import io.github.landwarderer.futon.parsers.util.json.mapJSONToSet -import io.github.landwarderer.futon.parsers.util.json.toStringSet -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable -import io.github.landwarderer.futon.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.util.json.getBooleanOrDefault +import org.koitharu.kotatsu.parsers.util.json.getEnumValueOrNull +import org.koitharu.kotatsu.parsers.util.json.getFloatOrDefault +import org.koitharu.kotatsu.parsers.util.json.getIntOrDefault +import org.koitharu.kotatsu.parsers.util.json.getLongOrDefault +import org.koitharu.kotatsu.parsers.util.json.getStringOrNull +import org.koitharu.kotatsu.parsers.util.json.mapJSONToSet +import org.koitharu.kotatsu.parsers.util.json.toStringSet +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.toTitleCase import okio.FileSystem import okio.Path import okio.Path.Companion.toOkioPath diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/index/LocalMangaIndex.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/index/LocalMangaIndex.kt index 3ac5de20d7..31b6e433a0 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/index/LocalMangaIndex.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/index/LocalMangaIndex.kt @@ -10,7 +10,7 @@ import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.local.data.LocalMangaRepository import io.github.landwarderer.futon.local.data.input.LocalMangaParser import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.flow.FlowCollector import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/input/LocalMangaParser.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/input/LocalMangaParser.kt index 4cb2a67d87..7559d52368 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/input/LocalMangaParser.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/input/LocalMangaParser.kt @@ -20,12 +20,12 @@ import io.github.landwarderer.futon.local.data.hasZipExtension import io.github.landwarderer.futon.local.data.isZipArchive import io.github.landwarderer.futon.local.data.output.LocalMangaOutput.Companion.ENTRY_NAME_INDEX import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.util.longHashCode -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable -import io.github.landwarderer.futon.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.util.longHashCode +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.toTitleCase import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.channelFlow import kotlinx.coroutines.flow.firstOrNull diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaDirOutput.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaDirOutput.kt index b199172c84..bc5ee2d380 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaDirOutput.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaDirOutput.kt @@ -16,9 +16,9 @@ import io.github.landwarderer.futon.core.util.ext.toFileNameSafe import io.github.landwarderer.futon.core.zip.ZipOutput import io.github.landwarderer.futon.local.data.MangaIndex import io.github.landwarderer.futon.local.data.input.LocalMangaParser -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.util.nullIfEmpty import java.io.File class LocalMangaDirOutput( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaOutput.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaOutput.kt index 87bc0ad2aa..88c9e55a6e 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaOutput.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaOutput.kt @@ -5,9 +5,9 @@ import io.github.landwarderer.futon.core.util.ext.MimeType import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.core.util.ext.toFileNameSafe import io.github.landwarderer.futon.local.data.input.LocalMangaParser -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaUtil.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaUtil.kt index 97a475e871..762c1a071b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaUtil.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaUtil.kt @@ -3,7 +3,7 @@ package io.github.landwarderer.futon.local.data.output import androidx.core.net.toFile import androidx.core.net.toUri import io.github.landwarderer.futon.core.model.isLocal -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga class LocalMangaUtil( private val manga: Manga, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaZipOutput.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaZipOutput.kt index b1d12bfa37..7885e9b893 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaZipOutput.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/data/output/LocalMangaZipOutput.kt @@ -13,8 +13,8 @@ import io.github.landwarderer.futon.core.util.ext.deleteAwait import io.github.landwarderer.futon.core.util.ext.readText import io.github.landwarderer.futon.core.zip.ZipOutput import io.github.landwarderer.futon.local.data.MangaIndex -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter import java.io.File import java.util.zip.ZipFile diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/DeleteLocalMangaUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/DeleteLocalMangaUseCase.kt index a7f79429a2..b05df44ebf 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/DeleteLocalMangaUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/DeleteLocalMangaUseCase.kt @@ -4,8 +4,8 @@ import io.github.landwarderer.futon.core.model.isLocal import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.history.data.HistoryRepository import io.github.landwarderer.futon.local.data.LocalMangaRepository -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import java.io.IOException import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/DeleteReadChaptersUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/DeleteReadChaptersUseCase.kt index bbf011f48e..59d9d1cde7 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/DeleteReadChaptersUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/DeleteReadChaptersUseCase.kt @@ -7,11 +7,11 @@ import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.history.data.HistoryRepository import io.github.landwarderer.futon.local.data.LocalMangaRepository import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.util.findById -import io.github.landwarderer.futon.parsers.util.recoverCatchingCancellable -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.util.findById +import org.koitharu.kotatsu.parsers.util.recoverCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.buffer import kotlinx.coroutines.flow.channelFlow diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/LocalObserveMapper.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/LocalObserveMapper.kt index 3a1565877b..b33ea42a61 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/LocalObserveMapper.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/LocalObserveMapper.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.onStart import io.github.landwarderer.futon.core.model.isLocal import io.github.landwarderer.futon.local.data.index.LocalMangaIndex -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga abstract class LocalObserveMapper( private val localMangaIndex: LocalMangaIndex, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/MangaLock.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/MangaLock.kt index 8f2f7bacc0..b133613372 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/MangaLock.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/MangaLock.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.local.domain import io.github.landwarderer.futon.core.util.MultiMutex -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import javax.inject.Inject import javax.inject.Singleton diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/model/LocalManga.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/model/LocalManga.kt index 8ad0daae99..b5791f0d18 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/model/LocalManga.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/domain/model/LocalManga.kt @@ -5,8 +5,8 @@ import androidx.core.net.toFile import androidx.core.net.toUri import io.github.landwarderer.futon.core.util.ext.contains import io.github.landwarderer.futon.core.util.ext.creationTime -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaTag import java.io.File data class LocalManga( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/ImportService.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/ImportService.kt index 2c7e29dc1d..a58045194b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/ImportService.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/ImportService.kt @@ -29,8 +29,8 @@ import io.github.landwarderer.futon.core.util.ext.toBitmapOrNull import io.github.landwarderer.futon.core.util.ext.toUriOrNull import io.github.landwarderer.futon.core.util.ext.withPartialWakeLock import io.github.landwarderer.futon.local.data.importer.SingleMangaImporter -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import kotlinx.coroutines.runBlocking import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/LocalChaptersRemoveService.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/LocalChaptersRemoveService.kt index 246fc66a94..afea79a791 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/LocalChaptersRemoveService.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/LocalChaptersRemoveService.kt @@ -22,7 +22,7 @@ import io.github.landwarderer.futon.core.util.ext.withPartialWakeLock import io.github.landwarderer.futon.local.data.LocalMangaRepository import io.github.landwarderer.futon.local.data.LocalStorageChanges import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import javax.inject.Inject @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/LocalListViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/LocalListViewModel.kt index e3911b7681..60884ef0d6 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/LocalListViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/local/ui/LocalListViewModel.kt @@ -32,7 +32,7 @@ import io.github.landwarderer.futon.local.data.LocalStorageChanges import io.github.landwarderer.futon.local.data.LocalStorageManager import io.github.landwarderer.futon.local.domain.DeleteLocalMangaUseCase import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.remotelist.ui.RemoteListViewModel import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/main/domain/CoverRestoreInterceptor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/main/domain/CoverRestoreInterceptor.kt index d7d8ea158e..13bdff061a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/main/domain/CoverRestoreInterceptor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/main/domain/CoverRestoreInterceptor.kt @@ -12,10 +12,10 @@ import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.util.ext.bookmarkKey import io.github.landwarderer.futon.core.util.ext.mangaKey import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.findById -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.findById +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import java.util.Collections import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/MainActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/MainActivity.kt index 838f601d66..f68ad31fdc 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/MainActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/MainActivity.kt @@ -58,7 +58,7 @@ import io.github.landwarderer.futon.local.ui.LocalIndexUpdateService import io.github.landwarderer.futon.local.ui.LocalStorageCleanupWorker import io.github.landwarderer.futon.main.ui.owners.AppBarOwner import io.github.landwarderer.futon.main.ui.owners.BottomNavOwner -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.remotelist.ui.MangaSearchMenuProvider import io.github.landwarderer.futon.search.ui.suggestion.SearchSuggestionItemCallback import io.github.landwarderer.futon.search.ui.suggestion.SearchSuggestionListenerImpl diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/MainViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/MainViewModel.kt index 53601ffe30..fafbafc1cc 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/MainViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/MainViewModel.kt @@ -18,7 +18,7 @@ import io.github.landwarderer.futon.core.util.ext.call import io.github.landwarderer.futon.explore.data.MangaSourcesRepository import io.github.landwarderer.futon.history.data.HistoryRepository import io.github.landwarderer.futon.main.domain.ReadingResumeEnabledUseCase -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.tracker.domain.TrackingRepository import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/protect/ProtectViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/protect/ProtectViewModel.kt index 87703b3cc4..b1c1cabbf8 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/protect/ProtectViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/protect/ProtectViewModel.kt @@ -8,7 +8,7 @@ import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.ui.BaseViewModel import io.github.landwarderer.futon.core.util.ext.MutableEventFlow import io.github.landwarderer.futon.core.util.ext.call -import io.github.landwarderer.futon.parsers.util.md5 +import org.koitharu.kotatsu.parsers.util.md5 import javax.inject.Inject private const val PASSWORD_COMPARE_DELAY = 1_000L diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/welcome/WelcomeSheet.kt b/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/welcome/WelcomeSheet.kt index b3c544be74..5db4c39b1e 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/welcome/WelcomeSheet.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/welcome/WelcomeSheet.kt @@ -28,7 +28,7 @@ import io.github.landwarderer.futon.core.util.ext.observe import io.github.landwarderer.futon.core.util.ext.tryLaunch import io.github.landwarderer.futon.databinding.SheetWelcomeBinding import io.github.landwarderer.futon.filter.ui.model.FilterProperty -import io.github.landwarderer.futon.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.ContentType import java.util.Locale @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/welcome/WelcomeViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/welcome/WelcomeViewModel.kt index 6ec45f231f..8b7eedc615 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/welcome/WelcomeViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/main/ui/welcome/WelcomeViewModel.kt @@ -15,9 +15,9 @@ import io.github.landwarderer.futon.core.util.ext.toList import io.github.landwarderer.futon.core.util.ext.toLocale import io.github.landwarderer.futon.explore.data.MangaSourcesRepository import io.github.landwarderer.futon.filter.ui.model.FilterProperty -import io.github.landwarderer.futon.parsers.model.ContentType -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.util.mapToSet import java.util.EnumSet import java.util.Locale import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/PageImagePickActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/PageImagePickActivity.kt index 51f95360f2..a860657827 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/PageImagePickActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/PageImagePickActivity.kt @@ -24,7 +24,7 @@ import io.github.landwarderer.futon.core.util.ext.observeEvent import io.github.landwarderer.futon.databinding.ActivityPickerBinding import io.github.landwarderer.futon.main.ui.owners.AppBarOwner import io.github.landwarderer.futon.main.ui.owners.SnackbarOwner -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.picker.ui.manga.MangaPickerFragment import io.github.landwarderer.futon.picker.ui.page.PagePickerFragment import io.github.landwarderer.futon.reader.ui.PageSaveHelper diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/PageImagePickContract.kt b/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/PageImagePickContract.kt index 58472f5aa7..445e006bc6 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/PageImagePickContract.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/PageImagePickContract.kt @@ -6,7 +6,7 @@ import android.net.Uri import androidx.activity.result.contract.ActivityResultContract import io.github.landwarderer.futon.core.model.parcelable.ParcelableManga import io.github.landwarderer.futon.core.nav.AppRouter -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga class PageImagePickContract : ActivityResultContract() { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/page/PagePickerFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/page/PagePickerFragment.kt index 70e8d86710..2343aba4da 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/page/PagePickerFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/picker/ui/page/PagePickerFragment.kt @@ -30,7 +30,7 @@ import io.github.landwarderer.futon.list.ui.GridSpanResolver import io.github.landwarderer.futon.list.ui.adapter.ListItemType import io.github.landwarderer.futon.list.ui.adapter.TypedListSpacingDecoration import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty import io.github.landwarderer.futon.picker.ui.PageImagePickActivity import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/data/ModelMapping.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/data/ModelMapping.kt index f57a48cc3a..ad3adcbe12 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/data/ModelMapping.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/data/ModelMapping.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.reader.data -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter fun Manga.filterChapters(branch: String?): Manga { if (chapters.isNullOrEmpty()) return this diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/ChaptersLoader.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/ChaptersLoader.kt index a52e15e1cd..0fa5bffe27 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/ChaptersLoader.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/ChaptersLoader.kt @@ -7,8 +7,8 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.details.data.MangaDetails -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaPage import io.github.landwarderer.futon.reader.ui.pager.ReaderPage import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/DetectReaderModeUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/DetectReaderModeUseCase.kt index 6bfa4424c5..e5f7c872c2 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/DetectReaderModeUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/DetectReaderModeUseCase.kt @@ -13,9 +13,9 @@ import io.github.landwarderer.futon.core.prefs.ReaderMode import io.github.landwarderer.futon.core.util.ext.isFileUri import io.github.landwarderer.futon.core.util.ext.isZipUri import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.reader.ui.ReaderState import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runInterruptible diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/PageLoader.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/PageLoader.kt index 71eaa0c2df..18d203d54a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/PageLoader.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/domain/PageLoader.kt @@ -51,10 +51,10 @@ import io.github.landwarderer.futon.core.util.progress.ProgressDeferred import io.github.landwarderer.futon.download.ui.worker.DownloadSlowdownDispatcher import io.github.landwarderer.futon.local.data.LocalStorageCache import io.github.landwarderer.futon.local.data.PageCache -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.requireBody -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.requireBody +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.reader.ui.pager.ReaderPage import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.Deferred diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/PageLabelFormatter.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/PageLabelFormatter.kt index e3edefd00b..438ff6d89e 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/PageLabelFormatter.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/PageLabelFormatter.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.reader.ui import com.google.android.material.slider.LabelFormatter -import io.github.landwarderer.futon.parsers.util.format +import org.koitharu.kotatsu.parsers.util.format class PageLabelFormatter : LabelFormatter { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/PageSaveHelper.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/PageSaveHelper.kt index 7c97caa036..6032f8e4e3 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/PageSaveHelper.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/PageSaveHelper.kt @@ -34,8 +34,8 @@ import io.github.landwarderer.futon.core.util.ext.isZipUri import io.github.landwarderer.futon.core.util.ext.toFileNameSafe import io.github.landwarderer.futon.core.util.ext.toFileOrNull import io.github.landwarderer.futon.core.util.ext.writeAllCancellable -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaPage import io.github.landwarderer.futon.reader.domain.PageLoader import java.io.File import java.text.SimpleDateFormat diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderActivity.kt index c9b67072af..2822391f80 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderActivity.kt @@ -62,7 +62,7 @@ import io.github.landwarderer.futon.core.util.ext.toUriOrNull import io.github.landwarderer.futon.core.util.ext.zipWithPrevious import io.github.landwarderer.futon.databinding.ActivityReaderBinding import io.github.landwarderer.futon.details.ui.pager.pages.PagesSavedObserver -import io.github.landwarderer.futon.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaChapter import io.github.landwarderer.futon.reader.data.TapGridSettings import io.github.landwarderer.futon.reader.domain.TapGridArea import io.github.landwarderer.futon.reader.ui.config.ReaderConfigSheet diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderInfoBarView.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderInfoBarView.kt index ea3719bc15..2329a3941b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderInfoBarView.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderInfoBarView.kt @@ -29,7 +29,7 @@ import io.github.landwarderer.futon.core.util.ext.getThemeColorStateList import io.github.landwarderer.futon.core.util.ext.isNightMode import io.github.landwarderer.futon.core.util.ext.measureDimension import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.util.format +import org.koitharu.kotatsu.parsers.util.format import io.github.landwarderer.futon.reader.ui.pager.ReaderUiState import java.time.LocalTime import java.time.format.DateTimeFormatter diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderNavigationCallback.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderNavigationCallback.kt index 8f988a3ce0..735edf492d 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderNavigationCallback.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderNavigationCallback.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.reader.ui import io.github.landwarderer.futon.bookmarks.domain.Bookmark -import io.github.landwarderer.futon.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaChapter import io.github.landwarderer.futon.reader.ui.pager.ReaderPage interface ReaderNavigationCallback { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderState.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderState.kt index fa43949aa1..dede337ede 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderState.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderState.kt @@ -3,7 +3,7 @@ package io.github.landwarderer.futon.reader.ui import android.os.Parcelable import kotlinx.parcelize.Parcelize import io.github.landwarderer.futon.core.model.MangaHistory -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga @Parcelize data class ReaderState( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderViewModel.kt index bb9842c113..5800f3cb73 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/ReaderViewModel.kt @@ -57,12 +57,12 @@ import io.github.landwarderer.futon.list.domain.ReadingProgress.Companion.PROGRE import io.github.landwarderer.futon.local.data.LocalStorageChanges import io.github.landwarderer.futon.local.domain.DeleteLocalMangaUseCase import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.ContentRating -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable -import io.github.landwarderer.futon.parsers.util.sizeOrZero +import org.koitharu.kotatsu.parsers.model.ContentRating +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.sizeOrZero import io.github.landwarderer.futon.reader.domain.ChaptersLoader import io.github.landwarderer.futon.reader.domain.DetectReaderModeUseCase import io.github.landwarderer.futon.reader.domain.PageLoader diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/colorfilter/ColorFilterConfigActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/colorfilter/ColorFilterConfigActivity.kt index d0cd75bd3a..51f9c800b5 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/colorfilter/ColorFilterConfigActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/colorfilter/ColorFilterConfigActivity.kt @@ -26,8 +26,8 @@ import io.github.landwarderer.futon.core.util.ext.setValueRounded import io.github.landwarderer.futon.core.util.ext.systemBarsInsets import io.github.landwarderer.futon.core.util.progress.ImageRequestIndicatorListener import io.github.landwarderer.futon.databinding.ActivityColorFilterBinding -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.util.format +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.util.format import io.github.landwarderer.futon.reader.domain.ReaderColorFilter import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/config/ImageServerDelegate.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/config/ImageServerDelegate.kt index 45daa44f95..fc3c2a8d1e 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/config/ImageServerDelegate.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/config/ImageServerDelegate.kt @@ -8,11 +8,11 @@ import kotlinx.coroutines.withContext import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.parser.ParserMangaRepository -import io.github.landwarderer.futon.parsers.config.ConfigKey -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.mapToArray -import io.github.landwarderer.futon.parsers.util.suspendlazy.getOrNull -import io.github.landwarderer.futon.parsers.util.suspendlazy.suspendLazy +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.mapToArray +import org.koitharu.kotatsu.parsers.util.suspendlazy.getOrNull +import org.koitharu.kotatsu.parsers.util.suspendlazy.suspendLazy import kotlin.coroutines.resume class ImageServerDelegate( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/BasePageHolder.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/BasePageHolder.kt index 9df6c978e7..17446d6bab 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/BasePageHolder.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/BasePageHolder.kt @@ -25,7 +25,7 @@ import io.github.landwarderer.futon.core.util.ext.isLowRamDevice import io.github.landwarderer.futon.core.util.ext.isSerializable import io.github.landwarderer.futon.core.util.ext.observe import io.github.landwarderer.futon.databinding.LayoutPageInfoBinding -import io.github.landwarderer.futon.parsers.util.ifZero +import org.koitharu.kotatsu.parsers.util.ifZero import io.github.landwarderer.futon.reader.domain.PageLoader import io.github.landwarderer.futon.reader.ui.config.ReaderSettings import io.github.landwarderer.futon.reader.ui.pager.vm.PageState diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/ReaderPage.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/ReaderPage.kt index 949b77347a..ae436f6941 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/ReaderPage.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/ReaderPage.kt @@ -4,8 +4,8 @@ import android.os.Parcelable import kotlinx.parcelize.Parcelize import kotlinx.parcelize.TypeParceler import io.github.landwarderer.futon.core.model.parcelable.MangaSourceParceler -import io.github.landwarderer.futon.parsers.model.MangaPage -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaSource @Parcelize @TypeParceler diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/ReaderUiState.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/ReaderUiState.kt index fc37c64fba..16f38bfba4 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/ReaderUiState.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/ReaderUiState.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.reader.ui.pager import android.content.res.Resources import io.github.landwarderer.futon.core.model.getLocalizedTitle -import io.github.landwarderer.futon.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaChapter data class ReaderUiState( val mangaName: String?, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/vm/PageViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/vm/PageViewModel.kt index a45152f309..4a5c27e7c9 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/vm/PageViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/reader/ui/pager/vm/PageViewModel.kt @@ -9,7 +9,7 @@ import io.github.landwarderer.futon.core.exceptions.resolve.ExceptionResolver import io.github.landwarderer.futon.core.os.NetworkState import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.core.util.ext.throttle -import io.github.landwarderer.futon.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaPage import io.github.landwarderer.futon.reader.domain.PageLoader import io.github.landwarderer.futon.reader.ui.config.ReaderSettings import kotlinx.coroutines.CancellationException diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/MangaSearchMenuProvider.kt b/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/MangaSearchMenuProvider.kt index 7685163678..a220ccf6e9 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/MangaSearchMenuProvider.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/MangaSearchMenuProvider.kt @@ -11,7 +11,7 @@ import io.github.landwarderer.futon.core.ui.util.ReversibleAction import io.github.landwarderer.futon.core.util.ext.call import io.github.landwarderer.futon.filter.ui.FilterCoordinator import io.github.landwarderer.futon.list.ui.MangaListViewModel -import io.github.landwarderer.futon.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaListFilter class MangaSearchMenuProvider( private val filter: FilterCoordinator, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/RemoteListFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/RemoteListFragment.kt index 93cb3fb110..aa168c2acd 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/RemoteListFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/RemoteListFragment.kt @@ -25,7 +25,7 @@ import io.github.landwarderer.futon.core.util.ext.withArgs import io.github.landwarderer.futon.databinding.FragmentListBinding import io.github.landwarderer.futon.filter.ui.FilterCoordinator import io.github.landwarderer.futon.list.ui.MangaListFragment -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource import io.github.landwarderer.futon.search.domain.SearchKind @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/RemoteListViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/RemoteListViewModel.kt index d9d9d25fed..9c793dcfcd 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/RemoteListViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/remotelist/ui/RemoteListViewModel.kt @@ -28,9 +28,9 @@ import io.github.landwarderer.futon.list.ui.model.toErrorFooter import io.github.landwarderer.futon.list.ui.model.toErrorState import io.github.landwarderer.futon.local.data.LocalStorageChanges import io.github.landwarderer.futon.local.domain.model.LocalManga -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.util.sizeOrZero +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.util.sizeOrZero import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/anilist/data/AniListRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/anilist/data/AniListRepository.kt index becdd4f9b1..3b80a8065f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/anilist/data/AniListRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/anilist/data/AniListRepository.kt @@ -10,12 +10,12 @@ import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.db.MangaDatabase -import io.github.landwarderer.futon.parsers.exception.GraphQLException -import io.github.landwarderer.futon.parsers.util.await -import io.github.landwarderer.futon.parsers.util.json.getStringOrNull -import io.github.landwarderer.futon.parsers.util.json.mapJSON -import io.github.landwarderer.futon.parsers.util.parseJson -import io.github.landwarderer.futon.parsers.util.toIntUp +import org.koitharu.kotatsu.parsers.exception.GraphQLException +import org.koitharu.kotatsu.parsers.util.await +import org.koitharu.kotatsu.parsers.util.json.getStringOrNull +import org.koitharu.kotatsu.parsers.util.json.mapJSON +import org.koitharu.kotatsu.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.toIntUp import io.github.landwarderer.futon.scrobbling.common.data.ScrobblerRepository import io.github.landwarderer.futon.scrobbling.common.data.ScrobblerStorage import io.github.landwarderer.futon.scrobbling.common.data.ScrobblingEntity diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/data/ScrobblerStorage.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/data/ScrobblerStorage.kt index 6b49a69cea..03f04a7430 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/data/ScrobblerStorage.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/data/ScrobblerStorage.kt @@ -3,7 +3,7 @@ package io.github.landwarderer.futon.scrobbling.common.data import android.content.Context import androidx.core.content.edit import org.jsoup.internal.StringUtil.StringJoiner -import io.github.landwarderer.futon.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.nullIfEmpty import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblerService import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblerUser diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/domain/Scrobbler.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/domain/Scrobbler.kt index 3113cef237..075d80bad1 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/domain/Scrobbler.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/domain/Scrobbler.kt @@ -9,9 +9,9 @@ import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.util.ext.findKeyByValue import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.core.util.ext.sanitize -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.findById -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.findById +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.scrobbling.common.data.ScrobblerRepository import io.github.landwarderer.futon.scrobbling.common.data.ScrobblingEntity import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblerManga diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt index dbdcb5fe03..dcbac6e044 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/common/ui/selector/ScrobblingSelectorViewModel.kt @@ -19,8 +19,8 @@ import io.github.landwarderer.futon.list.domain.ReadingProgress import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.LoadingFooter import io.github.landwarderer.futon.list.ui.model.LoadingState -import io.github.landwarderer.futon.parsers.util.ifZero -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.ifZero +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.scrobbling.common.domain.Scrobbler import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblerManga import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblingStatus diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/data/DiscordRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/data/DiscordRepository.kt index fbe226e5be..8a513359aa 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/data/DiscordRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/data/DiscordRepository.kt @@ -18,8 +18,8 @@ import io.github.landwarderer.futon.core.network.BaseHttpClient import io.github.landwarderer.futon.core.network.CommonHeaders import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.util.ext.ensureSuccess -import io.github.landwarderer.futon.parsers.util.await -import io.github.landwarderer.futon.parsers.util.parseRaw +import org.koitharu.kotatsu.parsers.util.await +import org.koitharu.kotatsu.parsers.util.parseRaw import javax.inject.Inject private const val SCHEME_MP = "mp:" diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordAuthActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordAuthActivity.kt index 9faee15d80..721092c26d 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordAuthActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordAuthActivity.kt @@ -6,7 +6,7 @@ import dagger.hilt.android.AndroidEntryPoint import io.github.landwarderer.futon.browser.BaseBrowserActivity import io.github.landwarderer.futon.core.parser.ParserMangaRepository import io.github.landwarderer.futon.core.prefs.AppSettings -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource import javax.inject.Inject @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordRpc.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordRpc.kt index a9ce76b91c..2c22e6c515 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordRpc.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordRpc.kt @@ -20,8 +20,8 @@ import io.github.landwarderer.futon.core.model.isNsfw import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.util.ext.lifecycleScope import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.reader.ui.pager.ReaderUiState import io.github.landwarderer.futon.scrobbling.discord.data.DiscordRepository import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordTokenWebClient.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordTokenWebClient.kt index bb4cacaafb..7df5b28595 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordTokenWebClient.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/discord/ui/DiscordTokenWebClient.kt @@ -4,7 +4,7 @@ import android.graphics.Bitmap import android.webkit.WebView import io.github.landwarderer.futon.browser.BrowserCallback import io.github.landwarderer.futon.browser.BrowserClient -import io.github.landwarderer.futon.parsers.util.removeSurrounding +import org.koitharu.kotatsu.parsers.util.removeSurrounding class DiscordTokenWebClient(private val callback: Callback) : BrowserClient(callback, null) { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/data/KitsuInterceptor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/data/KitsuInterceptor.kt index 5cd3c5081d..19818aaf65 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/data/KitsuInterceptor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/data/KitsuInterceptor.kt @@ -6,10 +6,10 @@ import okhttp3.Response import okhttp3.internal.closeQuietly import okio.IOException import io.github.landwarderer.futon.core.network.CommonHeaders -import io.github.landwarderer.futon.parsers.util.mimeType -import io.github.landwarderer.futon.parsers.util.nullIfEmpty -import io.github.landwarderer.futon.parsers.util.parseHtml -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.mimeType +import org.koitharu.kotatsu.parsers.util.nullIfEmpty +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.scrobbling.common.data.ScrobblerStorage import io.github.landwarderer.futon.scrobbling.common.domain.ScrobblerAuthRequiredException import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblerService diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/data/KitsuRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/data/KitsuRepository.kt index 0a9d322d18..defb16ba6f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/data/KitsuRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/data/KitsuRepository.kt @@ -12,13 +12,13 @@ import org.json.JSONObject import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.db.MangaDatabase import io.github.landwarderer.futon.core.util.ext.parseJsonOrNull -import io.github.landwarderer.futon.parsers.util.await -import io.github.landwarderer.futon.parsers.util.json.getFloatOrDefault -import io.github.landwarderer.futon.parsers.util.json.getIntOrDefault -import io.github.landwarderer.futon.parsers.util.json.getStringOrNull -import io.github.landwarderer.futon.parsers.util.json.mapJSON -import io.github.landwarderer.futon.parsers.util.parseJson -import io.github.landwarderer.futon.parsers.util.urlEncoded +import org.koitharu.kotatsu.parsers.util.await +import org.koitharu.kotatsu.parsers.util.json.getFloatOrDefault +import org.koitharu.kotatsu.parsers.util.json.getIntOrDefault +import org.koitharu.kotatsu.parsers.util.json.getStringOrNull +import org.koitharu.kotatsu.parsers.util.json.mapJSON +import org.koitharu.kotatsu.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.urlEncoded import io.github.landwarderer.futon.scrobbling.common.data.ScrobblerRepository import io.github.landwarderer.futon.scrobbling.common.data.ScrobblerStorage import io.github.landwarderer.futon.scrobbling.common.data.ScrobblingEntity diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/ui/KitsuAuthActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/ui/KitsuAuthActivity.kt index b9c7db3ca0..21ab9b687c 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/ui/KitsuAuthActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/kitsu/ui/KitsuAuthActivity.kt @@ -17,7 +17,7 @@ import io.github.landwarderer.futon.core.ui.BaseActivity import io.github.landwarderer.futon.core.ui.util.DefaultTextWatcher import io.github.landwarderer.futon.core.util.ext.consume import io.github.landwarderer.futon.databinding.ActivityKitsuAuthBinding -import io.github.landwarderer.futon.parsers.util.urlEncoded +import org.koitharu.kotatsu.parsers.util.urlEncoded class KitsuAuthActivity : BaseActivity(), View.OnClickListener, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/mal/data/MALInterceptor.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/mal/data/MALInterceptor.kt index aab14a117f..75c9b36a93 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/mal/data/MALInterceptor.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/mal/data/MALInterceptor.kt @@ -4,8 +4,8 @@ import okhttp3.Interceptor import okhttp3.Response import okio.IOException import io.github.landwarderer.futon.core.network.CommonHeaders -import io.github.landwarderer.futon.parsers.util.mimeType -import io.github.landwarderer.futon.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.mimeType +import org.koitharu.kotatsu.parsers.util.parseHtml import io.github.landwarderer.futon.scrobbling.common.data.ScrobblerStorage import io.github.landwarderer.futon.scrobbling.common.domain.ScrobblerAuthRequiredException import io.github.landwarderer.futon.scrobbling.common.domain.model.ScrobblerService diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/mal/data/MALRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/mal/data/MALRepository.kt index 400f487d1b..45b1b2ea56 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/mal/data/MALRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/mal/data/MALRepository.kt @@ -10,10 +10,10 @@ import okhttp3.Request import org.json.JSONObject import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.db.MangaDatabase -import io.github.landwarderer.futon.parsers.util.await -import io.github.landwarderer.futon.parsers.util.json.getStringOrNull -import io.github.landwarderer.futon.parsers.util.json.mapJSONNotNull -import io.github.landwarderer.futon.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.await +import org.koitharu.kotatsu.parsers.util.json.getStringOrNull +import org.koitharu.kotatsu.parsers.util.json.mapJSONNotNull +import org.koitharu.kotatsu.parsers.util.parseJson import io.github.landwarderer.futon.scrobbling.common.data.ScrobblerRepository import io.github.landwarderer.futon.scrobbling.common.data.ScrobblerStorage import io.github.landwarderer.futon.scrobbling.common.data.ScrobblingEntity diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/shikimori/data/ShikimoriRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/shikimori/data/ShikimoriRepository.kt index 8590421ee4..bc5fd7d92a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/shikimori/data/ShikimoriRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/scrobbling/shikimori/data/ShikimoriRepository.kt @@ -10,12 +10,12 @@ import org.json.JSONObject import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.db.MangaDatabase import io.github.landwarderer.futon.core.util.ext.toRequestBody -import io.github.landwarderer.futon.parsers.util.await -import io.github.landwarderer.futon.parsers.util.json.getStringOrNull -import io.github.landwarderer.futon.parsers.util.json.mapJSON -import io.github.landwarderer.futon.parsers.util.parseJson -import io.github.landwarderer.futon.parsers.util.parseJsonArray -import io.github.landwarderer.futon.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.await +import org.koitharu.kotatsu.parsers.util.json.getStringOrNull +import org.koitharu.kotatsu.parsers.util.json.mapJSON +import org.koitharu.kotatsu.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.parseJsonArray +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl import io.github.landwarderer.futon.scrobbling.common.data.ScrobblerRepository import io.github.landwarderer.futon.scrobbling.common.data.ScrobblerStorage import io.github.landwarderer.futon.scrobbling.common.data.ScrobblingEntity diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/MangaSearchRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/MangaSearchRepository.kt index df80d34c61..2928d568ef 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/MangaSearchRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/MangaSearchRepository.kt @@ -16,12 +16,12 @@ import io.github.landwarderer.futon.core.db.entity.toMangaTag import io.github.landwarderer.futon.core.db.entity.toMangaTagsList import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.explore.data.MangaSourcesRepository -import io.github.landwarderer.futon.parsers.model.ContentType -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.util.levenshteinDistance -import io.github.landwarderer.futon.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.util.levenshteinDistance +import org.koitharu.kotatsu.parsers.util.mapToSet import io.github.landwarderer.futon.search.ui.MangaSuggestionsProvider import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/SearchResults.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/SearchResults.kt index 95b9ab09b4..7fc192ee5b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/SearchResults.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/SearchResults.kt @@ -1,8 +1,8 @@ package io.github.landwarderer.futon.search.domain -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.SortOrder data class SearchResults( val listFilter: MangaListFilter, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/SearchV2Helper.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/SearchV2Helper.kt index 3677f421ce..9465b7d6ff 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/SearchV2Helper.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/domain/SearchV2Helper.kt @@ -9,13 +9,13 @@ import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.util.ext.contains import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.util.almostEquals -import io.github.landwarderer.futon.parsers.util.levenshteinDistance -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.almostEquals +import org.koitharu.kotatsu.parsers.util.levenshteinDistance +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable private const val MATCH_THRESHOLD_DEFAULT = 0.2f diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/MangaListActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/MangaListActivity.kt index ff6fc8014e..14d5a50280 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/MangaListActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/MangaListActivity.kt @@ -46,10 +46,10 @@ import io.github.landwarderer.futon.filter.ui.sheet.FilterSheetFragment import io.github.landwarderer.futon.list.ui.preview.PreviewFragment import io.github.landwarderer.futon.local.ui.LocalListFragment import io.github.landwarderer.futon.main.ui.owners.AppBarOwner -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.SortOrder import io.github.landwarderer.futon.remotelist.ui.RemoteListFragment import kotlin.math.absoluteValue import com.google.android.material.R as materialR diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchActivity.kt index 1281eebcc4..27eb00bd00 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchActivity.kt @@ -32,8 +32,8 @@ import io.github.landwarderer.futon.list.ui.adapter.TypedListSpacingDecoration import io.github.landwarderer.futon.list.ui.model.ListHeader import io.github.landwarderer.futon.list.ui.model.MangaListModel import io.github.landwarderer.futon.list.ui.size.DynamicItemSizeResolver -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaTag import io.github.landwarderer.futon.search.domain.SearchKind import io.github.landwarderer.futon.search.ui.multi.adapter.SearchAdapter import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchResultsListModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchResultsListModel.kt index 8a1438ceb3..c47a1ba68f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchResultsListModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchResultsListModel.kt @@ -6,9 +6,9 @@ import io.github.landwarderer.futon.core.model.getTitle import io.github.landwarderer.futon.list.ui.ListModelDiffCallback import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.MangaListModel -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.SortOrder data class SearchResultsListModel( @StringRes val titleResId: Int, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchViewModel.kt index 4bcf268c4f..56e2c5813a 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/multi/SearchViewModel.kt @@ -23,10 +23,10 @@ import io.github.landwarderer.futon.list.ui.model.EmptyState import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.LoadingFooter import io.github.landwarderer.futon.list.ui.model.LoadingState -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.search.domain.SearchKind import io.github.landwarderer.futon.search.domain.SearchV2Helper import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionListener.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionListener.kt index 603fae5c59..403dd51522 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionListener.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionListener.kt @@ -2,9 +2,9 @@ package io.github.landwarderer.futon.search.ui.suggestion import android.text.TextWatcher import android.widget.TextView -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag import io.github.landwarderer.futon.search.domain.SearchKind interface SearchSuggestionListener : TextWatcher, TextView.OnEditorActionListener { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionListenerImpl.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionListenerImpl.kt index 073747f816..d7fcf3e7e3 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionListenerImpl.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionListenerImpl.kt @@ -7,9 +7,9 @@ import androidx.core.net.toUri import com.google.android.material.search.SearchView import io.github.landwarderer.futon.core.nav.AppRouter import io.github.landwarderer.futon.core.parser.MangaLinkResolver -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag import io.github.landwarderer.futon.search.domain.SearchKind class SearchSuggestionListenerImpl( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionViewModel.kt index 3748f27104..272bb2965f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/SearchSuggestionViewModel.kt @@ -10,10 +10,10 @@ import io.github.landwarderer.futon.core.ui.BaseViewModel import io.github.landwarderer.futon.core.ui.widgets.ChipsView import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.explore.data.MangaSourcesRepository -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.util.mapToSet -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.search.domain.MangaSearchRepository import io.github.landwarderer.futon.search.ui.suggestion.model.SearchSuggestionItem import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/adapter/SearchSuggestionTagsAD.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/adapter/SearchSuggestionTagsAD.kt index 674653f057..2aa665ac49 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/adapter/SearchSuggestionTagsAD.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/adapter/SearchSuggestionTagsAD.kt @@ -3,7 +3,7 @@ package io.github.landwarderer.futon.search.ui.suggestion.adapter import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding import io.github.landwarderer.futon.core.ui.widgets.ChipsView import io.github.landwarderer.futon.databinding.ItemSearchSuggestionTagsBinding -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.MangaTag import io.github.landwarderer.futon.search.ui.suggestion.SearchSuggestionListener import io.github.landwarderer.futon.search.ui.suggestion.model.SearchSuggestionItem diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/adapter/SearchSuggestionsMangaListAD.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/adapter/SearchSuggestionsMangaListAD.kt index e10c599f47..00397d3db5 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/adapter/SearchSuggestionsMangaListAD.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/adapter/SearchSuggestionsMangaListAD.kt @@ -11,7 +11,7 @@ import io.github.landwarderer.futon.core.ui.list.decor.SpacingItemDecoration import io.github.landwarderer.futon.core.util.RecyclerViewScrollCallback import io.github.landwarderer.futon.core.util.ext.setTooltipCompat import io.github.landwarderer.futon.databinding.ItemSearchSuggestionMangaGridBinding -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.search.ui.suggestion.SearchSuggestionListener import io.github.landwarderer.futon.search.ui.suggestion.model.SearchSuggestionItem diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/model/SearchSuggestionItem.kt b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/model/SearchSuggestionItem.kt index d0e0239669..e3fd777ccb 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/model/SearchSuggestionItem.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/search/ui/suggestion/model/SearchSuggestionItem.kt @@ -5,8 +5,8 @@ import io.github.landwarderer.futon.core.model.isNsfw import io.github.landwarderer.futon.core.ui.widgets.ChipsView import io.github.landwarderer.futon.list.ui.ListModelDiffCallback import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource sealed interface SearchSuggestionItem : ListModel { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/AppearanceSettingsFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/AppearanceSettingsFragment.kt index c36157c255..c2e9e0f49c 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/AppearanceSettingsFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/AppearanceSettingsFragment.kt @@ -29,9 +29,9 @@ import io.github.landwarderer.futon.core.util.ext.postDelayed import io.github.landwarderer.futon.core.util.ext.setDefaultValueCompat import io.github.landwarderer.futon.core.util.ext.sortedWithSafe import io.github.landwarderer.futon.core.util.ext.toList -import io.github.landwarderer.futon.parsers.util.mapToSet -import io.github.landwarderer.futon.parsers.util.names -import io.github.landwarderer.futon.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.names +import org.koitharu.kotatsu.parsers.util.toTitleCase import io.github.landwarderer.futon.settings.protect.ProtectSetupActivity import io.github.landwarderer.futon.settings.utils.ActivityListPreference import io.github.landwarderer.futon.settings.utils.MultiSummaryProvider diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/DownloadsSettingsFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/DownloadsSettingsFragment.kt index 2e163926f7..7362f32b40 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/DownloadsSettingsFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/DownloadsSettingsFragment.kt @@ -25,7 +25,7 @@ import io.github.landwarderer.futon.core.util.ext.tryLaunch import io.github.landwarderer.futon.core.util.ext.viewLifecycleScope import io.github.landwarderer.futon.download.ui.worker.DownloadWorker import io.github.landwarderer.futon.local.data.LocalStorageManager -import io.github.landwarderer.futon.parsers.util.names +import org.koitharu.kotatsu.parsers.util.names import io.github.landwarderer.futon.settings.utils.DozeHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/ProxySettingsFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/ProxySettingsFragment.kt index b6dd77c14a..62c5f8f9ec 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/ProxySettingsFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/ProxySettingsFragment.kt @@ -16,7 +16,7 @@ import io.github.landwarderer.futon.core.ui.BasePreferenceFragment import io.github.landwarderer.futon.core.util.ext.getDisplayMessage import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.core.util.ext.viewLifecycleScope -import io.github.landwarderer.futon.parsers.util.await +import org.koitharu.kotatsu.parsers.util.await import io.github.landwarderer.futon.settings.utils.EditTextBindListener import io.github.landwarderer.futon.settings.utils.PasswordSummaryProvider import io.github.landwarderer.futon.settings.utils.validation.DomainValidator diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/ReaderSettingsFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/ReaderSettingsFragment.kt index e8e7c6dafd..fc92b71ceb 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/ReaderSettingsFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/ReaderSettingsFragment.kt @@ -18,8 +18,8 @@ import io.github.landwarderer.futon.core.prefs.ReaderControl import io.github.landwarderer.futon.core.prefs.ReaderMode import io.github.landwarderer.futon.core.ui.BasePreferenceFragment import io.github.landwarderer.futon.core.util.ext.setDefaultValueCompat -import io.github.landwarderer.futon.parsers.util.mapToSet -import io.github.landwarderer.futon.parsers.util.names +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.names import io.github.landwarderer.futon.settings.utils.MultiSummaryProvider import io.github.landwarderer.futon.settings.utils.PercentSummaryProvider import io.github.landwarderer.futon.settings.utils.SliderPreference diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/StorageAndNetworkSettingsFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/StorageAndNetworkSettingsFragment.kt index dd99b5fba9..9fdb542e47 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/StorageAndNetworkSettingsFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/StorageAndNetworkSettingsFragment.kt @@ -15,7 +15,7 @@ import io.github.landwarderer.futon.core.ui.BasePreferenceFragment import io.github.landwarderer.futon.core.util.ext.observe import io.github.landwarderer.futon.core.util.ext.observeEvent import io.github.landwarderer.futon.core.util.ext.setDefaultValueCompat -import io.github.landwarderer.futon.parsers.util.names +import org.koitharu.kotatsu.parsers.util.names import io.github.landwarderer.futon.settings.userdata.storage.StorageUsagePreference import java.net.Proxy diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/discord/DiscordSettingsViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/discord/DiscordSettingsViewModel.kt index 4461ad4ebd..2ab5822e70 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/discord/DiscordSettingsViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/discord/DiscordSettingsViewModel.kt @@ -13,7 +13,7 @@ import kotlinx.coroutines.plus import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.ui.BaseViewModel import io.github.landwarderer.futon.core.util.ext.isNetworkError -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.scrobbling.discord.data.DiscordRepository import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/nav/NavConfigViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/nav/NavConfigViewModel.kt index a48b622d1a..ea9d108ceb 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/nav/NavConfigViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/nav/NavConfigViewModel.kt @@ -20,7 +20,7 @@ import io.github.landwarderer.futon.core.ui.util.ActivityRecreationHandle import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.main.ui.MainActivity import io.github.landwarderer.futon.main.ui.MainNavigationDelegate -import io.github.landwarderer.futon.parsers.util.move +import org.koitharu.kotatsu.parsers.util.move import io.github.landwarderer.futon.settings.nav.model.NavItemAddModel import io.github.landwarderer.futon.settings.nav.model.NavItemConfigModel import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/override/OverrideConfigActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/override/OverrideConfigActivity.kt index b0e63bd8e6..33c93f290f 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/override/OverrideConfigActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/override/OverrideConfigActivity.kt @@ -21,8 +21,8 @@ import io.github.landwarderer.futon.core.util.ext.observe import io.github.landwarderer.futon.core.util.ext.observeEvent import io.github.landwarderer.futon.core.util.ext.tryLaunch import io.github.landwarderer.futon.databinding.ActivityOverrideEditBinding -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty import io.github.landwarderer.futon.picker.ui.PageImagePickContract import com.google.android.material.R as materialR diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/override/OverrideConfigViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/override/OverrideConfigViewModel.kt index a9e08e8776..a63e8d8c47 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/override/OverrideConfigViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/override/OverrideConfigViewModel.kt @@ -23,8 +23,8 @@ import io.github.landwarderer.futon.core.util.ext.openSource import io.github.landwarderer.futon.core.util.ext.require import io.github.landwarderer.futon.core.util.ext.toMimeTypeOrNull import io.github.landwarderer.futon.core.util.ext.toUriOrNull -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.md5 +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.md5 import java.io.File import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/protect/ProtectSetupViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/protect/ProtectSetupViewModel.kt index ae17f7ec21..1736faa2d7 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/protect/ProtectSetupViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/protect/ProtectSetupViewModel.kt @@ -12,8 +12,8 @@ import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.ui.BaseViewModel import io.github.landwarderer.futon.core.util.ext.MutableEventFlow import io.github.landwarderer.futon.core.util.ext.call -import io.github.landwarderer.futon.parsers.util.isNumeric -import io.github.landwarderer.futon.parsers.util.md5 +import org.koitharu.kotatsu.parsers.util.isNumeric +import org.koitharu.kotatsu.parsers.util.md5 import javax.inject.Inject @HiltViewModel diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsExt.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsExt.kt index df4154914b..81d6207913 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsExt.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsExt.kt @@ -10,9 +10,9 @@ import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.parser.EmptyMangaRepository import io.github.landwarderer.futon.core.parser.MangaRepository import io.github.landwarderer.futon.core.parser.ParserMangaRepository -import io.github.landwarderer.futon.parsers.config.ConfigKey -import io.github.landwarderer.futon.parsers.network.UserAgents -import io.github.landwarderer.futon.parsers.util.mapToArray +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.network.UserAgents +import org.koitharu.kotatsu.parsers.util.mapToArray import io.github.landwarderer.futon.settings.utils.AutoCompleteTextViewPreference import io.github.landwarderer.futon.settings.utils.EditTextBindListener import io.github.landwarderer.futon.settings.utils.EditTextDefaultSummaryProvider @@ -101,6 +101,14 @@ private fun PreferenceFragmentCompat.addPreferencesFromParserRepository(reposito summaryProvider = ListPreference.SimpleSummaryProvider.getInstance() } } + + is ConfigKey.DisableUpdateChecking -> { + continue + } + + is ConfigKey.InterceptCloudflare -> { + continue + } } preference.isIconSpaceReserved = false preference.key = key.key diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsFragment.kt index 950dc98563..aa118f9154 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsFragment.kt @@ -24,7 +24,7 @@ import io.github.landwarderer.futon.core.ui.util.ReversibleActionObserver import io.github.landwarderer.futon.core.util.ext.observe import io.github.landwarderer.futon.core.util.ext.observeEvent import io.github.landwarderer.futon.core.util.ext.withArgs -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource import java.io.File @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsViewModel.kt index b1d50dc0c9..2fca378b89 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourceSettingsViewModel.kt @@ -20,8 +20,8 @@ import io.github.landwarderer.futon.core.ui.util.ReversibleAction import io.github.landwarderer.futon.core.util.ext.MutableEventFlow import io.github.landwarderer.futon.core.util.ext.call import io.github.landwarderer.futon.explore.data.MangaSourcesRepository -import io.github.landwarderer.futon.parsers.MangaParserAuthProvider -import io.github.landwarderer.futon.parsers.exception.AuthRequiredException +import org.koitharu.kotatsu.parsers.MangaParserAuthProvider +import org.koitharu.kotatsu.parsers.exception.AuthRequiredException import javax.inject.Inject @HiltViewModel diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourcesSettingsFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourcesSettingsFragment.kt index 80e0212d54..5e0b47a3bf 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourcesSettingsFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/SourcesSettingsFragment.kt @@ -17,7 +17,7 @@ import io.github.landwarderer.futon.core.util.ext.getQuantityStringSafe import io.github.landwarderer.futon.core.util.ext.observe import io.github.landwarderer.futon.core.util.ext.setDefaultValueCompat import io.github.landwarderer.futon.explore.data.SourcesSortOrder -import io.github.landwarderer.futon.parsers.util.names +import org.koitharu.kotatsu.parsers.util.names @AndroidEntryPoint class SourcesSettingsFragment : BasePreferenceFragment(R.string.remote_sources), diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/auth/SourceAuthActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/auth/SourceAuthActivity.kt index 7614cfd2a3..e7d3d7be7b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/auth/SourceAuthActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/auth/SourceAuthActivity.kt @@ -19,9 +19,9 @@ import io.github.landwarderer.futon.core.model.getTitle import io.github.landwarderer.futon.core.nav.AppRouter import io.github.landwarderer.futon.core.parser.ParserMangaRepository import io.github.landwarderer.futon.core.util.ext.getDisplayMessage -import io.github.landwarderer.futon.parsers.MangaParserAuthProvider -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.MangaParserAuthProvider +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable @AndroidEntryPoint class SourceAuthActivity : BaseBrowserActivity(), BrowserCallback { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourceCatalogItem.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourceCatalogItem.kt index 644cd23a75..89111f56ea 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourceCatalogItem.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourceCatalogItem.kt @@ -3,7 +3,7 @@ package io.github.landwarderer.futon.settings.sources.catalog import androidx.annotation.DrawableRes import androidx.annotation.StringRes import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.model.MangaParserSource sealed interface SourceCatalogItem : ListModel { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourceCatalogPage.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourceCatalogPage.kt index 833f33e7e7..1b1e33fa27 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourceCatalogPage.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourceCatalogPage.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.settings.sources.catalog import io.github.landwarderer.futon.list.ui.ListModelDiffCallback import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.ContentType data class SourceCatalogPage( val type: ContentType, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogActivity.kt index c413beaf39..a956e5ba3c 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogActivity.kt @@ -31,7 +31,7 @@ import io.github.landwarderer.futon.core.util.ext.toLocale import io.github.landwarderer.futon.databinding.ActivitySourcesCatalogBinding import io.github.landwarderer.futon.list.ui.adapter.TypedListSpacingDecoration import io.github.landwarderer.futon.main.ui.owners.AppBarOwner -import io.github.landwarderer.futon.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.ContentType @AndroidEntryPoint class SourcesCatalogActivity : BaseActivity(), diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogFilter.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogFilter.kt index 8af0bf6979..04e3dfd71b 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogFilter.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogFilter.kt @@ -1,6 +1,6 @@ package io.github.landwarderer.futon.settings.sources.catalog -import io.github.landwarderer.futon.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.ContentType data class SourcesCatalogFilter( val types: Set, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogViewModel.kt index 96e36be13d..9f130d4152 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/catalog/SourcesCatalogViewModel.kt @@ -24,8 +24,8 @@ import io.github.landwarderer.futon.explore.data.MangaSourcesRepository import io.github.landwarderer.futon.explore.data.SourcesSortOrder import io.github.landwarderer.futon.list.ui.model.ListModel import io.github.landwarderer.futon.list.ui.model.LoadingState -import io.github.landwarderer.futon.parsers.model.ContentType -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.ContentType +import org.koitharu.kotatsu.parsers.model.MangaSource import java.util.EnumSet import java.util.Locale import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/manage/SourcesListProducer.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/manage/SourcesListProducer.kt index f55cd25026..0709db060c 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/manage/SourcesListProducer.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/manage/SourcesListProducer.kt @@ -23,8 +23,8 @@ import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.util.ext.lifecycleScope import io.github.landwarderer.futon.explore.data.MangaSourcesRepository import io.github.landwarderer.futon.explore.data.SourcesSortOrder -import io.github.landwarderer.futon.parsers.model.MangaParserSource -import io.github.landwarderer.futon.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.util.mapToSet import io.github.landwarderer.futon.settings.sources.model.SourceConfigItem import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/manage/SourcesManageViewModel.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/manage/SourcesManageViewModel.kt index 6a132c0c35..1d63bb15fd 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/manage/SourcesManageViewModel.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/manage/SourcesManageViewModel.kt @@ -13,8 +13,8 @@ import io.github.landwarderer.futon.core.ui.util.ReversibleAction import io.github.landwarderer.futon.core.util.ext.MutableEventFlow import io.github.landwarderer.futon.core.util.ext.call import io.github.landwarderer.futon.explore.data.MangaSourcesRepository -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.util.move +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.util.move import io.github.landwarderer.futon.settings.sources.model.SourceConfigItem import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/model/SourceConfigItem.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/model/SourceConfigItem.kt index d10c8608d7..ce267df368 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/model/SourceConfigItem.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/sources/model/SourceConfigItem.kt @@ -4,7 +4,7 @@ import androidx.annotation.DrawableRes import androidx.annotation.StringRes import io.github.landwarderer.futon.core.model.isNsfw import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaSource sealed interface SourceConfigItem : ListModel { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/tracker/TrackerSettingsFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/tracker/TrackerSettingsFragment.kt index 4646daa5d4..775ce84fb6 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/tracker/TrackerSettingsFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/tracker/TrackerSettingsFragment.kt @@ -24,7 +24,7 @@ import io.github.landwarderer.futon.core.prefs.TrackerDownloadStrategy import io.github.landwarderer.futon.core.ui.BasePreferenceFragment import io.github.landwarderer.futon.core.util.ext.observe import io.github.landwarderer.futon.core.util.ext.setDefaultValueCompat -import io.github.landwarderer.futon.parsers.util.names +import org.koitharu.kotatsu.parsers.util.names import io.github.landwarderer.futon.settings.utils.DozeHelper import io.github.landwarderer.futon.settings.utils.MultiSummaryProvider import io.github.landwarderer.futon.tracker.ui.debug.TrackerDebugActivity diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/EditTextDefaultSummaryProvider.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/EditTextDefaultSummaryProvider.kt index d31b350bc1..3c51bd339e 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/EditTextDefaultSummaryProvider.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/EditTextDefaultSummaryProvider.kt @@ -3,7 +3,7 @@ package io.github.landwarderer.futon.settings.utils import androidx.preference.EditTextPreference import androidx.preference.Preference import io.github.landwarderer.futon.R -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty class EditTextDefaultSummaryProvider( private val defaultValue: String, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/EditTextFallbackSummaryProvider.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/EditTextFallbackSummaryProvider.kt index c22c1a24f7..b98ba52768 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/EditTextFallbackSummaryProvider.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/EditTextFallbackSummaryProvider.kt @@ -3,7 +3,7 @@ package io.github.landwarderer.futon.settings.utils import androidx.annotation.StringRes import androidx.preference.EditTextPreference import androidx.preference.Preference -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty class EditTextFallbackSummaryProvider( @StringRes private val fallbackResId: Int, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/MultiAutoCompleteTextViewPreference.kt b/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/MultiAutoCompleteTextViewPreference.kt index 74990aab6d..c515cf8626 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/MultiAutoCompleteTextViewPreference.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/settings/utils/MultiAutoCompleteTextViewPreference.kt @@ -13,7 +13,7 @@ import androidx.annotation.WorkerThread import androidx.preference.EditTextPreference import kotlinx.coroutines.runBlocking import io.github.landwarderer.futon.R -import io.github.landwarderer.futon.parsers.util.replaceWith +import org.koitharu.kotatsu.parsers.util.replaceWith class MultiAutoCompleteTextViewPreference @JvmOverloads constructor( context: Context, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/stats/domain/StatsCollector.kt b/app/src/main/kotlin/io/github/landwarderer/futon/stats/domain/StatsCollector.kt index ce75e8b172..a7df8dfafd 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/stats/domain/StatsCollector.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/stats/domain/StatsCollector.kt @@ -8,7 +8,7 @@ import io.github.landwarderer.futon.core.db.MangaDatabase import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.util.RetainedLifecycleCoroutineScope import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.reader.ui.ReaderState import io.github.landwarderer.futon.stats.data.StatsEntity import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/stats/domain/StatsRecord.kt b/app/src/main/kotlin/io/github/landwarderer/futon/stats/domain/StatsRecord.kt index dc816a53d0..24909f6cec 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/stats/domain/StatsRecord.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/stats/domain/StatsRecord.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.stats.domain import io.github.landwarderer.futon.details.data.ReadingTime import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import java.util.concurrent.TimeUnit data class StatsRecord( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/StatsAD.kt b/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/StatsAD.kt index aa34afaa0a..fae4a98a71 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/StatsAD.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/StatsAD.kt @@ -6,7 +6,7 @@ import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.ui.list.OnListItemClickListener import io.github.landwarderer.futon.core.util.FutonColors import io.github.landwarderer.futon.databinding.ItemStatsBinding -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.stats.domain.StatsRecord fun statsAD( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/StatsActivity.kt b/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/StatsActivity.kt index 9f5c7fa855..47f7b8d3b9 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/StatsActivity.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/StatsActivity.kt @@ -37,7 +37,7 @@ import io.github.landwarderer.futon.core.util.ext.start import io.github.landwarderer.futon.databinding.ActivityStatsBinding import io.github.landwarderer.futon.databinding.ItemEmptyStateBinding import io.github.landwarderer.futon.list.ui.adapter.ListItemType -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import io.github.landwarderer.futon.stats.domain.StatsPeriod import io.github.landwarderer.futon.stats.domain.StatsRecord import io.github.landwarderer.futon.stats.ui.views.PieChartView diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/sheet/MangaStatsSheet.kt b/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/sheet/MangaStatsSheet.kt index fa9e0a865f..67a838c655 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/sheet/MangaStatsSheet.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/sheet/MangaStatsSheet.kt @@ -17,7 +17,7 @@ import io.github.landwarderer.futon.core.util.ext.consume import io.github.landwarderer.futon.core.util.ext.observe import io.github.landwarderer.futon.core.util.ext.textAndVisible import io.github.landwarderer.futon.databinding.SheetStatsMangaBinding -import io.github.landwarderer.futon.parsers.util.format +import org.koitharu.kotatsu.parsers.util.format import io.github.landwarderer.futon.stats.ui.views.BarChartView @AndroidEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/views/BarChartView.kt b/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/views/BarChartView.kt index 32874e5b2b..06aa2cdb31 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/views/BarChartView.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/views/BarChartView.kt @@ -10,8 +10,8 @@ import android.view.View import androidx.annotation.ColorInt import io.github.landwarderer.futon.core.util.ext.getThemeColor import io.github.landwarderer.futon.core.util.ext.resolveDp -import io.github.landwarderer.futon.parsers.util.replaceWith -import io.github.landwarderer.futon.parsers.util.toIntUp +import org.koitharu.kotatsu.parsers.util.replaceWith +import org.koitharu.kotatsu.parsers.util.toIntUp import kotlin.math.roundToInt import kotlin.random.Random import androidx.appcompat.R as appcompatR diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/views/PieChartView.kt b/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/views/PieChartView.kt index db4be7fe93..ba73ae8083 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/views/PieChartView.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/stats/ui/views/PieChartView.kt @@ -15,7 +15,7 @@ import androidx.core.view.PointerIconCompat import androidx.core.view.ViewCompat import io.github.landwarderer.futon.core.util.ext.getThemeColor import io.github.landwarderer.futon.core.util.ext.resolveDp -import io.github.landwarderer.futon.parsers.util.replaceWith +import org.koitharu.kotatsu.parsers.util.replaceWith import kotlin.math.atan2 import kotlin.math.sqrt diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/MangaSuggestion.kt b/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/MangaSuggestion.kt index 9974eae19d..1d13676ddf 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/MangaSuggestion.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/MangaSuggestion.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.suggestions.domain import androidx.annotation.FloatRange -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga data class MangaSuggestion( val manga: Manga, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/SuggestionRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/SuggestionRepository.kt index 5ec924f58c..f0dd947e20 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/SuggestionRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/SuggestionRepository.kt @@ -10,9 +10,9 @@ import io.github.landwarderer.futon.core.db.entity.toMangaTagsList import io.github.landwarderer.futon.core.model.toMangaSources import io.github.landwarderer.futon.core.util.ext.mapItems import io.github.landwarderer.futon.list.domain.ListFilterOption -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag import io.github.landwarderer.futon.suggestions.data.SuggestionEntity import io.github.landwarderer.futon.suggestions.data.SuggestionWithManga import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/TagsBlacklist.kt b/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/TagsBlacklist.kt index 76ab673368..fd120e2623 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/TagsBlacklist.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/domain/TagsBlacklist.kt @@ -1,8 +1,8 @@ package io.github.landwarderer.futon.suggestions.domain -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.util.almostEquals +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.util.almostEquals class TagsBlacklist( private val tags: Set, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/ui/SuggestionsWorker.kt b/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/ui/SuggestionsWorker.kt index 331ce0b9d6..31185289bd 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/ui/SuggestionsWorker.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/suggestions/ui/SuggestionsWorker.kt @@ -62,14 +62,14 @@ import io.github.landwarderer.futon.core.util.ext.trySetForeground import io.github.landwarderer.futon.explore.data.MangaSourcesRepository import io.github.landwarderer.futon.favourites.domain.FavouritesRepository import io.github.landwarderer.futon.history.data.HistoryRepository -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaListFilter -import io.github.landwarderer.futon.parsers.model.MangaSource -import io.github.landwarderer.futon.parsers.model.MangaTag -import io.github.landwarderer.futon.parsers.model.SortOrder -import io.github.landwarderer.futon.parsers.util.almostEquals -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable -import io.github.landwarderer.futon.parsers.util.sizeOrZero +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaListFilter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.almostEquals +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.sizeOrZero import io.github.landwarderer.futon.settings.work.PeriodicWorkScheduler import io.github.landwarderer.futon.suggestions.domain.MangaSuggestion import io.github.landwarderer.futon.suggestions.domain.SuggestionRepository diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/sync/data/SyncAuthApi.kt b/app/src/main/kotlin/io/github/landwarderer/futon/sync/data/SyncAuthApi.kt index 98d7a6a33f..0f9339e04d 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/sync/data/SyncAuthApi.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/sync/data/SyncAuthApi.kt @@ -7,10 +7,10 @@ import org.json.JSONObject import io.github.landwarderer.futon.core.exceptions.SyncApiException import io.github.landwarderer.futon.core.network.BaseHttpClient import io.github.landwarderer.futon.core.util.ext.toRequestBody -import io.github.landwarderer.futon.parsers.util.await -import io.github.landwarderer.futon.parsers.util.parseJson -import io.github.landwarderer.futon.parsers.util.parseRaw -import io.github.landwarderer.futon.parsers.util.removeSurrounding +import org.koitharu.kotatsu.parsers.util.await +import org.koitharu.kotatsu.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.parseRaw +import org.koitharu.kotatsu.parsers.util.removeSurrounding import javax.inject.Inject @Reusable diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/sync/data/SyncSettings.kt b/app/src/main/kotlin/io/github/landwarderer/futon/sync/data/SyncSettings.kt index ee52e0fbac..6784184d90 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/sync/data/SyncSettings.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/sync/data/SyncSettings.kt @@ -7,7 +7,7 @@ import androidx.annotation.WorkerThread import dagger.hilt.android.qualifiers.ApplicationContext import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.util.ext.isHttpUrl -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty import javax.inject.Inject class SyncSettings( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/SyncHostDialogFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/SyncHostDialogFragment.kt index ebc7f63c0c..84502a9eb2 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/SyncHostDialogFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/SyncHostDialogFragment.kt @@ -16,7 +16,7 @@ import io.github.landwarderer.futon.core.ui.AlertDialogFragment import io.github.landwarderer.futon.core.util.ext.isHttpUrl import io.github.landwarderer.futon.core.util.ext.withArgs import io.github.landwarderer.futon.databinding.PreferenceDialogAutocompletetextviewBinding -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty import io.github.landwarderer.futon.settings.utils.validation.UrlValidator import io.github.landwarderer.futon.sync.data.SyncSettings import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/favourites/FavouritesSyncAdapter.kt b/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/favourites/FavouritesSyncAdapter.kt index 2ad9f1b037..8feecc67de 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/favourites/FavouritesSyncAdapter.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/favourites/FavouritesSyncAdapter.kt @@ -9,7 +9,7 @@ import android.os.Bundle import dagger.hilt.android.EntryPointAccessors import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.util.ext.onError -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.sync.domain.SyncController import io.github.landwarderer.futon.sync.ui.SyncAdapterEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/history/HistorySyncAdapter.kt b/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/history/HistorySyncAdapter.kt index 6fec9fa418..74f568fc68 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/history/HistorySyncAdapter.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/sync/ui/history/HistorySyncAdapter.kt @@ -9,7 +9,7 @@ import android.os.Bundle import dagger.hilt.android.EntryPointAccessors import io.github.landwarderer.futon.R import io.github.landwarderer.futon.core.util.ext.onError -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.sync.domain.SyncController import io.github.landwarderer.futon.sync.ui.SyncAdapterEntryPoint diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/CheckNewChaptersUseCase.kt b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/CheckNewChaptersUseCase.kt index 447afcf050..3bd28d91d6 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/CheckNewChaptersUseCase.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/CheckNewChaptersUseCase.kt @@ -12,9 +12,9 @@ import io.github.landwarderer.futon.core.util.ext.printStackTraceDebug import io.github.landwarderer.futon.core.util.ext.toInstantOrNull import io.github.landwarderer.futon.history.data.HistoryRepository import io.github.landwarderer.futon.local.data.LocalMangaRepository -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.findById -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.findById +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable import io.github.landwarderer.futon.tracker.domain.model.MangaTracking import io.github.landwarderer.futon.tracker.domain.model.MangaUpdates import java.time.Instant diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/TrackingRepository.kt b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/TrackingRepository.kt index d29fa8ef10..5571f8f2c6 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/TrackingRepository.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/TrackingRepository.kt @@ -1,21 +1,26 @@ package io.github.landwarderer.futon.tracker.domain +import android.content.Context import androidx.annotation.VisibleForTesting import androidx.room.withTransaction import dagger.Reusable +import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.onStart import io.github.landwarderer.futon.core.db.MangaDatabase import io.github.landwarderer.futon.core.db.entity.toManga import io.github.landwarderer.futon.core.db.entity.toMangaTags +import io.github.landwarderer.futon.core.parser.MangaRepository +import io.github.landwarderer.futon.core.parser.ParserMangaRepository import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.util.ext.mapItems import io.github.landwarderer.futon.core.util.ext.toInstantOrNull import io.github.landwarderer.futon.details.domain.ProgressUpdateUseCase import io.github.landwarderer.futon.list.domain.ListFilterOption -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.ifZero +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.ifZero import io.github.landwarderer.futon.tracker.data.TrackEntity import io.github.landwarderer.futon.tracker.data.TrackLogEntity import io.github.landwarderer.futon.tracker.data.toTrackingLogItem @@ -33,6 +38,8 @@ class TrackingRepository @Inject constructor( private val db: MangaDatabase, private val settings: AppSettings, private val progressUpdateUseCase: ProgressUpdateUseCase, + @ApplicationContext private val context: Context, + private val mangaRepositoryFactory: MangaRepository.Factory, ) { private var isGcCalled = AtomicBoolean(false) @@ -70,15 +77,30 @@ class TrackingRepository @Inject constructor( } suspend fun getTracks(offset: Int, limit: Int): List { - return db.getTracksDao().findAll(offset = offset, limit = limit).map { - MangaTracking( - manga = it.manga.toManga(emptySet(), null), - lastChapterId = it.track.lastChapterId, - lastCheck = it.track.lastCheckTime.toInstantOrNull(), - lastChapterDate = it.track.lastChapterDate.toInstantOrNull(), - newChapters = it.track.newChapters, - ) + return db.getTracksDao().findAll(offset = offset, limit = limit) + .filter { track -> + val manga = track.manga.toManga(emptySet(), null) + !isUpdateCheckingDisabled(manga) + } + .map { + MangaTracking( + manga = it.manga.toManga(emptySet(), null), + lastChapterId = it.track.lastChapterId, + lastCheck = it.track.lastCheckTime.toInstantOrNull(), + lastChapterDate = it.track.lastChapterDate.toInstantOrNull(), + newChapters = it.track.newChapters, + ) + } + } + + private fun isUpdateCheckingDisabled(manga: Manga): Boolean { + val repository = mangaRepositoryFactory.create(manga.source) + if (repository !is ParserMangaRepository) { + return false } + val configKeys = repository.getConfigKeys() + val disableKey = configKeys.filterIsInstance().firstOrNull() + return disableKey?.defaultValue == true } @Deprecated("") diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/MangaTracking.kt b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/MangaTracking.kt index b5c8f1f3c8..6bf52ab4a2 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/MangaTracking.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/MangaTracking.kt @@ -1,6 +1,6 @@ package io.github.landwarderer.futon.tracker.domain.model -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import java.time.Instant data class MangaTracking( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/MangaUpdates.kt b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/MangaUpdates.kt index fd8dbd2ebb..55feac89d8 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/MangaUpdates.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/MangaUpdates.kt @@ -1,9 +1,9 @@ package io.github.landwarderer.futon.tracker.domain.model -import io.github.landwarderer.futon.parsers.exception.TooManyRequestExceptions -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter -import io.github.landwarderer.futon.parsers.util.ifZero +import org.koitharu.kotatsu.parsers.exception.TooManyRequestExceptions +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.util.ifZero sealed interface MangaUpdates { diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/TrackingLogItem.kt b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/TrackingLogItem.kt index e10186d9d4..cb176affea 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/TrackingLogItem.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/domain/model/TrackingLogItem.kt @@ -1,6 +1,6 @@ package io.github.landwarderer.futon.tracker.domain.model -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import java.time.Instant data class TrackingLogItem( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/debug/TrackDebugItem.kt b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/debug/TrackDebugItem.kt index 1892cc04eb..812b4f4837 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/debug/TrackDebugItem.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/debug/TrackDebugItem.kt @@ -1,7 +1,7 @@ package io.github.landwarderer.futon.tracker.ui.debug import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.Manga import java.time.Instant data class TrackDebugItem( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/feed/FeedFragment.kt b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/feed/FeedFragment.kt index 04eb5d8a24..c1a3e3aed4 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/feed/FeedFragment.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/feed/FeedFragment.kt @@ -33,8 +33,8 @@ import io.github.landwarderer.futon.list.ui.adapter.TypedListSpacingDecoration import io.github.landwarderer.futon.list.ui.model.ListHeader import io.github.landwarderer.futon.list.ui.model.MangaListModel import io.github.landwarderer.futon.list.ui.size.StaticItemSizeResolver -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaTag import io.github.landwarderer.futon.tracker.ui.feed.adapter.FeedAdapter import javax.inject.Inject diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/feed/model/FeedItem.kt b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/feed/model/FeedItem.kt index 6c530fcbfb..e4504b8744 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/feed/model/FeedItem.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/ui/feed/model/FeedItem.kt @@ -4,8 +4,8 @@ import io.github.landwarderer.futon.core.model.withOverride import io.github.landwarderer.futon.core.ui.model.MangaOverride import io.github.landwarderer.futon.list.ui.ListModelDiffCallback import io.github.landwarderer.futon.list.ui.model.ListModel -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.ifNullOrEmpty +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty data class FeedItem( val id: Long, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/work/TrackWorker.kt b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/work/TrackWorker.kt index 23793982e3..1b9a5a6786 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/work/TrackWorker.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/work/TrackWorker.kt @@ -47,8 +47,8 @@ import io.github.landwarderer.futon.core.util.ext.trySetForeground import io.github.landwarderer.futon.download.ui.worker.DownloadTask import io.github.landwarderer.futon.download.ui.worker.DownloadWorker import io.github.landwarderer.futon.local.data.LocalMangaRepository -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable -import io.github.landwarderer.futon.parsers.util.toIntUp +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.toIntUp import io.github.landwarderer.futon.settings.work.PeriodicWorkScheduler import io.github.landwarderer.futon.tracker.domain.CheckNewChaptersUseCase import io.github.landwarderer.futon.tracker.domain.GetTracksUseCase diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/work/TrackerNotificationHelper.kt b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/work/TrackerNotificationHelper.kt index 6adbfc533b..cb7aadd2b5 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/tracker/work/TrackerNotificationHelper.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/tracker/work/TrackerNotificationHelper.kt @@ -24,8 +24,8 @@ import io.github.landwarderer.futon.core.util.ext.checkNotificationPermission import io.github.landwarderer.futon.core.util.ext.getQuantityStringSafe import io.github.landwarderer.futon.core.util.ext.mangaSourceExtra import io.github.landwarderer.futon.core.util.ext.toBitmapOrNull -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter import javax.inject.Inject class TrackerNotificationHelper @Inject constructor( diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/widget/recent/RecentListFactory.kt b/app/src/main/kotlin/io/github/landwarderer/futon/widget/recent/RecentListFactory.kt index 7fa2c03235..bfd25d0ea3 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/widget/recent/RecentListFactory.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/widget/recent/RecentListFactory.kt @@ -19,9 +19,9 @@ import io.github.landwarderer.futon.core.prefs.AppSettings import io.github.landwarderer.futon.core.util.ext.getDrawableOrThrow import io.github.landwarderer.futon.core.util.ext.mangaExtra import io.github.landwarderer.futon.history.data.HistoryRepository -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.replaceWith -import io.github.landwarderer.futon.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.replaceWith +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable class RecentListFactory( private val context: Context, diff --git a/app/src/main/kotlin/io/github/landwarderer/futon/widget/shelf/ShelfListFactory.kt b/app/src/main/kotlin/io/github/landwarderer/futon/widget/shelf/ShelfListFactory.kt index e990e072a2..e38a8115cf 100644 --- a/app/src/main/kotlin/io/github/landwarderer/futon/widget/shelf/ShelfListFactory.kt +++ b/app/src/main/kotlin/io/github/landwarderer/futon/widget/shelf/ShelfListFactory.kt @@ -21,8 +21,8 @@ import io.github.landwarderer.futon.core.ui.image.TrimTransformation import io.github.landwarderer.futon.core.util.ext.getDrawableOrThrow import io.github.landwarderer.futon.core.util.ext.mangaExtra import io.github.landwarderer.futon.favourites.domain.FavouritesRepository -import io.github.landwarderer.futon.parsers.model.Manga -import io.github.landwarderer.futon.parsers.util.replaceWith +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.util.replaceWith class ShelfListFactory( private val context: Context, diff --git a/app/src/nightly/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt b/app/src/nightly/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt index c27e487dde..8d6d1bbd25 100644 --- a/app/src/nightly/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt +++ b/app/src/nightly/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.core.parser import io.github.landwarderer.futon.core.cache.MemoryContentCache import io.github.landwarderer.futon.core.model.TestMangaSource -import io.github.landwarderer.futon.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaLoaderContext @Suppress("unused") class TestMangaRepository( diff --git a/app/src/release/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt b/app/src/release/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt index c27e487dde..8d6d1bbd25 100644 --- a/app/src/release/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt +++ b/app/src/release/kotlin/io/github/landwarderer/futon/core/parser/TestMangaRepository.kt @@ -2,7 +2,7 @@ package io.github.landwarderer.futon.core.parser import io.github.landwarderer.futon.core.cache.MemoryContentCache import io.github.landwarderer.futon.core.model.TestMangaSource -import io.github.landwarderer.futon.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaLoaderContext @Suppress("unused") class TestMangaRepository( diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b0a0d4ad01..6b974a466c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ material = "1.14.0-alpha05" moshi = "1.15.2" okhttp = "5.2.1" okio = "3.16.1" -parsers = "2a2243f907" +parsers = "e7302508ac" preference = "1.2.1" recyclerview = "1.4.0" room = "2.7.2"