mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +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