Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fb1649125c | |||
| 0767526f18 | |||
| 5d1b1408eb | |||
| 2f54f00bf7 | |||
| 87feb58055 | |||
| 28edaca869 | |||
| d14f012bbb | |||
| adc6bbf54f | |||
| 2b064baca1 | |||
| 983a80ba42 |
+1
-1
@@ -65,7 +65,7 @@ When creating a fork, remember to:
|
|||||||
8. Click publish
|
8. Click publish
|
||||||
9. Go to API & Services -> Credentials
|
9. Go to API & Services -> Credentials
|
||||||
10. Click Create credentials -> Oauth client ID
|
10. Click Create credentials -> Oauth client ID
|
||||||
11. Select Android, give it a name, and set eu.kanade.google.oauth as the package name
|
11. Select Android, give it a name, and set `eu.kanade.google.oauth` as the package name
|
||||||
12. To get the SHA-1 key, run `keytool -printcert -jarfile app-standard-universal-release.apk` on your apk, and copy the listed SHA-1
|
12. To get the SHA-1 key, run `keytool -printcert -jarfile app-standard-universal-release.apk` on your apk, and copy the listed SHA-1
|
||||||
13. Expand advanced settings, and enable Custom URL scheme
|
13. Expand advanced settings, and enable Custom URL scheme
|
||||||
14. After that just download the json, name it to `client_secrets.json` and put it in `app/src/main/assets/`
|
14. After that just download the json, name it to `client_secrets.json` and put it in `app/src/main/assets/`
|
||||||
+5
-4
@@ -313,7 +313,7 @@ class MangaRestorer(
|
|||||||
restoreCategories(manga, categories, backupCategories)
|
restoreCategories(manga, categories, backupCategories)
|
||||||
restoreChapters(manga, chapters)
|
restoreChapters(manga, chapters)
|
||||||
restoreTracking(manga, tracks)
|
restoreTracking(manga, tracks)
|
||||||
restoreHistory(history)
|
restoreHistory(manga, history)
|
||||||
restoreExcludedScanlators(manga, excludedScanlators)
|
restoreExcludedScanlators(manga, excludedScanlators)
|
||||||
updateManga.awaitUpdateFetchInterval(manga, now, currentFetchWindow)
|
updateManga.awaitUpdateFetchInterval(manga, now, currentFetchWindow)
|
||||||
// SY -->
|
// SY -->
|
||||||
@@ -359,13 +359,14 @@ class MangaRestorer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun restoreHistory(backupHistory: List<BackupHistory>) {
|
private suspend fun restoreHistory(manga: Manga, backupHistory: List<BackupHistory>) {
|
||||||
val toUpdate = backupHistory.mapNotNull { history ->
|
val toUpdate = backupHistory.mapNotNull { history ->
|
||||||
val dbHistory = handler.awaitOneOrNull { historyQueries.getHistoryByChapterUrl(history.url) }
|
val dbHistory = handler.awaitOneOrNull { historyQueries.getHistoryByChapterUrl(manga.id, history.url) }
|
||||||
val item = history.getHistoryImpl()
|
val item = history.getHistoryImpl()
|
||||||
|
|
||||||
if (dbHistory == null) {
|
if (dbHistory == null) {
|
||||||
val chapter = handler.awaitOneOrNull { chaptersQueries.getChapterByUrl(history.url) }
|
val chapter = handler.awaitList { chaptersQueries.getChapterByUrl(history.url) }
|
||||||
|
.find { it.manga_id == manga.id }
|
||||||
return@mapNotNull if (chapter == null) {
|
return@mapNotNull if (chapter == null) {
|
||||||
// Chapter doesn't exist; skip
|
// Chapter doesn't exist; skip
|
||||||
null
|
null
|
||||||
|
|||||||
@@ -343,8 +343,9 @@ open class ReaderPageImageView @JvmOverloads constructor(
|
|||||||
.diskCachePolicy(CachePolicy.DISABLED)
|
.diskCachePolicy(CachePolicy.DISABLED)
|
||||||
.target(
|
.target(
|
||||||
onSuccess = { result ->
|
onSuccess = { result ->
|
||||||
setImageDrawable(result.asDrawable(context.resources))
|
val drawable = result.asDrawable(context.resources)
|
||||||
(result as? Animatable)?.start()
|
setImageDrawable(drawable)
|
||||||
|
(drawable as? Animatable)?.start()
|
||||||
isVisible = true
|
isVisible = true
|
||||||
this@ReaderPageImageView.onImageLoaded()
|
this@ReaderPageImageView.onImageLoaded()
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1727,9 +1727,6 @@
|
|||||||
<ID>SwallowedException:GalleryAdder.kt$GalleryAdder$e: Exception</ID>
|
<ID>SwallowedException:GalleryAdder.kt$GalleryAdder$e: Exception</ID>
|
||||||
<ID>SwallowedException:GetChapterByUrlAndMangaId.kt$GetChapterByUrlAndMangaId$e: Exception</ID>
|
<ID>SwallowedException:GetChapterByUrlAndMangaId.kt$GetChapterByUrlAndMangaId$e: Exception</ID>
|
||||||
<ID>SwallowedException:GetPagePreviews.kt$GetPagePreviews$e: Exception</ID>
|
<ID>SwallowedException:GetPagePreviews.kt$GetPagePreviews$e: Exception</ID>
|
||||||
<ID>SwallowedException:GoogleDriveSyncService.kt$GoogleDriveService$e: IOException</ID>
|
|
||||||
<ID>SwallowedException:GoogleDriveSyncService.kt$GoogleDriveService$e: TokenResponseException</ID>
|
|
||||||
<ID>SwallowedException:GoogleDriveSyncService.kt$GoogleDriveSyncService$e: Exception</ID>
|
|
||||||
<ID>SwallowedException:HttpSource.kt$HttpSource$e: URISyntaxException</ID>
|
<ID>SwallowedException:HttpSource.kt$HttpSource$e: URISyntaxException</ID>
|
||||||
<ID>SwallowedException:ImageUtil.kt$ImageUtil$e: Exception</ID>
|
<ID>SwallowedException:ImageUtil.kt$ImageUtil$e: Exception</ID>
|
||||||
<ID>SwallowedException:Kavita.kt$Kavita$e: Exception</ID>
|
<ID>SwallowedException:Kavita.kt$Kavita$e: Exception</ID>
|
||||||
@@ -1767,7 +1764,6 @@
|
|||||||
<ID>SwallowedException:SourceFeedScreenModel.kt$SourceFeedScreenModel$e: Exception</ID>
|
<ID>SwallowedException:SourceFeedScreenModel.kt$SourceFeedScreenModel$e: Exception</ID>
|
||||||
<ID>SwallowedException:StorageStep.kt$StorageStep$e: ActivityNotFoundException</ID>
|
<ID>SwallowedException:StorageStep.kt$StorageStep$e: ActivityNotFoundException</ID>
|
||||||
<ID>SwallowedException:Suwayomi.kt$Suwayomi$e: Exception</ID>
|
<ID>SwallowedException:Suwayomi.kt$Suwayomi$e: Exception</ID>
|
||||||
<ID>SwallowedException:SyncManager.kt$SyncManager$e: IOException</ID>
|
|
||||||
<ID>SwallowedException:TrackInfoDialog.kt$TrackInfoDialogHomeScreen.Model$e: Exception</ID>
|
<ID>SwallowedException:TrackInfoDialog.kt$TrackInfoDialogHomeScreen.Model$e: Exception</ID>
|
||||||
<ID>SwallowedException:UrlImportableSource.kt$UrlImportableSource$e: URISyntaxException</ID>
|
<ID>SwallowedException:UrlImportableSource.kt$UrlImportableSource$e: URISyntaxException</ID>
|
||||||
<ID>ThrowingExceptionsWithoutMessageOrCause:MangaScreenModel.kt$MangaScreenModel$IllegalStateException()</ID>
|
<ID>ThrowingExceptionsWithoutMessageOrCause:MangaScreenModel.kt$MangaScreenModel$IllegalStateException()</ID>
|
||||||
@@ -1966,12 +1962,12 @@
|
|||||||
<ID>TooGenericExceptionThrown:EHentai.kt$EHentai$throw Exception(it.text())</ID>
|
<ID>TooGenericExceptionThrown:EHentai.kt$EHentai$throw Exception(it.text())</ID>
|
||||||
<ID>TooGenericExceptionThrown:ExtensionLoader.kt$ExtensionLoader$throw Exception("Unknown source class type: ${obj.javaClass}")</ID>
|
<ID>TooGenericExceptionThrown:ExtensionLoader.kt$ExtensionLoader$throw Exception("Unknown source class type: ${obj.javaClass}")</ID>
|
||||||
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveService$throw Exception(context.stringResource(MR.strings.google_drive_not_signed_in))</ID>
|
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveService$throw Exception(context.stringResource(MR.strings.google_drive_not_signed_in))</ID>
|
||||||
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(context.stringResource(MR.strings.error_before_sync_gdrive) + ": ${e.message}")</ID>
|
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(context.stringResource(MR.strings.error_before_sync_gdrive) + ": ${e.message}", e)</ID>
|
||||||
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(context.stringResource(MR.strings.error_before_sync_gdrive) + ": Max retries reached.")</ID>
|
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(context.stringResource(MR.strings.error_before_sync_gdrive) + ": Max retries reached.")</ID>
|
||||||
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(context.stringResource(MR.strings.error_deleting_google_drive_lock_file))</ID>
|
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(context.stringResource(MR.strings.error_deleting_google_drive_lock_file), e)</ID>
|
||||||
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(context.stringResource(MR.strings.error_uploading_sync_data) + ": ${e.message}")</ID>
|
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(context.stringResource(MR.strings.error_uploading_sync_data) + ": ${e.message}", e)</ID>
|
||||||
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(context.stringResource(MR.strings.google_drive_not_signed_in))</ID>
|
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(context.stringResource(MR.strings.google_drive_not_signed_in))</ID>
|
||||||
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(e.message)</ID>
|
<ID>TooGenericExceptionThrown:GoogleDriveSyncService.kt$GoogleDriveSyncService$throw Exception(e.message, e)</ID>
|
||||||
<ID>TooGenericExceptionThrown:HttpSource.kt$HttpSource$throw RuntimeException(e)</ID>
|
<ID>TooGenericExceptionThrown:HttpSource.kt$HttpSource$throw RuntimeException(e)</ID>
|
||||||
<ID>TooGenericExceptionThrown:KitsuApi.kt$KitsuApi$throw Exception("Could not find manga")</ID>
|
<ID>TooGenericExceptionThrown:KitsuApi.kt$KitsuApi$throw Exception("Could not find manga")</ID>
|
||||||
<ID>TooGenericExceptionThrown:KitsuInterceptor.kt$KitsuInterceptor$throw Exception("Not authenticated with Kitsu")</ID>
|
<ID>TooGenericExceptionThrown:KitsuInterceptor.kt$KitsuInterceptor$throw Exception("Not authenticated with Kitsu")</ID>
|
||||||
|
|||||||
@@ -91,6 +91,9 @@ object ImageUtil {
|
|||||||
// Coil supports animated WebP on Android 9.0+
|
// Coil supports animated WebP on Android 9.0+
|
||||||
// https://coil-kt.github.io/coil/getting_started/#supported-image-formats
|
// https://coil-kt.github.io/coil/getting_started/#supported-image-formats
|
||||||
Format.Webp -> type.isAnimated && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
|
Format.Webp -> type.isAnimated && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
|
||||||
|
// Coil supports animated Heif on Android 11+
|
||||||
|
// https://coil-kt.github.io/coil/getting_started/#supported-image-formats
|
||||||
|
Format.Heif -> type.isAnimated && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ H.time_read
|
|||||||
FROM history H
|
FROM history H
|
||||||
JOIN chapters C
|
JOIN chapters C
|
||||||
ON H.chapter_id = C._id
|
ON H.chapter_id = C._id
|
||||||
WHERE C.url = :chapterUrl AND C._id = H.chapter_id;
|
WHERE C.manga_id = :mangaId AND C.url = :chapterUrl AND C._id = H.chapter_id;
|
||||||
|
|
||||||
resetHistoryById:
|
resetHistoryById:
|
||||||
UPDATE history
|
UPDATE history
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
[versions]
|
[versions]
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
firebase-analytics = "com.google.firebase:firebase-analytics-ktx:21.2.2"
|
firebase-analytics = "com.google.firebase:firebase-analytics-ktx:21.5.1"
|
||||||
firebase-crashlytics-ktx = "com.google.firebase:firebase-crashlytics-ktx:18.3.6"
|
firebase-crashlytics-ktx = "com.google.firebase:firebase-crashlytics-ktx:18.6.2"
|
||||||
firebase-crashlytics-gradle = "com.google.firebase:firebase-crashlytics-gradle:2.9.5"
|
firebase-crashlytics-gradle = "com.google.firebase:firebase-crashlytics-gradle:2.9.9"
|
||||||
|
|
||||||
simularity = "info.debatty:java-string-similarity:2.0.0"
|
simularity = "info.debatty:java-string-similarity:2.0.0"
|
||||||
xlog = "com.elvishew:xlog:1.11.0"
|
xlog = "com.elvishew:xlog:1.11.0"
|
||||||
|
|||||||
@@ -172,6 +172,10 @@
|
|||||||
<string name="library_group_updates_global">總是載入全域更新</string>
|
<string name="library_group_updates_global">總是載入全域更新</string>
|
||||||
<string name="library_group_updates_all_but_ungrouped">僅為未分組的作品載入全域更新,為其他載入目錄更新</string>
|
<string name="library_group_updates_all_but_ungrouped">僅為未分組的作品載入全域更新,為其他載入目錄更新</string>
|
||||||
<string name="library_group_updates_all">每次啟動後載入目錄更新</string>
|
<string name="library_group_updates_all">每次啟動後載入目錄更新</string>
|
||||||
|
<string name="pref_mark_read_dupe_chapters">將重複章節標記為已讀</string>
|
||||||
|
<string name="pref_mark_read_dupe_chapters_summary">閱讀後將重複章節標記為已讀</string>
|
||||||
|
<string name="pref_library_mark_duplicate_chapters">標記新的重複章節為已讀</string>
|
||||||
|
<string name="pref_library_mark_duplicate_chapters_summary">自動將讀過的新章節標記為已讀</string>
|
||||||
|
|
||||||
<!-- Browse settings -->
|
<!-- Browse settings -->
|
||||||
<string name="pref_hide_feed">隱藏訂閱標籤</string>
|
<string name="pref_hide_feed">隱藏訂閱標籤</string>
|
||||||
@@ -311,9 +315,12 @@
|
|||||||
<string name="pref_center_margin">中間空白類型</string>
|
<string name="pref_center_margin">中間空白類型</string>
|
||||||
<string name="pref_center_margin_summary">插入空白以適應可摺疊裝置的螢幕死角。</string>
|
<string name="pref_center_margin_summary">插入空白以適應可摺疊裝置的螢幕死角。</string>
|
||||||
|
|
||||||
<!-- Cache archived manga to disk -->
|
<!-- Archive reader mode -->
|
||||||
<string name="cache_archived_manga_to_disk">快取 CBZ/CBR 檔案中的圖片</string>
|
<string name="archive_mode_load_from_file">從文件加載</string>
|
||||||
<string name="cache_archived_manga_to_disk_subtitle">閱讀時臨時複製壓縮包中的圖片到快取\n可以改善閱讀器的性能</string>
|
<string name="archive_mode_load_into_memory">加載到記憶體中</string>
|
||||||
|
<string name="archive_mode_cache_to_disk">複製到磁碟</string>
|
||||||
|
<string name="pref_archive_reader_mode">檔案讀取模式</string>
|
||||||
|
<string name="pref_archive_reader_mode_summary">加載壓縮文件(如CBZ或CBR)中圖像的方式</string>
|
||||||
|
|
||||||
<!-- Entry Page -->
|
<!-- Entry Page -->
|
||||||
<!-- Entry Info -->
|
<!-- Entry Info -->
|
||||||
|
|||||||
Reference in New Issue
Block a user