Update linter

(cherry picked from commit f0eb42e72d1e267049777a303bd97d96517a9a1f)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupRestore.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/backup/full/models/Backup.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/backup/full/models/BackupManga.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/backup/legacy/models/Backup.kt
#	app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt
#	app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/base/changehandler/OneWayFadeChangeHandler.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SearchController.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SearchPresenter.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/SelectionHeader.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourceItem.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcePresenter.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceFilterSheet.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/GlobalSearchController.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListHolder.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPageSheet.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/model/ReaderPage.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt
#	app/src/main/java/eu/kanade/tachiyomi/util/view/ViewExtensions.kt
This commit is contained in:
arkon 2022-04-08 15:30:30 -04:00 committed by Jobobby04
parent e0c1e56588
commit e98567a86b
503 changed files with 1589 additions and 1684 deletions

5
.editorconfig Normal file
View File

@ -0,0 +1,5 @@
[*.{kt,kts}]
indent_size=4
insert_final_newline=true
ij_kotlin_allow_trailing_comma=true
ij_kotlin_allow_trailing_comma_on_call_site=true

View File

@ -122,7 +122,7 @@ open class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory {
this@App, this@App,
0, 0,
Intent(ACTION_DISABLE_INCOGNITO_MODE), Intent(ACTION_DISABLE_INCOGNITO_MODE),
PendingIntent.FLAG_ONE_SHOT PendingIntent.FLAG_ONE_SHOT,
) )
setContentIntent(pendingIntent) setContentIntent(pendingIntent)
} }
@ -141,7 +141,7 @@ open class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory {
PreferenceValues.ThemeMode.light -> AppCompatDelegate.MODE_NIGHT_NO PreferenceValues.ThemeMode.light -> AppCompatDelegate.MODE_NIGHT_NO
PreferenceValues.ThemeMode.dark -> AppCompatDelegate.MODE_NIGHT_YES PreferenceValues.ThemeMode.dark -> AppCompatDelegate.MODE_NIGHT_YES
PreferenceValues.ThemeMode.system -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM PreferenceValues.ThemeMode.system -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
} },
) )
}.launchIn(ProcessLifecycleOwner.get().lifecycleScope) }.launchIn(ProcessLifecycleOwner.get().lifecycleScope)
@ -230,7 +230,7 @@ open class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory {
val logFolder = File( val logFolder = File(
Environment.getExternalStorageDirectory().absolutePath + File.separator + Environment.getExternalStorageDirectory().absolutePath + File.separator +
getString(R.string.app_name), getString(R.string.app_name),
"logs" "logs",
) )
val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault()) val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault())
@ -241,7 +241,7 @@ open class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory {
override fun generateFileName(logLevel: Int, timestamp: Long): String { override fun generateFileName(logLevel: Int, timestamp: Long): String {
return super.generateFileName( return super.generateFileName(
logLevel, logLevel,
timestamp timestamp,
) + "-${BuildConfig.BUILD_TYPE}.log" ) + "-${BuildConfig.BUILD_TYPE}.log"
} }
} }
@ -259,7 +259,7 @@ open class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory {
XLog.init( XLog.init(
logConfig, logConfig,
*printers.toTypedArray() *printers.toTypedArray(),
) )
xLogD("Application booting...") xLogD("Application booting...")
@ -274,7 +274,7 @@ open class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory {
Device name: ${Build.DEVICE} Device name: ${Build.DEVICE}
Device model: ${Build.MODEL} Device model: ${Build.MODEL}
Device product name: ${Build.PRODUCT} Device product name: ${Build.PRODUCT}
""".trimIndent() """.trimIndent(),
) )
} }

View File

@ -122,7 +122,7 @@ abstract class AbstractBackupRestore<T : AbstractBackupManager>(protected val co
internal fun showRestoreProgress( internal fun showRestoreProgress(
progress: Int, progress: Int,
amount: Int, amount: Int,
title: String title: String,
) { ) {
notifier.showRestoreProgress(title, progress, amount) notifier.showRestoreProgress(title, progress, amount)
} }

View File

@ -63,7 +63,7 @@ class BackupCreatorJob(private val context: Context, workerParams: WorkerParamet
interval.toLong(), interval.toLong(),
TimeUnit.HOURS, TimeUnit.HOURS,
10, 10,
TimeUnit.MINUTES TimeUnit.MINUTES,
) )
.addTag(TAG_AUTO) .addTag(TAG_AUTO)
.setInputData(workDataOf(IS_AUTO_BACKUP_KEY to true)) .setInputData(workDataOf(IS_AUTO_BACKUP_KEY to true))
@ -79,7 +79,7 @@ class BackupCreatorJob(private val context: Context, workerParams: WorkerParamet
val inputData = workDataOf( val inputData = workDataOf(
IS_AUTO_BACKUP_KEY to false, IS_AUTO_BACKUP_KEY to false,
LOCATION_URI_KEY to uri.toString(), LOCATION_URI_KEY to uri.toString(),
BACKUP_FLAGS_KEY to flags BACKUP_FLAGS_KEY to flags,
) )
val request = OneTimeWorkRequestBuilder<BackupCreatorJob>() val request = OneTimeWorkRequestBuilder<BackupCreatorJob>()
.addTag(TAG_MANUAL) .addTag(TAG_MANUAL)

View File

@ -73,7 +73,7 @@ class BackupNotifier(private val context: Context) {
addAction( addAction(
R.drawable.ic_share_24dp, R.drawable.ic_share_24dp,
context.getString(R.string.action_share), context.getString(R.string.action_share),
NotificationReceiver.shareBackupPendingBroadcast(context, unifile.uri, Notifications.ID_BACKUP_COMPLETE) NotificationReceiver.shareBackupPendingBroadcast(context, unifile.uri, Notifications.ID_BACKUP_COMPLETE),
) )
show(Notifications.ID_BACKUP_COMPLETE) show(Notifications.ID_BACKUP_COMPLETE)
@ -97,7 +97,7 @@ class BackupNotifier(private val context: Context) {
addAction( addAction(
R.drawable.ic_close_24dp, R.drawable.ic_close_24dp,
context.getString(R.string.action_stop), context.getString(R.string.action_stop),
NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE_PROGRESS) NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE_PROGRESS),
) )
} }
@ -124,8 +124,8 @@ class BackupNotifier(private val context: Context) {
R.string.restore_duration, R.string.restore_duration,
TimeUnit.MILLISECONDS.toMinutes(time), TimeUnit.MILLISECONDS.toMinutes(time),
TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MINUTES.toSeconds( TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MINUTES.toSeconds(
TimeUnit.MILLISECONDS.toMinutes(time) TimeUnit.MILLISECONDS.toMinutes(time),
) ),
) )
with(completeNotificationBuilder) { with(completeNotificationBuilder) {

View File

@ -70,14 +70,14 @@ class FullBackupManager(context: Context) : AbstractBackupManager(context) {
getReadManga() getReadManga()
} else { } else {
emptyList() emptyList()
} + getMergedManga() /* SY <-- */ } + getMergedManga() // SY <--
backup = Backup( backup = Backup(
backupManga(databaseManga, flags), backupManga(databaseManga, flags),
backupCategories(), backupCategories(),
emptyList(), emptyList(),
backupExtensionInfo(databaseManga), backupExtensionInfo(databaseManga),
backupSavedSearches() backupSavedSearches(),
) )
} }
@ -167,7 +167,7 @@ class FullBackupManager(context: Context) : AbstractBackupManager(context) {
it.name, it.name,
it.query.orEmpty(), it.query.orEmpty(),
it.filtersJson ?: "[]", it.filtersJson ?: "[]",
it.source it.source,
) )
} }
} }
@ -439,7 +439,7 @@ class FullBackupManager(context: Context) : AbstractBackupManager(context) {
it.name, it.name,
it.query.nullIfBlank(), it.query.nullIfBlank(),
filtersJson = it.filterList.nullIfBlank() filtersJson = it.filterList.nullIfBlank()
?.takeUnless { it == "[]" } ?.takeUnless { it == "[]" },
) )
}.ifEmpty { null } }.ifEmpty { null }

View File

@ -11,5 +11,5 @@ data class Backup(
@ProtoNumber(100) var backupBrokenSources: List<BrokenBackupSource> = emptyList(), @ProtoNumber(100) var backupBrokenSources: List<BrokenBackupSource> = emptyList(),
@ProtoNumber(101) var backupSources: List<BackupSource> = emptyList(), @ProtoNumber(101) var backupSources: List<BackupSource> = emptyList(),
// SY specific values // SY specific values
@ProtoNumber(600) var backupSavedSearches: List<BackupSavedSearch> = emptyList() @ProtoNumber(600) var backupSavedSearches: List<BackupSavedSearch> = emptyList(),
) )

View File

@ -13,7 +13,7 @@ class BackupCategory(
// Bump by 100 to specify this is a 0.x value // Bump by 100 to specify this is a 0.x value
@ProtoNumber(100) var flags: Int = 0, @ProtoNumber(100) var flags: Int = 0,
// SY specific values // SY specific values
@ProtoNumber(600) var mangaOrder: List<Long> = emptyList() @ProtoNumber(600) var mangaOrder: List<Long> = emptyList(),
) { ) {
fun getCategoryImpl(): CategoryImpl { fun getCategoryImpl(): CategoryImpl {
return CategoryImpl().apply { return CategoryImpl().apply {
@ -30,7 +30,7 @@ class BackupCategory(
name = category.name, name = category.name,
order = category.order, order = category.order,
flags = category.flags, flags = category.flags,
mangaOrder = category.mangaOrder mangaOrder = category.mangaOrder,
) )
} }
} }

View File

@ -49,7 +49,7 @@ data class BackupChapter(
lastPageRead = chapter.last_page_read, lastPageRead = chapter.last_page_read,
dateFetch = chapter.date_fetch, dateFetch = chapter.date_fetch,
dateUpload = chapter.date_upload, dateUpload = chapter.date_upload,
sourceOrder = chapter.source_order sourceOrder = chapter.source_order,
) )
} }
} }

View File

@ -11,13 +11,13 @@ import kotlinx.serialization.protobuf.ProtoNumber
data class BackupFlatMetadata( data class BackupFlatMetadata(
@ProtoNumber(1) var searchMetadata: BackupSearchMetadata, @ProtoNumber(1) var searchMetadata: BackupSearchMetadata,
@ProtoNumber(2) var searchTags: List<BackupSearchTag> = emptyList(), @ProtoNumber(2) var searchTags: List<BackupSearchTag> = emptyList(),
@ProtoNumber(3) var searchTitles: List<BackupSearchTitle> = emptyList() @ProtoNumber(3) var searchTitles: List<BackupSearchTitle> = emptyList(),
) { ) {
fun getFlatMetadata(mangaId: Long): FlatMetadata { fun getFlatMetadata(mangaId: Long): FlatMetadata {
return FlatMetadata( return FlatMetadata(
metadata = searchMetadata.getSearchMetadata(mangaId), metadata = searchMetadata.getSearchMetadata(mangaId),
tags = searchTags.map { it.getSearchTag(mangaId) }, tags = searchTags.map { it.getSearchTag(mangaId) },
titles = searchTitles.map { it.getSearchTitle(mangaId) } titles = searchTitles.map { it.getSearchTitle(mangaId) },
) )
} }
@ -26,7 +26,7 @@ data class BackupFlatMetadata(
return BackupFlatMetadata( return BackupFlatMetadata(
searchMetadata = BackupSearchMetadata.copyFrom(flatMetadata.metadata), searchMetadata = BackupSearchMetadata.copyFrom(flatMetadata.metadata),
searchTags = flatMetadata.tags.map { BackupSearchTag.copyFrom(it) }, searchTags = flatMetadata.tags.map { BackupSearchTag.copyFrom(it) },
searchTitles = flatMetadata.titles.map { BackupSearchTitle.copyFrom(it) } searchTitles = flatMetadata.titles.map { BackupSearchTitle.copyFrom(it) },
) )
} }
} }

View File

@ -6,11 +6,11 @@ import kotlinx.serialization.protobuf.ProtoNumber
@Serializable @Serializable
data class BrokenBackupHistory( data class BrokenBackupHistory(
@ProtoNumber(0) var url: String, @ProtoNumber(0) var url: String,
@ProtoNumber(1) var lastRead: Long @ProtoNumber(1) var lastRead: Long,
) )
@Serializable @Serializable
data class BackupHistory( data class BackupHistory(
@ProtoNumber(1) var url: String, @ProtoNumber(1) var url: String,
@ProtoNumber(2) var lastRead: Long @ProtoNumber(2) var lastRead: Long,
) )

View File

@ -95,7 +95,7 @@ data class BackupManga(
artist = customArtist, artist = customArtist,
description = customDescription, description = customDescription,
genre = customGenre, genre = customGenre,
status = customStatus.takeUnless { it == 0 } status = customStatus.takeUnless { it == 0 },
) )
} }
return null return null
@ -127,7 +127,7 @@ data class BackupManga(
viewer = manga.readingModeType, viewer = manga.readingModeType,
viewer_flags = manga.viewer_flags, viewer_flags = manga.viewer_flags,
chapterFlags = manga.chapter_flags, chapterFlags = manga.chapter_flags,
filtered_scanlators = manga.filtered_scanlators filtered_scanlators = manga.filtered_scanlators,
// SY --> // SY -->
).also { backupManga -> ).also { backupManga ->
customMangaManager?.getManga(manga)?.let { customMangaManager?.getManga(manga)?.let {

View File

@ -16,7 +16,7 @@ data class BackupMergedMangaReference(
@ProtoNumber(5) var downloadChapters: Boolean, @ProtoNumber(5) var downloadChapters: Boolean,
@ProtoNumber(6) var mergeUrl: String, @ProtoNumber(6) var mergeUrl: String,
@ProtoNumber(7) var mangaUrl: String, @ProtoNumber(7) var mangaUrl: String,
@ProtoNumber(8) var mangaSourceId: Long @ProtoNumber(8) var mangaSourceId: Long,
) { ) {
fun getMergedMangaReference(): MergedMangaReference { fun getMergedMangaReference(): MergedMangaReference {
return MergedMangaReference( return MergedMangaReference(
@ -30,7 +30,7 @@ data class BackupMergedMangaReference(
mangaSourceId = mangaSourceId, mangaSourceId = mangaSourceId,
mergeId = null, mergeId = null,
mangaId = null, mangaId = null,
id = null id = null,
) )
} }
@ -44,7 +44,7 @@ data class BackupMergedMangaReference(
downloadChapters = mergedMangaReference.downloadChapters, downloadChapters = mergedMangaReference.downloadChapters,
mergeUrl = mergedMangaReference.mergeUrl, mergeUrl = mergedMangaReference.mergeUrl,
mangaUrl = mergedMangaReference.mangaUrl, mangaUrl = mergedMangaReference.mangaUrl,
mangaSourceId = mergedMangaReference.mangaSourceId mangaSourceId = mergedMangaReference.mangaSourceId,
) )
} }
} }

View File

@ -11,5 +11,5 @@ data class BackupSavedSearch(
@ProtoNumber(1) val name: String, @ProtoNumber(1) val name: String,
@ProtoNumber(2) val query: String = "", @ProtoNumber(2) val query: String = "",
@ProtoNumber(3) val filterList: String = "", @ProtoNumber(3) val filterList: String = "",
@ProtoNumber(4) val source: Long = 0 @ProtoNumber(4) val source: Long = 0,
) )

View File

@ -7,19 +7,19 @@ import kotlinx.serialization.protobuf.ProtoNumber
@Serializable @Serializable
data class BrokenBackupSource( data class BrokenBackupSource(
@ProtoNumber(0) var name: String = "", @ProtoNumber(0) var name: String = "",
@ProtoNumber(1) var sourceId: Long @ProtoNumber(1) var sourceId: Long,
) )
@Serializable @Serializable
data class BackupSource( data class BackupSource(
@ProtoNumber(1) var name: String = "", @ProtoNumber(1) var name: String = "",
@ProtoNumber(2) var sourceId: Long @ProtoNumber(2) var sourceId: Long,
) { ) {
companion object { companion object {
fun copyFrom(source: Source): BackupSource { fun copyFrom(source: Source): BackupSource {
return BackupSource( return BackupSource(
name = source.name, name = source.name,
sourceId = source.id sourceId = source.id,
) )
} }
} }

View File

@ -56,7 +56,7 @@ data class BackupTracking(
status = track.status, status = track.status,
startedReadingDate = track.started_reading_date, startedReadingDate = track.started_reading_date,
finishedReadingDate = track.finished_reading_date, finishedReadingDate = track.finished_reading_date,
trackingUrl = track.tracking_url trackingUrl = track.tracking_url,
) )
} }
} }

View File

@ -9,7 +9,7 @@ data class BackupSearchMetadata(
@ProtoNumber(1) var uploader: String? = null, @ProtoNumber(1) var uploader: String? = null,
@ProtoNumber(2) var extra: String, @ProtoNumber(2) var extra: String,
@ProtoNumber(3) var indexedExtra: String? = null, @ProtoNumber(3) var indexedExtra: String? = null,
@ProtoNumber(4) var extraVersion: Int @ProtoNumber(4) var extraVersion: Int,
) { ) {
fun getSearchMetadata(mangaId: Long): SearchMetadata { fun getSearchMetadata(mangaId: Long): SearchMetadata {
return SearchMetadata( return SearchMetadata(
@ -17,7 +17,7 @@ data class BackupSearchMetadata(
uploader = uploader, uploader = uploader,
extra = extra, extra = extra,
indexedExtra = indexedExtra, indexedExtra = indexedExtra,
extraVersion = extraVersion extraVersion = extraVersion,
) )
} }
@ -27,7 +27,7 @@ data class BackupSearchMetadata(
uploader = searchMetadata.uploader, uploader = searchMetadata.uploader,
extra = searchMetadata.extra, extra = searchMetadata.extra,
indexedExtra = searchMetadata.indexedExtra, indexedExtra = searchMetadata.indexedExtra,
extraVersion = searchMetadata.extraVersion extraVersion = searchMetadata.extraVersion,
) )
} }
} }

View File

@ -8,7 +8,7 @@ import kotlinx.serialization.protobuf.ProtoNumber
data class BackupSearchTag( data class BackupSearchTag(
@ProtoNumber(1) var namespace: String? = null, @ProtoNumber(1) var namespace: String? = null,
@ProtoNumber(2) var name: String, @ProtoNumber(2) var name: String,
@ProtoNumber(3) var type: Int @ProtoNumber(3) var type: Int,
) { ) {
fun getSearchTag(mangaId: Long): SearchTag { fun getSearchTag(mangaId: Long): SearchTag {
return SearchTag( return SearchTag(
@ -16,7 +16,7 @@ data class BackupSearchTag(
mangaId = mangaId, mangaId = mangaId,
namespace = namespace, namespace = namespace,
name = name, name = name,
type = type type = type,
) )
} }
@ -25,7 +25,7 @@ data class BackupSearchTag(
return BackupSearchTag( return BackupSearchTag(
namespace = searchTag.namespace, namespace = searchTag.namespace,
name = searchTag.name, name = searchTag.name,
type = searchTag.type type = searchTag.type,
) )
} }
} }

View File

@ -7,14 +7,14 @@ import kotlinx.serialization.protobuf.ProtoNumber
@Serializable @Serializable
data class BackupSearchTitle( data class BackupSearchTitle(
@ProtoNumber(1) var title: String, @ProtoNumber(1) var title: String,
@ProtoNumber(2) var type: Int @ProtoNumber(2) var type: Int,
) { ) {
fun getSearchTitle(mangaId: Long): SearchTitle { fun getSearchTitle(mangaId: Long): SearchTitle {
return SearchTitle( return SearchTitle(
id = null, id = null,
mangaId = mangaId, mangaId = mangaId,
title = title, title = title,
type = type type = type,
) )
} }
@ -22,7 +22,7 @@ data class BackupSearchTitle(
fun copyFrom(searchTitle: SearchTitle): BackupSearchTitle { fun copyFrom(searchTitle: SearchTitle): BackupSearchTitle {
return BackupSearchTitle( return BackupSearchTitle(
title = searchTitle.title, title = searchTitle.title,
type = searchTitle.type type = searchTitle.type,
) )
} }
} }

View File

@ -302,7 +302,7 @@ class LegacyBackupManager(context: Context, version: Int = CURRENT_VERSION) : Ab
source = it.substringBefore(':').toLongOrNull() ?: return@mapNotNull null, source = it.substringBefore(':').toLongOrNull() ?: return@mapNotNull null,
content["name"]!!.jsonPrimitive.content, content["name"]!!.jsonPrimitive.content,
content["query"]!!.jsonPrimitive.contentOrNull?.nullIfBlank(), content["query"]!!.jsonPrimitive.contentOrNull?.nullIfBlank(),
Json.encodeToString(content["filters"]!!.jsonArray) Json.encodeToString(content["filters"]!!.jsonArray),
) )
}.getOrNull() }.getOrNull()
}.filter { backupSavedSearch -> }.filter { backupSavedSearch ->

View File

@ -34,7 +34,7 @@ class LegacyBackupRestore(context: Context, notifier: BackupNotifier) : Abstract
// Read the json and create a Json Object, // Read the json and create a Json Object,
// cannot use the backupManager json deserializer one because its not initialized yet // cannot use the backupManager json deserializer one because its not initialized yet
val backupObject = Json.decodeFromStream<JsonObject>( val backupObject = Json.decodeFromStream<JsonObject>(
context.contentResolver.openInputStream(uri)!! context.contentResolver.openInputStream(uri)!!,
) )
// Get parser version // Get parser version
@ -143,7 +143,7 @@ class LegacyBackupRestore(context: Context, notifier: BackupNotifier) : Abstract
chapters: List<Chapter>, chapters: List<Chapter>,
categories: List<String>, categories: List<String>,
history: List<DHistory>, history: List<DHistory>,
tracks: List<Track> tracks: List<Track>,
) { ) {
val dbManga = backupManager.getMangaFromDatabase(manga) val dbManga = backupManager.getMangaFromDatabase(manga)
@ -173,7 +173,7 @@ class LegacyBackupRestore(context: Context, notifier: BackupNotifier) : Abstract
chapters: List<Chapter>, chapters: List<Chapter>,
categories: List<String>, categories: List<String>,
history: List<DHistory>, history: List<DHistory>,
tracks: List<Track> tracks: List<Track>,
) { ) {
try { try {
val fetchedManga = backupManager.fetchManga(source, manga) val fetchedManga = backupManager.fetchManga(source, manga)
@ -195,7 +195,7 @@ class LegacyBackupRestore(context: Context, notifier: BackupNotifier) : Abstract
chapters: List<Chapter>, chapters: List<Chapter>,
categories: List<String>, categories: List<String>,
history: List<DHistory>, history: List<DHistory>,
tracks: List<Track> tracks: List<Track>,
) { ) {
if (!backupManager.restoreChaptersForManga(backupManga, chapters)) { if (!backupManager.restoreChaptersForManga(backupManga, chapters)) {
updateChapters(source, backupManga, chapters) updateChapters(source, backupManga, chapters)

View File

@ -21,7 +21,7 @@ class LegacyBackupRestoreValidator : AbstractBackupRestoreValidator() {
val backup = try { val backup = try {
backupManager.parser.decodeFromStream<Backup>( backupManager.parser.decodeFromStream<Backup>(
context.contentResolver.openInputStream(uri)!! context.contentResolver.openInputStream(uri)!!,
) )
} catch (e: Exception) { } catch (e: Exception) {
throw ValidatorParseException(e) throw ValidatorParseException(e)

View File

@ -21,7 +21,7 @@ data class Backup(
// SY Specific values // SY Specific values
@SerialName("mergedmangareferences") @SerialName("mergedmangareferences")
var mergedMangaReferences: List<@Contextual MergedMangaReference>? = null, var mergedMangaReferences: List<@Contextual MergedMangaReference>? = null,
var savedSearches: String? = null var savedSearches: String? = null,
) { ) {
companion object { companion object {
const val CURRENT_VERSION = 2 const val CURRENT_VERSION = 2
@ -39,5 +39,5 @@ data class MangaObject(
var chapters: List<@Contextual Chapter>? = null, var chapters: List<@Contextual Chapter>? = null,
var categories: List<String>? = null, var categories: List<String>? = null,
var track: List<@Contextual Track>? = null, var track: List<@Contextual Track>? = null,
var history: List<@Contextual DHistory>? = null var history: List<@Contextual DHistory>? = null,
) )

View File

@ -27,7 +27,7 @@ open class CategoryBaseSerializer<T : Category> : KSerializer<T> {
buildJsonArray { buildJsonArray {
add(value.name) add(value.name)
add(value.order) add(value.order)
} },
) )
} }

View File

@ -35,7 +35,7 @@ open class ChapterBaseSerializer<T : Chapter> : KSerializer<T> {
if (value.last_page_read != 0) { if (value.last_page_read != 0) {
put(LAST_READ, value.last_page_read) put(LAST_READ, value.last_page_read)
} }
} },
) )
} }

View File

@ -26,7 +26,7 @@ object HistoryTypeSerializer : KSerializer<DHistory> {
buildJsonArray { buildJsonArray {
add(value.url) add(value.url)
add(value.lastRead) add(value.lastRead)
} },
) )
} }
@ -35,7 +35,7 @@ object HistoryTypeSerializer : KSerializer<DHistory> {
val array = decoder.decodeJsonElement().jsonArray val array = decoder.decodeJsonElement().jsonArray
return DHistory( return DHistory(
url = array[0].jsonPrimitive.content, url = array[0].jsonPrimitive.content,
lastRead = array[1].jsonPrimitive.long lastRead = array[1].jsonPrimitive.long,
) )
} }
} }

View File

@ -31,7 +31,7 @@ open class MangaBaseSerializer<T : Manga> : KSerializer<T> {
add(value.source) add(value.source)
add(value.viewer_flags) add(value.viewer_flags)
add(value.chapter_flags) add(value.chapter_flags)
} },
) )
} }

View File

@ -34,7 +34,7 @@ object MergedMangaTypeSerializer : KSerializer<MergedMangaReference> {
add(value.getChapterUpdates) add(value.getChapterUpdates)
add(value.isInfoManga) add(value.isInfoManga)
add(value.downloadChapters) add(value.downloadChapters)
} },
) )
} }
@ -52,7 +52,7 @@ object MergedMangaTypeSerializer : KSerializer<MergedMangaReference> {
isInfoManga = array[6].jsonPrimitive.boolean, isInfoManga = array[6].jsonPrimitive.boolean,
downloadChapters = array[7].jsonPrimitive.boolean, downloadChapters = array[7].jsonPrimitive.boolean,
mangaId = null, mangaId = null,
mergeId = null mergeId = null,
) )
} }
} }

View File

@ -33,7 +33,7 @@ open class TrackBaseSerializer<T : Track> : KSerializer<T> {
put(LIBRARY, value.library_id) put(LIBRARY, value.library_id)
put(LAST_READ, value.last_chapter_read) put(LAST_READ, value.last_chapter_read)
put(TRACKING_URL, value.tracking_url) put(TRACKING_URL, value.tracking_url)
} },
) )
} }

View File

@ -93,7 +93,7 @@ class ChapterCache(private val context: Context) {
File(context.cacheDir, PARAMETER_CACHE_DIRECTORY), File(context.cacheDir, PARAMETER_CACHE_DIRECTORY),
PARAMETER_APP_VERSION, PARAMETER_APP_VERSION,
PARAMETER_VALUE_COUNT, PARAMETER_VALUE_COUNT,
cacheSize * 1024 * 1024 cacheSize * 1024 * 1024,
) )
} }
// <-- EH // <-- EH

View File

@ -47,7 +47,7 @@ class MangaCoverFetcher(
private val options: Options, private val options: Options,
private val coverCache: CoverCache, private val coverCache: CoverCache,
private val callFactoryLazy: Lazy<Call.Factory>, private val callFactoryLazy: Lazy<Call.Factory>,
private val diskCacheLazy: Lazy<DiskCache> private val diskCacheLazy: Lazy<DiskCache>,
) : Fetcher { ) : Fetcher {
// For non-custom cover // For non-custom cover
@ -75,7 +75,7 @@ class MangaCoverFetcher(
return SourceResult( return SourceResult(
source = ImageSource(file = file.toOkioPath(), diskCacheKey = diskCacheKey), source = ImageSource(file = file.toOkioPath(), diskCacheKey = diskCacheKey),
mimeType = "image/*", mimeType = "image/*",
dataSource = DataSource.DISK dataSource = DataSource.DISK,
) )
} }
@ -104,7 +104,7 @@ class MangaCoverFetcher(
return SourceResult( return SourceResult(
source = snapshot.toImageSource(), source = snapshot.toImageSource(),
mimeType = "image/*", mimeType = "image/*",
dataSource = DataSource.DISK dataSource = DataSource.DISK,
) )
} }
@ -124,7 +124,7 @@ class MangaCoverFetcher(
return SourceResult( return SourceResult(
source = snapshot.toImageSource(), source = snapshot.toImageSource(),
mimeType = "image/*", mimeType = "image/*",
dataSource = DataSource.NETWORK dataSource = DataSource.NETWORK,
) )
} }
@ -132,7 +132,7 @@ class MangaCoverFetcher(
return SourceResult( return SourceResult(
source = ImageSource(source = responseBody.source(), context = options.context), source = ImageSource(source = responseBody.source(), context = options.context),
mimeType = "image/*", mimeType = "image/*",
dataSource = if (response.cacheResponse != null) DataSource.DISK else DataSource.NETWORK dataSource = if (response.cacheResponse != null) DataSource.DISK else DataSource.NETWORK,
) )
} catch (e: Exception) { } catch (e: Exception) {
responseBody.closeQuietly() responseBody.closeQuietly()
@ -273,7 +273,7 @@ class MangaCoverFetcher(
class Factory( class Factory(
private val callFactoryLazy: Lazy<Call.Factory>, private val callFactoryLazy: Lazy<Call.Factory>,
private val diskCacheLazy: Lazy<DiskCache> private val diskCacheLazy: Lazy<DiskCache>,
) : Fetcher.Factory<Manga> { ) : Fetcher.Factory<Manga> {
private val coverCache: CoverCache by injectLazy() private val coverCache: CoverCache by injectLazy()

View File

@ -32,7 +32,7 @@ class TachiyomiImageDecoder(private val resources: ImageSource, private val opti
return DecodeResult( return DecodeResult(
drawable = bitmap.toDrawable(options.context.resources), drawable = bitmap.toDrawable(options.context.resources),
isSampled = false isSampled = false,
) )
} }

View File

@ -54,7 +54,8 @@ open class DatabaseHelper(context: Context) :
CategoryQueries, CategoryQueries,
MangaCategoryQueries, MangaCategoryQueries,
HistoryQueries HistoryQueries
/* SY --> */, /* SY --> */
,
SearchMetadataQueries, SearchMetadataQueries,
SearchTagQueries, SearchTagQueries,
SearchTitleQueries, SearchTitleQueries,
@ -62,7 +63,8 @@ open class DatabaseHelper(context: Context) :
FavoriteEntryQueries, FavoriteEntryQueries,
SavedSearchQueries, SavedSearchQueries,
FeedSavedSearchQueries FeedSavedSearchQueries
/* SY <-- */ { /* SY <-- */
{
private val configuration = SupportSQLiteOpenHelper.Configuration.builder(context) private val configuration = SupportSQLiteOpenHelper.Configuration.builder(context)
.name(DbOpenCallback.DATABASE_NAME) .name(DbOpenCallback.DATABASE_NAME)

View File

@ -27,7 +27,7 @@ class DbOpenCallback : SupportSQLiteOpenHelper.Callback(DATABASE_VERSION) {
/** /**
* Version of the database. * Version of the database.
*/ */
const val DATABASE_VERSION = /* SY --> */ 13 /* SY <-- */ const val DATABASE_VERSION = /* SY --> */ 13 // SY <--
} }
override fun onCreate(db: SupportSQLiteDatabase) = with(db) { override fun onCreate(db: SupportSQLiteDatabase) = with(db) {

View File

@ -21,7 +21,7 @@ import eu.kanade.tachiyomi.data.database.tables.CategoryTable.TABLE
class CategoryTypeMapping : SQLiteTypeMapping<Category>( class CategoryTypeMapping : SQLiteTypeMapping<Category>(
CategoryPutResolver(), CategoryPutResolver(),
CategoryGetResolver(), CategoryGetResolver(),
CategoryDeleteResolver() CategoryDeleteResolver(),
) )
class CategoryPutResolver : DefaultPutResolver<Category>() { class CategoryPutResolver : DefaultPutResolver<Category>() {
@ -42,7 +42,7 @@ class CategoryPutResolver : DefaultPutResolver<Category>() {
COL_NAME to obj.name, COL_NAME to obj.name,
COL_ORDER to obj.order, COL_ORDER to obj.order,
COL_FLAGS to obj.flags, COL_FLAGS to obj.flags,
COL_MANGA_ORDER to obj.mangaOrder.joinToString("/") COL_MANGA_ORDER to obj.mangaOrder.joinToString("/"),
) )
} }

View File

@ -28,7 +28,7 @@ import eu.kanade.tachiyomi.data.database.tables.ChapterTable.TABLE
class ChapterTypeMapping : SQLiteTypeMapping<Chapter>( class ChapterTypeMapping : SQLiteTypeMapping<Chapter>(
ChapterPutResolver(), ChapterPutResolver(),
ChapterGetResolver(), ChapterGetResolver(),
ChapterDeleteResolver() ChapterDeleteResolver(),
) )
class ChapterPutResolver : DefaultPutResolver<Chapter>() { class ChapterPutResolver : DefaultPutResolver<Chapter>() {
@ -56,7 +56,7 @@ class ChapterPutResolver : DefaultPutResolver<Chapter>() {
COL_DATE_UPLOAD to obj.date_upload, COL_DATE_UPLOAD to obj.date_upload,
COL_LAST_PAGE_READ to obj.last_page_read, COL_LAST_PAGE_READ to obj.last_page_read,
COL_CHAPTER_NUMBER to obj.chapter_number, COL_CHAPTER_NUMBER to obj.chapter_number,
COL_SOURCE_ORDER to obj.source_order COL_SOURCE_ORDER to obj.source_order,
) )
} }

View File

@ -20,7 +20,7 @@ import eu.kanade.tachiyomi.data.database.tables.HistoryTable.TABLE
class HistoryTypeMapping : SQLiteTypeMapping<History>( class HistoryTypeMapping : SQLiteTypeMapping<History>(
HistoryPutResolver(), HistoryPutResolver(),
HistoryGetResolver(), HistoryGetResolver(),
HistoryDeleteResolver() HistoryDeleteResolver(),
) )
open class HistoryPutResolver : DefaultPutResolver<History>() { open class HistoryPutResolver : DefaultPutResolver<History>() {
@ -40,7 +40,7 @@ open class HistoryPutResolver : DefaultPutResolver<History>() {
COL_ID to obj.id, COL_ID to obj.id,
COL_CHAPTER_ID to obj.chapter_id, COL_CHAPTER_ID to obj.chapter_id,
COL_LAST_READ to obj.last_read, COL_LAST_READ to obj.last_read,
COL_TIME_READ to obj.time_read COL_TIME_READ to obj.time_read,
) )
} }

View File

@ -18,7 +18,7 @@ import eu.kanade.tachiyomi.data.database.tables.MangaCategoryTable.TABLE
class MangaCategoryTypeMapping : SQLiteTypeMapping<MangaCategory>( class MangaCategoryTypeMapping : SQLiteTypeMapping<MangaCategory>(
MangaCategoryPutResolver(), MangaCategoryPutResolver(),
MangaCategoryGetResolver(), MangaCategoryGetResolver(),
MangaCategoryDeleteResolver() MangaCategoryDeleteResolver(),
) )
class MangaCategoryPutResolver : DefaultPutResolver<MangaCategory>() { class MangaCategoryPutResolver : DefaultPutResolver<MangaCategory>() {
@ -37,7 +37,7 @@ class MangaCategoryPutResolver : DefaultPutResolver<MangaCategory>() {
contentValuesOf( contentValuesOf(
COL_ID to obj.id, COL_ID to obj.id,
COL_MANGA_ID to obj.manga_id, COL_MANGA_ID to obj.manga_id,
COL_CATEGORY_ID to obj.category_id COL_CATEGORY_ID to obj.category_id,
) )
} }

View File

@ -34,7 +34,7 @@ import eu.kanade.tachiyomi.data.database.tables.MangaTable.TABLE
class MangaTypeMapping : SQLiteTypeMapping<Manga>( class MangaTypeMapping : SQLiteTypeMapping<Manga>(
MangaPutResolver(), MangaPutResolver(),
MangaGetResolver(), MangaGetResolver(),
MangaDeleteResolver() MangaDeleteResolver(),
) )
class MangaPutResolver : DefaultPutResolver<Manga>() { class MangaPutResolver : DefaultPutResolver<Manga>() {
@ -70,7 +70,7 @@ class MangaPutResolver : DefaultPutResolver<Manga>() {
COL_CHAPTER_FLAGS to obj.chapter_flags, COL_CHAPTER_FLAGS to obj.chapter_flags,
COL_COVER_LAST_MODIFIED to obj.cover_last_modified, COL_COVER_LAST_MODIFIED to obj.cover_last_modified,
COL_DATE_ADDED to obj.date_added, COL_DATE_ADDED to obj.date_added,
COL_FILTERED_SCANLATORS to obj.filtered_scanlators COL_FILTERED_SCANLATORS to obj.filtered_scanlators,
) )
} }

View File

@ -29,7 +29,7 @@ import eu.kanade.tachiyomi.data.database.tables.TrackTable.TABLE
class TrackTypeMapping : SQLiteTypeMapping<Track>( class TrackTypeMapping : SQLiteTypeMapping<Track>(
TrackPutResolver(), TrackPutResolver(),
TrackGetResolver(), TrackGetResolver(),
TrackDeleteResolver() TrackDeleteResolver(),
) )
class TrackPutResolver : DefaultPutResolver<Track>() { class TrackPutResolver : DefaultPutResolver<Track>() {
@ -58,7 +58,7 @@ class TrackPutResolver : DefaultPutResolver<Track>() {
COL_TRACKING_URL to obj.tracking_url, COL_TRACKING_URL to obj.tracking_url,
COL_SCORE to obj.score, COL_SCORE to obj.score,
COL_START_DATE to obj.started_reading_date, COL_START_DATE to obj.started_reading_date,
COL_FINISH_DATE to obj.finished_reading_date COL_FINISH_DATE to obj.finished_reading_date,
) )
} }

View File

@ -133,6 +133,6 @@ fun Manga.toMangaInfo(): MangaInfo {
genres = this.getGenres() ?: emptyList(), genres = this.getGenres() ?: emptyList(),
key = this.url, key = this.url,
status = this.status, status = this.status,
title = this.title title = this.title,
) )
} }

View File

@ -15,7 +15,7 @@ interface CategoryQueries : DbProvider {
Query.builder() Query.builder()
.table(CategoryTable.TABLE) .table(CategoryTable.TABLE)
.orderBy(CategoryTable.COL_ORDER) .orderBy(CategoryTable.COL_ORDER)
.build() .build(),
) )
.prepare() .prepare()
@ -25,7 +25,7 @@ interface CategoryQueries : DbProvider {
RawQuery.builder() RawQuery.builder()
.query(getCategoriesForMangaQuery()) .query(getCategoriesForMangaQuery())
.args(manga.id) .args(manga.id)
.build() .build(),
) )
.prepare() .prepare()

View File

@ -25,7 +25,7 @@ interface ChapterQueries : DbProvider {
.table(ChapterTable.TABLE) .table(ChapterTable.TABLE)
.where("${ChapterTable.COL_MANGA_ID} = ?") .where("${ChapterTable.COL_MANGA_ID} = ?")
.whereArgs(mangaId) .whereArgs(mangaId)
.build() .build(),
) )
.prepare() .prepare()
// SY <-- // SY <--
@ -37,7 +37,7 @@ interface ChapterQueries : DbProvider {
.query(getRecentsQuery()) .query(getRecentsQuery())
.args(date.time) .args(date.time)
.observesTables(ChapterTable.TABLE) .observesTables(ChapterTable.TABLE)
.build() .build(),
) )
.withGetResolver(MangaChapterGetResolver.INSTANCE) .withGetResolver(MangaChapterGetResolver.INSTANCE)
.prepare() .prepare()
@ -49,7 +49,7 @@ interface ChapterQueries : DbProvider {
.table(ChapterTable.TABLE) .table(ChapterTable.TABLE)
.where("${ChapterTable.COL_ID} = ?") .where("${ChapterTable.COL_ID} = ?")
.whereArgs(id) .whereArgs(id)
.build() .build(),
) )
.prepare() .prepare()
@ -60,7 +60,7 @@ interface ChapterQueries : DbProvider {
.table(ChapterTable.TABLE) .table(ChapterTable.TABLE)
.where("${ChapterTable.COL_URL} = ?") .where("${ChapterTable.COL_URL} = ?")
.whereArgs(url) .whereArgs(url)
.build() .build(),
) )
.prepare() .prepare()
@ -71,7 +71,7 @@ interface ChapterQueries : DbProvider {
.table(ChapterTable.TABLE) .table(ChapterTable.TABLE)
.where("${ChapterTable.COL_URL} = ? AND ${ChapterTable.COL_MANGA_ID} = ?") .where("${ChapterTable.COL_URL} = ? AND ${ChapterTable.COL_MANGA_ID} = ?")
.whereArgs(url, mangaId) .whereArgs(url, mangaId)
.build() .build(),
) )
.prepare() .prepare()
@ -83,7 +83,7 @@ interface ChapterQueries : DbProvider {
.table(ChapterTable.TABLE) .table(ChapterTable.TABLE)
.where("${ChapterTable.COL_URL} = ?") .where("${ChapterTable.COL_URL} = ?")
.whereArgs(url) .whereArgs(url)
.build() .build(),
) )
.prepare() .prepare()
@ -94,7 +94,7 @@ interface ChapterQueries : DbProvider {
.table(ChapterTable.TABLE) .table(ChapterTable.TABLE)
.where("${ChapterTable.COL_URL} IN (?) AND (${ChapterTable.COL_READ} = 1 OR ${ChapterTable.COL_LAST_PAGE_READ} != 0)") .where("${ChapterTable.COL_URL} IN (?) AND (${ChapterTable.COL_READ} = 1 OR ${ChapterTable.COL_LAST_PAGE_READ} != 0)")
.whereArgs(urls.joinToString { "\"$it\"" }) .whereArgs(urls.joinToString { "\"$it\"" })
.build() .build(),
) )
.prepare() .prepare()
// SY <-- // SY <--

View File

@ -33,7 +33,7 @@ interface HistoryQueries : DbProvider {
.query(getRecentMangasQuery(search)) .query(getRecentMangasQuery(search))
.args(date.time, limit, offset) .args(date.time, limit, offset)
.observesTables(HistoryTable.TABLE) .observesTables(HistoryTable.TABLE)
.build() .build(),
) )
.withGetResolver(MangaChapterHistoryGetResolver.INSTANCE) .withGetResolver(MangaChapterHistoryGetResolver.INSTANCE)
.prepare() .prepare()
@ -45,7 +45,7 @@ interface HistoryQueries : DbProvider {
.query(getHistoryByMangaId()) .query(getHistoryByMangaId())
.args(mangaId) .args(mangaId)
.observesTables(HistoryTable.TABLE) .observesTables(HistoryTable.TABLE)
.build() .build(),
) )
.prepare() .prepare()
@ -56,7 +56,7 @@ interface HistoryQueries : DbProvider {
.query(getHistoryByChapterUrl()) .query(getHistoryByChapterUrl())
.args(chapterUrl) .args(chapterUrl)
.observesTables(HistoryTable.TABLE) .observesTables(HistoryTable.TABLE)
.build() .build(),
) )
.prepare() .prepare()
@ -84,7 +84,7 @@ interface HistoryQueries : DbProvider {
.byQuery( .byQuery(
DeleteQuery.builder() DeleteQuery.builder()
.table(HistoryTable.TABLE) .table(HistoryTable.TABLE)
.build() .build(),
) )
.prepare() .prepare()
@ -94,7 +94,7 @@ interface HistoryQueries : DbProvider {
.table(HistoryTable.TABLE) .table(HistoryTable.TABLE)
.where("${HistoryTable.COL_LAST_READ} = ?") .where("${HistoryTable.COL_LAST_READ} = ?")
.whereArgs(0) .whereArgs(0)
.build() .build(),
) )
.prepare() .prepare()
@ -110,7 +110,7 @@ interface HistoryQueries : DbProvider {
.table(HistoryTable.TABLE) .table(HistoryTable.TABLE)
.where("${HistoryTable.COL_ID} IN (?)") .where("${HistoryTable.COL_ID} IN (?)")
.whereArgs(ids.joinToString()) .whereArgs(ids.joinToString())
.build() .build(),
) )
.prepare() .prepare()
// SY <-- // SY <--

View File

@ -20,7 +20,7 @@ interface MangaCategoryQueries : DbProvider {
.table(MangaCategoryTable.TABLE) .table(MangaCategoryTable.TABLE)
.where("${MangaCategoryTable.COL_MANGA_ID} IN (${Queries.placeholders(mangas.size)})") .where("${MangaCategoryTable.COL_MANGA_ID} IN (${Queries.placeholders(mangas.size)})")
.whereArgs(*mangas.map { it.id }.toTypedArray()) .whereArgs(*mangas.map { it.id }.toTypedArray())
.build() .build(),
) )
.prepare() .prepare()

View File

@ -35,7 +35,7 @@ interface MangaQueries : DbProvider {
RawQuery.builder() RawQuery.builder()
.query(libraryQuery) .query(libraryQuery)
.observesTables(MangaTable.TABLE, ChapterTable.TABLE, MangaCategoryTable.TABLE, CategoryTable.TABLE) .observesTables(MangaTable.TABLE, ChapterTable.TABLE, MangaCategoryTable.TABLE, CategoryTable.TABLE)
.build() .build(),
) )
.withGetResolver(LibraryMangaGetResolver.INSTANCE) .withGetResolver(LibraryMangaGetResolver.INSTANCE)
.prepare() .prepare()
@ -51,7 +51,7 @@ interface MangaQueries : DbProvider {
manga.source, manga.source,
) )
.limit(1) .limit(1)
.build() .build(),
) )
.prepare() .prepare()
@ -78,7 +78,7 @@ interface MangaQueries : DbProvider {
.table(MangaTable.TABLE) .table(MangaTable.TABLE)
.where("${MangaTable.COL_URL} = ? AND ${MangaTable.COL_SOURCE} = ?") .where("${MangaTable.COL_URL} = ? AND ${MangaTable.COL_SOURCE} = ?")
.whereArgs(url, sourceId) .whereArgs(url, sourceId)
.build() .build(),
) )
.prepare() .prepare()
@ -89,7 +89,7 @@ interface MangaQueries : DbProvider {
.table(MangaTable.TABLE) .table(MangaTable.TABLE)
.where("${MangaTable.COL_ID} = ?") .where("${MangaTable.COL_ID} = ?")
.whereArgs(id) .whereArgs(id)
.build() .build(),
) )
.prepare() .prepare()
@ -99,7 +99,7 @@ interface MangaQueries : DbProvider {
RawQuery.builder() RawQuery.builder()
.query(getSourceIdsWithNonLibraryMangaQuery()) .query(getSourceIdsWithNonLibraryMangaQuery())
.observesTables(MangaTable.TABLE) .observesTables(MangaTable.TABLE)
.build() .build(),
) )
.withGetResolver(SourceIdMangaCountGetResolver.INSTANCE) .withGetResolver(SourceIdMangaCountGetResolver.INSTANCE)
.prepare() .prepare()
@ -110,7 +110,7 @@ interface MangaQueries : DbProvider {
.withQuery( .withQuery(
Query.builder() Query.builder()
.table(MangaTable.TABLE) .table(MangaTable.TABLE)
.build() .build(),
) )
.prepare() .prepare()
@ -119,7 +119,7 @@ interface MangaQueries : DbProvider {
.withQuery( .withQuery(
RawQuery.builder() RawQuery.builder()
.query(getReadMangaNotInLibraryQuery()) .query(getReadMangaNotInLibraryQuery())
.build() .build(),
) )
.prepare() .prepare()
@ -209,11 +209,11 @@ interface MangaQueries : DbProvider {
${MangaTable.COL_FAVORITE} = ? AND ${MangaTable.COL_SOURCE} IN (${Queries.placeholders(sourceIds.size)}) AND ${MangaTable.COL_ID} NOT IN ( ${MangaTable.COL_FAVORITE} = ? AND ${MangaTable.COL_SOURCE} IN (${Queries.placeholders(sourceIds.size)}) AND ${MangaTable.COL_ID} NOT IN (
SELECT ${MergedTable.COL_MANGA_ID} FROM ${MergedTable.TABLE} WHERE ${MergedTable.COL_MANGA_ID} != ${MergedTable.COL_MERGE_ID} SELECT ${MergedTable.COL_MANGA_ID} FROM ${MergedTable.TABLE} WHERE ${MergedTable.COL_MANGA_ID} != ${MergedTable.COL_MERGE_ID}
) )
""".trimIndent() """.trimIndent(),
) )
// SY <-- // SY <--
.whereArgs(0, *sourceIds.toTypedArray()) .whereArgs(0, *sourceIds.toTypedArray())
.build() .build(),
) )
.prepare() .prepare()
@ -229,10 +229,10 @@ interface MangaQueries : DbProvider {
) AND ${MangaTable.COL_ID} NOT IN ( ) AND ${MangaTable.COL_ID} NOT IN (
SELECT ${ChapterTable.COL_MANGA_ID} FROM ${ChapterTable.TABLE} WHERE ${ChapterTable.COL_READ} = 1 OR ${ChapterTable.COL_LAST_PAGE_READ} != 0 SELECT ${ChapterTable.COL_MANGA_ID} FROM ${ChapterTable.TABLE} WHERE ${ChapterTable.COL_READ} = 1 OR ${ChapterTable.COL_LAST_PAGE_READ} != 0
) )
""".trimIndent() """.trimIndent(),
) )
.whereArgs(0, *sourceIds.toTypedArray()) .whereArgs(0, *sourceIds.toTypedArray())
.build() .build(),
) )
.prepare() .prepare()
// SY <-- // SY <--
@ -241,7 +241,7 @@ interface MangaQueries : DbProvider {
.byQuery( .byQuery(
DeleteQuery.builder() DeleteQuery.builder()
.table(MangaTable.TABLE) .table(MangaTable.TABLE)
.build() .build(),
) )
.prepare() .prepare()
@ -251,7 +251,7 @@ interface MangaQueries : DbProvider {
RawQuery.builder() RawQuery.builder()
.query(getLastReadMangaQuery()) .query(getLastReadMangaQuery())
.observesTables(MangaTable.TABLE) .observesTables(MangaTable.TABLE)
.build() .build(),
) )
.prepare() .prepare()
@ -261,7 +261,7 @@ interface MangaQueries : DbProvider {
RawQuery.builder() RawQuery.builder()
.query(getTotalChapterMangaQuery()) .query(getTotalChapterMangaQuery())
.observesTables(MangaTable.TABLE) .observesTables(MangaTable.TABLE)
.build() .build(),
) )
.prepare() .prepare()
@ -271,7 +271,7 @@ interface MangaQueries : DbProvider {
RawQuery.builder() RawQuery.builder()
.query(getLatestChapterMangaQuery()) .query(getLatestChapterMangaQuery())
.observesTables(MangaTable.TABLE) .observesTables(MangaTable.TABLE)
.build() .build(),
) )
.prepare() .prepare()
@ -281,7 +281,7 @@ interface MangaQueries : DbProvider {
RawQuery.builder() RawQuery.builder()
.query(getChapterFetchDateMangaQuery()) .query(getChapterFetchDateMangaQuery())
.observesTables(MangaTable.TABLE) .observesTables(MangaTable.TABLE)
.build() .build(),
) )
.prepare() .prepare()
@ -296,9 +296,9 @@ interface MangaQueries : DbProvider {
INNER JOIN ${SearchMetadataTable.TABLE} INNER JOIN ${SearchMetadataTable.TABLE}
ON ${MangaTable.TABLE}.${MangaTable.COL_ID} = ${SearchMetadataTable.TABLE}.${SearchMetadataTable.COL_MANGA_ID} ON ${MangaTable.TABLE}.${MangaTable.COL_ID} = ${SearchMetadataTable.TABLE}.${SearchMetadataTable.COL_MANGA_ID}
ORDER BY ${MangaTable.TABLE}.${MangaTable.COL_ID} ORDER BY ${MangaTable.TABLE}.${MangaTable.COL_ID}
""".trimIndent() """.trimIndent(),
) )
.build() .build(),
) )
.prepare() .prepare()
@ -313,9 +313,9 @@ interface MangaQueries : DbProvider {
ON ${MangaTable.TABLE}.${MangaTable.COL_ID} = ${SearchMetadataTable.TABLE}.${SearchMetadataTable.COL_MANGA_ID} ON ${MangaTable.TABLE}.${MangaTable.COL_ID} = ${SearchMetadataTable.TABLE}.${SearchMetadataTable.COL_MANGA_ID}
WHERE ${MangaTable.TABLE}.${MangaTable.COL_FAVORITE} = 1 WHERE ${MangaTable.TABLE}.${MangaTable.COL_FAVORITE} = 1
ORDER BY ${MangaTable.TABLE}.${MangaTable.COL_ID} ORDER BY ${MangaTable.TABLE}.${MangaTable.COL_ID}
""".trimIndent() """.trimIndent(),
) )
.build() .build(),
) )
.prepare() .prepare()
@ -330,9 +330,9 @@ interface MangaQueries : DbProvider {
ON ${MangaTable.TABLE}.${MangaTable.COL_ID} = ${SearchMetadataTable.TABLE}.${SearchMetadataTable.COL_MANGA_ID} ON ${MangaTable.TABLE}.${MangaTable.COL_ID} = ${SearchMetadataTable.TABLE}.${SearchMetadataTable.COL_MANGA_ID}
WHERE ${MangaTable.TABLE}.${MangaTable.COL_FAVORITE} = 1 WHERE ${MangaTable.TABLE}.${MangaTable.COL_FAVORITE} = 1
ORDER BY ${MangaTable.TABLE}.${MangaTable.COL_ID} ORDER BY ${MangaTable.TABLE}.${MangaTable.COL_ID}
""".trimIndent() """.trimIndent(),
) )
.build() .build(),
) )
.prepare() .prepare()
// SY <-- // SY <--

View File

@ -15,7 +15,7 @@ interface TrackQueries : DbProvider {
.withQuery( .withQuery(
Query.builder() Query.builder()
.table(TrackTable.TABLE) .table(TrackTable.TABLE)
.build() .build(),
) )
.prepare() .prepare()
@ -26,7 +26,7 @@ interface TrackQueries : DbProvider {
.table(TrackTable.TABLE) .table(TrackTable.TABLE)
.where("${TrackTable.COL_MANGA_ID} = ?") .where("${TrackTable.COL_MANGA_ID} = ?")
.whereArgs(manga.id) .whereArgs(manga.id)
.build() .build(),
) )
.prepare() .prepare()
@ -40,7 +40,7 @@ interface TrackQueries : DbProvider {
.table(TrackTable.TABLE) .table(TrackTable.TABLE)
.where("${TrackTable.COL_MANGA_ID} = ? AND ${TrackTable.COL_SYNC_ID} = ?") .where("${TrackTable.COL_MANGA_ID} = ? AND ${TrackTable.COL_SYNC_ID} = ?")
.whereArgs(manga.id, sync.id) .whereArgs(manga.id, sync.id)
.build() .build(),
) )
.prepare() .prepare()
} }

View File

@ -29,6 +29,6 @@ class ChapterBackupPutResolver : PutResolver<Chapter>() {
contentValuesOf( contentValuesOf(
ChapterTable.COL_READ to chapter.read, ChapterTable.COL_READ to chapter.read,
ChapterTable.COL_BOOKMARK to chapter.bookmark, ChapterTable.COL_BOOKMARK to chapter.bookmark,
ChapterTable.COL_LAST_PAGE_READ to chapter.last_page_read ChapterTable.COL_LAST_PAGE_READ to chapter.last_page_read,
) )
} }

View File

@ -29,6 +29,6 @@ class ChapterKnownBackupPutResolver : PutResolver<Chapter>() {
contentValuesOf( contentValuesOf(
ChapterTable.COL_READ to chapter.read, ChapterTable.COL_READ to chapter.read,
ChapterTable.COL_BOOKMARK to chapter.bookmark, ChapterTable.COL_BOOKMARK to chapter.bookmark,
ChapterTable.COL_LAST_PAGE_READ to chapter.last_page_read ChapterTable.COL_LAST_PAGE_READ to chapter.last_page_read,
) )
} }

View File

@ -29,6 +29,6 @@ class ChapterProgressPutResolver : PutResolver<Chapter>() {
contentValuesOf( contentValuesOf(
ChapterTable.COL_READ to chapter.read, ChapterTable.COL_READ to chapter.read,
ChapterTable.COL_BOOKMARK to chapter.bookmark, ChapterTable.COL_BOOKMARK to chapter.bookmark,
ChapterTable.COL_LAST_PAGE_READ to chapter.last_page_read ChapterTable.COL_LAST_PAGE_READ to chapter.last_page_read,
) )
} }

View File

@ -27,6 +27,6 @@ class ChapterSourceOrderPutResolver : PutResolver<Chapter>() {
fun mapToContentValues(chapter: Chapter) = fun mapToContentValues(chapter: Chapter) =
contentValuesOf( contentValuesOf(
ChapterTable.COL_SOURCE_ORDER to chapter.source_order ChapterTable.COL_SOURCE_ORDER to chapter.source_order,
) )
} }

View File

@ -27,6 +27,6 @@ class HistoryChapterIdPutResolver : PutResolver<History>() {
fun mapToContentValues(history: History) = fun mapToContentValues(history: History) =
contentValuesOf( contentValuesOf(
HistoryTable.COL_CHAPTER_ID to history.chapter_id HistoryTable.COL_CHAPTER_ID to history.chapter_id,
) )
} }

View File

@ -24,7 +24,7 @@ class HistoryLastReadPutResolver : HistoryPutResolver() {
.table(updateQuery.table()) .table(updateQuery.table())
.where(updateQuery.where()) .where(updateQuery.where())
.whereArgs(updateQuery.whereArgs()) .whereArgs(updateQuery.whereArgs())
.build() .build(),
) )
cursor.use { putCursor -> cursor.use { putCursor ->
@ -47,6 +47,6 @@ class HistoryLastReadPutResolver : HistoryPutResolver() {
private fun mapToUpdateContentValues(history: History) = private fun mapToUpdateContentValues(history: History) =
contentValuesOf( contentValuesOf(
HistoryTable.COL_LAST_READ to history.last_read HistoryTable.COL_LAST_READ to history.last_read,
) )
} }

View File

@ -27,6 +27,6 @@ class MangaCoverLastModifiedPutResolver : PutResolver<Manga>() {
fun mapToContentValues(manga: Manga) = fun mapToContentValues(manga: Manga) =
contentValuesOf( contentValuesOf(
MangaTable.COL_COVER_LAST_MODIFIED to manga.cover_last_modified MangaTable.COL_COVER_LAST_MODIFIED to manga.cover_last_modified,
) )
} }

View File

@ -28,6 +28,6 @@ class MangaFavoritePutResolver : PutResolver<Manga>() {
fun mapToContentValues(manga: Manga) = fun mapToContentValues(manga: Manga) =
contentValuesOf( contentValuesOf(
MangaTable.COL_FAVORITE to manga.favorite, MangaTable.COL_FAVORITE to manga.favorite,
MangaTable.COL_DATE_ADDED to manga.date_added MangaTable.COL_DATE_ADDED to manga.date_added,
) )
} }

View File

@ -27,6 +27,6 @@ class MangaFilteredScanlatorsPutResolver : PutResolver<Manga>() {
.build() .build()
fun mapToContentValues(manga: Manga) = contentValuesOf( fun mapToContentValues(manga: Manga) = contentValuesOf(
MangaTable.COL_FILTERED_SCANLATORS to manga.filtered_scanlators MangaTable.COL_FILTERED_SCANLATORS to manga.filtered_scanlators,
) )
} }

View File

@ -28,6 +28,6 @@ class MangaFlagsPutResolver(private val colName: String, private val fieldGetter
fun mapToContentValues(manga: Manga) = fun mapToContentValues(manga: Manga) =
contentValuesOf( contentValuesOf(
colName to fieldGetter.get(manga) colName to fieldGetter.get(manga),
) )
} }

View File

@ -32,7 +32,7 @@ class MangaInfoPutResolver(val reset: Boolean = false) : PutResolver<Manga>() {
MangaTable.COL_AUTHOR to manga.originalAuthor, MangaTable.COL_AUTHOR to manga.originalAuthor,
MangaTable.COL_ARTIST to manga.originalArtist, MangaTable.COL_ARTIST to manga.originalArtist,
MangaTable.COL_DESCRIPTION to manga.originalDescription, MangaTable.COL_DESCRIPTION to manga.originalDescription,
MangaTable.COL_STATUS to manga.originalStatus MangaTable.COL_STATUS to manga.originalStatus,
) )
private fun resetToContentValues(manga: Manga) = contentValuesOf( private fun resetToContentValues(manga: Manga) = contentValuesOf(
@ -41,7 +41,7 @@ class MangaInfoPutResolver(val reset: Boolean = false) : PutResolver<Manga>() {
MangaTable.COL_AUTHOR to manga.author?.split(splitter)?.lastOrNull(), MangaTable.COL_AUTHOR to manga.author?.split(splitter)?.lastOrNull(),
MangaTable.COL_ARTIST to manga.artist?.split(splitter)?.lastOrNull(), MangaTable.COL_ARTIST to manga.artist?.split(splitter)?.lastOrNull(),
MangaTable.COL_DESCRIPTION to manga.description?.split(splitter)?.lastOrNull(), MangaTable.COL_DESCRIPTION to manga.description?.split(splitter)?.lastOrNull(),
MangaTable.COL_STATUS to manga.status.nullIfZero()?.toString()?.split(splitter)?.lastOrNull() MangaTable.COL_STATUS to manga.status.nullIfZero()?.toString()?.split(splitter)?.lastOrNull(),
) )
companion object { companion object {

View File

@ -27,6 +27,6 @@ class MangaLastUpdatedPutResolver : PutResolver<Manga>() {
fun mapToContentValues(manga: Manga) = fun mapToContentValues(manga: Manga) =
contentValuesOf( contentValuesOf(
MangaTable.COL_LAST_UPDATE to manga.last_update MangaTable.COL_LAST_UPDATE to manga.last_update,
) )
} }

View File

@ -30,6 +30,6 @@ class MangaMigrationPutResolver : PutResolver<Manga>() {
MangaTable.COL_DATE_ADDED to manga.date_added, MangaTable.COL_DATE_ADDED to manga.date_added,
MangaTable.COL_TITLE to manga.title, MangaTable.COL_TITLE to manga.title,
MangaTable.COL_CHAPTER_FLAGS to manga.chapter_flags, MangaTable.COL_CHAPTER_FLAGS to manga.chapter_flags,
MangaTable.COL_VIEWER to manga.viewer_flags MangaTable.COL_VIEWER to manga.viewer_flags,
) )
} }

View File

@ -27,6 +27,6 @@ class MangaThumbnailPutResolver : PutResolver<Manga>() {
.build() .build()
fun mapToContentValues(manga: Manga) = contentValuesOf( fun mapToContentValues(manga: Manga) = contentValuesOf(
MangaTable.COL_THUMBNAIL_URL to manga.thumbnail_url MangaTable.COL_THUMBNAIL_URL to manga.thumbnail_url,
) )
} }

View File

@ -27,6 +27,6 @@ class MangaTitlePutResolver : PutResolver<Manga>() {
fun mapToContentValues(manga: Manga) = fun mapToContentValues(manga: Manga) =
contentValuesOf( contentValuesOf(
MangaTable.COL_TITLE to manga.title MangaTable.COL_TITLE to manga.title,
) )
} }

View File

@ -27,6 +27,6 @@ class MangaUrlPutResolver : PutResolver<Manga>() {
.build() .build()
fun mapToContentValues(manga: Manga) = contentValuesOf( fun mapToContentValues(manga: Manga) = contentValuesOf(
MangaTable.COL_URL to manga.url MangaTable.COL_URL to manga.url,
) )
} }

View File

@ -73,7 +73,7 @@ object TrackTable {
|INSERT INTO $TABLE($COL_ID,$COL_MANGA_ID,$COL_SYNC_ID,$COL_MEDIA_ID,$COL_LIBRARY_ID,$COL_TITLE,$COL_LAST_CHAPTER_READ,$COL_TOTAL_CHAPTERS,$COL_STATUS,$COL_SCORE,$COL_TRACKING_URL,$COL_START_DATE,$COL_FINISH_DATE) |INSERT INTO $TABLE($COL_ID,$COL_MANGA_ID,$COL_SYNC_ID,$COL_MEDIA_ID,$COL_LIBRARY_ID,$COL_TITLE,$COL_LAST_CHAPTER_READ,$COL_TOTAL_CHAPTERS,$COL_STATUS,$COL_SCORE,$COL_TRACKING_URL,$COL_START_DATE,$COL_FINISH_DATE)
|SELECT $COL_ID,$COL_MANGA_ID,$COL_SYNC_ID,$COL_MEDIA_ID,$COL_LIBRARY_ID,$COL_TITLE,$COL_LAST_CHAPTER_READ,$COL_TOTAL_CHAPTERS,$COL_STATUS,$COL_SCORE,$COL_TRACKING_URL,$COL_START_DATE,$COL_FINISH_DATE |SELECT $COL_ID,$COL_MANGA_ID,$COL_SYNC_ID,$COL_MEDIA_ID,$COL_LIBRARY_ID,$COL_TITLE,$COL_LAST_CHAPTER_READ,$COL_TOTAL_CHAPTERS,$COL_STATUS,$COL_SCORE,$COL_TRACKING_URL,$COL_START_DATE,$COL_FINISH_DATE
|FROM ${TABLE}_tmp |FROM ${TABLE}_tmp
""".trimMargin() """.trimMargin()
val dropTempTable: String val dropTempTable: String
get() = "DROP TABLE ${TABLE}_tmp" get() = "DROP TABLE ${TABLE}_tmp"

View File

@ -27,7 +27,7 @@ class DownloadCache(
private val context: Context, private val context: Context,
private val provider: DownloadProvider, private val provider: DownloadProvider,
private val sourceManager: SourceManager, private val sourceManager: SourceManager,
private val preferences: PreferencesHelper = Injekt.get() private val preferences: PreferencesHelper = Injekt.get(),
) { ) {
/** /**
@ -251,7 +251,7 @@ class DownloadCache(
*/ */
private class RootDirectory( private class RootDirectory(
val dir: UniFile, val dir: UniFile,
var files: Map<Long, SourceDirectory> = hashMapOf() var files: Map<Long, SourceDirectory> = hashMapOf(),
) )
/** /**
@ -259,7 +259,7 @@ class DownloadCache(
*/ */
private class SourceDirectory( private class SourceDirectory(
val dir: UniFile, val dir: UniFile,
var files: Map<String, MangaDirectory> = hashMapOf() var files: Map<String, MangaDirectory> = hashMapOf(),
) )
/** /**
@ -267,7 +267,7 @@ class DownloadCache(
*/ */
private class MangaDirectory( private class MangaDirectory(
val dir: UniFile, val dir: UniFile,
var files: Set<String> = hashSetOf() var files: Set<String> = hashSetOf(),
) )
/** /**

View File

@ -32,7 +32,7 @@ import uy.kohesive.injekt.injectLazy
*/ */
class DownloadManager( class DownloadManager(
private val context: Context, private val context: Context,
private val db: DatabaseHelper = Injekt.get() private val db: DatabaseHelper = Injekt.get(),
) { ) {
private val sourceManager: SourceManager by injectLazy() private val sourceManager: SourceManager by injectLazy()

View File

@ -93,14 +93,14 @@ internal class DownloadNotifier(private val context: Context) {
addAction( addAction(
R.drawable.ic_pause_24dp, R.drawable.ic_pause_24dp,
context.getString(R.string.action_pause), context.getString(R.string.action_pause),
NotificationReceiver.pauseDownloadsPendingBroadcast(context) NotificationReceiver.pauseDownloadsPendingBroadcast(context),
) )
} }
val downloadingProgressText = context.getString( val downloadingProgressText = context.getString(
R.string.chapter_downloading_progress, R.string.chapter_downloading_progress,
download.downloadedImages, download.downloadedImages,
download.pages!!.size download.pages!!.size,
) )
if (preferences.hideNotificationContent()) { if (preferences.hideNotificationContent()) {
@ -138,13 +138,13 @@ internal class DownloadNotifier(private val context: Context) {
addAction( addAction(
R.drawable.ic_play_arrow_24dp, R.drawable.ic_play_arrow_24dp,
context.getString(R.string.action_resume), context.getString(R.string.action_resume),
NotificationReceiver.resumeDownloadsPendingBroadcast(context) NotificationReceiver.resumeDownloadsPendingBroadcast(context),
) )
// Clear action // Clear action
addAction( addAction(
R.drawable.ic_close_24dp, R.drawable.ic_close_24dp,
context.getString(R.string.action_cancel_all), context.getString(R.string.action_cancel_all),
NotificationReceiver.clearDownloadsPendingBroadcast(context) NotificationReceiver.clearDownloadsPendingBroadcast(context),
) )
show(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS) show(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS)
@ -213,7 +213,7 @@ internal class DownloadNotifier(private val context: Context) {
// Create notification // Create notification
with(errorNotificationBuilder) { with(errorNotificationBuilder) {
setContentTitle( setContentTitle(
mangaTitle?.plus(": $chapter") ?: context.getString(R.string.download_notifier_downloader_title) mangaTitle?.plus(": $chapter") ?: context.getString(R.string.download_notifier_downloader_title),
) )
setContentText(error ?: context.getString(R.string.download_notifier_unknown_error)) setContentText(error ?: context.getString(R.string.download_notifier_unknown_error))
setSmallIcon(R.drawable.ic_warning_white_24dp) setSmallIcon(R.drawable.ic_warning_white_24dp)

View File

@ -126,7 +126,7 @@ class DownloadPendingDeleter(context: Context) {
@Serializable @Serializable
private data class Entry( private data class Entry(
val chapters: List<ChapterEntry>, val chapters: List<ChapterEntry>,
val manga: MangaEntry val manga: MangaEntry,
) )
/** /**
@ -137,7 +137,7 @@ class DownloadPendingDeleter(context: Context) {
val id: Long, val id: Long,
val url: String, val url: String,
val name: String, val name: String,
val scanlator: String? = null val scanlator: String? = null,
) )
/** /**
@ -148,7 +148,7 @@ class DownloadPendingDeleter(context: Context) {
val id: Long, val id: Long,
val url: String, val url: String,
val title: String, val title: String,
val source: Long val source: Long,
) )
/** /**

View File

@ -121,7 +121,7 @@ class DownloadProvider(private val context: Context) {
fun findUnmatchedChapterDirs( fun findUnmatchedChapterDirs(
chapters: List<Chapter>, chapters: List<Chapter>,
manga: Manga, manga: Manga,
source: Source source: Source,
): List<UniFile> { ): List<UniFile> {
val mangaDir = findMangaDir(manga, source) ?: return emptyList() val mangaDir = findMangaDir(manga, source) ?: return emptyList()
return mangaDir.listFiles().orEmpty().asList().filter { return mangaDir.listFiles().orEmpty().asList().filter {
@ -164,7 +164,7 @@ class DownloadProvider(private val context: Context) {
when { when {
chapter.scanlator != null -> "${chapter.scanlator}_${chapter.name}" chapter.scanlator != null -> "${chapter.scanlator}_${chapter.name}"
else -> chapter.name else -> chapter.name
} },
) )
} }
@ -183,7 +183,7 @@ class DownloadProvider(private val context: Context) {
"$chapterName.cbz", "$chapterName.cbz",
// Legacy chapter directory name used in v0.9.2 and before // Legacy chapter directory name used in v0.9.2 and before
DiskUtil.buildValidFilename(chapter.name) DiskUtil.buildValidFilename(chapter.name),
) )
} }
} }

View File

@ -177,7 +177,9 @@ class DownloadService : Service() {
*/ */
private fun listenDownloaderState() { private fun listenDownloaderState() {
subscriptions += downloadManager.runningRelay subscriptions += downloadManager.runningRelay
.doOnError { /* Swallow wakelock error */ } .doOnError {
/* Swallow wakelock error */
}
.subscribe { running -> .subscribe { running ->
if (running) { if (running) {
wakeLock.acquireIfNeeded() wakeLock.acquireIfNeeded()

View File

@ -20,7 +20,7 @@ import uy.kohesive.injekt.injectLazy
*/ */
class DownloadStore( class DownloadStore(
context: Context, context: Context,
private val sourceManager: SourceManager private val sourceManager: SourceManager,
) { ) {
/** /**

View File

@ -62,7 +62,7 @@ class Downloader(
private val context: Context, private val context: Context,
private val provider: DownloadProvider, private val provider: DownloadProvider,
private val cache: DownloadCache, private val cache: DownloadCache,
private val sourceManager: SourceManager private val sourceManager: SourceManager,
) { ) {
private val chapterCache: ChapterCache by injectLazy() private val chapterCache: ChapterCache by injectLazy()
@ -213,7 +213,7 @@ class Downloader(
downloadChapter(download).subscribeOn(Schedulers.io()) downloadChapter(download).subscribeOn(Schedulers.io())
} }
}, },
5 5,
) )
.onBackpressureLatest() .onBackpressureLatest()
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
@ -225,7 +225,7 @@ class Downloader(
DownloadService.stop(context) DownloadService.stop(context)
logcat(LogPriority.ERROR, error) logcat(LogPriority.ERROR, error)
notifier.onError(error.message) notifier.onError(error.message)
} },
) )
} }
@ -484,7 +484,7 @@ class Downloader(
download: Download, download: Download,
mangaDir: UniFile, mangaDir: UniFile,
tmpDir: UniFile, tmpDir: UniFile,
dirname: String dirname: String,
) { ) {
// Ensure that the chapter folder has all the images. // Ensure that the chapter folder has all the images.
val downloadedImages = tmpDir.listFiles().orEmpty().filterNot { it.name!!.endsWith(".tmp") } val downloadedImages = tmpDir.listFiles().orEmpty().filterNot { it.name!!.endsWith(".tmp") }

View File

@ -11,7 +11,7 @@ import java.util.concurrent.CopyOnWriteArrayList
class DownloadQueue( class DownloadQueue(
private val store: DownloadStore, private val store: DownloadStore,
private val queue: MutableList<Download> = CopyOnWriteArrayList() private val queue: MutableList<Download> = CopyOnWriteArrayList(),
) : List<Download> by queue { ) : List<Download> by queue {
private val statusSubject = PublishSubject.create<Download>() private val statusSubject = PublishSubject.create<Download>()

View File

@ -22,7 +22,7 @@ class CustomMangaManager(val context: Context) {
val json = try { val json = try {
Json.decodeFromString<MangaList>( Json.decodeFromString<MangaList>(
editJson.bufferedReader().use { it.readText() } editJson.bufferedReader().use { it.readText() },
) )
} catch (e: Exception) { } catch (e: Exception) {
null null
@ -67,13 +67,13 @@ class CustomMangaManager(val context: Context) {
artist, artist,
description, description,
genre?.split(", "), genre?.split(", "),
status status,
) )
} }
@Serializable @Serializable
data class MangaList( data class MangaList(
val mangas: List<MangaJson>? = null val mangas: List<MangaJson>? = null,
) )
@Serializable @Serializable
@ -84,7 +84,7 @@ class CustomMangaManager(val context: Context) {
val artist: String? = null, val artist: String? = null,
val description: String? = null, val description: String? = null,
val genre: List<String>? = null, val genre: List<String>? = null,
val status: Int? = null val status: Int? = null,
) { ) {
fun toManga() = MangaImpl().apply { fun toManga() = MangaImpl().apply {

View File

@ -49,7 +49,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
interval.toLong(), interval.toLong(),
TimeUnit.HOURS, TimeUnit.HOURS,
10, 10,
TimeUnit.MINUTES TimeUnit.MINUTES,
) )
.addTag(TAG) .addTag(TAG)
.setConstraints(constraints) .setConstraints(constraints)

View File

@ -87,7 +87,7 @@ class LibraryUpdateNotifier(private val context: Context) {
Notifications.ID_LIBRARY_PROGRESS, Notifications.ID_LIBRARY_PROGRESS,
progressNotificationBuilder progressNotificationBuilder
.setProgress(total, current, false) .setProgress(total, current, false)
.build() .build(),
) )
} }
@ -111,7 +111,7 @@ class LibraryUpdateNotifier(private val context: Context) {
setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri)) setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri))
} }
.build() .build(),
) )
} }
@ -132,7 +132,7 @@ class LibraryUpdateNotifier(private val context: Context) {
setSmallIcon(R.drawable.ic_tachi) setSmallIcon(R.drawable.ic_tachi)
addAction(R.drawable.ic_help_24dp, context.getString(R.string.learn_more), NotificationHandler.openUrl(context, HELP_SKIPPED_URL)) addAction(R.drawable.ic_help_24dp, context.getString(R.string.learn_more), NotificationHandler.openUrl(context, HELP_SKIPPED_URL))
} }
.build() .build(),
) )
} }
@ -162,8 +162,8 @@ class LibraryUpdateNotifier(private val context: Context) {
NotificationCompat.BigTextStyle().bigText( NotificationCompat.BigTextStyle().bigText(
updates.joinToString("\n") { updates.joinToString("\n") {
it.first.title.chop(NOTIF_TITLE_MAX_LEN) it.first.title.chop(NOTIF_TITLE_MAX_LEN)
} },
) ),
) )
} }
} }
@ -178,7 +178,7 @@ class LibraryUpdateNotifier(private val context: Context) {
setContentIntent(getNotificationIntent()) setContentIntent(getNotificationIntent())
setAutoCancel(true) setAutoCancel(true)
} },
) )
// Per-manga notification // Per-manga notification
@ -223,8 +223,8 @@ class LibraryUpdateNotifier(private val context: Context) {
context, context,
manga, manga,
chapters, chapters,
Notifications.ID_NEW_CHAPTERS Notifications.ID_NEW_CHAPTERS,
) ),
) )
// View chapters action // View chapters action
addAction( addAction(
@ -233,8 +233,8 @@ class LibraryUpdateNotifier(private val context: Context) {
NotificationReceiver.openChapterPendingActivity( NotificationReceiver.openChapterPendingActivity(
context, context,
manga, manga,
Notifications.ID_NEW_CHAPTERS Notifications.ID_NEW_CHAPTERS,
) ),
) )
// Download chapters action // Download chapters action
// Only add the action when chapters is within threshold // Only add the action when chapters is within threshold
@ -246,8 +246,8 @@ class LibraryUpdateNotifier(private val context: Context) {
context, context,
manga, manga,
chapters, chapters,
Notifications.ID_NEW_CHAPTERS Notifications.ID_NEW_CHAPTERS,
) ),
) )
} }
} }
@ -274,7 +274,7 @@ class LibraryUpdateNotifier(private val context: Context) {
val formatter = DecimalFormat( val formatter = DecimalFormat(
"#.###", "#.###",
DecimalFormatSymbols() DecimalFormatSymbols()
.apply { decimalSeparator = '.' } .apply { decimalSeparator = '.' },
) )
val displayableChapterNumbers = chapters val displayableChapterNumbers = chapters

View File

@ -92,7 +92,7 @@ class LibraryUpdateService(
val preferences: PreferencesHelper = Injekt.get(), val preferences: PreferencesHelper = Injekt.get(),
val downloadManager: DownloadManager = Injekt.get(), val downloadManager: DownloadManager = Injekt.get(),
val trackManager: TrackManager = Injekt.get(), val trackManager: TrackManager = Injekt.get(),
val coverCache: CoverCache = Injekt.get() val coverCache: CoverCache = Injekt.get(),
) : Service() { ) : Service() {
private lateinit var wakeLock: PowerManager.WakeLock private lateinit var wakeLock: PowerManager.WakeLock
@ -420,7 +420,7 @@ class LibraryUpdateService(
// Convert to the manga that contains new chapters // Convert to the manga that contains new chapters
newUpdates.add( newUpdates.add(
manga to newChapters.sortedByDescending { ch -> ch.source_order } manga to newChapters.sortedByDescending { ch -> ch.source_order }
.toTypedArray() .toTypedArray(),
) )
} }
} }
@ -646,7 +646,7 @@ class LibraryUpdateService(
notifier.showProgressNotification( notifier.showProgressNotification(
updatingManga, updatingManga,
completed.get(), completed.get(),
mangaToUpdate.size mangaToUpdate.size,
) )
block(manga) block(manga)
@ -660,7 +660,7 @@ class LibraryUpdateService(
notifier.showProgressNotification( notifier.showProgressNotification(
updatingManga, updatingManga,
completed.get(), completed.get(),
mangaToUpdate.size mangaToUpdate.size,
) )
} }
@ -693,7 +693,7 @@ class LibraryUpdateService(
dbManga = Manga.create( dbManga = Manga.create(
networkManga.url, networkManga.url,
networkManga.title, networkManga.title,
mangaDex.id mangaDex.id,
) )
dbManga.date_added = System.currentTimeMillis() dbManga.date_added = System.currentTimeMillis()
} }

View File

@ -59,14 +59,14 @@ class NotificationReceiver : BroadcastReceiver() {
shareImage( shareImage(
context, context,
intent.getStringExtra(EXTRA_FILE_LOCATION)!!, intent.getStringExtra(EXTRA_FILE_LOCATION)!!,
intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1) intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1),
) )
// Delete image from path and dismiss notification // Delete image from path and dismiss notification
ACTION_DELETE_IMAGE -> ACTION_DELETE_IMAGE ->
deleteImage( deleteImage(
context, context,
intent.getStringExtra(EXTRA_FILE_LOCATION)!!, intent.getStringExtra(EXTRA_FILE_LOCATION)!!,
intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1) intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1),
) )
// Share backup file // Share backup file
ACTION_SHARE_BACKUP -> ACTION_SHARE_BACKUP ->
@ -74,11 +74,11 @@ class NotificationReceiver : BroadcastReceiver() {
context, context,
intent.getParcelableExtra(EXTRA_URI)!!, intent.getParcelableExtra(EXTRA_URI)!!,
"application/x-protobuf+gzip", "application/x-protobuf+gzip",
intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1) intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1),
) )
ACTION_CANCEL_RESTORE -> cancelRestore( ACTION_CANCEL_RESTORE -> cancelRestore(
context, context,
intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1) intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1),
) )
// Cancel library update and dismiss notification // Cancel library update and dismiss notification
ACTION_CANCEL_LIBRARY_UPDATE -> cancelLibraryUpdate(context, Notifications.ID_LIBRARY_PROGRESS) ACTION_CANCEL_LIBRARY_UPDATE -> cancelLibraryUpdate(context, Notifications.ID_LIBRARY_PROGRESS)
@ -87,7 +87,7 @@ class NotificationReceiver : BroadcastReceiver() {
openChapter( openChapter(
context, context,
intent.getLongExtra(EXTRA_MANGA_ID, -1), intent.getLongExtra(EXTRA_MANGA_ID, -1),
intent.getLongExtra(EXTRA_CHAPTER_ID, -1) intent.getLongExtra(EXTRA_CHAPTER_ID, -1),
) )
} }
// Mark updated manga chapters as read // Mark updated manga chapters as read
@ -120,7 +120,7 @@ class NotificationReceiver : BroadcastReceiver() {
context, context,
intent.getParcelableExtra(EXTRA_URI)!!, intent.getParcelableExtra(EXTRA_URI)!!,
"text/plain", "text/plain",
intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1) intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1),
) )
} }
} }
@ -461,7 +461,7 @@ class NotificationReceiver : BroadcastReceiver() {
context: Context, context: Context,
manga: Manga, manga: Manga,
chapters: Array<Chapter>, chapters: Array<Chapter>,
groupId: Int groupId: Int,
): PendingIntent { ): PendingIntent {
val newIntent = Intent(context, NotificationReceiver::class.java).apply { val newIntent = Intent(context, NotificationReceiver::class.java).apply {
action = ACTION_MARK_AS_READ action = ACTION_MARK_AS_READ
@ -483,7 +483,7 @@ class NotificationReceiver : BroadcastReceiver() {
context: Context, context: Context,
manga: Manga, manga: Manga,
chapters: Array<Chapter>, chapters: Array<Chapter>,
groupId: Int groupId: Int,
): PendingIntent { ): PendingIntent {
val newIntent = Intent(context, NotificationReceiver::class.java).apply { val newIntent = Intent(context, NotificationReceiver::class.java).apply {
action = ACTION_DOWNLOAD_CHAPTER action = ACTION_DOWNLOAD_CHAPTER

View File

@ -116,7 +116,7 @@ object Notifications {
buildNotificationChannelGroup(GROUP_APK_UPDATES) { buildNotificationChannelGroup(GROUP_APK_UPDATES) {
setName(context.getString(R.string.label_recent_updates)) setName(context.getString(R.string.label_recent_updates))
}, },
) ),
) )
notificationService.createNotificationChannelsCompat( notificationService.createNotificationChannelsCompat(
@ -182,7 +182,7 @@ object Notifications {
setGroup(GROUP_APK_UPDATES) setGroup(GROUP_APK_UPDATES)
setName(context.getString(R.string.channel_ext_updates)) setName(context.getString(R.string.channel_ext_updates))
}, },
) ),
) )
} }
} }

View File

@ -37,13 +37,13 @@ class PreferencesHelper(val context: Context) {
private val defaultDownloadsDir = File( private val defaultDownloadsDir = File(
Environment.getExternalStorageDirectory().absolutePath + File.separator + Environment.getExternalStorageDirectory().absolutePath + File.separator +
context.getString(R.string.app_name), context.getString(R.string.app_name),
"downloads" "downloads",
).toUri() ).toUri()
private val defaultBackupDir = File( private val defaultBackupDir = File(
Environment.getExternalStorageDirectory().absolutePath + File.separator + Environment.getExternalStorageDirectory().absolutePath + File.separator +
context.getString(R.string.app_name), context.getString(R.string.app_name),
"backup" "backup",
).toUri() ).toUri()
fun startScreen() = prefs.getInt(Keys.startScreen, 1) fun startScreen() = prefs.getInt(Keys.startScreen, 1)
@ -70,12 +70,12 @@ class PreferencesHelper(val context: Context) {
fun themeMode() = flowPrefs.getEnum( fun themeMode() = flowPrefs.getEnum(
"pref_theme_mode_key", "pref_theme_mode_key",
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Values.ThemeMode.system } else { Values.ThemeMode.light } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Values.ThemeMode.system } else { Values.ThemeMode.light },
) )
fun appTheme() = flowPrefs.getEnum( fun appTheme() = flowPrefs.getEnum(
"pref_app_theme", "pref_app_theme",
if (DeviceUtil.isDynamicColorAvailable) { Values.AppTheme.MONET } else { Values.AppTheme.DEFAULT } if (DeviceUtil.isDynamicColorAvailable) { Values.AppTheme.MONET } else { Values.AppTheme.DEFAULT },
) )
fun themeDarkAmoled() = flowPrefs.getBoolean("pref_theme_dark_amoled_key", false) fun themeDarkAmoled() = flowPrefs.getBoolean("pref_theme_dark_amoled_key", false)
@ -327,7 +327,7 @@ class PreferencesHelper(val context: Context) {
fun extensionInstaller() = flowPrefs.getEnum( fun extensionInstaller() = flowPrefs.getEnum(
"extension_installer", "extension_installer",
if (DeviceUtil.isMiui) Values.ExtensionInstaller.LEGACY else Values.ExtensionInstaller.PACKAGEINSTALLER if (DeviceUtil.isMiui) Values.ExtensionInstaller.LEGACY else Values.ExtensionInstaller.PACKAGEINSTALLER,
) )
fun verboseLogging() = prefs.getBoolean(Keys.verboseLogging, false) fun verboseLogging() = prefs.getBoolean(Keys.verboseLogging, false)
@ -431,12 +431,12 @@ class PreferencesHelper(val context: Context) {
fun exhSettingsLanguages() = flowPrefs.getString( fun exhSettingsLanguages() = flowPrefs.getString(
"eh_settings_languages", "eh_settings_languages",
"false*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false" "false*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false\nfalse*false*false",
) )
fun exhEnabledCategories() = flowPrefs.getString( fun exhEnabledCategories() = flowPrefs.getString(
"eh_enabled_categories", "eh_enabled_categories",
"false,false,false,false,false,false,false,false,false,false" "false,false,false,false,false,false,false,false,false,false",
) )
fun feedTabInFront() = flowPrefs.getBoolean("latest_tab_position", false) fun feedTabInFront() = flowPrefs.getBoolean("latest_tab_position", false)

View File

@ -20,7 +20,7 @@ import java.io.File
import java.io.InputStream import java.io.InputStream
class ImageSaver( class ImageSaver(
val context: Context val context: Context,
) { ) {
@SuppressLint("InlinedApi") @SuppressLint("InlinedApi")
@ -47,13 +47,13 @@ class ImageSaver(
put( put(
MediaStore.Images.Media.RELATIVE_PATH, MediaStore.Images.Media.RELATIVE_PATH,
"${Environment.DIRECTORY_PICTURES}/${context.getString(R.string.app_name)}/" + "${Environment.DIRECTORY_PICTURES}/${context.getString(R.string.app_name)}/" +
(image.location as Location.Pictures).relativePath (image.location as Location.Pictures).relativePath,
) )
} }
val picture = context.contentResolver.insert( val picture = context.contentResolver.insert(
pictureDir, pictureDir,
contentValues contentValues,
) ?: throw IOException("Couldn't create file") ) ?: throw IOException("Couldn't create file")
data().use { input -> data().use { input ->
@ -83,18 +83,18 @@ class ImageSaver(
sealed class Image( sealed class Image(
open val name: String, open val name: String,
open val location: Location open val location: Location,
) { ) {
data class Cover( data class Cover(
val bitmap: Bitmap, val bitmap: Bitmap,
override val name: String, override val name: String,
override val location: Location override val location: Location,
) : Image(name, location) ) : Image(name, location)
data class Page( data class Page(
val inputStream: () -> InputStream, val inputStream: () -> InputStream,
override val name: String, override val name: String,
override val location: Location override val location: Location,
) : Image(name, location) ) : Image(name, location)
val data: () -> InputStream val data: () -> InputStream
@ -129,12 +129,12 @@ sealed class Location {
is Pictures -> { is Pictures -> {
val file = File( val file = File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
context.getString(R.string.app_name) context.getString(R.string.app_name),
) )
if (relativePath.isNotEmpty()) { if (relativePath.isNotEmpty()) {
return File( return File(
file, file,
relativePath relativePath,
) )
} }
file file

View File

@ -63,7 +63,7 @@ class TrackManager(context: Context) {
context.getString(R.string.plan_to_read) to PLAN_TO_READ, context.getString(R.string.plan_to_read) to PLAN_TO_READ,
context.getString(R.string.paused) to PAUSED, context.getString(R.string.paused) to PAUSED,
context.getString(R.string.completed) to COMPLETED, context.getString(R.string.completed) to COMPLETED,
context.getString(R.string.dropped) to DROPPED context.getString(R.string.dropped) to DROPPED,
) )
} }
// SY <-- // SY <--

View File

@ -43,7 +43,8 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
| status | status
|} |}
|} |}
|""".trimMargin() |
""".trimMargin()
val payload = buildJsonObject { val payload = buildJsonObject {
put("query", query) put("query", query)
putJsonObject("variables") { putJsonObject("variables") {
@ -55,8 +56,8 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
authClient.newCall( authClient.newCall(
POST( POST(
apiUrl, apiUrl,
body = payload.toString().toRequestBody(jsonMime) body = payload.toString().toRequestBody(jsonMime),
) ),
) )
.await() .await()
.parseAs<JsonObject>() .parseAs<JsonObject>()
@ -84,7 +85,8 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|progress |progress
|} |}
|} |}
|""".trimMargin() |
""".trimMargin()
val payload = buildJsonObject { val payload = buildJsonObject {
put("query", query) put("query", query)
putJsonObject("variables") { putJsonObject("variables") {
@ -127,7 +129,8 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|} |}
|} |}
|} |}
|""".trimMargin() |
""".trimMargin()
val payload = buildJsonObject { val payload = buildJsonObject {
put("query", query) put("query", query)
putJsonObject("variables") { putJsonObject("variables") {
@ -137,8 +140,8 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
authClient.newCall( authClient.newCall(
POST( POST(
apiUrl, apiUrl,
body = payload.toString().toRequestBody(jsonMime) body = payload.toString().toRequestBody(jsonMime),
) ),
) )
.await() .await()
.parseAs<JsonObject>() .parseAs<JsonObject>()
@ -193,7 +196,8 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|} |}
|} |}
|} |}
|""".trimMargin() |
""".trimMargin()
val payload = buildJsonObject { val payload = buildJsonObject {
put("query", query) put("query", query)
putJsonObject("variables") { putJsonObject("variables") {
@ -204,8 +208,8 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
authClient.newCall( authClient.newCall(
POST( POST(
apiUrl, apiUrl,
body = payload.toString().toRequestBody(jsonMime) body = payload.toString().toRequestBody(jsonMime),
) ),
) )
.await() .await()
.parseAs<JsonObject>() .parseAs<JsonObject>()
@ -238,15 +242,16 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|} |}
|} |}
|} |}
|""".trimMargin() |
""".trimMargin()
val payload = buildJsonObject { val payload = buildJsonObject {
put("query", query) put("query", query)
} }
authClient.newCall( authClient.newCall(
POST( POST(
apiUrl, apiUrl,
body = payload.toString().toRequestBody(jsonMime) body = payload.toString().toRequestBody(jsonMime),
) ),
) )
.await() .await()
.parseAs<JsonObject>() .parseAs<JsonObject>()
@ -255,7 +260,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
val viewer = data["Viewer"]!!.jsonObject val viewer = data["Viewer"]!!.jsonObject
Pair( Pair(
viewer["id"]!!.jsonPrimitive.int, viewer["id"]!!.jsonPrimitive.int,
viewer["mediaListOptions"]!!.jsonObject["scoreFormat"]!!.jsonPrimitive.content viewer["mediaListOptions"]!!.jsonObject["scoreFormat"]!!.jsonPrimitive.content,
) )
} }
} }
@ -270,7 +275,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
struct["format"]!!.jsonPrimitive.content.replace("_", "-"), struct["format"]!!.jsonPrimitive.content.replace("_", "-"),
struct["status"]!!.jsonPrimitive.contentOrNull ?: "", struct["status"]!!.jsonPrimitive.contentOrNull ?: "",
parseDate(struct, "startDate"), parseDate(struct, "startDate"),
struct["chapters"]!!.jsonPrimitive.intOrNull ?: 0 struct["chapters"]!!.jsonPrimitive.intOrNull ?: 0,
) )
} }
@ -282,7 +287,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
struct["progress"]!!.jsonPrimitive.int, struct["progress"]!!.jsonPrimitive.int,
parseDate(struct, "startedAt"), parseDate(struct, "startedAt"),
parseDate(struct, "completedAt"), parseDate(struct, "completedAt"),
jsonToALManga(struct["media"]!!.jsonObject) jsonToALManga(struct["media"]!!.jsonObject),
) )
} }
@ -292,7 +297,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
date.set( date.set(
struct[dateKey]!!.jsonObject["year"]!!.jsonPrimitive.int, struct[dateKey]!!.jsonObject["year"]!!.jsonPrimitive.int,
struct[dateKey]!!.jsonObject["month"]!!.jsonPrimitive.int - 1, struct[dateKey]!!.jsonObject["month"]!!.jsonPrimitive.int - 1,
struct[dateKey]!!.jsonObject["day"]!!.jsonPrimitive.int struct[dateKey]!!.jsonObject["day"]!!.jsonPrimitive.int,
) )
date.timeInMillis date.timeInMillis
} catch (_: Exception) { } catch (_: Exception) {

View File

@ -16,7 +16,7 @@ data class ALManga(
val format: String, val format: String,
val publishing_status: String, val publishing_status: String,
val start_date_fuzzy: Long, val start_date_fuzzy: Long,
val total_chapters: Int val total_chapters: Int,
) { ) {
fun toTrack() = TrackSearch.create(TrackManager.ANILIST).apply { fun toTrack() = TrackSearch.create(TrackManager.ANILIST).apply {
@ -46,7 +46,7 @@ data class ALUserManga(
val chapters_read: Int, val chapters_read: Int,
val start_date_fuzzy: Long, val start_date_fuzzy: Long,
val completed_date_fuzzy: Long, val completed_date_fuzzy: Long,
val manga: ALManga val manga: ALManga,
) { ) {
fun toTrack() = Track.create(TrackManager.ANILIST).apply { fun toTrack() = Track.create(TrackManager.ANILIST).apply {

View File

@ -7,7 +7,7 @@ data class OAuth(
val access_token: String, val access_token: String,
val token_type: String, val token_type: String,
val expires: Long, val expires: Long,
val expires_in: Long val expires_in: Long,
) { ) {
fun isExpired() = System.currentTimeMillis() > expires fun isExpired() = System.currentTimeMillis() > expires

View File

@ -6,5 +6,5 @@ import kotlinx.serialization.Serializable
data class Avatar( data class Avatar(
val large: String? = "", val large: String? = "",
val medium: String? = "", val medium: String? = "",
val small: String? = "" val small: String? = "",
) )

View File

@ -61,8 +61,8 @@ class BangumiApi(private val client: OkHttpClient, interceptor: BangumiIntercept
authClient.newCall( authClient.newCall(
POST( POST(
"$apiUrl/subject/${track.media_id}/update/watched_eps", "$apiUrl/subject/${track.media_id}/update/watched_eps",
body = body body = body,
) ),
).await() ).await()
track track
@ -168,7 +168,7 @@ class BangumiApi(private val client: OkHttpClient, interceptor: BangumiIntercept
.add("client_secret", clientSecret) .add("client_secret", clientSecret)
.add("code", code) .add("code", code)
.add("redirect_uri", redirectUrl) .add("redirect_uri", redirectUrl)
.build() .build(),
) )
companion object { companion object {
@ -201,7 +201,7 @@ class BangumiApi(private val client: OkHttpClient, interceptor: BangumiIntercept
.add("client_secret", clientSecret) .add("client_secret", clientSecret)
.add("refresh_token", token) .add("refresh_token", token)
.add("redirect_uri", redirectUrl) .add("redirect_uri", redirectUrl)
.build() .build(),
) )
} }
} }

View File

@ -34,7 +34,7 @@ class BangumiInterceptor(val bangumi: Bangumi) : Interceptor {
.header("User-Agent", "Tachiyomi") .header("User-Agent", "Tachiyomi")
.url( .url(
originalRequest.url.newBuilder() originalRequest.url.newBuilder()
.addQueryParameter("access_token", currAuth.access_token).build() .addQueryParameter("access_token", currAuth.access_token).build(),
) )
.build() else originalRequest.newBuilder() .build() else originalRequest.newBuilder()
.post(addToken(currAuth.access_token, originalRequest.body as FormBody)) .post(addToken(currAuth.access_token, originalRequest.body as FormBody))
@ -51,7 +51,7 @@ class BangumiInterceptor(val bangumi: Bangumi) : Interceptor {
System.currentTimeMillis() / 1000, System.currentTimeMillis() / 1000,
oauth.expires_in, oauth.expires_in,
oauth.refresh_token, oauth.refresh_token,
this.oauth?.user_id this.oauth?.user_id,
) )
bangumi.saveToken(oauth) bangumi.saveToken(oauth)

View File

@ -12,5 +12,5 @@ data class Collection(
val status: Status? = Status(), val status: Status? = Status(),
val tag: List<String?>? = listOf(), val tag: List<String?>? = listOf(),
val user: User? = User(), val user: User? = User(),
val vol_status: Int? = 0 val vol_status: Int? = 0,
) )

View File

@ -9,7 +9,7 @@ data class OAuth(
val created_at: Long = System.currentTimeMillis() / 1000, val created_at: Long = System.currentTimeMillis() / 1000,
val expires_in: Long, val expires_in: Long,
val refresh_token: String?, val refresh_token: String?,
val user_id: Long? val user_id: Long?,
) { ) {
// Access token refresh before expired // Access token refresh before expired

View File

@ -6,5 +6,5 @@ import kotlinx.serialization.Serializable
data class Status( data class Status(
val id: Int? = 0, val id: Int? = 0,
val name: String? = "", val name: String? = "",
val type: String? = "" val type: String? = "",
) )

View File

@ -10,5 +10,5 @@ data class User(
val sign: String? = "", val sign: String? = "",
val url: String? = "", val url: String? = "",
val usergroup: Int? = 0, val usergroup: Int? = 0,
val username: String? = "" val username: String? = "",
) )

View File

@ -62,10 +62,10 @@ class KitsuApi(private val client: OkHttpClient, interceptor: KitsuInterceptor)
"${baseUrl}library-entries", "${baseUrl}library-entries",
headers = headersOf( headers = headersOf(
"Content-Type", "Content-Type",
"application/vnd.api+json" "application/vnd.api+json",
), ),
body = data.toString().toRequestBody("application/vnd.api+json".toMediaType()) body = data.toString().toRequestBody("application/vnd.api+json".toMediaType()),
) ),
) )
.await() .await()
.parseAs<JsonObject>() .parseAs<JsonObject>()
@ -98,11 +98,11 @@ class KitsuApi(private val client: OkHttpClient, interceptor: KitsuInterceptor)
.headers( .headers(
headersOf( headersOf(
"Content-Type", "Content-Type",
"application/vnd.api+json" "application/vnd.api+json",
) ),
) )
.patch(data.toString().toRequestBody("application/vnd.api+json".toMediaType())) .patch(data.toString().toRequestBody("application/vnd.api+json".toMediaType()))
.build() .build(),
) )
.await() .await()
.parseAs<JsonObject>() .parseAs<JsonObject>()
@ -139,8 +139,8 @@ class KitsuApi(private val client: OkHttpClient, interceptor: KitsuInterceptor)
"X-Algolia-API-Key", "X-Algolia-API-Key",
key, key,
), ),
body = jsonObject.toString().toRequestBody(jsonMime) body = jsonObject.toString().toRequestBody(jsonMime),
) ),
) )
.await() .await()
.parseAs<JsonObject>() .parseAs<JsonObject>()
@ -252,7 +252,7 @@ class KitsuApi(private val client: OkHttpClient, interceptor: KitsuInterceptor)
.add("refresh_token", token) .add("refresh_token", token)
.add("client_id", clientId) .add("client_id", clientId)
.add("client_secret", clientSecret) .add("client_secret", clientSecret)
.build() .build(),
) )
} }
} }

View File

@ -8,7 +8,7 @@ data class OAuth(
val token_type: String, val token_type: String,
val created_at: Long, val created_at: Long,
val expires_in: Long, val expires_in: Long,
val refresh_token: String? val refresh_token: String?,
) { ) {
fun isExpired() = (System.currentTimeMillis() / 1000) > (created_at + expires_in - 3600) fun isExpired() = (System.currentTimeMillis() / 1000) > (created_at + expires_in - 3600)

View File

@ -72,7 +72,7 @@ class KomgaApi(private val client: OkHttpClient) {
Request.Builder() Request.Builder()
.url("${track.tracking_url.replace("/api/v1/series/", "/api/v2/series/")}/read-progress/tachiyomi") .url("${track.tracking_url.replace("/api/v1/series/", "/api/v2/series/")}/read-progress/tachiyomi")
.put(payload.toRequestBody("application/json".toMediaType())) .put(payload.toRequestBody("application/json".toMediaType()))
.build() .build(),
) )
.await() .await()
return getTrackSearch(track.tracking_url) return getTrackSearch(track.tracking_url)

View File

@ -15,7 +15,7 @@ data class SeriesDto(
val booksUnreadCount: Int, val booksUnreadCount: Int,
val booksInProgressCount: Int, val booksInProgressCount: Int,
val metadata: SeriesMetadataDto, val metadata: SeriesMetadataDto,
val booksMetadata: BookMetadataAggregationDto val booksMetadata: BookMetadataAggregationDto,
) )
@Serializable @Serializable
@ -38,7 +38,7 @@ data class SeriesMetadataDto(
val genres: Set<String>, val genres: Set<String>,
val genresLock: Boolean, val genresLock: Boolean,
val tags: Set<String>, val tags: Set<String>,
val tagsLock: Boolean val tagsLock: Boolean,
) )
@Serializable @Serializable
@ -49,13 +49,13 @@ data class BookMetadataAggregationDto(
val summaryNumber: String, val summaryNumber: String,
val created: String, val created: String,
val lastModified: String val lastModified: String,
) )
@Serializable @Serializable
data class AuthorDto( data class AuthorDto(
val name: String, val name: String,
val role: String val role: String,
) )
@Serializable @Serializable
@ -75,7 +75,7 @@ data class ReadListDto(
val bookIds: List<String>, val bookIds: List<String>,
val createdDate: String, val createdDate: String,
val lastModifiedDate: String, val lastModifiedDate: String,
val filtered: Boolean val filtered: Boolean,
) )
@Serializable @Serializable

View File

@ -103,7 +103,7 @@ class MdList(private val context: Context, id: Int) : TrackService(id) {
FollowStatus.READING.int FollowStatus.READING.int
} else FollowStatus.PLAN_TO_READ.int } else FollowStatus.PLAN_TO_READ.int
} }
} },
) )
override suspend fun refresh(track: Track): Track { override suspend fun refresh(track: Track): Track {

View File

@ -165,7 +165,7 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI
.filter { .filter {
it.jsonObject["node"]!!.jsonObject["title"]!!.jsonPrimitive.content.contains( it.jsonObject["node"]!!.jsonObject["title"]!!.jsonPrimitive.content.contains(
query, query,
ignoreCase = true ignoreCase = true,
) )
} }
.map { .map {

View File

@ -8,7 +8,7 @@ data class OAuth(
val access_token: String, val access_token: String,
val token_type: String, val token_type: String,
val created_at: Long = System.currentTimeMillis(), val created_at: Long = System.currentTimeMillis(),
val expires_in: Long val expires_in: Long,
) { ) {
fun isExpired() = System.currentTimeMillis() > created_at + (expires_in * 1000) fun isExpired() = System.currentTimeMillis() > created_at + (expires_in * 1000)

View File

@ -8,7 +8,7 @@ data class OAuth(
val token_type: String, val token_type: String,
val created_at: Long, val created_at: Long,
val expires_in: Long, val expires_in: Long,
val refresh_token: String? val refresh_token: String?,
) { ) {
// Access token lives 1 day // Access token lives 1 day

Some files were not shown because too many files have changed in this diff Show More