diff --git a/lib/models/manga.dart b/lib/models/manga.dart index d15d0676..2ba33566 100644 --- a/lib/models/manga.dart +++ b/lib/models/manga.dart @@ -54,6 +54,8 @@ class Manga { int? updatedAt; + int? sourceId; + @Backlink(to: "manga") final chapters = IsarLinks(); @@ -70,6 +72,7 @@ class Manga { required this.name, required this.status, required this.description, + required this.sourceId, this.isManga, this.itemType = ItemType.manga, this.dateAdded, @@ -107,6 +110,7 @@ class Manga { customCoverFromTracker = json['customCoverFromTracker']; smartUpdateDays = json['smartUpdateDays']; updatedAt = json['updatedAt']; + sourceId = json['sourceId']; } Map toJson() => { @@ -132,6 +136,7 @@ class Manga { 'customCoverFromTracker': customCoverFromTracker, 'smartUpdateDays': smartUpdateDays, 'updatedAt': updatedAt ?? 0, + 'sourceId': sourceId, }; } diff --git a/lib/models/manga.g.dart b/lib/models/manga.g.dart index fae7cabc..c8d0ce3c 100644 --- a/lib/models/manga.g.dart +++ b/lib/models/manga.g.dart @@ -78,14 +78,15 @@ const MangaSchema = CollectionSchema( type: IsarType.long, ), r'source': PropertySchema(id: 19, name: r'source', type: IsarType.string), + r'sourceId': PropertySchema(id: 20, name: r'sourceId', type: IsarType.long), r'status': PropertySchema( - id: 20, + id: 21, name: r'status', type: IsarType.byte, enumMap: _MangastatusEnumValueMap, ), r'updatedAt': PropertySchema( - id: 21, + id: 22, name: r'updatedAt', type: IsarType.long, ), @@ -227,8 +228,9 @@ void _mangaSerialize( writer.writeString(offsets[17], object.name); writer.writeLong(offsets[18], object.smartUpdateDays); writer.writeString(offsets[19], object.source); - writer.writeByte(offsets[20], object.status.index); - writer.writeLong(offsets[21], object.updatedAt); + writer.writeLong(offsets[20], object.sourceId); + writer.writeByte(offsets[21], object.status.index); + writer.writeLong(offsets[22], object.updatedAt); } Manga _mangaDeserialize( @@ -261,10 +263,11 @@ Manga _mangaDeserialize( name: reader.readStringOrNull(offsets[17]), smartUpdateDays: reader.readLongOrNull(offsets[18]), source: reader.readStringOrNull(offsets[19]), + sourceId: reader.readLongOrNull(offsets[20]), status: - _MangastatusValueEnumMap[reader.readByteOrNull(offsets[20])] ?? + _MangastatusValueEnumMap[reader.readByteOrNull(offsets[21])] ?? Status.ongoing, - updatedAt: reader.readLongOrNull(offsets[21]), + updatedAt: reader.readLongOrNull(offsets[22]), ); return object; } @@ -319,10 +322,12 @@ P _mangaDeserializeProp

( case 19: return (reader.readStringOrNull(offset)) as P; case 20: + return (reader.readLongOrNull(offset)) as P; + case 21: return (_MangastatusValueEnumMap[reader.readByteOrNull(offset)] ?? Status.ongoing) as P; - case 21: + case 22: return (reader.readLongOrNull(offset)) as P; default: throw IsarError('Unknown property with id $propertyId'); @@ -2887,6 +2892,81 @@ extension MangaQueryFilter on QueryBuilder { }); } + QueryBuilder sourceIdIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + const FilterCondition.isNull(property: r'sourceId'), + ); + }); + } + + QueryBuilder sourceIdIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'sourceId'), + ); + }); + } + + QueryBuilder sourceIdEqualTo( + int? value, + ) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.equalTo(property: r'sourceId', value: value), + ); + }); + } + + QueryBuilder sourceIdGreaterThan( + int? value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'sourceId', + value: value, + ), + ); + }); + } + + QueryBuilder sourceIdLessThan( + int? value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'sourceId', + value: value, + ), + ); + }); + } + + QueryBuilder sourceIdBetween( + int? lower, + int? upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.between( + property: r'sourceId', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); + }); + } + QueryBuilder statusEqualTo( Status value, ) { @@ -3294,6 +3374,18 @@ extension MangaQuerySortBy on QueryBuilder { }); } + QueryBuilder sortBySourceId() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'sourceId', Sort.asc); + }); + } + + QueryBuilder sortBySourceIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'sourceId', Sort.desc); + }); + } + QueryBuilder sortByStatus() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'status', Sort.asc); @@ -3536,6 +3628,18 @@ extension MangaQuerySortThenBy on QueryBuilder { }); } + QueryBuilder thenBySourceId() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'sourceId', Sort.asc); + }); + } + + QueryBuilder thenBySourceIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'sourceId', Sort.desc); + }); + } + QueryBuilder thenByStatus() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'status', Sort.asc); @@ -3703,6 +3807,12 @@ extension MangaQueryWhereDistinct on QueryBuilder { }); } + QueryBuilder distinctBySourceId() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'sourceId'); + }); + } + QueryBuilder distinctByStatus() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'status'); @@ -3844,6 +3954,12 @@ extension MangaQueryProperty on QueryBuilder { }); } + QueryBuilder sourceIdProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'sourceId'); + }); + } + QueryBuilder statusProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'status'); diff --git a/lib/modules/anime/widgets/search_subtitles.dart b/lib/modules/anime/widgets/search_subtitles.dart index bd0031eb..6df11742 100644 --- a/lib/modules/anime/widgets/search_subtitles.dart +++ b/lib/modules/anime/widgets/search_subtitles.dart @@ -13,7 +13,6 @@ import 'package:mangayomi/services/fetch_subtitles.dart'; import 'package:mangayomi/services/http/m_client.dart'; import 'package:mangayomi/services/http/rhttp/src/model/settings.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; -import 'package:mangayomi/utils/extensions/string_extensions.dart'; import 'package:mangayomi/utils/log/logger.dart'; import 'package:path/path.dart' as path; import 'package:super_sliver_list/super_sliver_list.dart'; @@ -360,13 +359,13 @@ class _SubtitlesWidgetSearchState extends ConsumerState { } AppLogger.log('Subtitle file downloaded: ${subtitle.language}'); await subtitleFile.writeAsBytes(response.bodyBytes); - if (context.mounted) { + if (mounted) { botToast(context.l10n.finished("")); } } catch (e) { AppLogger.log("Failed to download subtitle:", logLevel: LogLevel.error); AppLogger.log(e.toString(), logLevel: LogLevel.error); - if (context.mounted) { + if (mounted) { botToast(context.l10n.failed); } } diff --git a/lib/modules/browse/global_search/global_search_screen.dart b/lib/modules/browse/global_search/global_search_screen.dart index 444a6219..7b3f2e6a 100644 --- a/lib/modules/browse/global_search/global_search_screen.dart +++ b/lib/modules/browse/global_search/global_search_screen.dart @@ -263,6 +263,7 @@ class _MangaGlobalImageCardState extends ConsumerState itemType: widget.source.itemType, useMaterialRoute: true, source: widget.source.name!, + sourceId: widget.source.id, ); }, child: StreamBuilder( @@ -298,6 +299,7 @@ class _MangaGlobalImageCardState extends ConsumerState headersProvider( source: widget.source.name!, lang: widget.source.lang!, + sourceId: widget.source.id, ), ), imageUrl: toImgUrl( diff --git a/lib/modules/calendar/calendar_screen.dart b/lib/modules/calendar/calendar_screen.dart index 036fa065..74eb218d 100644 --- a/lib/modules/calendar/calendar_screen.dart +++ b/lib/modules/calendar/calendar_screen.dart @@ -376,6 +376,7 @@ class CalendarListTileWidget extends ConsumerWidget { headersProvider( source: manga.source!, lang: manga.lang!, + sourceId: manga.sourceId, ), ), ), diff --git a/lib/modules/history/history_screen.dart b/lib/modules/history/history_screen.dart index 44b964bc..0c8d3c65 100644 --- a/lib/modules/history/history_screen.dart +++ b/lib/modules/history/history_screen.dart @@ -402,7 +402,11 @@ class _HistoryTabState extends ConsumerState ? Image.memory(manga.customCoverImage as Uint8List) : cachedCompressedNetworkImage( headers: ref.watch( - headersProvider(source: manga.source!, lang: manga.lang!), + headersProvider( + source: manga.source!, + lang: manga.lang!, + sourceId: manga.sourceId, + ), ), imageUrl: toImgUrl( manga.customCoverFromTracker ?? manga.imageUrl ?? "", diff --git a/lib/modules/library/library_screen.dart b/lib/modules/library/library_screen.dart index 5c115b6f..bdaa0e0b 100644 --- a/lib/modules/library/library_screen.dart +++ b/lib/modules/library/library_screen.dart @@ -2020,6 +2020,7 @@ class _LibraryScreenState extends ConsumerState lang: randomManga.lang!, mangaM: randomManga, source: randomManga.source!, + sourceId: randomManga.sourceId, ); }); } else if (value == 2) { diff --git a/lib/modules/library/providers/add_torrent.dart b/lib/modules/library/providers/add_torrent.dart index 38632e83..a8f88b1a 100644 --- a/lib/modules/library/providers/add_torrent.dart +++ b/lib/modules/library/providers/add_torrent.dart @@ -51,6 +51,7 @@ Future addTorrentFromUrlOrFromFile( isLocalArchive: true, artist: '', updatedAt: dateNow, + sourceId: null, ); if (url != null) { diff --git a/lib/modules/library/providers/add_torrent.g.dart b/lib/modules/library/providers/add_torrent.g.dart index 8faef450..23b1e14e 100644 --- a/lib/modules/library/providers/add_torrent.g.dart +++ b/lib/modules/library/providers/add_torrent.g.dart @@ -7,7 +7,7 @@ part of 'add_torrent.dart'; // ************************************************************************** String _$addTorrentFromUrlOrFromFileHash() => - r'ca841c87c01dd9e9254b99b3223ac67d775ba5b2'; + r'a54f90b6708b13eeb8fed098691f9a79dbab50fd'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/modules/library/providers/file_scanner.dart b/lib/modules/library/providers/file_scanner.dart index fde40b0e..ea1a37db 100644 --- a/lib/modules/library/providers/file_scanner.dart +++ b/lib/modules/library/providers/file_scanner.dart @@ -130,6 +130,7 @@ Future scanLocalLibrary(Ref ref) async { itemType: itemType, dateAdded: dateNow, lastUpdate: dateNow, + sourceId: null, ); newMangas++; } diff --git a/lib/modules/library/providers/file_scanner.g.dart b/lib/modules/library/providers/file_scanner.g.dart index c964774a..02d8d8bf 100644 --- a/lib/modules/library/providers/file_scanner.g.dart +++ b/lib/modules/library/providers/file_scanner.g.dart @@ -6,7 +6,7 @@ part of 'file_scanner.dart'; // RiverpodGenerator // ************************************************************************** -String _$scanLocalLibraryHash() => r'7e028c45097e5802ee974d9f0c5a2bc540bba91c'; +String _$scanLocalLibraryHash() => r'efbad9aa5fa4233e260a2e132389c23b40ef515a'; /// Scans `Mangayomi/local` folder (if exists) for Mangas/Animes and imports in library. /// diff --git a/lib/modules/library/providers/local_archive.dart b/lib/modules/library/providers/local_archive.dart index 14510238..eab3c3b3 100644 --- a/lib/modules/library/providers/local_archive.dart +++ b/lib/modules/library/providers/local_archive.dart @@ -48,6 +48,7 @@ Future importArchivesFromFile( isLocalArchive: true, artist: '', updatedAt: dateNow, + sourceId: null, ); for (var file in result.files.reversed.toList()) { diff --git a/lib/modules/library/providers/local_archive.g.dart b/lib/modules/library/providers/local_archive.g.dart index 13ff5dda..38f0a118 100644 --- a/lib/modules/library/providers/local_archive.g.dart +++ b/lib/modules/library/providers/local_archive.g.dart @@ -7,7 +7,7 @@ part of 'local_archive.dart'; // ************************************************************************** String _$importArchivesFromFileHash() => - r'4d92aaade0544f76214030364433f91d27570b5a'; + r'784b9d45958695faffdf04ee7c105c9b486122de'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/modules/library/widgets/library_gridview_widget.dart b/lib/modules/library/widgets/library_gridview_widget.dart index 75c891ad..1dd9d73b 100644 --- a/lib/modules/library/widgets/library_gridview_widget.dart +++ b/lib/modules/library/widgets/library_gridview_widget.dart @@ -94,6 +94,7 @@ class _LibraryGridViewWidgetState extends State { headersProvider( source: entry.source!, lang: entry.lang!, + sourceId: entry.sourceId, ), ), ), @@ -110,6 +111,7 @@ class _LibraryGridViewWidgetState extends State { lang: entry.lang!, mangaM: entry, source: entry.source!, + sourceId: entry.sourceId, ); if (context.mounted) { ref.invalidate( diff --git a/lib/modules/library/widgets/library_listview_widget.dart b/lib/modules/library/widgets/library_listview_widget.dart index 4dc2e22e..ccbaf0a0 100644 --- a/lib/modules/library/widgets/library_listview_widget.dart +++ b/lib/modules/library/widgets/library_listview_widget.dart @@ -62,6 +62,7 @@ class LibraryListViewWidget extends StatelessWidget { lang: entry.lang!, mangaM: entry, source: entry.source!, + sourceId: entry.sourceId, ); ref.invalidate( getAllMangaWithoutCategoriesStreamProvider( @@ -140,6 +141,7 @@ class LibraryListViewWidget extends StatelessWidget { headersProvider( source: entry.source!, lang: entry.lang!, + sourceId: entry.sourceId, ), ), ), diff --git a/lib/modules/manga/detail/manga_detail_view.dart b/lib/modules/manga/detail/manga_detail_view.dart index f2dbd575..1043c231 100644 --- a/lib/modules/manga/detail/manga_detail_view.dart +++ b/lib/modules/manga/detail/manga_detail_view.dart @@ -293,6 +293,7 @@ class _MangaDetailViewState extends ConsumerState headersProvider( source: widget.manga!.source!, lang: widget.manga!.lang!, + sourceId: widget.manga!.sourceId, ), ), imageUrl: toImgUrl( @@ -651,6 +652,7 @@ class _MangaDetailViewState extends ConsumerState final source = getSource( widget.manga!.lang!, widget.manga!.source!, + widget.manga!.sourceId, ); final url = "${source!.baseUrl}${widget.manga!.link!.getUrlWithoutDomain}"; @@ -670,6 +672,7 @@ class _MangaDetailViewState extends ConsumerState final source = getSource( widget.manga!.lang!, widget.manga!.source!, + widget.manga!.sourceId, ); context.push( '/extension_detail', @@ -1513,6 +1516,7 @@ class _MangaDetailViewState extends ConsumerState final source = getSource( widget.manga!.lang!, widget.manga!.source!, + widget.manga!.sourceId, ); if (source == null) { botToast(l10n.source_not_added); @@ -1827,6 +1831,7 @@ class _MangaDetailViewState extends ConsumerState headersProvider( source: widget.manga!.source!, lang: widget.manga!.lang!, + sourceId: widget.manga!.sourceId, ), ), ); @@ -1889,6 +1894,7 @@ class _MangaDetailViewState extends ConsumerState final source = getSource( widget.manga!.lang!, widget.manga!.source!, + widget.manga!.sourceId, ); final url = "${source!.baseUrl}${widget.manga!.link!.getUrlWithoutDomain}"; diff --git a/lib/modules/manga/detail/providers/update_manga_detail_providers.dart b/lib/modules/manga/detail/providers/update_manga_detail_providers.dart index 884b37a1..488a39b9 100644 --- a/lib/modules/manga/detail/providers/update_manga_detail_providers.dart +++ b/lib/modules/manga/detail/providers/update_manga_detail_providers.dart @@ -25,7 +25,7 @@ Future updateMangaDetail( if (manga!.chapters.isNotEmpty && isInit) { return; } - final source = getSource(manga.lang!, manga.source!); + final source = getSource(manga.lang!, manga.source!, manga.sourceId); MManga getManga; getManga = await ref.read( diff --git a/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart b/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart index d653d649..e23eca1d 100644 --- a/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart +++ b/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart @@ -6,7 +6,7 @@ part of 'update_manga_detail_providers.dart'; // RiverpodGenerator // ************************************************************************** -String _$updateMangaDetailHash() => r'05605c26d058a9176a351ba5a79f811987d4ba1a'; +String _$updateMangaDetailHash() => r'6e4faa1fe453df67182ff6698f1ca54a7fff2bea'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/modules/manga/detail/widgets/migrate_screen.dart b/lib/modules/manga/detail/widgets/migrate_screen.dart index 4c6fceb5..336049fd 100644 --- a/lib/modules/manga/detail/widgets/migrate_screen.dart +++ b/lib/modules/manga/detail/widgets/migrate_screen.dart @@ -310,6 +310,7 @@ class _MigrationMangaGlobalImageCardState headersProvider( source: widget.source.name!, lang: widget.source.lang!, + sourceId: widget.source.id, ), ), imageUrl: toImgUrl( @@ -586,6 +587,7 @@ class _MigrationMangaGlobalImageCardState categories: categoryIds, dateAdded: DateTime.now().millisecondsSinceEpoch, updatedAt: DateTime.now().millisecondsSinceEpoch, + sourceId: widget.source.id, ); int mangaId = -1; isar.writeTxnSync(() { diff --git a/lib/modules/manga/download/providers/download_provider.dart b/lib/modules/manga/download/providers/download_provider.dart index b2b4cef9..0e553ca5 100644 --- a/lib/modules/manga/download/providers/download_provider.dart +++ b/lib/modules/manga/download/providers/download_provider.dart @@ -270,7 +270,11 @@ Future downloadChapter( final cookie = MClient.getCookiesPref(page.url); final headers = itemType == ItemType.manga ? ref.read( - headersProvider(source: manga.source!, lang: manga.lang!), + headersProvider( + source: manga.source!, + lang: manga.lang!, + sourceId: manga.sourceId, + ), ) : itemType == ItemType.anime ? videoHeader diff --git a/lib/modules/manga/reader/reader_view.dart b/lib/modules/manga/reader/reader_view.dart index 4fb4472c..ca06c9b7 100644 --- a/lib/modules/manga/reader/reader_view.dart +++ b/lib/modules/manga/reader/reader_view.dart @@ -1495,7 +1495,11 @@ class _MangaChapterPageGalleryState IconButton( onPressed: () async { final manga = chapter.manga.value!; - final source = getSource(manga.lang!, manga.source!)!; + final source = getSource( + manga.lang!, + manga.source!, + manga.sourceId, + )!; final url = "${source.baseUrl}${chapter.url!.getUrlWithoutDomain}"; Map data = { diff --git a/lib/modules/more/data_and_storage/providers/restore.dart b/lib/modules/more/data_and_storage/providers/restore.dart index 83061de0..15a12c23 100644 --- a/lib/modules/more/data_and_storage/providers/restore.dart +++ b/lib/modules/more/data_and_storage/providers/restore.dart @@ -332,6 +332,7 @@ void restoreKotatsuBackup(Ref ref, Archive archive) { categories: [favourite["category_id"]], itemType: ItemType.manga, favorite: true, + sourceId: null, ); isar.mangas.putSync(manga); } @@ -402,6 +403,7 @@ void restoreTachiBkBackup(Ref ref, String path, BackupType bkType) { favorite: true, dateAdded: tempManga.dateAdded * 1000, lastUpdate: tempManga.lastModifiedAt * 1000, + sourceId: null, ); if (bkType == BackupType.neko) { manga.source = "MangaDex"; @@ -481,6 +483,7 @@ void restoreTachiBkBackup(Ref ref, String path, BackupType bkType) { favorite: true, dateAdded: tempAnime.dateAdded * 1000, lastUpdate: tempAnime.lastModifiedAt * 1000, + sourceId: null, ); isar.mangas.putSync(anime); History? history; diff --git a/lib/modules/more/data_and_storage/providers/restore.g.dart b/lib/modules/more/data_and_storage/providers/restore.g.dart index 1dfb5b14..ac32ac18 100644 --- a/lib/modules/more/data_and_storage/providers/restore.g.dart +++ b/lib/modules/more/data_and_storage/providers/restore.g.dart @@ -286,7 +286,7 @@ class _RestoreBackupProviderElement extends AutoDisposeProviderElement } String _$restoreKotatsuBackupHash() => - r'e927f6a196a0349285fecbd84f30c2a9125998b2'; + r'4b43cb1719527b3030b9966e5ef662c29435425d'; /// See also [restoreKotatsuBackup]. @ProviderFor(restoreKotatsuBackup) @@ -407,7 +407,7 @@ class _RestoreKotatsuBackupProviderElement } String _$restoreTachiBkBackupHash() => - r'ae971c2630393df773eb1d64214b4daefb080b95'; + r'54434eaa9dc875d03ffb1dcf62ad2d7971649d61'; /// See also [restoreTachiBkBackup]. @ProviderFor(restoreTachiBkBackup) diff --git a/lib/modules/novel/novel_reader_view.dart b/lib/modules/novel/novel_reader_view.dart index 2a54371d..37506ccb 100644 --- a/lib/modules/novel/novel_reader_view.dart +++ b/lib/modules/novel/novel_reader_view.dart @@ -418,7 +418,11 @@ class _NovelWebViewState extends ConsumerState IconButton( onPressed: () async { final manga = chapter.manga.value!; - final source = getSource(manga.lang!, manga.source!)!; + final source = getSource( + manga.lang!, + manga.source!, + manga.sourceId, + )!; String url = chapter.url!.startsWith('/') ? "${source.baseUrl}/${chapter.url!}" : chapter.url!; diff --git a/lib/modules/tracker_library/tracker_item_card.dart b/lib/modules/tracker_library/tracker_item_card.dart index 326c276b..07215c92 100644 --- a/lib/modules/tracker_library/tracker_item_card.dart +++ b/lib/modules/tracker_library/tracker_item_card.dart @@ -284,6 +284,7 @@ class TrackerItemCard extends StatelessWidget { link: null, status: Status.unknown, description: "", + sourceId: null, ), track, ), diff --git a/lib/modules/updates/widgets/update_chapter_list_tile_widget.dart b/lib/modules/updates/widgets/update_chapter_list_tile_widget.dart index 40b162c2..4ec472ae 100644 --- a/lib/modules/updates/widgets/update_chapter_list_tile_widget.dart +++ b/lib/modules/updates/widgets/update_chapter_list_tile_widget.dart @@ -71,6 +71,7 @@ class UpdateChapterListTileWidget extends ConsumerWidget { headersProvider( source: manga.source!, lang: manga.lang!, + sourceId: manga.sourceId, ), ), ), diff --git a/lib/modules/widgets/manga_image_card_widget.dart b/lib/modules/widgets/manga_image_card_widget.dart index faf8b92d..e325dbd3 100644 --- a/lib/modules/widgets/manga_image_card_widget.dart +++ b/lib/modules/widgets/manga_image_card_widget.dart @@ -61,7 +61,11 @@ class MangaImageCardWidget extends ConsumerWidget { : getMangaDetail!.imageUrl ?? "", ), headers: ref.watch( - headersProvider(source: source.name!, lang: source.lang!), + headersProvider( + source: source.name!, + lang: source.lang!, + sourceId: source.id, + ), ), cache: true, cacheMaxAge: const Duration(days: 7), @@ -74,6 +78,7 @@ class MangaImageCardWidget extends ConsumerWidget { lang: source.lang!, source: source.name!, itemType: itemType, + sourceId: source.id, ); }, onLongPress: () { @@ -85,6 +90,7 @@ class MangaImageCardWidget extends ConsumerWidget { source: source.name!, itemType: itemType, addToFavourite: true, + sourceId: source.id, ); }, onSecondaryTap: () { @@ -96,6 +102,7 @@ class MangaImageCardWidget extends ConsumerWidget { source: source.name!, itemType: itemType, addToFavourite: true, + sourceId: source.id, ); }, children: [ @@ -173,7 +180,11 @@ class MangaImageCardListTileWidget extends ConsumerWidget { : getMangaDetail!.imageUrl ?? "", ), headers: ref.watch( - headersProvider(source: source.name!, lang: source.lang!), + headersProvider( + source: source.name!, + lang: source.lang!, + sourceId: source.id, + ), ), ); return Padding( @@ -191,6 +202,7 @@ class MangaImageCardListTileWidget extends ConsumerWidget { lang: source.lang!, source: source.name!, itemType: itemType, + sourceId: source.id, ); }, onLongPress: () { @@ -202,6 +214,7 @@ class MangaImageCardListTileWidget extends ConsumerWidget { source: source.name!, itemType: itemType, addToFavourite: true, + sourceId: source.id, ); }, onSecondaryTap: () { @@ -213,6 +226,7 @@ class MangaImageCardListTileWidget extends ConsumerWidget { source: source.name!, itemType: itemType, addToFavourite: true, + sourceId: source.id, ); }, child: Row( @@ -286,6 +300,7 @@ Future pushToMangaReaderDetail({ required String lang, required BuildContext context, required String source, + required int? sourceId, int? archiveId, Manga? mangaM, ItemType? itemType, @@ -309,6 +324,7 @@ Future pushToMangaReaderDetail({ lastUpdate: 0, itemType: itemType ?? ItemType.manga, artist: getManga.artist ?? '', + sourceId: sourceId, ); final empty = isar.mangas .filter() @@ -334,7 +350,12 @@ Future pushToMangaReaderDetail({ } else { mangaId = archiveId; } - + final mang = isar.mangas.getSync(mangaId); + if (mang!.sourceId == null) { + isar.writeTxnSync(() { + isar.mangas.putSync(mang..sourceId = sourceId); + }); + } final settings = isar.settings.getSync(227)!; final sortList = settings.sortChapterList ?? []; final checkIfExist = sortList diff --git a/lib/services/aniskip.g.dart b/lib/services/aniskip.g.dart index f7d0b025..95f27f5b 100644 --- a/lib/services/aniskip.g.dart +++ b/lib/services/aniskip.g.dart @@ -6,7 +6,7 @@ part of 'aniskip.dart'; // RiverpodGenerator // ************************************************************************** -String _$aniSkipHash() => r'2e5d19b025a2207ff64da7bf7908450ea9e5ff8c'; +String _$aniSkipHash() => r'887869b54e2e151633efd46da83bde845e14f421'; /// See also [AniSkip]. @ProviderFor(AniSkip) diff --git a/lib/services/get_chapter_pages.dart b/lib/services/get_chapter_pages.dart index 907e050b..d3129850 100644 --- a/lib/services/get_chapter_pages.dart +++ b/lib/services/get_chapter_pages.dart @@ -63,6 +63,7 @@ Future getChapterPages( final source = getSource( chapter.manga.value!.lang!, chapter.manga.value!.source!, + chapter.manga.value!.sourceId, )!; if ((isarPageUrls?.urls?.isNotEmpty ?? false) && (isarPageUrls?.chapterUrl ?? chapter.url) == chapter.url) { diff --git a/lib/services/get_chapter_pages.g.dart b/lib/services/get_chapter_pages.g.dart index 1e1a160a..6923136c 100644 --- a/lib/services/get_chapter_pages.g.dart +++ b/lib/services/get_chapter_pages.g.dart @@ -6,7 +6,7 @@ part of 'get_chapter_pages.dart'; // RiverpodGenerator // ************************************************************************** -String _$getChapterPagesHash() => r'8f6d2d661593fc5537f4dda83abea8d46d65b027'; +String _$getChapterPagesHash() => r'129624607a92b6d3a896a03b450862ce1e941ff6'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/services/get_html_content.dart b/lib/services/get_html_content.dart index 856febd2..15a0b528 100644 --- a/lib/services/get_html_content.dart +++ b/lib/services/get_html_content.dart @@ -47,6 +47,7 @@ Future<(String, EpubBook?)> getHtmlContent( final source = getSource( chapter.manga.value!.lang!, chapter.manga.value!.source!, + chapter.manga.value!.sourceId, ); String? html; final proxyServer = ref.read(androidProxyServerStateProvider); diff --git a/lib/services/get_html_content.g.dart b/lib/services/get_html_content.g.dart index 3d7dd0dc..c954812d 100644 --- a/lib/services/get_html_content.g.dart +++ b/lib/services/get_html_content.g.dart @@ -6,7 +6,7 @@ part of 'get_html_content.dart'; // RiverpodGenerator // ************************************************************************** -String _$getHtmlContentHash() => r'c32670ed25b093761c867f5cf1cb5dfe063edc84'; +String _$getHtmlContentHash() => r'fa74506c0adebbdb7a0dda5a8d16a784466b79bb'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/services/get_video_list.dart b/lib/services/get_video_list.dart index 6ec34d59..31db1bce 100644 --- a/lib/services/get_video_list.dart +++ b/lib/services/get_video_list.dart @@ -56,12 +56,13 @@ Future<(List