mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 13:57:57 +01:00 
			
		
		
		
	Move more things to domain module
This commit is contained in:
		| @@ -2,34 +2,18 @@ package eu.kanade.domain | ||||
|  | ||||
| import eu.kanade.data.source.SourceRepositoryImpl | ||||
| import eu.kanade.domain.category.interactor.CreateCategoryWithName | ||||
| import eu.kanade.domain.category.interactor.DeleteCategory | ||||
| import eu.kanade.domain.category.interactor.RenameCategory | ||||
| import eu.kanade.domain.category.interactor.ReorderCategory | ||||
| import eu.kanade.domain.category.interactor.ResetCategoryFlags | ||||
| import eu.kanade.domain.category.interactor.SetDisplayModeForCategory | ||||
| import eu.kanade.domain.category.interactor.SetMangaCategories | ||||
| import eu.kanade.domain.category.interactor.SetSortModeForCategory | ||||
| import eu.kanade.domain.category.interactor.UpdateCategory | ||||
| import eu.kanade.domain.chapter.interactor.GetChapter | ||||
| import eu.kanade.domain.chapter.interactor.GetChapterByMangaId | ||||
| import eu.kanade.domain.chapter.interactor.SetMangaDefaultChapterFlags | ||||
| import eu.kanade.domain.chapter.interactor.SetReadStatus | ||||
| import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource | ||||
| import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay | ||||
| import eu.kanade.domain.chapter.interactor.UpdateChapter | ||||
| import eu.kanade.domain.download.interactor.DeleteDownload | ||||
| import eu.kanade.domain.extension.interactor.GetExtensionLanguages | ||||
| import eu.kanade.domain.extension.interactor.GetExtensionSources | ||||
| import eu.kanade.domain.extension.interactor.GetExtensionsByType | ||||
| import eu.kanade.domain.history.interactor.GetNextChapters | ||||
| import eu.kanade.domain.manga.interactor.GetDuplicateLibraryManga | ||||
| import eu.kanade.domain.manga.interactor.GetFavorites | ||||
| import eu.kanade.domain.manga.interactor.GetLibraryManga | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.domain.manga.interactor.GetMangaWithChapters | ||||
| import eu.kanade.domain.manga.interactor.NetworkToLocalManga | ||||
| import eu.kanade.domain.manga.interactor.ResetViewerFlags | ||||
| import eu.kanade.domain.manga.interactor.SetMangaChapterFlags | ||||
| import eu.kanade.domain.manga.interactor.SetMangaViewerFlags | ||||
| import eu.kanade.domain.manga.interactor.UpdateManga | ||||
| import eu.kanade.domain.source.interactor.GetEnabledSources | ||||
| @@ -42,10 +26,6 @@ import eu.kanade.domain.source.interactor.ToggleLanguage | ||||
| import eu.kanade.domain.source.interactor.ToggleSource | ||||
| import eu.kanade.domain.source.interactor.ToggleSourcePin | ||||
| import eu.kanade.domain.source.repository.SourceRepository | ||||
| import eu.kanade.domain.track.interactor.DeleteTrack | ||||
| import eu.kanade.domain.track.interactor.GetTracks | ||||
| import eu.kanade.domain.track.interactor.GetTracksPerManga | ||||
| import eu.kanade.domain.track.interactor.InsertTrack | ||||
| import tachiyomi.data.category.CategoryRepositoryImpl | ||||
| import tachiyomi.data.chapter.ChapterRepositoryImpl | ||||
| import tachiyomi.data.history.HistoryRepositoryImpl | ||||
| @@ -53,17 +33,37 @@ import tachiyomi.data.manga.MangaRepositoryImpl | ||||
| import tachiyomi.data.source.SourceDataRepositoryImpl | ||||
| import tachiyomi.data.track.TrackRepositoryImpl | ||||
| import tachiyomi.data.updates.UpdatesRepositoryImpl | ||||
| import tachiyomi.domain.category.interactor.DeleteCategory | ||||
| import tachiyomi.domain.category.interactor.GetCategories | ||||
| import tachiyomi.domain.category.interactor.RenameCategory | ||||
| import tachiyomi.domain.category.interactor.ReorderCategory | ||||
| import tachiyomi.domain.category.interactor.SetMangaCategories | ||||
| import tachiyomi.domain.category.interactor.UpdateCategory | ||||
| import tachiyomi.domain.category.repository.CategoryRepository | ||||
| import tachiyomi.domain.chapter.interactor.GetChapter | ||||
| import tachiyomi.domain.chapter.interactor.GetChapterByMangaId | ||||
| import tachiyomi.domain.chapter.interactor.ShouldUpdateDbChapter | ||||
| import tachiyomi.domain.chapter.interactor.UpdateChapter | ||||
| import tachiyomi.domain.chapter.repository.ChapterRepository | ||||
| import tachiyomi.domain.history.interactor.GetHistory | ||||
| import tachiyomi.domain.history.interactor.GetTotalReadDuration | ||||
| import tachiyomi.domain.history.interactor.RemoveHistory | ||||
| import tachiyomi.domain.history.interactor.UpsertHistory | ||||
| import tachiyomi.domain.history.repository.HistoryRepository | ||||
| import tachiyomi.domain.manga.interactor.GetDuplicateLibraryManga | ||||
| import tachiyomi.domain.manga.interactor.GetFavorites | ||||
| import tachiyomi.domain.manga.interactor.GetLibraryManga | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.manga.interactor.GetMangaWithChapters | ||||
| import tachiyomi.domain.manga.interactor.NetworkToLocalManga | ||||
| import tachiyomi.domain.manga.interactor.ResetViewerFlags | ||||
| import tachiyomi.domain.manga.interactor.SetMangaChapterFlags | ||||
| import tachiyomi.domain.manga.repository.MangaRepository | ||||
| import tachiyomi.domain.source.repository.SourceDataRepository | ||||
| import tachiyomi.domain.track.interactor.DeleteTrack | ||||
| import tachiyomi.domain.track.interactor.GetTracks | ||||
| import tachiyomi.domain.track.interactor.GetTracksPerManga | ||||
| import tachiyomi.domain.track.interactor.InsertTrack | ||||
| import tachiyomi.domain.track.repository.TrackRepository | ||||
| import tachiyomi.domain.updates.interactor.GetUpdates | ||||
| import tachiyomi.domain.updates.repository.UpdatesRepository | ||||
|   | ||||
| @@ -1,42 +0,0 @@ | ||||
| package eu.kanade.domain.category.interactor | ||||
|  | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.lang.withNonCancellableContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.category.model.CategoryUpdate | ||||
| import tachiyomi.domain.category.repository.CategoryRepository | ||||
|  | ||||
| class DeleteCategory( | ||||
|     private val categoryRepository: CategoryRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(categoryId: Long) = withNonCancellableContext { | ||||
|         try { | ||||
|             categoryRepository.delete(categoryId) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|             return@withNonCancellableContext Result.InternalError(e) | ||||
|         } | ||||
|  | ||||
|         val categories = categoryRepository.getAll() | ||||
|         val updates = categories.mapIndexed { index, category -> | ||||
|             CategoryUpdate( | ||||
|                 id = category.id, | ||||
|                 order = index.toLong(), | ||||
|             ) | ||||
|         } | ||||
|  | ||||
|         try { | ||||
|             categoryRepository.updatePartial(updates) | ||||
|             Result.Success | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|             Result.InternalError(e) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     sealed class Result { | ||||
|         object Success : Result() | ||||
|         data class InternalError(val error: Throwable) : Result() | ||||
|     } | ||||
| } | ||||
| @@ -1,35 +0,0 @@ | ||||
| package eu.kanade.domain.category.interactor | ||||
|  | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.lang.withNonCancellableContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.category.model.Category | ||||
| import tachiyomi.domain.category.model.CategoryUpdate | ||||
| import tachiyomi.domain.category.repository.CategoryRepository | ||||
|  | ||||
| class RenameCategory( | ||||
|     private val categoryRepository: CategoryRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(categoryId: Long, name: String) = withNonCancellableContext { | ||||
|         val update = CategoryUpdate( | ||||
|             id = categoryId, | ||||
|             name = name, | ||||
|         ) | ||||
|  | ||||
|         try { | ||||
|             categoryRepository.updatePartial(update) | ||||
|             Result.Success | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|             Result.InternalError(e) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     suspend fun await(category: Category, name: String) = await(category.id, name) | ||||
|  | ||||
|     sealed class Result { | ||||
|         object Success : Result() | ||||
|         data class InternalError(val error: Throwable) : Result() | ||||
|     } | ||||
| } | ||||
| @@ -1,70 +0,0 @@ | ||||
| package eu.kanade.domain.category.interactor | ||||
|  | ||||
| import kotlinx.coroutines.sync.Mutex | ||||
| import kotlinx.coroutines.sync.withLock | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.lang.withNonCancellableContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.category.model.Category | ||||
| import tachiyomi.domain.category.model.CategoryUpdate | ||||
| import tachiyomi.domain.category.repository.CategoryRepository | ||||
| import java.util.Collections | ||||
|  | ||||
| class ReorderCategory( | ||||
|     private val categoryRepository: CategoryRepository, | ||||
| ) { | ||||
|  | ||||
|     private val mutex = Mutex() | ||||
|  | ||||
|     suspend fun moveUp(category: Category): Result = | ||||
|         await(category, MoveTo.UP) | ||||
|  | ||||
|     suspend fun moveDown(category: Category): Result = | ||||
|         await(category, MoveTo.DOWN) | ||||
|  | ||||
|     private suspend fun await(category: Category, moveTo: MoveTo) = withNonCancellableContext { | ||||
|         mutex.withLock { | ||||
|             val categories = categoryRepository.getAll() | ||||
|                 .filterNot(Category::isSystemCategory) | ||||
|                 .toMutableList() | ||||
|  | ||||
|             val currentIndex = categories.indexOfFirst { it.id == category.id } | ||||
|             if (currentIndex == -1) { | ||||
|                 return@withNonCancellableContext Result.Unchanged | ||||
|             } | ||||
|  | ||||
|             val newPosition = when (moveTo) { | ||||
|                 MoveTo.UP -> currentIndex - 1 | ||||
|                 MoveTo.DOWN -> currentIndex + 1 | ||||
|             }.toInt() | ||||
|  | ||||
|             try { | ||||
|                 Collections.swap(categories, currentIndex, newPosition) | ||||
|  | ||||
|                 val updates = categories.mapIndexed { index, category -> | ||||
|                     CategoryUpdate( | ||||
|                         id = category.id, | ||||
|                         order = index.toLong(), | ||||
|                     ) | ||||
|                 } | ||||
|  | ||||
|                 categoryRepository.updatePartial(updates) | ||||
|                 Result.Success | ||||
|             } catch (e: Exception) { | ||||
|                 logcat(LogPriority.ERROR, e) | ||||
|                 Result.InternalError(e) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     sealed class Result { | ||||
|         object Success : Result() | ||||
|         object Unchanged : Result() | ||||
|         data class InternalError(val error: Throwable) : Result() | ||||
|     } | ||||
|  | ||||
|     private enum class MoveTo { | ||||
|         UP, | ||||
|         DOWN, | ||||
|     } | ||||
| } | ||||
| @@ -1,18 +0,0 @@ | ||||
| package eu.kanade.domain.category.interactor | ||||
|  | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.manga.repository.MangaRepository | ||||
|  | ||||
| class SetMangaCategories( | ||||
|     private val mangaRepository: MangaRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(mangaId: Long, categoryIds: List<Long>) { | ||||
|         try { | ||||
|             mangaRepository.setMangaCategories(mangaId, categoryIds) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,24 +0,0 @@ | ||||
| package eu.kanade.domain.category.interactor | ||||
|  | ||||
| import tachiyomi.core.util.lang.withNonCancellableContext | ||||
| import tachiyomi.domain.category.model.CategoryUpdate | ||||
| import tachiyomi.domain.category.repository.CategoryRepository | ||||
|  | ||||
| class UpdateCategory( | ||||
|     private val categoryRepository: CategoryRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(payload: CategoryUpdate): Result = withNonCancellableContext { | ||||
|         try { | ||||
|             categoryRepository.updatePartial(payload) | ||||
|             Result.Success | ||||
|         } catch (e: Exception) { | ||||
|             Result.Error(e) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     sealed class Result { | ||||
|         object Success : Result() | ||||
|         data class Error(val error: Exception) : Result() | ||||
|     } | ||||
| } | ||||
| @@ -1,29 +0,0 @@ | ||||
| package eu.kanade.domain.chapter.interactor | ||||
|  | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.chapter.model.Chapter | ||||
| import tachiyomi.domain.chapter.repository.ChapterRepository | ||||
|  | ||||
| class GetChapter( | ||||
|     private val chapterRepository: ChapterRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(id: Long): Chapter? { | ||||
|         return try { | ||||
|             chapterRepository.getChapterById(id) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|             null | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     suspend fun await(url: String, mangaId: Long): Chapter? { | ||||
|         return try { | ||||
|             chapterRepository.getChapterByUrlAndMangaId(url, mangaId) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|             null | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,20 +0,0 @@ | ||||
| package eu.kanade.domain.chapter.interactor | ||||
|  | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.chapter.model.Chapter | ||||
| import tachiyomi.domain.chapter.repository.ChapterRepository | ||||
|  | ||||
| class GetChapterByMangaId( | ||||
|     private val chapterRepository: ChapterRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(mangaId: Long): List<Chapter> { | ||||
|         return try { | ||||
|             chapterRepository.getChapterByMangaId(mangaId) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|             emptyList() | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,9 +1,9 @@ | ||||
| package eu.kanade.domain.chapter.interactor | ||||
|  | ||||
| import eu.kanade.domain.library.service.LibraryPreferences | ||||
| import eu.kanade.domain.manga.interactor.GetFavorites | ||||
| import eu.kanade.domain.manga.interactor.SetMangaChapterFlags | ||||
| import tachiyomi.core.util.lang.withNonCancellableContext | ||||
| import tachiyomi.domain.manga.interactor.GetFavorites | ||||
| import tachiyomi.domain.manga.interactor.SetMangaChapterFlags | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
|  | ||||
| class SetMangaDefaultChapterFlags( | ||||
|   | ||||
| @@ -12,7 +12,9 @@ import eu.kanade.tachiyomi.source.model.SChapter | ||||
| import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| import eu.kanade.tachiyomi.util.chapter.ChapterRecognition | ||||
| import tachiyomi.data.chapter.ChapterSanitizer | ||||
| import tachiyomi.domain.chapter.interactor.GetChapterByMangaId | ||||
| import tachiyomi.domain.chapter.interactor.ShouldUpdateDbChapter | ||||
| import tachiyomi.domain.chapter.interactor.UpdateChapter | ||||
| import tachiyomi.domain.chapter.model.Chapter | ||||
| import tachiyomi.domain.chapter.model.NoChaptersException | ||||
| import tachiyomi.domain.chapter.model.toChapterUpdate | ||||
|   | ||||
| @@ -1,12 +1,13 @@ | ||||
| package eu.kanade.domain.chapter.interactor | ||||
|  | ||||
| import eu.kanade.domain.track.interactor.InsertTrack | ||||
| import eu.kanade.domain.track.model.toDbTrack | ||||
| import eu.kanade.tachiyomi.data.track.TrackService | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.chapter.interactor.UpdateChapter | ||||
| import tachiyomi.domain.chapter.model.Chapter | ||||
| import tachiyomi.domain.chapter.model.toChapterUpdate | ||||
| import tachiyomi.domain.track.interactor.InsertTrack | ||||
| import tachiyomi.domain.track.model.Track | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|   | ||||
| @@ -1,27 +0,0 @@ | ||||
| package eu.kanade.domain.chapter.interactor | ||||
|  | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.chapter.model.ChapterUpdate | ||||
| import tachiyomi.domain.chapter.repository.ChapterRepository | ||||
|  | ||||
| class UpdateChapter( | ||||
|     private val chapterRepository: ChapterRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(chapterUpdate: ChapterUpdate) { | ||||
|         try { | ||||
|             chapterRepository.update(chapterUpdate) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     suspend fun awaitAll(chapterUpdates: List<ChapterUpdate>) { | ||||
|         try { | ||||
|             chapterRepository.updateAll(chapterUpdates) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,10 +1,10 @@ | ||||
| package eu.kanade.domain.history.interactor | ||||
|  | ||||
| import eu.kanade.domain.chapter.interactor.GetChapterByMangaId | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.tachiyomi.util.chapter.getChapterSort | ||||
| import tachiyomi.domain.chapter.interactor.GetChapterByMangaId | ||||
| import tachiyomi.domain.chapter.model.Chapter | ||||
| import tachiyomi.domain.history.repository.HistoryRepository | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import kotlin.math.max | ||||
|  | ||||
| class GetNextChapters( | ||||
|   | ||||
| @@ -1,13 +0,0 @@ | ||||
| package eu.kanade.domain.manga.interactor | ||||
|  | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.repository.MangaRepository | ||||
|  | ||||
| class GetDuplicateLibraryManga( | ||||
|     private val mangaRepository: MangaRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(title: String): Manga? { | ||||
|         return mangaRepository.getDuplicateLibraryManga(title.lowercase()) | ||||
|     } | ||||
| } | ||||
| @@ -1,18 +0,0 @@ | ||||
| package eu.kanade.domain.manga.interactor | ||||
|  | ||||
| import kotlinx.coroutines.flow.Flow | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.repository.MangaRepository | ||||
|  | ||||
| class GetFavorites( | ||||
|     private val mangaRepository: MangaRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(): List<Manga> { | ||||
|         return mangaRepository.getFavorites() | ||||
|     } | ||||
|  | ||||
|     fun subscribe(sourceId: Long): Flow<List<Manga>> { | ||||
|         return mangaRepository.getFavoritesBySourceId(sourceId) | ||||
|     } | ||||
| } | ||||
| @@ -1,18 +0,0 @@ | ||||
| package eu.kanade.domain.manga.interactor | ||||
|  | ||||
| import kotlinx.coroutines.flow.Flow | ||||
| import tachiyomi.domain.library.model.LibraryManga | ||||
| import tachiyomi.domain.manga.repository.MangaRepository | ||||
|  | ||||
| class GetLibraryManga( | ||||
|     private val mangaRepository: MangaRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(): List<LibraryManga> { | ||||
|         return mangaRepository.getLibraryManga() | ||||
|     } | ||||
|  | ||||
|     fun subscribe(): Flow<List<LibraryManga>> { | ||||
|         return mangaRepository.getLibraryMangaAsFlow() | ||||
|     } | ||||
| } | ||||
| @@ -1,29 +0,0 @@ | ||||
| package eu.kanade.domain.manga.interactor | ||||
|  | ||||
| import kotlinx.coroutines.flow.Flow | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.repository.MangaRepository | ||||
|  | ||||
| class GetManga( | ||||
|     private val mangaRepository: MangaRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(id: Long): Manga? { | ||||
|         return try { | ||||
|             mangaRepository.getMangaById(id) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|             null | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     suspend fun subscribe(id: Long): Flow<Manga> { | ||||
|         return mangaRepository.getMangaByIdAsFlow(id) | ||||
|     } | ||||
|  | ||||
|     fun subscribe(url: String, sourceId: Long): Flow<Manga?> { | ||||
|         return mangaRepository.getMangaByUrlAndSourceIdAsFlow(url, sourceId) | ||||
|     } | ||||
| } | ||||
| @@ -1,31 +0,0 @@ | ||||
| package eu.kanade.domain.manga.interactor | ||||
|  | ||||
| import kotlinx.coroutines.flow.Flow | ||||
| import kotlinx.coroutines.flow.combine | ||||
| import tachiyomi.domain.chapter.model.Chapter | ||||
| import tachiyomi.domain.chapter.repository.ChapterRepository | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.repository.MangaRepository | ||||
|  | ||||
| class GetMangaWithChapters( | ||||
|     private val mangaRepository: MangaRepository, | ||||
|     private val chapterRepository: ChapterRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun subscribe(id: Long): Flow<Pair<Manga, List<Chapter>>> { | ||||
|         return combine( | ||||
|             mangaRepository.getMangaByIdAsFlow(id), | ||||
|             chapterRepository.getChapterByMangaIdAsFlow(id), | ||||
|         ) { manga, chapters -> | ||||
|             Pair(manga, chapters) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     suspend fun awaitManga(id: Long): Manga { | ||||
|         return mangaRepository.getMangaById(id) | ||||
|     } | ||||
|  | ||||
|     suspend fun awaitChapters(id: Long): List<Chapter> { | ||||
|         return chapterRepository.getChapterByMangaId(id) | ||||
|     } | ||||
| } | ||||
| @@ -1,35 +0,0 @@ | ||||
| package eu.kanade.domain.manga.interactor | ||||
|  | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.repository.MangaRepository | ||||
|  | ||||
| class NetworkToLocalManga( | ||||
|     private val mangaRepository: MangaRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(manga: Manga): Manga { | ||||
|         val localManga = getManga(manga.url, manga.source) | ||||
|         return when { | ||||
|             localManga == null -> { | ||||
|                 val id = insertManga(manga) | ||||
|                 manga.copy(id = id!!) | ||||
|             } | ||||
|             !localManga.favorite -> { | ||||
|                 // if the manga isn't a favorite, set its display title from source | ||||
|                 // if it later becomes a favorite, updated title will go to db | ||||
|                 localManga.copy(title = manga.title) | ||||
|             } | ||||
|             else -> { | ||||
|                 localManga | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private suspend fun getManga(url: String, sourceId: Long): Manga? { | ||||
|         return mangaRepository.getMangaByUrlAndSourceId(url, sourceId) | ||||
|     } | ||||
|  | ||||
|     private suspend fun insertManga(manga: Manga): Long? { | ||||
|         return mangaRepository.insert(manga) | ||||
|     } | ||||
| } | ||||
| @@ -1,12 +0,0 @@ | ||||
| package eu.kanade.domain.manga.interactor | ||||
|  | ||||
| import tachiyomi.domain.manga.repository.MangaRepository | ||||
|  | ||||
| class ResetViewerFlags( | ||||
|     private val mangaRepository: MangaRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(): Boolean { | ||||
|         return mangaRepository.resetViewerFlags() | ||||
|     } | ||||
| } | ||||
| @@ -1,97 +0,0 @@ | ||||
| package eu.kanade.domain.manga.interactor | ||||
|  | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.model.MangaUpdate | ||||
| import tachiyomi.domain.manga.repository.MangaRepository | ||||
|  | ||||
| class SetMangaChapterFlags( | ||||
|     private val mangaRepository: MangaRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun awaitSetDownloadedFilter(manga: Manga, flag: Long): Boolean { | ||||
|         return mangaRepository.update( | ||||
|             MangaUpdate( | ||||
|                 id = manga.id, | ||||
|                 chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_DOWNLOADED_MASK), | ||||
|             ), | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     suspend fun awaitSetUnreadFilter(manga: Manga, flag: Long): Boolean { | ||||
|         return mangaRepository.update( | ||||
|             MangaUpdate( | ||||
|                 id = manga.id, | ||||
|                 chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_UNREAD_MASK), | ||||
|             ), | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     suspend fun awaitSetBookmarkFilter(manga: Manga, flag: Long): Boolean { | ||||
|         return mangaRepository.update( | ||||
|             MangaUpdate( | ||||
|                 id = manga.id, | ||||
|                 chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_BOOKMARKED_MASK), | ||||
|             ), | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     suspend fun awaitSetDisplayMode(manga: Manga, flag: Long): Boolean { | ||||
|         return mangaRepository.update( | ||||
|             MangaUpdate( | ||||
|                 id = manga.id, | ||||
|                 chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_DISPLAY_MASK), | ||||
|             ), | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     suspend fun awaitSetSortingModeOrFlipOrder(manga: Manga, flag: Long): Boolean { | ||||
|         val newFlags = manga.chapterFlags.let { | ||||
|             if (manga.sorting == flag) { | ||||
|                 // Just flip the order | ||||
|                 val orderFlag = if (manga.sortDescending()) { | ||||
|                     Manga.CHAPTER_SORT_ASC | ||||
|                 } else { | ||||
|                     Manga.CHAPTER_SORT_DESC | ||||
|                 } | ||||
|                 it.setFlag(orderFlag, Manga.CHAPTER_SORT_DIR_MASK) | ||||
|             } else { | ||||
|                 // Set new flag with ascending order | ||||
|                 it | ||||
|                     .setFlag(flag, Manga.CHAPTER_SORTING_MASK) | ||||
|                     .setFlag(Manga.CHAPTER_SORT_ASC, Manga.CHAPTER_SORT_DIR_MASK) | ||||
|             } | ||||
|         } | ||||
|         return mangaRepository.update( | ||||
|             MangaUpdate( | ||||
|                 id = manga.id, | ||||
|                 chapterFlags = newFlags, | ||||
|             ), | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     suspend fun awaitSetAllFlags( | ||||
|         mangaId: Long, | ||||
|         unreadFilter: Long, | ||||
|         downloadedFilter: Long, | ||||
|         bookmarkedFilter: Long, | ||||
|         sortingMode: Long, | ||||
|         sortingDirection: Long, | ||||
|         displayMode: Long, | ||||
|     ): Boolean { | ||||
|         return mangaRepository.update( | ||||
|             MangaUpdate( | ||||
|                 id = mangaId, | ||||
|                 chapterFlags = 0L.setFlag(unreadFilter, Manga.CHAPTER_UNREAD_MASK) | ||||
|                     .setFlag(downloadedFilter, Manga.CHAPTER_DOWNLOADED_MASK) | ||||
|                     .setFlag(bookmarkedFilter, Manga.CHAPTER_BOOKMARKED_MASK) | ||||
|                     .setFlag(sortingMode, Manga.CHAPTER_SORTING_MASK) | ||||
|                     .setFlag(sortingDirection, Manga.CHAPTER_SORT_DIR_MASK) | ||||
|                     .setFlag(displayMode, Manga.CHAPTER_DISPLAY_MASK), | ||||
|             ), | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     private fun Long.setFlag(flag: Long, mask: Long): Long { | ||||
|         return this and mask.inv() or (flag and mask) | ||||
|     } | ||||
| } | ||||
| @@ -1,18 +0,0 @@ | ||||
| package eu.kanade.domain.track.interactor | ||||
|  | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.track.repository.TrackRepository | ||||
|  | ||||
| class DeleteTrack( | ||||
|     private val trackRepository: TrackRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(mangaId: Long, syncId: Long) { | ||||
|         try { | ||||
|             trackRepository.delete(mangaId, syncId) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,34 +0,0 @@ | ||||
| package eu.kanade.domain.track.interactor | ||||
|  | ||||
| import kotlinx.coroutines.flow.Flow | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.track.model.Track | ||||
| import tachiyomi.domain.track.repository.TrackRepository | ||||
|  | ||||
| class GetTracks( | ||||
|     private val trackRepository: TrackRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun awaitOne(id: Long): Track? { | ||||
|         return try { | ||||
|             trackRepository.getTrackById(id) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|             null | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     suspend fun await(mangaId: Long): List<Track> { | ||||
|         return try { | ||||
|             trackRepository.getTracksByMangaId(mangaId) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|             emptyList() | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     fun subscribe(mangaId: Long): Flow<List<Track>> { | ||||
|         return trackRepository.getTracksByMangaIdAsFlow(mangaId) | ||||
|     } | ||||
| } | ||||
| @@ -1,20 +0,0 @@ | ||||
| package eu.kanade.domain.track.interactor | ||||
|  | ||||
| import kotlinx.coroutines.flow.Flow | ||||
| import kotlinx.coroutines.flow.map | ||||
| import tachiyomi.domain.track.repository.TrackRepository | ||||
|  | ||||
| class GetTracksPerManga( | ||||
|     private val trackRepository: TrackRepository, | ||||
| ) { | ||||
|  | ||||
|     fun subscribe(): Flow<Map<Long, List<Long>>> { | ||||
|         return trackRepository.getTracksAsFlow().map { tracks -> | ||||
|             tracks | ||||
|                 .groupBy { it.mangaId } | ||||
|                 .mapValues { entry -> | ||||
|                     entry.value.map { it.syncId } | ||||
|                 } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,27 +0,0 @@ | ||||
| package eu.kanade.domain.track.interactor | ||||
|  | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.track.model.Track | ||||
| import tachiyomi.domain.track.repository.TrackRepository | ||||
|  | ||||
| class InsertTrack( | ||||
|     private val trackRepository: TrackRepository, | ||||
| ) { | ||||
|  | ||||
|     suspend fun await(track: Track) { | ||||
|         try { | ||||
|             trackRepository.insert(track) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     suspend fun awaitAll(tracks: List<Track>) { | ||||
|         try { | ||||
|             trackRepository.insertAll(tracks) | ||||
|         } catch (e: Exception) { | ||||
|             logcat(LogPriority.ERROR, e) | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -9,14 +9,14 @@ import androidx.work.NetworkType | ||||
| import androidx.work.OneTimeWorkRequestBuilder | ||||
| import androidx.work.WorkManager | ||||
| import androidx.work.WorkerParameters | ||||
| import eu.kanade.domain.track.interactor.GetTracks | ||||
| import eu.kanade.domain.track.interactor.InsertTrack | ||||
| import eu.kanade.domain.track.model.toDbTrack | ||||
| import eu.kanade.domain.track.store.DelayedTrackingStore | ||||
| import eu.kanade.tachiyomi.data.track.TrackManager | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.lang.withIOContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.track.interactor.GetTracks | ||||
| import tachiyomi.domain.track.interactor.InsertTrack | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import java.util.concurrent.TimeUnit | ||||
|   | ||||
| @@ -6,7 +6,6 @@ import android.net.Uri | ||||
| import com.hippo.unifile.UniFile | ||||
| import eu.kanade.domain.backup.service.BackupPreferences | ||||
| import eu.kanade.domain.library.service.LibraryPreferences | ||||
| import eu.kanade.domain.manga.interactor.GetFavorites | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.backup.BackupConst.BACKUP_CATEGORY | ||||
| import eu.kanade.tachiyomi.data.backup.BackupConst.BACKUP_CATEGORY_MASK | ||||
| @@ -45,6 +44,7 @@ import tachiyomi.data.updateStrategyAdapter | ||||
| import tachiyomi.domain.category.interactor.GetCategories | ||||
| import tachiyomi.domain.category.model.Category | ||||
| import tachiyomi.domain.history.model.HistoryUpdate | ||||
| import tachiyomi.domain.manga.interactor.GetFavorites | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import java.io.FileOutputStream | ||||
|   | ||||
| @@ -2,8 +2,6 @@ package eu.kanade.tachiyomi.data.download | ||||
|  | ||||
| import android.content.Context | ||||
| import androidx.core.content.edit | ||||
| import eu.kanade.domain.chapter.interactor.GetChapter | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.tachiyomi.data.download.model.Download | ||||
| import eu.kanade.tachiyomi.source.SourceManager | ||||
| import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| @@ -12,6 +10,8 @@ import kotlinx.serialization.Serializable | ||||
| import kotlinx.serialization.decodeFromString | ||||
| import kotlinx.serialization.encodeToString | ||||
| import kotlinx.serialization.json.Json | ||||
| import tachiyomi.domain.chapter.interactor.GetChapter | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|   | ||||
| @@ -1,7 +1,5 @@ | ||||
| package eu.kanade.tachiyomi.data.download.model | ||||
|  | ||||
| import eu.kanade.domain.chapter.interactor.GetChapter | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.tachiyomi.source.SourceManager | ||||
| import eu.kanade.tachiyomi.source.model.Page | ||||
| import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| @@ -13,7 +11,9 @@ import kotlinx.coroutines.flow.debounce | ||||
| import kotlinx.coroutines.flow.distinctUntilChanged | ||||
| import kotlinx.coroutines.flow.emitAll | ||||
| import kotlinx.coroutines.flow.flow | ||||
| import tachiyomi.domain.chapter.interactor.GetChapter | ||||
| import tachiyomi.domain.chapter.model.Chapter | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|   | ||||
| @@ -15,18 +15,13 @@ import androidx.work.WorkManager | ||||
| import androidx.work.WorkQuery | ||||
| import androidx.work.WorkerParameters | ||||
| import androidx.work.workDataOf | ||||
| import eu.kanade.domain.chapter.interactor.GetChapterByMangaId | ||||
| import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource | ||||
| import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay | ||||
| import eu.kanade.domain.download.service.DownloadPreferences | ||||
| import eu.kanade.domain.library.service.LibraryPreferences | ||||
| import eu.kanade.domain.manga.interactor.GetLibraryManga | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.domain.manga.interactor.UpdateManga | ||||
| import eu.kanade.domain.manga.model.copyFrom | ||||
| import eu.kanade.domain.manga.model.toSManga | ||||
| import eu.kanade.domain.track.interactor.GetTracks | ||||
| import eu.kanade.domain.track.interactor.InsertTrack | ||||
| import eu.kanade.domain.track.model.toDbTrack | ||||
| import eu.kanade.domain.track.model.toDomainTrack | ||||
| import eu.kanade.tachiyomi.R | ||||
| @@ -70,11 +65,16 @@ import tachiyomi.core.util.lang.withIOContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.category.interactor.GetCategories | ||||
| import tachiyomi.domain.category.model.Category | ||||
| import tachiyomi.domain.chapter.interactor.GetChapterByMangaId | ||||
| import tachiyomi.domain.chapter.model.Chapter | ||||
| import tachiyomi.domain.chapter.model.NoChaptersException | ||||
| import tachiyomi.domain.library.model.LibraryManga | ||||
| import tachiyomi.domain.manga.interactor.GetLibraryManga | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.model.toMangaUpdate | ||||
| import tachiyomi.domain.track.interactor.GetTracks | ||||
| import tachiyomi.domain.track.interactor.InsertTrack | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import java.io.File | ||||
|   | ||||
| @@ -8,10 +8,7 @@ import android.net.Uri | ||||
| import android.os.Build | ||||
| import androidx.core.content.ContextCompat | ||||
| import androidx.core.net.toUri | ||||
| import eu.kanade.domain.chapter.interactor.GetChapter | ||||
| import eu.kanade.domain.chapter.interactor.UpdateChapter | ||||
| import eu.kanade.domain.download.service.DownloadPreferences | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.backup.BackupRestoreService | ||||
| import eu.kanade.tachiyomi.data.download.DownloadManager | ||||
| @@ -30,8 +27,11 @@ import eu.kanade.tachiyomi.util.system.toast | ||||
| import kotlinx.coroutines.runBlocking | ||||
| import tachiyomi.core.Constants | ||||
| import tachiyomi.core.util.lang.launchIO | ||||
| import tachiyomi.domain.chapter.interactor.GetChapter | ||||
| import tachiyomi.domain.chapter.interactor.UpdateChapter | ||||
| import tachiyomi.domain.chapter.model.Chapter | ||||
| import tachiyomi.domain.chapter.model.toChapterUpdate | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|   | ||||
| @@ -6,9 +6,7 @@ import androidx.annotation.ColorInt | ||||
| import androidx.annotation.DrawableRes | ||||
| import androidx.annotation.StringRes | ||||
| import eu.kanade.domain.base.BasePreferences | ||||
| import eu.kanade.domain.chapter.interactor.GetChapterByMangaId | ||||
| import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay | ||||
| import eu.kanade.domain.track.interactor.InsertTrack | ||||
| import eu.kanade.domain.track.model.toDbTrack | ||||
| import eu.kanade.domain.track.model.toDomainTrack | ||||
| import eu.kanade.domain.track.service.TrackPreferences | ||||
| @@ -21,6 +19,8 @@ import okhttp3.OkHttpClient | ||||
| import tachiyomi.core.util.lang.withIOContext | ||||
| import tachiyomi.core.util.lang.withUIContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.chapter.interactor.GetChapterByMangaId | ||||
| import tachiyomi.domain.track.interactor.InsertTrack | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import uy.kohesive.injekt.injectLazy | ||||
|   | ||||
| @@ -37,7 +37,7 @@ class SourceManager( | ||||
|     private val stubSourcesMap = ConcurrentHashMap<Long, StubSource>() | ||||
|  | ||||
|     val catalogueSources: Flow<List<CatalogueSource>> = sourcesMapFlow.map { it.values.filterIsInstance<CatalogueSource>() } | ||||
|     val onlineSources: Flow<List<HttpSource>> = catalogueSources.map { sources -> sources.filterIsInstance<HttpSource>() } | ||||
|     val onlineSources: Flow<List<HttpSource>> = catalogueSources.map { it.filterIsInstance<HttpSource>() } | ||||
|  | ||||
|     init { | ||||
|         scope.launch { | ||||
| @@ -108,7 +108,7 @@ class SourceManager( | ||||
|     } | ||||
|  | ||||
|     @Suppress("OverridingDeprecatedMember") | ||||
|     open inner class StubSource(private val sourceData: SourceData) : Source { | ||||
|     inner class StubSource(private val sourceData: SourceData) : Source { | ||||
|  | ||||
|         override val id: Long = sourceData.id | ||||
|  | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| package eu.kanade.tachiyomi.ui.browse.migration | ||||
|  | ||||
| import eu.kanade.domain.manga.model.hasCustomCover | ||||
| import eu.kanade.domain.track.interactor.GetTracks | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.cache.CoverCache | ||||
| import kotlinx.coroutines.runBlocking | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.track.interactor.GetTracks | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import uy.kohesive.injekt.injectLazy | ||||
|   | ||||
| @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.ui.browse.migration.manga | ||||
| import androidx.compose.runtime.Immutable | ||||
| import cafe.adriel.voyager.core.model.StateScreenModel | ||||
| import cafe.adriel.voyager.core.model.coroutineScope | ||||
| import eu.kanade.domain.manga.interactor.GetFavorites | ||||
| import eu.kanade.tachiyomi.source.Source | ||||
| import eu.kanade.tachiyomi.source.SourceManager | ||||
| import kotlinx.coroutines.channels.Channel | ||||
| @@ -16,6 +15,7 @@ import kotlinx.coroutines.flow.update | ||||
| import kotlinx.coroutines.launch | ||||
| import logcat.LogPriority | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.manga.interactor.GetFavorites | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|   | ||||
| @@ -25,15 +25,10 @@ import androidx.compose.ui.platform.LocalContext | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.util.fastForEachIndexed | ||||
| import cafe.adriel.voyager.core.model.StateScreenModel | ||||
| import eu.kanade.domain.category.interactor.SetMangaCategories | ||||
| import eu.kanade.domain.chapter.interactor.GetChapterByMangaId | ||||
| import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource | ||||
| import eu.kanade.domain.chapter.interactor.UpdateChapter | ||||
| import eu.kanade.domain.manga.interactor.UpdateManga | ||||
| import eu.kanade.domain.manga.model.hasCustomCover | ||||
| import eu.kanade.domain.manga.model.toSManga | ||||
| import eu.kanade.domain.track.interactor.GetTracks | ||||
| import eu.kanade.domain.track.interactor.InsertTrack | ||||
| import eu.kanade.presentation.components.LoadingScreen | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.cache.CoverCache | ||||
| @@ -49,9 +44,14 @@ import tachiyomi.core.preference.PreferenceStore | ||||
| import tachiyomi.core.util.lang.launchIO | ||||
| import tachiyomi.core.util.lang.withUIContext | ||||
| import tachiyomi.domain.category.interactor.GetCategories | ||||
| import tachiyomi.domain.category.interactor.SetMangaCategories | ||||
| import tachiyomi.domain.chapter.interactor.GetChapterByMangaId | ||||
| import tachiyomi.domain.chapter.interactor.UpdateChapter | ||||
| import tachiyomi.domain.chapter.model.toChapterUpdate | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.model.MangaUpdate | ||||
| import tachiyomi.domain.track.interactor.GetTracks | ||||
| import tachiyomi.domain.track.interactor.InsertTrack | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import java.util.Date | ||||
|   | ||||
| @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.ui.browse.migration.search | ||||
| import androidx.compose.runtime.Immutable | ||||
| import cafe.adriel.voyager.core.model.coroutineScope | ||||
| import eu.kanade.domain.base.BasePreferences | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.domain.source.service.SourcePreferences | ||||
| import eu.kanade.tachiyomi.source.CatalogueSource | ||||
| import eu.kanade.tachiyomi.source.SourceManager | ||||
| @@ -11,6 +10,7 @@ import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SearchItemResult | ||||
| import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SearchScreenModel | ||||
| import kotlinx.coroutines.flow.update | ||||
| import kotlinx.coroutines.launch | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|   | ||||
| @@ -18,21 +18,15 @@ import eu.davidea.flexibleadapter.items.IFlexible | ||||
| import eu.kanade.core.prefs.CheckboxState | ||||
| import eu.kanade.core.prefs.asState | ||||
| import eu.kanade.core.prefs.mapAsCheckboxState | ||||
| import eu.kanade.domain.category.interactor.SetMangaCategories | ||||
| import eu.kanade.domain.chapter.interactor.GetChapterByMangaId | ||||
| import eu.kanade.domain.chapter.interactor.SetMangaDefaultChapterFlags | ||||
| import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay | ||||
| import eu.kanade.domain.library.service.LibraryPreferences | ||||
| import eu.kanade.domain.manga.interactor.GetDuplicateLibraryManga | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.domain.manga.interactor.NetworkToLocalManga | ||||
| import eu.kanade.domain.manga.interactor.UpdateManga | ||||
| import eu.kanade.domain.manga.model.copyFrom | ||||
| import eu.kanade.domain.manga.model.toDomainManga | ||||
| import eu.kanade.domain.manga.model.toSManga | ||||
| import eu.kanade.domain.source.interactor.GetRemoteManga | ||||
| import eu.kanade.domain.source.service.SourcePreferences | ||||
| import eu.kanade.domain.track.interactor.InsertTrack | ||||
| import eu.kanade.domain.track.model.toDomainTrack | ||||
| import eu.kanade.tachiyomi.data.cache.CoverCache | ||||
| import eu.kanade.tachiyomi.data.track.EnhancedTrackService | ||||
| @@ -71,9 +65,15 @@ import tachiyomi.core.util.lang.withIOContext | ||||
| import tachiyomi.core.util.lang.withNonCancellableContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.category.interactor.GetCategories | ||||
| import tachiyomi.domain.category.interactor.SetMangaCategories | ||||
| import tachiyomi.domain.category.model.Category | ||||
| import tachiyomi.domain.chapter.interactor.GetChapterByMangaId | ||||
| import tachiyomi.domain.manga.interactor.GetDuplicateLibraryManga | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.manga.interactor.NetworkToLocalManga | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.model.toMangaUpdate | ||||
| import tachiyomi.domain.track.interactor.InsertTrack | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import java.util.Date | ||||
|   | ||||
| @@ -5,8 +5,6 @@ import androidx.compose.runtime.State | ||||
| import androidx.compose.runtime.produceState | ||||
| import cafe.adriel.voyager.core.model.StateScreenModel | ||||
| import cafe.adriel.voyager.core.model.coroutineScope | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.domain.manga.interactor.NetworkToLocalManga | ||||
| import eu.kanade.domain.manga.interactor.UpdateManga | ||||
| import eu.kanade.domain.manga.model.copyFrom | ||||
| import eu.kanade.domain.manga.model.toDomainManga | ||||
| @@ -25,6 +23,8 @@ import tachiyomi.core.util.lang.awaitSingle | ||||
| import tachiyomi.core.util.lang.withIOContext | ||||
| import tachiyomi.core.util.lang.withNonCancellableContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.manga.interactor.NetworkToLocalManga | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.model.toMangaUpdate | ||||
| import uy.kohesive.injekt.Injekt | ||||
|   | ||||
| @@ -5,16 +5,16 @@ import androidx.compose.runtime.Immutable | ||||
| import cafe.adriel.voyager.core.model.StateScreenModel | ||||
| import cafe.adriel.voyager.core.model.coroutineScope | ||||
| import eu.kanade.domain.category.interactor.CreateCategoryWithName | ||||
| import eu.kanade.domain.category.interactor.DeleteCategory | ||||
| import eu.kanade.domain.category.interactor.RenameCategory | ||||
| import eu.kanade.domain.category.interactor.ReorderCategory | ||||
| import eu.kanade.tachiyomi.R | ||||
| import kotlinx.coroutines.channels.Channel | ||||
| import kotlinx.coroutines.flow.collectLatest | ||||
| import kotlinx.coroutines.flow.receiveAsFlow | ||||
| import kotlinx.coroutines.flow.update | ||||
| import kotlinx.coroutines.launch | ||||
| import tachiyomi.domain.category.interactor.DeleteCategory | ||||
| import tachiyomi.domain.category.interactor.GetCategories | ||||
| import tachiyomi.domain.category.interactor.RenameCategory | ||||
| import tachiyomi.domain.category.interactor.ReorderCategory | ||||
| import tachiyomi.domain.category.model.Category | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|   | ||||
| @@ -16,15 +16,11 @@ import eu.kanade.core.util.fastFilterNot | ||||
| import eu.kanade.core.util.fastMapNotNull | ||||
| import eu.kanade.core.util.fastPartition | ||||
| import eu.kanade.domain.base.BasePreferences | ||||
| import eu.kanade.domain.category.interactor.SetMangaCategories | ||||
| import eu.kanade.domain.chapter.interactor.GetChapterByMangaId | ||||
| import eu.kanade.domain.chapter.interactor.SetReadStatus | ||||
| import eu.kanade.domain.history.interactor.GetNextChapters | ||||
| import eu.kanade.domain.library.service.LibraryPreferences | ||||
| import eu.kanade.domain.manga.interactor.GetLibraryManga | ||||
| import eu.kanade.domain.manga.interactor.UpdateManga | ||||
| import eu.kanade.domain.manga.model.isLocal | ||||
| import eu.kanade.domain.track.interactor.GetTracksPerManga | ||||
| import eu.kanade.presentation.components.SEARCH_DEBOUNCE_MILLIS | ||||
| import eu.kanade.presentation.library.components.LibraryToolbarTitle | ||||
| import eu.kanade.presentation.manga.DownloadAction | ||||
| @@ -53,13 +49,17 @@ import tachiyomi.core.util.lang.launchIO | ||||
| import tachiyomi.core.util.lang.launchNonCancellable | ||||
| import tachiyomi.core.util.lang.withIOContext | ||||
| import tachiyomi.domain.category.interactor.GetCategories | ||||
| import tachiyomi.domain.category.interactor.SetMangaCategories | ||||
| import tachiyomi.domain.category.model.Category | ||||
| import tachiyomi.domain.chapter.interactor.GetChapterByMangaId | ||||
| import tachiyomi.domain.chapter.model.Chapter | ||||
| import tachiyomi.domain.library.model.LibraryManga | ||||
| import tachiyomi.domain.library.model.LibrarySort | ||||
| import tachiyomi.domain.library.model.sort | ||||
| import tachiyomi.domain.manga.interactor.GetLibraryManga | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.model.MangaUpdate | ||||
| import tachiyomi.domain.track.interactor.GetTracksPerManga | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import java.text.Collator | ||||
|   | ||||
| @@ -9,7 +9,6 @@ import cafe.adriel.voyager.core.model.coroutineScope | ||||
| import coil.imageLoader | ||||
| import coil.request.ImageRequest | ||||
| import coil.size.Size | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.domain.manga.interactor.UpdateManga | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.cache.CoverCache | ||||
| @@ -25,6 +24,7 @@ import tachiyomi.core.util.lang.launchIO | ||||
| import tachiyomi.core.util.lang.withIOContext | ||||
| import tachiyomi.core.util.lang.withUIContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|   | ||||
| @@ -12,21 +12,15 @@ import eu.kanade.core.prefs.CheckboxState | ||||
| import eu.kanade.core.prefs.asState | ||||
| import eu.kanade.core.prefs.mapAsCheckboxState | ||||
| import eu.kanade.core.util.addOrRemove | ||||
| import eu.kanade.domain.category.interactor.SetMangaCategories | ||||
| import eu.kanade.domain.chapter.interactor.SetMangaDefaultChapterFlags | ||||
| import eu.kanade.domain.chapter.interactor.SetReadStatus | ||||
| import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource | ||||
| import eu.kanade.domain.chapter.interactor.UpdateChapter | ||||
| import eu.kanade.domain.download.service.DownloadPreferences | ||||
| import eu.kanade.domain.library.service.LibraryPreferences | ||||
| import eu.kanade.domain.manga.interactor.GetDuplicateLibraryManga | ||||
| import eu.kanade.domain.manga.interactor.GetMangaWithChapters | ||||
| import eu.kanade.domain.manga.interactor.SetMangaChapterFlags | ||||
| import eu.kanade.domain.manga.interactor.UpdateManga | ||||
| import eu.kanade.domain.manga.model.downloadedFilter | ||||
| import eu.kanade.domain.manga.model.isLocal | ||||
| import eu.kanade.domain.manga.model.toSManga | ||||
| import eu.kanade.domain.track.interactor.GetTracks | ||||
| import eu.kanade.domain.track.model.toDbTrack | ||||
| import eu.kanade.domain.ui.UiPreferences | ||||
| import eu.kanade.presentation.components.ChapterDownloadAction | ||||
| @@ -66,12 +60,18 @@ import tachiyomi.core.util.lang.withIOContext | ||||
| import tachiyomi.core.util.lang.withUIContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.category.interactor.GetCategories | ||||
| import tachiyomi.domain.category.interactor.SetMangaCategories | ||||
| import tachiyomi.domain.category.model.Category | ||||
| import tachiyomi.domain.chapter.interactor.UpdateChapter | ||||
| import tachiyomi.domain.chapter.model.Chapter | ||||
| import tachiyomi.domain.chapter.model.ChapterUpdate | ||||
| import tachiyomi.domain.chapter.model.NoChaptersException | ||||
| import tachiyomi.domain.manga.interactor.GetDuplicateLibraryManga | ||||
| import tachiyomi.domain.manga.interactor.GetMangaWithChapters | ||||
| import tachiyomi.domain.manga.interactor.SetMangaChapterFlags | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.manga.model.TriStateFilter | ||||
| import tachiyomi.domain.track.interactor.GetTracks | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import java.text.DecimalFormat | ||||
|   | ||||
| @@ -37,11 +37,6 @@ import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.Navigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.domain.manga.interactor.GetMangaWithChapters | ||||
| import eu.kanade.domain.track.interactor.DeleteTrack | ||||
| import eu.kanade.domain.track.interactor.GetTracks | ||||
| import eu.kanade.domain.track.interactor.InsertTrack | ||||
| import eu.kanade.domain.track.model.toDbTrack | ||||
| import eu.kanade.domain.track.model.toDomainTrack | ||||
| import eu.kanade.domain.ui.UiPreferences | ||||
| @@ -73,6 +68,11 @@ import tachiyomi.core.util.lang.launchNonCancellable | ||||
| import tachiyomi.core.util.lang.withIOContext | ||||
| import tachiyomi.core.util.lang.withUIContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.manga.interactor.GetMangaWithChapters | ||||
| import tachiyomi.domain.track.interactor.DeleteTrack | ||||
| import tachiyomi.domain.track.interactor.GetTracks | ||||
| import tachiyomi.domain.track.interactor.InsertTrack | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import java.time.Instant | ||||
|   | ||||
| @@ -7,18 +7,13 @@ import androidx.lifecycle.SavedStateHandle | ||||
| import androidx.lifecycle.ViewModel | ||||
| import androidx.lifecycle.viewModelScope | ||||
| import eu.kanade.domain.base.BasePreferences | ||||
| import eu.kanade.domain.chapter.interactor.GetChapterByMangaId | ||||
| import eu.kanade.domain.chapter.interactor.UpdateChapter | ||||
| import eu.kanade.domain.chapter.model.toDbChapter | ||||
| import eu.kanade.domain.download.service.DownloadPreferences | ||||
| import eu.kanade.domain.history.interactor.GetNextChapters | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.domain.manga.interactor.SetMangaViewerFlags | ||||
| import eu.kanade.domain.manga.model.isLocal | ||||
| import eu.kanade.domain.manga.model.orientationType | ||||
| import eu.kanade.domain.manga.model.readingModeType | ||||
| import eu.kanade.domain.track.interactor.GetTracks | ||||
| import eu.kanade.domain.track.interactor.InsertTrack | ||||
| import eu.kanade.domain.track.model.toDbTrack | ||||
| import eu.kanade.domain.track.service.DelayedTrackingUpdateJob | ||||
| import eu.kanade.domain.track.service.TrackPreferences | ||||
| @@ -74,10 +69,15 @@ import tachiyomi.core.util.lang.launchNonCancellable | ||||
| import tachiyomi.core.util.lang.withIOContext | ||||
| import tachiyomi.core.util.lang.withUIContext | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.chapter.interactor.GetChapterByMangaId | ||||
| import tachiyomi.domain.chapter.interactor.UpdateChapter | ||||
| import tachiyomi.domain.chapter.model.ChapterUpdate | ||||
| import tachiyomi.domain.history.interactor.UpsertHistory | ||||
| import tachiyomi.domain.history.model.HistoryUpdate | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.track.interactor.GetTracks | ||||
| import tachiyomi.domain.track.interactor.InsertTrack | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import java.util.Date | ||||
|   | ||||
| @@ -8,9 +8,7 @@ import eu.kanade.core.util.fastFilter | ||||
| import eu.kanade.core.util.fastFilterNot | ||||
| import eu.kanade.core.util.fastMapNotNull | ||||
| import eu.kanade.domain.library.service.LibraryPreferences | ||||
| import eu.kanade.domain.manga.interactor.GetLibraryManga | ||||
| import eu.kanade.domain.manga.model.isLocal | ||||
| import eu.kanade.domain.track.interactor.GetTracks | ||||
| import eu.kanade.presentation.more.stats.StatsScreenState | ||||
| import eu.kanade.presentation.more.stats.data.StatsData | ||||
| import eu.kanade.tachiyomi.data.download.DownloadManager | ||||
| @@ -23,6 +21,8 @@ import kotlinx.coroutines.flow.update | ||||
| import tachiyomi.core.util.lang.launchIO | ||||
| import tachiyomi.domain.history.interactor.GetTotalReadDuration | ||||
| import tachiyomi.domain.library.model.LibraryManga | ||||
| import tachiyomi.domain.manga.interactor.GetLibraryManga | ||||
| import tachiyomi.domain.track.interactor.GetTracks | ||||
| import tachiyomi.domain.track.model.Track | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|   | ||||
| @@ -11,11 +11,8 @@ import cafe.adriel.voyager.core.model.coroutineScope | ||||
| import eu.kanade.core.prefs.asState | ||||
| import eu.kanade.core.util.addOrRemove | ||||
| import eu.kanade.core.util.insertSeparators | ||||
| import eu.kanade.domain.chapter.interactor.GetChapter | ||||
| import eu.kanade.domain.chapter.interactor.SetReadStatus | ||||
| import eu.kanade.domain.chapter.interactor.UpdateChapter | ||||
| import eu.kanade.domain.library.service.LibraryPreferences | ||||
| import eu.kanade.domain.manga.interactor.GetManga | ||||
| import eu.kanade.domain.ui.UiPreferences | ||||
| import eu.kanade.presentation.components.ChapterDownloadAction | ||||
| import eu.kanade.presentation.updates.UpdatesUiModel | ||||
| @@ -41,7 +38,10 @@ import logcat.LogPriority | ||||
| import tachiyomi.core.util.lang.launchIO | ||||
| import tachiyomi.core.util.lang.launchNonCancellable | ||||
| import tachiyomi.core.util.system.logcat | ||||
| import tachiyomi.domain.chapter.interactor.GetChapter | ||||
| import tachiyomi.domain.chapter.interactor.UpdateChapter | ||||
| import tachiyomi.domain.chapter.model.ChapterUpdate | ||||
| import tachiyomi.domain.manga.interactor.GetManga | ||||
| import tachiyomi.domain.updates.interactor.GetUpdates | ||||
| import tachiyomi.domain.updates.model.UpdatesWithRelations | ||||
| import uy.kohesive.injekt.Injekt | ||||
|   | ||||
		Reference in New Issue
	
	Block a user