Move more models to domain module

(cherry picked from commit b53e24e0dbd4affd6066a03ce543c3ecc88bdb99)

# Conflicts:
#	app/src/main/java/eu/kanade/data/history/HistoryRepositoryImpl.kt
#	app/src/main/java/eu/kanade/data/updates/UpdatesMapper.kt
#	app/src/main/java/eu/kanade/domain/category/interactor/SetDisplayModeForCategory.kt
#	app/src/main/java/eu/kanade/domain/category/interactor/SetSortModeForCategory.kt
#	app/src/main/java/eu/kanade/domain/history/repository/HistoryRepository.kt
#	app/src/main/java/eu/kanade/domain/library/service/LibraryPreferences.kt
#	app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt
#	app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateDialog.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt
#	domain/src/main/java/tachiyomi/domain/history/model/HistoryWithRelations.kt
#	domain/src/main/java/tachiyomi/domain/updates/model/UpdatesWithRelations.kt
This commit is contained in:
arkon 2023-01-22 10:37:13 -05:00 committed by Jobobby04
parent d68330c64e
commit eb3e928e67
87 changed files with 242 additions and 195 deletions

View File

@ -1,8 +1,8 @@
package eu.kanade.data.history
import eu.kanade.domain.history.model.History
import eu.kanade.domain.history.model.HistoryWithRelations
import eu.kanade.domain.manga.model.MangaCover
import tachiyomi.domain.history.model.History
import tachiyomi.domain.history.model.HistoryWithRelations
import tachiyomi.domain.manga.model.MangaCover
import java.util.Date
val historyMapper: (Long, Long, Date?, Long) -> History = { id, chapterId, readAt, readDuration ->

View File

@ -1,13 +1,13 @@
package eu.kanade.data.history
import eu.kanade.domain.history.model.History
import eu.kanade.domain.history.model.HistoryUpdate
import eu.kanade.domain.history.model.HistoryWithRelations
import eu.kanade.domain.history.repository.HistoryRepository
import eu.kanade.tachiyomi.util.system.logcat
import kotlinx.coroutines.flow.Flow
import logcat.LogPriority
import tachiyomi.data.DatabaseHandler
import tachiyomi.domain.history.model.History
import tachiyomi.domain.history.model.HistoryUpdate
import tachiyomi.domain.history.model.HistoryWithRelations
class HistoryRepositoryImpl(
private val handler: DatabaseHandler,

View File

@ -2,7 +2,6 @@ package eu.kanade.data.manga
import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.repository.MangaRepository
import eu.kanade.tachiyomi.util.system.logcat
import eu.kanade.tachiyomi.util.system.toLong
@ -14,6 +13,7 @@ import tachiyomi.data.DatabaseHandler
import tachiyomi.data.listOfStringsAdapter
import tachiyomi.data.listOfStringsAndAdapter
import tachiyomi.data.updateStrategyAdapter
import tachiyomi.domain.manga.model.MangaUpdate
class MangaRepositoryImpl(
private val handler: DatabaseHandler,

View File

@ -1,9 +1,9 @@
package eu.kanade.data.source
import eu.kanade.domain.source.model.SourceData
import eu.kanade.domain.source.repository.SourceDataRepository
import kotlinx.coroutines.flow.Flow
import tachiyomi.data.DatabaseHandler
import tachiyomi.domain.source.model.SourceData
class SourceDataRepositoryImpl(
private val handler: DatabaseHandler,

View File

@ -1,9 +1,9 @@
package eu.kanade.data.source
import eu.kanade.domain.source.model.Source
import eu.kanade.domain.source.model.SourceData
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.SourceManager
import tachiyomi.domain.source.model.SourceData
val sourceMapper: (eu.kanade.tachiyomi.source.Source) -> Source = { source ->
Source(

View File

@ -1,7 +1,7 @@
package eu.kanade.data.updates
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.domain.updates.model.UpdatesWithRelations
import tachiyomi.domain.manga.model.MangaCover
import tachiyomi.domain.updates.model.UpdatesWithRelations
import tachiyomi.view.UpdatesView
val updateWithRelationMapper: (Long, String, Long, String, String?, Boolean, Boolean, Long, Long, Boolean, String?, Long, Long, Long) -> UpdatesWithRelations = {

View File

@ -1,11 +1,11 @@
package eu.kanade.data.updates
import eu.kanade.domain.updates.model.UpdatesWithRelations
import eu.kanade.domain.updates.repository.UpdatesRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import tachiyomi.data.AndroidDatabaseHandler
import tachiyomi.data.DatabaseHandler
import tachiyomi.domain.updates.model.UpdatesWithRelations
class UpdatesRepositoryImpl(
val databaseHandler: DatabaseHandler,

View File

@ -1,5 +1,6 @@
package eu.kanade.domain
import android.app.Application
import eu.kanade.data.manga.FavoritesEntryRepositoryImpl
import eu.kanade.data.manga.MangaMergeRepositoryImpl
import eu.kanade.data.manga.MangaMetadataRepositoryImpl
@ -67,6 +68,10 @@ import eu.kanade.domain.source.repository.FeedSavedSearchRepository
import eu.kanade.domain.source.repository.SavedSearchRepository
import eu.kanade.tachiyomi.source.online.MetadataSource
import exh.search.SearchEngine
import tachiyomi.data.manga.CustomMangaRepositoryImpl
import tachiyomi.domain.manga.interactor.GetCustomMangaInfo
import tachiyomi.domain.manga.interactor.SetCustomMangaInfo
import tachiyomi.domain.manga.repository.CustomMangaRepository
import uy.kohesive.injekt.api.InjektModule
import uy.kohesive.injekt.api.InjektRegistrar
import uy.kohesive.injekt.api.addFactory
@ -148,5 +153,9 @@ class SYDomainModule : InjektModule {
addFactory { CountFeedSavedSearchBySourceId(get()) }
addFactory { GetSavedSearchGlobalFeed(get()) }
addFactory { GetSavedSearchBySourceIdFeed(get()) }
addSingletonFactory<CustomMangaRepository> { CustomMangaRepositoryImpl(get<Application>()) }
addFactory { GetCustomMangaInfo(get()) }
addFactory { SetCustomMangaInfo(get()) }
}
}

View File

@ -1,8 +1,8 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.library.model.plus
import eu.kanade.domain.library.service.LibraryPreferences
import tachiyomi.domain.category.repository.CategoryRepository
import tachiyomi.domain.library.model.plus
class ResetCategoryFlags(
private val preferences: LibraryPreferences,

View File

@ -1,12 +1,12 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.domain.library.model.LibraryGroup
import eu.kanade.domain.library.model.plus
import eu.kanade.domain.library.service.LibraryPreferences
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.category.model.CategoryUpdate
import tachiyomi.domain.category.repository.CategoryRepository
import tachiyomi.domain.library.model.LibraryDisplayMode
import tachiyomi.domain.library.model.plus
class SetDisplayModeForCategory(
private val preferences: LibraryPreferences,

View File

@ -1,12 +1,12 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.library.model.LibraryGroup
import eu.kanade.domain.library.model.LibrarySort
import eu.kanade.domain.library.model.plus
import eu.kanade.domain.library.service.LibraryPreferences
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.category.model.CategoryUpdate
import tachiyomi.domain.category.repository.CategoryRepository
import tachiyomi.domain.library.model.LibrarySort
import tachiyomi.domain.library.model.plus
class SetSortModeForCategory(
private val preferences: LibraryPreferences,

View File

@ -1,8 +1,8 @@
package eu.kanade.domain.history.interactor
import eu.kanade.domain.history.model.HistoryWithRelations
import eu.kanade.domain.history.repository.HistoryRepository
import kotlinx.coroutines.flow.Flow
import tachiyomi.domain.history.model.HistoryWithRelations
class GetHistory(
private val repository: HistoryRepository,

View File

@ -1,7 +1,7 @@
package eu.kanade.domain.history.interactor
import eu.kanade.domain.history.model.History
import eu.kanade.domain.history.repository.HistoryRepository
import tachiyomi.domain.history.model.History
class GetHistoryByMangaId(
private val repository: HistoryRepository,

View File

@ -1,7 +1,7 @@
package eu.kanade.domain.history.interactor
import eu.kanade.domain.history.model.HistoryWithRelations
import eu.kanade.domain.history.repository.HistoryRepository
import tachiyomi.domain.history.model.HistoryWithRelations
class RemoveHistory(
private val repository: HistoryRepository,

View File

@ -1,7 +1,7 @@
package eu.kanade.domain.history.interactor
import eu.kanade.domain.history.model.HistoryUpdate
import eu.kanade.domain.history.repository.HistoryRepository
import tachiyomi.domain.history.model.HistoryUpdate
class UpsertHistory(
private val historyRepository: HistoryRepository,

View File

@ -1,9 +1,9 @@
package eu.kanade.domain.history.repository
import eu.kanade.domain.history.model.History
import eu.kanade.domain.history.model.HistoryUpdate
import eu.kanade.domain.history.model.HistoryWithRelations
import kotlinx.coroutines.flow.Flow
import tachiyomi.domain.history.model.History
import tachiyomi.domain.history.model.HistoryUpdate
import tachiyomi.domain.history.model.HistoryWithRelations
interface HistoryRepository {

View File

@ -1,9 +1,7 @@
package eu.kanade.domain.library.service
import eu.kanade.domain.library.model.GroupLibraryMode
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.domain.library.model.LibraryGroup
import eu.kanade.domain.library.model.LibrarySort
import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.core.preference.PreferenceStore
import eu.kanade.tachiyomi.core.preference.getEnum
@ -12,6 +10,8 @@ import eu.kanade.tachiyomi.data.preference.MANGA_HAS_UNREAD
import eu.kanade.tachiyomi.data.preference.MANGA_NON_COMPLETED
import eu.kanade.tachiyomi.data.preference.MANGA_NON_READ
import eu.kanade.tachiyomi.widget.ExtendedNavigationView
import tachiyomi.domain.library.model.LibraryDisplayMode
import tachiyomi.domain.library.model.LibrarySort
class LibraryPreferences(
private val preferenceStore: PreferenceStore,

View File

@ -1,8 +1,8 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.repository.MangaRepository
import tachiyomi.domain.manga.model.MangaUpdate
class SetMangaChapterFlags(
private val mangaRepository: MangaRepository,

View File

@ -1,8 +1,8 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.repository.MangaRepository
import tachiyomi.domain.manga.model.MangaUpdate
class SetMangaFilteredScanlators(private val mangaRepository: MangaRepository) {

View File

@ -1,9 +1,9 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.repository.MangaRepository
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
import tachiyomi.domain.manga.model.MangaUpdate
class SetMangaViewerFlags(
private val mangaRepository: MangaRepository,

View File

@ -1,13 +1,13 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.model.hasCustomCover
import eu.kanade.domain.manga.model.isLocal
import eu.kanade.domain.manga.repository.MangaRepository
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.source.model.SManga
import tachiyomi.domain.manga.model.MangaUpdate
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.util.Date

View File

@ -2,13 +2,14 @@ package eu.kanade.domain.manga.model
import eu.kanade.domain.base.BasePreferences
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import eu.kanade.tachiyomi.source.LocalSource
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.model.UpdateStrategy
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
import eu.kanade.tachiyomi.widget.ExtendedNavigationView
import tachiyomi.domain.manga.interactor.GetCustomMangaInfo
import tachiyomi.domain.manga.model.MangaUpdate
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
@ -42,7 +43,7 @@ data class Manga(
// SY -->
private val customMangaInfo = if (favorite) {
customMangaManager.getManga(this)
getCustomMangaInfo.get(id)
} else {
null
}
@ -225,7 +226,7 @@ data class Manga(
)
// SY -->
private val customMangaManager: CustomMangaManager by injectLazy()
private val getCustomMangaInfo: GetCustomMangaInfo by injectLazy()
// SY <--
}
}

View File

@ -1,15 +1,6 @@
package eu.kanade.domain.manga.model
/**
* Contains the required data for MangaCoverFetcher
*/
data class MangaCover(
val mangaId: Long,
val sourceId: Long,
val isMangaFavorite: Boolean,
val url: String?,
val lastModified: Long,
)
import tachiyomi.domain.manga.model.MangaCover
fun Manga.asMangaCover(): MangaCover {
return MangaCover(

View File

@ -2,8 +2,8 @@ package eu.kanade.domain.manga.repository
import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import kotlinx.coroutines.flow.Flow
import tachiyomi.domain.manga.model.MangaUpdate
interface MangaRepository {

View File

@ -1,7 +1,7 @@
package eu.kanade.domain.source.repository
import eu.kanade.domain.source.model.SourceData
import kotlinx.coroutines.flow.Flow
import tachiyomi.domain.source.model.SourceData
interface SourceDataRepository {
fun subscribeAll(): Flow<List<SourceData>>

View File

@ -1,10 +1,10 @@
package eu.kanade.domain.source.service
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.domain.source.interactor.SetMigrateSorting
import eu.kanade.tachiyomi.core.preference.PreferenceStore
import eu.kanade.tachiyomi.core.preference.getEnum
import eu.kanade.tachiyomi.util.system.LocaleHelper
import tachiyomi.domain.library.model.LibraryDisplayMode
class SourcePreferences(
private val preferenceStore: PreferenceStore,
@ -18,8 +18,6 @@ class SourcePreferences(
fun pinnedSources() = preferenceStore.getStringSet("pinned_catalogues", emptySet())
fun duplicatePinnedSources() = preferenceStore.getBoolean("duplicate_pinned_sources", false)
fun lastUsedSource() = preferenceStore.getLong("last_catalogue_source", -1)
fun showNsfwSource() = preferenceStore.getBoolean("show_nsfw_source", true)

View File

@ -1,8 +1,8 @@
package eu.kanade.domain.updates.interactor
import eu.kanade.domain.updates.model.UpdatesWithRelations
import eu.kanade.domain.updates.repository.UpdatesRepository
import kotlinx.coroutines.flow.Flow
import tachiyomi.domain.updates.model.UpdatesWithRelations
import java.util.Calendar
class GetUpdates(

View File

@ -1,7 +1,7 @@
package eu.kanade.domain.updates.repository
import eu.kanade.domain.updates.model.UpdatesWithRelations
import kotlinx.coroutines.flow.Flow
import tachiyomi.domain.updates.model.UpdatesWithRelations
interface UpdatesRepository {

View File

@ -15,7 +15,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.paging.LoadState
import androidx.paging.compose.LazyPagingItems
import eu.kanade.data.source.NoResultsException
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.domain.manga.model.Manga
import eu.kanade.presentation.browse.components.BrowseSourceComfortableGrid
import eu.kanade.presentation.browse.components.BrowseSourceCompactGrid
@ -30,6 +29,7 @@ import eu.kanade.tachiyomi.source.LocalSource
import exh.metadata.metadata.base.RaisedSearchMetadata
import exh.source.isEhBasedSource
import kotlinx.coroutines.flow.StateFlow
import tachiyomi.domain.library.model.LibraryDisplayMode
@Composable
fun BrowseSourceContent(

View File

@ -16,7 +16,6 @@ import androidx.compose.ui.unit.dp
import androidx.paging.LoadState
import androidx.paging.compose.LazyPagingItems
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.presentation.browse.InLibraryBadge
import eu.kanade.presentation.components.Badge
import eu.kanade.presentation.components.CommonMangaItemDefaults
@ -26,6 +25,7 @@ import eu.kanade.tachiyomi.R
import exh.metadata.metadata.MangaDexSearchMetadata
import exh.metadata.metadata.base.RaisedSearchMetadata
import kotlinx.coroutines.flow.StateFlow
import tachiyomi.domain.manga.model.MangaCover
@Composable
fun BrowseSourceComfortableGrid(

View File

@ -16,7 +16,6 @@ import androidx.compose.ui.unit.dp
import androidx.paging.LoadState
import androidx.paging.compose.LazyPagingItems
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.presentation.browse.InLibraryBadge
import eu.kanade.presentation.components.Badge
import eu.kanade.presentation.components.CommonMangaItemDefaults
@ -26,6 +25,7 @@ import eu.kanade.tachiyomi.R
import exh.metadata.metadata.MangaDexSearchMetadata
import exh.metadata.metadata.base.RaisedSearchMetadata
import kotlinx.coroutines.flow.StateFlow
import tachiyomi.domain.manga.model.MangaCover
@Composable
fun BrowseSourceCompactGrid(

View File

@ -13,7 +13,6 @@ import androidx.paging.LoadState
import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.items
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.presentation.browse.InLibraryBadge
import eu.kanade.presentation.components.Badge
import eu.kanade.presentation.components.CommonMangaItemDefaults
@ -24,6 +23,7 @@ import eu.kanade.tachiyomi.R
import exh.metadata.metadata.MangaDexSearchMetadata
import exh.metadata.metadata.base.RaisedSearchMetadata
import kotlinx.coroutines.flow.StateFlow
import tachiyomi.domain.manga.model.MangaCover
@Composable
fun BrowseSourceList(

View File

@ -13,11 +13,11 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.res.stringResource
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.components.AppBarActions
import eu.kanade.presentation.components.DropdownMenu
import eu.kanade.tachiyomi.R
import tachiyomi.domain.library.model.LibraryDisplayMode
@Composable
fun BrowseSourceSimpleToolbar(

View File

@ -13,7 +13,6 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.res.stringResource
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.components.AppBarActions
import eu.kanade.presentation.components.AppBarTitle
@ -25,6 +24,7 @@ import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.ConfigurableSource
import eu.kanade.tachiyomi.source.LocalSource
import exh.source.anyIs
import tachiyomi.domain.library.model.LibraryDisplayMode
@Composable
fun BrowseSourceToolbar(

View File

@ -5,10 +5,10 @@ import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.presentation.browse.InLibraryBadge
import eu.kanade.presentation.components.CommonMangaItemDefaults
import eu.kanade.presentation.components.MangaComfortableGridItem
import tachiyomi.domain.manga.model.MangaCover
@Composable
fun GlobalSearchCard(

View File

@ -62,7 +62,7 @@ private const val GridSelectedCoverAlpha = 0.76f
fun MangaCompactGridItem(
isSelected: Boolean = false,
title: String? = null,
coverData: eu.kanade.domain.manga.model.MangaCover,
coverData: tachiyomi.domain.manga.model.MangaCover,
coverAlpha: Float = 1f,
coverBadgeStart: @Composable (RowScope.() -> Unit)? = null,
coverBadgeEnd: @Composable (RowScope.() -> Unit)? = null,
@ -162,7 +162,7 @@ private fun BoxScope.CoverTextOverlay(
fun MangaComfortableGridItem(
isSelected: Boolean = false,
title: String,
coverData: eu.kanade.domain.manga.model.MangaCover,
coverData: tachiyomi.domain.manga.model.MangaCover,
coverAlpha: Float = 1f,
coverBadgeStart: (@Composable RowScope.() -> Unit)? = null,
coverBadgeEnd: (@Composable RowScope.() -> Unit)? = null,
@ -330,7 +330,7 @@ private fun Modifier.selectedOutline(
fun MangaListItem(
isSelected: Boolean = false,
title: String,
coverData: eu.kanade.domain.manga.model.MangaCover,
coverData: tachiyomi.domain.manga.model.MangaCover,
coverAlpha: Float = 1f,
badge: @Composable (RowScope.() -> Unit),
onLongClick: () -> Unit,

View File

@ -10,7 +10,6 @@ import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import eu.kanade.domain.history.model.HistoryWithRelations
import eu.kanade.presentation.components.AppBarTitle
import eu.kanade.presentation.components.EmptyScreen
import eu.kanade.presentation.components.LoadingScreen
@ -20,6 +19,7 @@ import eu.kanade.presentation.history.components.HistoryContent
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.history.HistoryScreenModel
import eu.kanade.tachiyomi.ui.history.HistoryState
import tachiyomi.domain.history.model.HistoryWithRelations
import java.util.Date
@Composable

View File

@ -5,11 +5,11 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import eu.kanade.domain.history.model.HistoryWithRelations
import eu.kanade.domain.ui.UiPreferences
import eu.kanade.presentation.components.FastScrollLazyColumn
import eu.kanade.presentation.components.RelativeDateHeader
import eu.kanade.presentation.history.HistoryUiModel
import tachiyomi.domain.history.model.HistoryWithRelations
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.text.DateFormat

View File

@ -20,11 +20,11 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import eu.kanade.domain.history.model.HistoryWithRelations
import eu.kanade.presentation.components.MangaCover
import eu.kanade.presentation.util.padding
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.lang.toTimestampString
import tachiyomi.domain.history.model.HistoryWithRelations
import java.text.DecimalFormat
import java.text.DecimalFormatSymbols

View File

@ -7,9 +7,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.util.fastAny
import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.presentation.components.MangaComfortableGridItem
import eu.kanade.tachiyomi.ui.library.LibraryItem
import tachiyomi.domain.manga.model.MangaCover
@Composable
fun LibraryComfortableGrid(

View File

@ -7,9 +7,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.util.fastAny
import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.presentation.components.MangaCompactGridItem
import eu.kanade.tachiyomi.ui.library.LibraryItem
import tachiyomi.domain.manga.model.MangaCover
@Composable
fun LibraryCompactGrid(

View File

@ -16,7 +16,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalLayoutDirection
import eu.kanade.core.prefs.PreferenceMutableState
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.presentation.components.PullRefresh
import eu.kanade.presentation.components.rememberPagerState
@ -24,6 +23,7 @@ import eu.kanade.tachiyomi.ui.library.LibraryItem
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.library.model.LibraryDisplayMode
import kotlin.time.Duration.Companion.seconds
@Composable

View File

@ -9,11 +9,11 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastAny
import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.presentation.components.FastScrollLazyColumn
import eu.kanade.presentation.components.MangaListItem
import eu.kanade.presentation.util.plus
import eu.kanade.tachiyomi.ui.library.LibraryItem
import tachiyomi.domain.manga.model.MangaCover
@Composable
fun LibraryList(

View File

@ -17,7 +17,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.unit.dp
import eu.kanade.core.prefs.PreferenceMutableState
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.presentation.components.EmptyScreen
import eu.kanade.presentation.components.HorizontalPager
@ -25,6 +24,7 @@ import eu.kanade.presentation.components.PagerState
import eu.kanade.presentation.util.plus
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.library.LibraryItem
import tachiyomi.domain.library.model.LibraryDisplayMode
@Composable
fun LibraryPager(

View File

@ -33,7 +33,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import eu.kanade.domain.updates.model.UpdatesWithRelations
import eu.kanade.presentation.components.ChapterDownloadAction
import eu.kanade.presentation.components.ChapterDownloadIndicator
import eu.kanade.presentation.components.ListGroupHeader
@ -45,6 +44,7 @@ import eu.kanade.presentation.util.selectedBackground
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.ui.updates.UpdatesItem
import tachiyomi.domain.updates.model.UpdatesWithRelations
import java.util.Date
import kotlin.time.Duration.Companion.minutes

View File

@ -27,7 +27,6 @@ import eu.kanade.tachiyomi.data.cache.PagePreviewCache
import eu.kanade.tachiyomi.data.download.DownloadCache
import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.data.download.DownloadProvider
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import eu.kanade.tachiyomi.data.saver.ImageSaver
import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.extension.ExtensionManager
@ -56,6 +55,7 @@ import tachiyomi.data.listOfLongsAdapter
import tachiyomi.data.listOfStringsAdapter
import tachiyomi.data.listOfStringsAndAdapter
import tachiyomi.data.updateStrategyAdapter
import tachiyomi.domain.manga.interactor.GetCustomMangaInfo
import uy.kohesive.injekt.api.InjektModule
import uy.kohesive.injekt.api.InjektRegistrar
import uy.kohesive.injekt.api.addSingleton
@ -150,8 +150,6 @@ class AppModule(val app: Application) : InjektModule {
addSingletonFactory { ImageSaver(app) }
// SY -->
addSingletonFactory { CustomMangaManager(app) }
addSingletonFactory { EHentaiUpdateHelper(app) }
addSingletonFactory { PagePreviewCache(app) }
@ -168,7 +166,7 @@ class AppModule(val app: Application) : InjektModule {
get<DownloadManager>()
// SY -->
get<CustomMangaManager>()
get<GetCustomMangaInfo>()
// SY <--
}
}

View File

@ -8,7 +8,6 @@ import eu.kanade.data.exh.mergedMangaReferenceMapper
import eu.kanade.data.manga.mangaMapper
import eu.kanade.domain.backup.service.BackupPreferences
import eu.kanade.domain.category.interactor.GetCategories
import eu.kanade.domain.history.model.HistoryUpdate
import eu.kanade.domain.library.service.LibraryPreferences
import eu.kanade.domain.manga.interactor.GetFavorites
import eu.kanade.domain.manga.interactor.GetFlatMetadataById
@ -44,7 +43,6 @@ import eu.kanade.tachiyomi.data.backup.models.backupTrackMapper
import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.database.models.Track
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.model.copyFrom
import eu.kanade.tachiyomi.source.online.MetadataSource
@ -65,6 +63,10 @@ import tachiyomi.data.Mangas
import tachiyomi.data.listOfStringsAndAdapter
import tachiyomi.data.updateStrategyAdapter
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.history.model.HistoryUpdate
import tachiyomi.domain.manga.interactor.GetCustomMangaInfo
import tachiyomi.domain.manga.interactor.SetCustomMangaInfo
import tachiyomi.domain.manga.model.CustomMangaInfo
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.io.FileOutputStream
@ -85,7 +87,8 @@ class BackupManager(
// SY -->
private val getMergedManga: GetMergedManga = Injekt.get()
private val customMangaManager: CustomMangaManager = Injekt.get()
private val getCustomMangaInfo: GetCustomMangaInfo = Injekt.get()
private val setCustomMangaInfo: SetCustomMangaInfo = Injekt.get()
private val insertFlatMetadata: InsertFlatMetadata = Injekt.get()
private val getFlatMetadataById: GetFlatMetadataById = Injekt.get()
// SY <--
@ -225,7 +228,11 @@ class BackupManager(
*/
private suspend fun backupManga(manga: DomainManga, options: Int): BackupManga {
// Entry for this manga
val mangaObject = BackupManga.copyFrom(manga /* SY --> */, if (options and BACKUP_CUSTOM_INFO_MASK == BACKUP_CUSTOM_INFO) customMangaManager else null /* SY <-- */)
val mangaObject = BackupManga.copyFrom(
manga,
// SY -->
if (options and BACKUP_CUSTOM_INFO_MASK == BACKUP_CUSTOM_INFO) getCustomMangaInfo.get(manga.id) else null, /* SY <-- */
)
// SY -->
if (manga.source == MERGED_SOURCE_ID) {
@ -743,9 +750,9 @@ class BackupManager(
}
}
internal fun restoreEditedInfo(mangaJson: CustomMangaManager.MangaJson?) {
internal fun restoreEditedInfo(mangaJson: CustomMangaInfo?) {
mangaJson ?: return
customMangaManager.saveMangaInfo(mangaJson)
setCustomMangaInfo.set(mangaJson)
}
// SY <--
}

View File

@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.data.backup.models.BackupSource
import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.database.models.Track
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import eu.kanade.tachiyomi.util.system.createFileInCacheDir
import exh.EXHMigrations
import exh.source.MERGED_SOURCE_ID
@ -22,6 +21,7 @@ import kotlinx.coroutines.Job
import okio.buffer
import okio.gzip
import okio.source
import tachiyomi.domain.manga.model.CustomMangaInfo
import java.io.File
import java.text.SimpleDateFormat
import java.util.Date
@ -190,7 +190,7 @@ class BackupRestorer(
// SY -->
mergedMangaReferences: List<BackupMergedMangaReference>,
flatMetadata: BackupFlatMetadata?,
customManga: CustomMangaManager.MangaJson?,
customManga: CustomMangaInfo?,
// SY <--
) {
val fetchedManga = backupManager.restoreNewManga(manga)
@ -210,7 +210,7 @@ class BackupRestorer(
// SY -->
mergedMangaReferences: List<BackupMergedMangaReference>,
flatMetadata: BackupFlatMetadata?,
customManga: CustomMangaManager.MangaJson?,
customManga: CustomMangaInfo?,
// SY <--
) {
backupManager.restoreChapters(backupManga, chapters)
@ -226,7 +226,7 @@ class BackupRestorer(
// SY -->
mergedMangaReferences: List<BackupMergedMangaReference>,
flatMetadata: BackupFlatMetadata?,
customManga: CustomMangaManager.MangaJson?,
customManga: CustomMangaInfo?,
// SY <--
) {
backupManager.restoreCategories(manga, categories, backupCategories)
@ -235,8 +235,7 @@ class BackupRestorer(
// SY -->
backupManager.restoreMergedMangaReferencesForManga(manga.id!!, mergedMangaReferences)
flatMetadata?.let { backupManager.restoreFlatMetadata(manga.id!!, it) }
customManga?.id = manga.id!!
backupManager.restoreEditedInfo(customManga)
backupManager.restoreEditedInfo(customManga?.copy(id = manga.id!!))
// SY <--
}

View File

@ -4,12 +4,12 @@ import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.data.database.models.ChapterImpl
import eu.kanade.tachiyomi.data.database.models.MangaImpl
import eu.kanade.tachiyomi.data.database.models.TrackImpl
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import eu.kanade.tachiyomi.source.model.UpdateStrategy
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
import tachiyomi.data.listOfStringsAndAdapter
import tachiyomi.domain.manga.model.CustomMangaInfo
@Suppress("DEPRECATION")
@Serializable
@ -86,7 +86,7 @@ data class BackupManga(
}
// SY -->
fun getCustomMangaInfo(): CustomMangaManager.MangaJson? {
fun getCustomMangaInfo(): CustomMangaInfo? {
if (customTitle != null ||
customArtist != null ||
customAuthor != null ||
@ -94,7 +94,7 @@ data class BackupManga(
customGenre != null ||
customStatus != 0
) {
return CustomMangaManager.MangaJson(
return CustomMangaInfo(
id = 0L,
title = customTitle,
author = customAuthor,
@ -115,7 +115,7 @@ data class BackupManga(
}
companion object {
fun copyFrom(manga: Manga /* SY --> */, customMangaManager: CustomMangaManager?/* SY <-- */): BackupManga {
fun copyFrom(manga: Manga /* SY --> */, customMangaInfo: CustomMangaInfo?/* SY <-- */): BackupManga {
return BackupManga(
url = manga.url,
// SY -->
@ -137,7 +137,7 @@ data class BackupManga(
// SY -->
filtered_scanlators = manga.filteredScanlators?.let(listOfStringsAndAdapter::encode),
).also { backupManga ->
customMangaManager?.getManga(manga.id)?.let {
customMangaInfo?.let {
backupManga.customTitle = it.title
backupManga.customArtist = it.artist
backupManga.customAuthor = it.author

View File

@ -10,7 +10,6 @@ import coil.fetch.SourceResult
import coil.network.HttpException
import coil.request.Options
import coil.request.Parameters
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher.Companion.USE_CUSTOM_COVER
import eu.kanade.tachiyomi.data.database.models.Manga
@ -28,6 +27,7 @@ import okio.Path.Companion.toOkioPath
import okio.Source
import okio.buffer
import okio.sink
import tachiyomi.domain.manga.model.MangaCover
import uy.kohesive.injekt.injectLazy
import java.io.File
import eu.kanade.domain.manga.model.Manga as DomainManga

View File

@ -2,11 +2,11 @@ package eu.kanade.tachiyomi.data.coil
import coil.key.Keyer
import coil.request.Options
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.domain.manga.model.hasCustomCover
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.database.models.toDomainManga
import tachiyomi.domain.manga.model.MangaCover
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import eu.kanade.domain.manga.model.Manga as DomainManga

View File

@ -1,9 +1,10 @@
package eu.kanade.tachiyomi.data.database.models
import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.model.UpdateStrategy
import tachiyomi.domain.manga.interactor.GetCustomMangaInfo
import tachiyomi.domain.manga.model.CustomMangaInfo
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
@ -17,8 +18,8 @@ open class MangaImpl : Manga {
override lateinit var url: String
// SY -->
private val customManga: CustomMangaManager.CustomMangaInfo?
get() = customMangaManager.getManga(this)
private val customManga: CustomMangaInfo?
get() = getCustomMangaInfo.get(id!!)
override var title: String
get() = if (favorite) {
@ -43,7 +44,7 @@ open class MangaImpl : Manga {
set(value) { ogDesc = value }
override var genre: String?
get() = if (favorite) customManga?.genreString ?: ogGenre else ogGenre
get() = if (favorite) customManga?.genre?.joinToString() ?: ogGenre else ogGenre
set(value) { ogGenre = value }
override var status: Int
@ -126,7 +127,7 @@ open class MangaImpl : Manga {
}
companion object {
private val customMangaManager: CustomMangaManager by injectLazy()
private val getCustomMangaInfo: GetCustomMangaInfo by injectLazy()
}
// SY <--
}

View File

@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.extension
import android.content.Context
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import eu.kanade.domain.source.model.SourceData
import eu.kanade.domain.source.service.SourcePreferences
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
@ -34,6 +33,7 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import logcat.LogPriority
import rx.Observable
import tachiyomi.domain.source.model.SourceData
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.util.Locale

View File

@ -1,8 +1,8 @@
package eu.kanade.tachiyomi.extension.model
import android.graphics.drawable.Drawable
import eu.kanade.domain.source.model.SourceData
import eu.kanade.tachiyomi.source.Source
import tachiyomi.domain.source.model.SourceData
sealed class Extension {

View File

@ -43,7 +43,6 @@ import coil.request.ImageRequest
import coil.size.Precision
import coil.size.Scale
import coil.transform.RoundedCornersTransformation
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.core.security.SecurityPreferences
import eu.kanade.tachiyomi.ui.main.MainActivity
@ -52,6 +51,7 @@ import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.system.dpToPx
import kotlinx.coroutines.MainScope
import tachiyomi.data.DatabaseHandler
import tachiyomi.domain.manga.model.MangaCover
import tachiyomi.view.UpdatesView
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get

View File

@ -1,9 +1,9 @@
package eu.kanade.tachiyomi.source
import android.graphics.drawable.Drawable
import eu.kanade.domain.source.model.SourceData
import eu.kanade.domain.source.service.SourcePreferences
import eu.kanade.tachiyomi.extension.ExtensionManager
import tachiyomi.domain.source.model.SourceData
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get

View File

@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.source
import android.content.Context
import eu.kanade.domain.UnsortedPreferences
import eu.kanade.domain.source.model.SourceData
import eu.kanade.domain.source.repository.SourceDataRepository
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.download.DownloadManager
@ -42,6 +41,7 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import rx.Observable
import tachiyomi.domain.source.model.SourceData
import uy.kohesive.injekt.injectLazy
import java.util.concurrent.ConcurrentHashMap
import kotlin.reflect.KClass

View File

@ -14,13 +14,11 @@ import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.chapter.model.ChapterUpdate
import eu.kanade.domain.history.interactor.GetHistoryByMangaId
import eu.kanade.domain.history.interactor.UpsertHistory
import eu.kanade.domain.history.model.HistoryUpdate
import eu.kanade.domain.manga.interactor.GetManga
import eu.kanade.domain.manga.interactor.GetMergedReferencesById
import eu.kanade.domain.manga.interactor.NetworkToLocalManga
import eu.kanade.domain.manga.interactor.UpdateManga
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.model.hasCustomCover
import eu.kanade.domain.track.interactor.DeleteTrack
import eu.kanade.domain.track.interactor.GetTracks
@ -51,6 +49,8 @@ import kotlinx.coroutines.isActive
import kotlinx.coroutines.sync.Semaphore
import kotlinx.coroutines.sync.withPermit
import logcat.LogPriority
import tachiyomi.domain.history.model.HistoryUpdate
import tachiyomi.domain.manga.model.MangaUpdate
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.util.concurrent.atomic.AtomicInteger

View File

@ -8,7 +8,6 @@ import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.history.interactor.GetHistory
import eu.kanade.domain.history.interactor.GetNextChapters
import eu.kanade.domain.history.interactor.RemoveHistory
import eu.kanade.domain.history.model.HistoryWithRelations
import eu.kanade.presentation.history.HistoryUiModel
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.toDateKey
@ -26,6 +25,7 @@ import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import logcat.LogPriority
import tachiyomi.domain.history.model.HistoryWithRelations
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.util.Date

View File

@ -26,11 +26,8 @@ import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
import eu.kanade.domain.chapter.interactor.SetReadStatus
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.history.interactor.GetNextChapters
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.domain.library.model.LibraryGroup
import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.domain.library.model.LibrarySort
import eu.kanade.domain.library.model.sort
import eu.kanade.domain.library.service.LibraryPreferences
import eu.kanade.domain.manga.interactor.GetIdsOfFavoriteMangaWithMetadata
import eu.kanade.domain.manga.interactor.GetLibraryManga
@ -39,7 +36,6 @@ import eu.kanade.domain.manga.interactor.GetSearchTags
import eu.kanade.domain.manga.interactor.GetSearchTitles
import eu.kanade.domain.manga.interactor.UpdateManga
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.model.isLocal
import eu.kanade.domain.source.service.SourcePreferences
import eu.kanade.domain.track.interactor.GetTracks
@ -51,7 +47,6 @@ import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.download.DownloadCache
import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.data.track.TrackStatus
import eu.kanade.tachiyomi.source.LocalSource
@ -100,6 +95,12 @@ import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.runBlocking
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.library.model.LibraryDisplayMode
import tachiyomi.domain.library.model.LibrarySort
import tachiyomi.domain.library.model.sort
import tachiyomi.domain.manga.interactor.SetCustomMangaInfo
import tachiyomi.domain.manga.model.CustomMangaInfo
import tachiyomi.domain.manga.model.MangaUpdate
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.text.Collator
@ -131,12 +132,12 @@ class LibraryScreenModel(
private val unsortedPreferences: UnsortedPreferences = Injekt.get(),
private val sourcePreferences: SourcePreferences = Injekt.get(),
private val getMergedMangaById: GetMergedMangaById = Injekt.get(),
private val customMangaManager: CustomMangaManager = Injekt.get(),
private val getTracks: GetTracks = Injekt.get(),
private val getIdsOfFavoriteMangaWithMetadata: GetIdsOfFavoriteMangaWithMetadata = Injekt.get(),
private val getSearchTags: GetSearchTags = Injekt.get(),
private val getSearchTitles: GetSearchTitles = Injekt.get(),
private val searchEngine: SearchEngine = Injekt.get(),
private val setCustomMangaInfo: SetCustomMangaInfo = Injekt.get(),
// SY <--
) : StateScreenModel<LibraryScreenModel.State>(State()) {
@ -735,7 +736,7 @@ class LibraryScreenModel(
}
}
if (manga.title == editedTitle) return@fastForEach
val mangaJson = CustomMangaManager.MangaJson(
val mangaInfo = CustomMangaInfo(
id = manga.id,
title = editedTitle.nullIfBlank(),
author = manga.author.takeUnless { it == manga.ogAuthor },
@ -745,7 +746,7 @@ class LibraryScreenModel(
status = manga.status.takeUnless { it == manga.ogStatus }?.toLong(),
)
customMangaManager.saveMangaInfo(mangaJson)
setCustomMangaInfo.set(mangaInfo)
}
clearSelection()
}

View File

@ -8,11 +8,7 @@ import eu.kanade.domain.base.BasePreferences
import eu.kanade.domain.category.interactor.GetCategories
import eu.kanade.domain.category.interactor.SetDisplayModeForCategory
import eu.kanade.domain.category.interactor.SetSortModeForCategory
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.domain.library.model.LibraryGroup
import eu.kanade.domain.library.model.LibrarySort
import eu.kanade.domain.library.model.display
import eu.kanade.domain.library.model.sort
import eu.kanade.domain.library.service.LibraryPreferences
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.track.TrackManager
@ -26,6 +22,10 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.runBlocking
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.library.model.LibraryDisplayMode
import tachiyomi.domain.library.model.LibrarySort
import tachiyomi.domain.library.model.display
import tachiyomi.domain.library.model.sort
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy

View File

@ -31,7 +31,6 @@ import cafe.adriel.voyager.navigator.tab.TabOptions
import eu.kanade.domain.UnsortedPreferences
import eu.kanade.domain.library.model.LibraryGroup
import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.domain.library.model.display
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.isLocal
import eu.kanade.presentation.components.ChangeCategoryDialog
@ -66,6 +65,7 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.library.model.display
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get

View File

@ -41,7 +41,6 @@ import eu.kanade.domain.manga.interactor.SetMangaFilteredScanlators
import eu.kanade.domain.manga.interactor.UpdateManga
import eu.kanade.domain.manga.interactor.UpdateMergedSettings
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.model.MergeMangaSettingsUpdate
import eu.kanade.domain.manga.model.PagePreview
import eu.kanade.domain.manga.model.TriStateFilter
@ -59,7 +58,6 @@ import eu.kanade.tachiyomi.data.download.DownloadCache
import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.data.download.DownloadService
import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import eu.kanade.tachiyomi.data.track.EnhancedTrackService
import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.data.track.TrackService
@ -112,6 +110,9 @@ import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import logcat.LogPriority
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.manga.interactor.SetCustomMangaInfo
import tachiyomi.domain.manga.model.CustomMangaInfo
import tachiyomi.domain.manga.model.MangaUpdate
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
@ -147,6 +148,7 @@ class MangaInfoScreenModel(
private val getFlatMetadata: GetFlatMetadataById = Injekt.get(),
private val getPagePreviews: GetPagePreviews = Injekt.get(),
private val insertTrack: InsertTrack = Injekt.get(),
private val setCustomMangaInfo: SetCustomMangaInfo = Injekt.get(),
// SY <--
private val getDuplicateLibraryManga: GetDuplicateLibraryManga = Injekt.get(),
private val setMangaChapterFlags: SetMangaChapterFlags = Injekt.get(),
@ -189,8 +191,6 @@ class MangaInfoScreenModel(
private val selectedChapterIds: HashSet<Long> = HashSet()
// EXH -->
private val customMangaManager: CustomMangaManager by injectLazy()
private val updateHelper: EHentaiUpdateHelper by injectLazy()
val redirectFlow: MutableSharedFlow<EXHRedirect> = MutableSharedFlow()
@ -468,8 +468,8 @@ class MangaInfoScreenModel(
} else {
null
}
customMangaManager.saveMangaInfo(
CustomMangaManager.MangaJson(
setCustomMangaInfo.set(
CustomMangaInfo(
state.manga.id,
title?.trimOrNull(),
author?.trimOrNull(),

View File

@ -17,7 +17,6 @@ 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.history.interactor.UpsertHistory
import eu.kanade.domain.history.model.HistoryUpdate
import eu.kanade.domain.manga.interactor.GetFlatMetadataById
import eu.kanade.domain.manga.interactor.GetManga
import eu.kanade.domain.manga.interactor.GetMergedMangaById
@ -97,6 +96,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import logcat.LogPriority
import tachiyomi.decoder.ImageDecoder
import tachiyomi.domain.history.model.HistoryUpdate
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.text.DecimalFormat

View File

@ -19,7 +19,6 @@ import eu.kanade.domain.library.service.LibraryPreferences
import eu.kanade.domain.manga.interactor.GetManga
import eu.kanade.domain.ui.UiPreferences
import eu.kanade.domain.updates.interactor.GetUpdates
import eu.kanade.domain.updates.model.UpdatesWithRelations
import eu.kanade.presentation.components.ChapterDownloadAction
import eu.kanade.presentation.updates.UpdatesUiModel
import eu.kanade.tachiyomi.data.download.DownloadCache
@ -47,6 +46,7 @@ import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import logcat.LogPriority
import tachiyomi.domain.updates.model.UpdatesWithRelations
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.util.Calendar

View File

@ -16,7 +16,6 @@ import eu.kanade.domain.manga.interactor.GetManga
import eu.kanade.domain.manga.interactor.GetMangaBySource
import eu.kanade.domain.manga.interactor.InsertMergedReference
import eu.kanade.domain.manga.interactor.UpdateManga
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.source.interactor.InsertFeedSavedSearch
import eu.kanade.domain.source.interactor.InsertSavedSearch
import eu.kanade.domain.source.service.SourcePreferences
@ -66,6 +65,7 @@ import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonPrimitive
import tachiyomi.data.DatabaseHandler
import tachiyomi.data.category.categoryMapper
import tachiyomi.domain.manga.model.MangaUpdate
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy

View File

@ -11,15 +11,15 @@ import eu.kanade.domain.chapter.repository.ChapterRepository
import eu.kanade.domain.history.interactor.GetHistoryByMangaId
import eu.kanade.domain.history.interactor.RemoveHistory
import eu.kanade.domain.history.interactor.UpsertHistory
import eu.kanade.domain.history.model.History
import eu.kanade.domain.history.model.HistoryUpdate
import eu.kanade.domain.manga.interactor.GetManga
import eu.kanade.domain.manga.interactor.UpdateManga
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import tachiyomi.domain.history.model.History
import tachiyomi.domain.history.model.HistoryUpdate
import tachiyomi.domain.manga.model.MangaUpdate
import uy.kohesive.injekt.injectLazy
import java.io.File

View File

@ -1,7 +1,7 @@
package eu.kanade.tachiyomi.network
import android.content.Context
import eu.kanade.tachiyomi.i18n.BuildConfig
import eu.kanade.tachiyomi.core.BuildConfig
import eu.kanade.tachiyomi.network.interceptor.CloudflareInterceptor
import eu.kanade.tachiyomi.network.interceptor.UserAgentInterceptor
import okhttp3.Cache

View File

@ -2,6 +2,7 @@ plugins {
id("com.android.library")
kotlin("android")
id("com.squareup.sqldelight")
kotlin("plugin.serialization")
}
android {

View File

@ -1,23 +1,20 @@
package eu.kanade.tachiyomi.data.library
package tachiyomi.data.manga
import android.content.Context
import eu.kanade.tachiyomi.data.database.models.Manga
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import tachiyomi.domain.manga.model.CustomMangaInfo
import tachiyomi.domain.manga.repository.CustomMangaRepository
import java.io.File
import eu.kanade.domain.manga.model.Manga as DomainManga
class CustomMangaManager(val context: Context) {
class CustomMangaRepositoryImpl(context: Context) : CustomMangaRepository {
private val editJson = File(context.getExternalFilesDir(null), "edits.json")
private val customMangaMap = fetchCustomData()
fun getManga(manga: Manga): CustomMangaInfo? = customMangaMap[manga.id]
fun getManga(manga: DomainManga): CustomMangaInfo? = customMangaMap[manga.id]
fun getManga(mangaId: Long): CustomMangaInfo? = customMangaMap[mangaId]
override fun get(mangaId: Long) = customMangaMap[mangaId]
private fun fetchCustomData(): MutableMap<Long, CustomMangaInfo> {
if (!editJson.exists() || !editJson.isFile) return mutableMapOf()
@ -40,18 +37,18 @@ class CustomMangaManager(val context: Context) {
.toMutableMap()
}
fun saveMangaInfo(manga: MangaJson) {
override fun set(mangaInfo: CustomMangaInfo) {
if (
manga.title == null &&
manga.author == null &&
manga.artist == null &&
manga.description == null &&
manga.genre == null &&
manga.status == null
mangaInfo.title == null &&
mangaInfo.author == null &&
mangaInfo.artist == null &&
mangaInfo.description == null &&
mangaInfo.genre == null &&
mangaInfo.status == null
) {
customMangaMap.remove(manga.id!!)
customMangaMap.remove(mangaInfo.id)
} else {
customMangaMap[manga.id!!] = manga.toManga()
customMangaMap[mangaInfo.id] = mangaInfo
}
saveCustomInfo()
}
@ -91,29 +88,15 @@ class CustomMangaManager(val context: Context) {
)
}
data class CustomMangaInfo(
val id: Long,
val title: String?,
val author: String? = null,
val artist: String? = null,
val description: String? = null,
val genre: List<String>? = null,
val status: Long? = null,
) {
val genreString by lazy {
genre?.joinToString()
}
fun toJson(): MangaJson {
return MangaJson(
id,
title,
author,
artist,
description,
genre,
status,
)
}
fun CustomMangaInfo.toJson(): MangaJson {
return MangaJson(
id,
title,
author,
artist,
description,
genre,
status,
)
}
}

View File

@ -10,10 +10,17 @@ android {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}
}
dependencies {
implementation(platform(kotlinx.coroutines.bom))
implementation(kotlinx.bundles.coroutines)
implementation(project(":source-api"))
// SY -->
implementation(libs.injekt.core)
// SY <--
testImplementation(libs.junit)
}

View File

@ -1,4 +1,4 @@
package eu.kanade.domain.history.model
package tachiyomi.domain.history.model
import java.util.Date

View File

@ -1,4 +1,4 @@
package eu.kanade.domain.history.model
package tachiyomi.domain.history.model
import java.util.Date

View File

@ -1,7 +1,7 @@
package eu.kanade.domain.history.model
package tachiyomi.domain.history.model
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import tachiyomi.domain.manga.interactor.GetCustomMangaInfo
import tachiyomi.domain.manga.model.MangaCover
import uy.kohesive.injekt.injectLazy
import java.util.Date
@ -18,10 +18,10 @@ data class HistoryWithRelations(
val coverData: MangaCover,
) {
// SY -->
val title: String = customMangaManager.getManga(mangaId)?.title ?: ogTitle
val title: String = customMangaManager.get(mangaId)?.title ?: ogTitle
companion object {
private val customMangaManager: CustomMangaManager by injectLazy()
private val customMangaManager: GetCustomMangaInfo by injectLazy()
}
// SY <--
}

View File

@ -1,4 +1,4 @@
package eu.kanade.domain.library.model
package tachiyomi.domain.library.model
interface Flag {
val flag: Long

View File

@ -1,4 +1,4 @@
package eu.kanade.domain.library.model
package tachiyomi.domain.library.model
import tachiyomi.domain.category.model.Category

View File

@ -1,4 +1,4 @@
package eu.kanade.domain.library.model
package tachiyomi.domain.library.model
import tachiyomi.domain.category.model.Category

View File

@ -0,0 +1,10 @@
package tachiyomi.domain.manga.interactor
import tachiyomi.domain.manga.repository.CustomMangaRepository
class GetCustomMangaInfo(
private val customMangaRepository: CustomMangaRepository,
) {
fun get(mangaId: Long) = customMangaRepository.get(mangaId)
}

View File

@ -0,0 +1,11 @@
package tachiyomi.domain.manga.interactor
import tachiyomi.domain.manga.model.CustomMangaInfo
import tachiyomi.domain.manga.repository.CustomMangaRepository
class SetCustomMangaInfo(
private val customMangaRepository: CustomMangaRepository,
) {
fun set(mangaInfo: CustomMangaInfo) = customMangaRepository.set(mangaInfo)
}

View File

@ -0,0 +1,11 @@
package tachiyomi.domain.manga.model
data class CustomMangaInfo(
val id: Long,
val title: String?,
val author: String? = null,
val artist: String? = null,
val description: String? = null,
val genre: List<String>? = null,
val status: Long? = null,
)

View File

@ -0,0 +1,12 @@
package tachiyomi.domain.manga.model
/**
* Contains the required data for MangaCoverFetcher
*/
data class MangaCover(
val mangaId: Long,
val sourceId: Long,
val isMangaFavorite: Boolean,
val url: String?,
val lastModified: Long,
)

View File

@ -1,4 +1,4 @@
package eu.kanade.domain.manga.model
package tachiyomi.domain.manga.model
import eu.kanade.tachiyomi.source.model.UpdateStrategy

View File

@ -0,0 +1,10 @@
package tachiyomi.domain.manga.repository
import tachiyomi.domain.manga.model.CustomMangaInfo
interface CustomMangaRepository {
fun get(mangaId: Long): CustomMangaInfo?
fun set(mangaInfo: CustomMangaInfo)
}

View File

@ -1,4 +1,4 @@
package eu.kanade.domain.source.model
package tachiyomi.domain.source.model
data class SourceData(
val id: Long,

View File

@ -1,7 +1,7 @@
package eu.kanade.domain.updates.model
package tachiyomi.domain.updates.model
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import tachiyomi.domain.manga.interactor.GetCustomMangaInfo
import tachiyomi.domain.manga.model.MangaCover
import uy.kohesive.injekt.injectLazy
data class UpdatesWithRelations(
@ -20,10 +20,10 @@ data class UpdatesWithRelations(
val coverData: MangaCover,
) {
// SY -->
val mangaTitle: String = customMangaManager.getManga(mangaId)?.title ?: ogMangaTitle
val mangaTitle: String = getCustomMangaInfo.get(mangaId)?.title ?: ogMangaTitle
companion object {
private val customMangaManager: CustomMangaManager by injectLazy()
private val getCustomMangaInfo: GetCustomMangaInfo by injectLazy()
}
// SY <--
}

View File

@ -1,8 +1,5 @@
package eu.kanade.tachiyomi.util.chapter
package tachiyomi.domain.library.model
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.domain.library.model.LibrarySort
import eu.kanade.domain.library.model.plus
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNotEquals
import org.junit.jupiter.api.Test

View File

@ -5,7 +5,7 @@ plugins {
}
android {
namespace = "eu.kanade.tachiyomi.i18n"
namespace = "tachiyomi.i18n"
lint {
disable.addAll(listOf("MissingTranslation", "ExtraTranslation"))