saving novel chapter progress + removed sync for now
This commit is contained in:
parent
c01aa6d023
commit
3bc85cf5aa
33 changed files with 141 additions and 2962 deletions
|
|
@ -18,8 +18,6 @@ import 'package:mangayomi/modules/more/settings/appearance/providers/blend_level
|
|||
import 'package:mangayomi/modules/more/settings/appearance/providers/flex_scheme_color_state_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/appearance/providers/pure_black_dark_mode_state_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/appearance/providers/theme_mode_state_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/services/sync_server.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:mangayomi/src/rust/frb_generated.dart';
|
||||
import 'package:media_kit/media_kit.dart';
|
||||
|
|
@ -82,10 +80,6 @@ class _MyAppState extends ConsumerState<MyApp> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final syncOnAppLaunch = ref.watch(syncOnAppLaunchStateProvider);
|
||||
if (syncOnAppLaunch) {
|
||||
ref.read(syncServerProvider(syncId: 1).notifier).checkForSync(true);
|
||||
}
|
||||
final isDarkTheme = ref.watch(themeModeStateProvider);
|
||||
final blendLevel = ref.watch(blendLevelStateProvider);
|
||||
final appFontFamily = ref.watch(appFontFamilyProvider);
|
||||
|
|
|
|||
|
|
@ -1,86 +0,0 @@
|
|||
import 'package:isar/isar.dart';
|
||||
part 'changed_items.g.dart';
|
||||
|
||||
@collection
|
||||
@Name("Changed Items")
|
||||
class ChangedItems {
|
||||
Id? id;
|
||||
List<DeletedManga>? deletedMangas;
|
||||
List<UpdatedChapter>? updatedChapters;
|
||||
List<DeletedCategory>? deletedCategories;
|
||||
ChangedItems(
|
||||
{this.id = Isar.autoIncrement,
|
||||
this.deletedMangas = const [],
|
||||
this.updatedChapters = const [],
|
||||
this.deletedCategories = const []});
|
||||
|
||||
ChangedItems.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
deletedMangas = json['deletedMangas'];
|
||||
updatedChapters = json['updatedChapters'];
|
||||
deletedCategories = json['deletedCategories'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'deletedMangas': deletedMangas,
|
||||
'updatedChapters': updatedChapters,
|
||||
'deletedCategories': deletedCategories
|
||||
};
|
||||
}
|
||||
|
||||
@embedded
|
||||
class DeletedManga {
|
||||
int? mangaId;
|
||||
DeletedManga({this.mangaId});
|
||||
DeletedManga.fromJson(Map<String, dynamic> json) {
|
||||
mangaId = json['mangaId'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {'mangaId': mangaId};
|
||||
}
|
||||
|
||||
@embedded
|
||||
class UpdatedChapter {
|
||||
int? chapterId;
|
||||
int? mangaId;
|
||||
bool? isBookmarked;
|
||||
bool? isRead;
|
||||
String? lastPageRead;
|
||||
bool? deleted;
|
||||
UpdatedChapter(
|
||||
{this.chapterId,
|
||||
this.mangaId,
|
||||
this.isBookmarked,
|
||||
this.isRead,
|
||||
this.lastPageRead,
|
||||
this.deleted});
|
||||
UpdatedChapter.fromJson(Map<String, dynamic> json) {
|
||||
chapterId = json['chapterId'];
|
||||
mangaId = json['mangaId'];
|
||||
isBookmarked = json['isBookmarked'];
|
||||
isRead = json['isRead'];
|
||||
lastPageRead = json['lastPageRead'];
|
||||
deleted = json['deleted'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'chapterId': chapterId,
|
||||
'mangaId': mangaId,
|
||||
'isBookmarked': isBookmarked,
|
||||
'isRead': isRead,
|
||||
'lastPageRead': lastPageRead,
|
||||
'deleted': deleted
|
||||
};
|
||||
}
|
||||
|
||||
@embedded
|
||||
class DeletedCategory {
|
||||
int? categoryId;
|
||||
DeletedCategory({this.categoryId});
|
||||
DeletedCategory.fromJson(Map<String, dynamic> json) {
|
||||
categoryId = json['categoryId'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {'categoryId': categoryId};
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -135,10 +135,6 @@ class Settings {
|
|||
|
||||
List<int>? backupFrequencyOptions;
|
||||
|
||||
bool? syncOnAppLaunch;
|
||||
|
||||
bool? syncAfterReading;
|
||||
|
||||
String? autoBackupLocation;
|
||||
|
||||
bool? usePageTapZones;
|
||||
|
|
@ -276,8 +272,6 @@ class Settings {
|
|||
this.personalPageModeList,
|
||||
this.backupFrequency,
|
||||
this.backupFrequencyOptions,
|
||||
this.syncOnAppLaunch,
|
||||
this.syncAfterReading,
|
||||
this.autoBackupLocation,
|
||||
this.startDatebackup,
|
||||
this.usePageTapZones = true,
|
||||
|
|
@ -436,8 +430,6 @@ class Settings {
|
|||
userAgent = json['userAgent'];
|
||||
backupFrequency = json['backupFrequency'];
|
||||
backupFrequencyOptions = json['backupFrequencyOptions']?.cast<int>();
|
||||
syncOnAppLaunch = json['syncOnAppLaunch'];
|
||||
syncAfterReading = json['syncAfterReading'];
|
||||
autoBackupLocation = json['autoBackupLocation'];
|
||||
startDatebackup = json['startDatebackup'];
|
||||
usePageTapZones = json['usePageTapZones'];
|
||||
|
|
@ -559,8 +551,6 @@ class Settings {
|
|||
'userAgent': userAgent,
|
||||
'backupFrequency': backupFrequency,
|
||||
'backupFrequencyOptions': backupFrequencyOptions,
|
||||
'syncOnAppLaunch': syncOnAppLaunch,
|
||||
'syncAfterReading': syncAfterReading,
|
||||
'autoBackupLocation': autoBackupLocation,
|
||||
'startDatebackup': startDatebackup,
|
||||
'usePageTapZones': usePageTapZones,
|
||||
|
|
|
|||
|
|
@ -508,38 +508,28 @@ const SettingsSchema = CollectionSchema(
|
|||
name: r'startDatebackup',
|
||||
type: IsarType.long,
|
||||
),
|
||||
r'syncAfterReading': PropertySchema(
|
||||
id: 93,
|
||||
name: r'syncAfterReading',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'syncOnAppLaunch': PropertySchema(
|
||||
id: 94,
|
||||
name: r'syncOnAppLaunch',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'themeIsDark': PropertySchema(
|
||||
id: 95,
|
||||
id: 93,
|
||||
name: r'themeIsDark',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'updateProgressAfterReading': PropertySchema(
|
||||
id: 96,
|
||||
id: 94,
|
||||
name: r'updateProgressAfterReading',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'useLibass': PropertySchema(
|
||||
id: 97,
|
||||
id: 95,
|
||||
name: r'useLibass',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'usePageTapZones': PropertySchema(
|
||||
id: 98,
|
||||
id: 96,
|
||||
name: r'usePageTapZones',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'userAgent': PropertySchema(
|
||||
id: 99,
|
||||
id: 97,
|
||||
name: r'userAgent',
|
||||
type: IsarType.string,
|
||||
)
|
||||
|
|
@ -1017,13 +1007,11 @@ void _settingsSerialize(
|
|||
object.sortLibraryNovel,
|
||||
);
|
||||
writer.writeLong(offsets[92], object.startDatebackup);
|
||||
writer.writeBool(offsets[93], object.syncAfterReading);
|
||||
writer.writeBool(offsets[94], object.syncOnAppLaunch);
|
||||
writer.writeBool(offsets[95], object.themeIsDark);
|
||||
writer.writeBool(offsets[96], object.updateProgressAfterReading);
|
||||
writer.writeBool(offsets[97], object.useLibass);
|
||||
writer.writeBool(offsets[98], object.usePageTapZones);
|
||||
writer.writeString(offsets[99], object.userAgent);
|
||||
writer.writeBool(offsets[93], object.themeIsDark);
|
||||
writer.writeBool(offsets[94], object.updateProgressAfterReading);
|
||||
writer.writeBool(offsets[95], object.useLibass);
|
||||
writer.writeBool(offsets[96], object.usePageTapZones);
|
||||
writer.writeString(offsets[97], object.userAgent);
|
||||
}
|
||||
|
||||
Settings _settingsDeserialize(
|
||||
|
|
@ -1200,13 +1188,11 @@ Settings _settingsDeserialize(
|
|||
allOffsets,
|
||||
),
|
||||
startDatebackup: reader.readLongOrNull(offsets[92]),
|
||||
syncAfterReading: reader.readBoolOrNull(offsets[93]),
|
||||
syncOnAppLaunch: reader.readBoolOrNull(offsets[94]),
|
||||
themeIsDark: reader.readBoolOrNull(offsets[95]),
|
||||
updateProgressAfterReading: reader.readBoolOrNull(offsets[96]),
|
||||
useLibass: reader.readBoolOrNull(offsets[97]),
|
||||
usePageTapZones: reader.readBoolOrNull(offsets[98]),
|
||||
userAgent: reader.readStringOrNull(offsets[99]),
|
||||
themeIsDark: reader.readBoolOrNull(offsets[93]),
|
||||
updateProgressAfterReading: reader.readBoolOrNull(offsets[94]),
|
||||
useLibass: reader.readBoolOrNull(offsets[95]),
|
||||
usePageTapZones: reader.readBoolOrNull(offsets[96]),
|
||||
userAgent: reader.readStringOrNull(offsets[97]),
|
||||
);
|
||||
object.chapterFilterBookmarkedList =
|
||||
reader.readObjectList<ChapterFilterBookmarked>(
|
||||
|
|
@ -1533,10 +1519,6 @@ P _settingsDeserializeProp<P>(
|
|||
case 96:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 97:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 98:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 99:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
default:
|
||||
throw IsarError('Unknown property with id $propertyId');
|
||||
|
|
@ -7545,62 +7527,6 @@ extension SettingsQueryFilter
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
syncAfterReadingIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
property: r'syncAfterReading',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
syncAfterReadingIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||
property: r'syncAfterReading',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
syncAfterReadingEqualTo(bool? value) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'syncAfterReading',
|
||||
value: value,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
syncOnAppLaunchIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
property: r'syncOnAppLaunch',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
syncOnAppLaunchIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||
property: r'syncOnAppLaunch',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
syncOnAppLaunchEqualTo(bool? value) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'syncOnAppLaunch',
|
||||
value: value,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition> themeIsDarkIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
|
|
@ -9032,30 +8958,6 @@ extension SettingsQuerySortBy on QueryBuilder<Settings, Settings, QSortBy> {
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> sortBySyncAfterReading() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'syncAfterReading', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> sortBySyncAfterReadingDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'syncAfterReading', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> sortBySyncOnAppLaunch() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'syncOnAppLaunch', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> sortBySyncOnAppLaunchDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'syncOnAppLaunch', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> sortByThemeIsDark() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'themeIsDark', Sort.asc);
|
||||
|
|
@ -10122,30 +10024,6 @@ extension SettingsQuerySortThenBy
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> thenBySyncAfterReading() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'syncAfterReading', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> thenBySyncAfterReadingDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'syncAfterReading', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> thenBySyncOnAppLaunch() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'syncOnAppLaunch', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> thenBySyncOnAppLaunchDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'syncOnAppLaunch', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> thenByThemeIsDark() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'themeIsDark', Sort.asc);
|
||||
|
|
@ -10715,18 +10593,6 @@ extension SettingsQueryWhereDistinct
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QDistinct> distinctBySyncAfterReading() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'syncAfterReading');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QDistinct> distinctBySyncOnAppLaunch() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'syncOnAppLaunch');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QDistinct> distinctByThemeIsDark() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'themeIsDark');
|
||||
|
|
@ -11393,18 +11259,6 @@ extension SettingsQueryProperty
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, bool?, QQueryOperations> syncAfterReadingProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'syncAfterReading');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, bool?, QQueryOperations> syncOnAppLaunchProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'syncOnAppLaunch');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, bool?, QQueryOperations> themeIsDarkProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'themeIsDark');
|
||||
|
|
|
|||
|
|
@ -324,7 +324,6 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
|
|||
_currentPosition.value, _currentTotalDuration.value,
|
||||
save: save);
|
||||
_streamController.setAnimeHistoryUpdate();
|
||||
_streamController.checkAndSyncProgress();
|
||||
}
|
||||
|
||||
void _setLandscapeMode(bool state) {
|
||||
|
|
|
|||
|
|
@ -7,9 +7,7 @@ import 'package:mangayomi/models/settings.dart';
|
|||
import 'package:mangayomi/models/track.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/providers/reader_controller_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/player/providers/player_state_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/services/aniskip.dart';
|
||||
import 'package:mangayomi/services/sync_server.dart';
|
||||
import 'package:mangayomi/utils/chapter_recognition.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'anime_player_controller_provider.g.dart';
|
||||
|
|
@ -151,13 +149,6 @@ class AnimeStreamController extends _$AnimeStreamController {
|
|||
});
|
||||
}
|
||||
|
||||
void checkAndSyncProgress() {
|
||||
final syncAfterReading = ref.watch(syncAfterReadingStateProvider);
|
||||
if (syncAfterReading) {
|
||||
ref.read(syncServerProvider(syncId: 1).notifier).checkForSync(true);
|
||||
}
|
||||
}
|
||||
|
||||
void setCurrentPosition(Duration duration, Duration? totalDuration,
|
||||
{bool save = false}) {
|
||||
if (episode.isRead!) return;
|
||||
|
|
@ -174,9 +165,6 @@ class AnimeStreamController extends _$AnimeStreamController {
|
|||
isar.writeTxnSync(() {
|
||||
ep.isRead = isWatch;
|
||||
ep.lastPageRead = (duration.inMilliseconds).toString();
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.addUpdatedChapter(ep, false, false);
|
||||
isar.chapters.putSync(ep);
|
||||
});
|
||||
if (isWatch) {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ part of 'anime_player_controller_provider.dart';
|
|||
// **************************************************************************
|
||||
|
||||
String _$animeStreamControllerHash() =>
|
||||
r'd3ec7fe7ac2af84393b128e430fd2f5b9224ed14';
|
||||
r'57ebd35f033d51fd213763173c26cd887f5c42d7';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import 'package:mangayomi/models/chapter.dart';
|
|||
import 'package:mangayomi/models/history.dart';
|
||||
import 'package:mangayomi/models/manga.dart';
|
||||
import 'package:mangayomi/modules/history/providers/isar_providers.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
import 'package:mangayomi/utils/cached_network.dart';
|
||||
import 'package:mangayomi/utils/constant.dart';
|
||||
|
|
@ -380,29 +379,12 @@ class _HistoryTabState extends ConsumerState<HistoryTab> {
|
|||
.id!);
|
||||
for (var chapter
|
||||
in chapters) {
|
||||
await ref
|
||||
.read(changedItemsManagerProvider(
|
||||
managerId:
|
||||
1)
|
||||
.notifier)
|
||||
.addUpdatedChapterAsync(
|
||||
chapter,
|
||||
true,
|
||||
false);
|
||||
await isar
|
||||
.chapters
|
||||
.delete(
|
||||
chapter
|
||||
.id!);
|
||||
}
|
||||
await ref
|
||||
.read(changedItemsManagerProvider(
|
||||
managerId:
|
||||
1)
|
||||
.notifier)
|
||||
.addDeletedMangaAsync(
|
||||
manga,
|
||||
false);
|
||||
await isar.mangas
|
||||
.delete(manga
|
||||
.id!);
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ import 'package:mangayomi/modules/library/providers/add_torrent.dart';
|
|||
import 'package:mangayomi/modules/library/providers/local_archive.dart';
|
||||
import 'package:mangayomi/modules/manga/detail/providers/update_manga_detail_providers.dart';
|
||||
import 'package:mangayomi/modules/more/categories/providers/isar_providers.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/modules/widgets/custom_draggable_tabbar.dart';
|
||||
import 'package:mangayomi/modules/widgets/manga_image_card_widget.dart';
|
||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
|
|
@ -1163,12 +1162,6 @@ class _LibraryScreenState extends ConsumerState<LibraryScreen>
|
|||
}
|
||||
|
||||
for (var chapter in manga.chapters) {
|
||||
ref
|
||||
.read(changedItemsManagerProvider(
|
||||
managerId: 1)
|
||||
.notifier)
|
||||
.addUpdatedChapter(
|
||||
chapter, true, false);
|
||||
isar.updates
|
||||
.filter()
|
||||
.mangaIdEqualTo(chapter.mangaId)
|
||||
|
|
@ -1176,11 +1169,6 @@ class _LibraryScreenState extends ConsumerState<LibraryScreen>
|
|||
.deleteAllSync();
|
||||
isar.chapters.deleteSync(chapter.id!);
|
||||
}
|
||||
ref
|
||||
.read(changedItemsManagerProvider(
|
||||
managerId: 1)
|
||||
.notifier)
|
||||
.addDeletedManga(manga, false);
|
||||
isar.mangas.deleteSync(manga.id!);
|
||||
} else {
|
||||
manga.favorite = false;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import 'package:mangayomi/models/chapter.dart';
|
|||
import 'package:mangayomi/models/manga.dart';
|
||||
import 'package:mangayomi/models/settings.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/providers/reader_controller_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'library_state_provider.g.dart';
|
||||
|
|
@ -786,9 +785,6 @@ class MangasSetIsReadState extends _$MangasSetIsReadState {
|
|||
for (var chapter in chapters) {
|
||||
chapter.isRead = true;
|
||||
chapter.lastPageRead = "1";
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.addUpdatedChapter(chapter, false, false);
|
||||
isar.chapters.putSync(chapter..manga.value = manga);
|
||||
chapter.manga.saveSync();
|
||||
}
|
||||
|
|
@ -813,9 +809,6 @@ class MangasSetUnReadState extends _$MangasSetUnReadState {
|
|||
isar.writeTxnSync(() {
|
||||
for (var chapter in chapters) {
|
||||
chapter.isRead = false;
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.addUpdatedChapter(chapter, false, false);
|
||||
isar.chapters.putSync(chapter..manga.value = manga);
|
||||
chapter.manga.saveSync();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2551,7 +2551,7 @@ final isLongPressedMangaStateProvider =
|
|||
|
||||
typedef _$IsLongPressedMangaState = AutoDisposeNotifier<bool>;
|
||||
String _$mangasSetIsReadStateHash() =>
|
||||
r'cb88914fe1c47c1e3a29d43c23a6652b0e8f2ac1';
|
||||
r'8f86296f588a48747de625e0471048978ee9bdeb';
|
||||
|
||||
abstract class _$MangasSetIsReadState
|
||||
extends BuildlessAutoDisposeNotifier<void> {
|
||||
|
|
@ -2698,7 +2698,7 @@ class _MangasSetIsReadStateProviderElement
|
|||
}
|
||||
|
||||
String _$mangasSetUnReadStateHash() =>
|
||||
r'7b2f4c579f9cb392830ed4d70aff9ccc3e7952a0';
|
||||
r'3413e731b2fd8476a4032d3e47b943ca12f25090';
|
||||
|
||||
abstract class _$MangasSetUnReadState
|
||||
extends BuildlessAutoDisposeNotifier<void> {
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ import 'package:mangayomi/modules/manga/detail/widgets/tracker_search_widget.dar
|
|||
import 'package:mangayomi/modules/manga/detail/widgets/tracker_widget.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/providers/reader_controller_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/appearance/providers/pure_black_dark_mode_state_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/modules/more/settings/track/widgets/track_listile.dart';
|
||||
import 'package:mangayomi/modules/widgets/custom_draggable_tabbar.dart';
|
||||
import 'package:mangayomi/modules/widgets/custom_extended_image_provider.dart';
|
||||
|
|
@ -733,11 +732,6 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
|
|||
isar.writeTxnSync(() {
|
||||
for (var chapter in chapters) {
|
||||
chapter.isBookmarked = !chapter.isBookmarked!;
|
||||
ref
|
||||
.read(changedItemsManagerProvider(
|
||||
managerId: 1)
|
||||
.notifier)
|
||||
.addUpdatedChapter(chapter, false, false);
|
||||
isar.chapters.putSync(
|
||||
chapter..manga.value = widget.manga);
|
||||
chapter.manga.saveSync();
|
||||
|
|
@ -778,11 +772,6 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
|
|||
if (!chapter.isRead!) {
|
||||
chapter.lastPageRead = "1";
|
||||
}
|
||||
ref
|
||||
.read(changedItemsManagerProvider(
|
||||
managerId: 1)
|
||||
.notifier)
|
||||
.addUpdatedChapter(chapter, false, false);
|
||||
isar.chapters.putSync(
|
||||
chapter..manga.value = widget.manga);
|
||||
chapter.manga.saveSync();
|
||||
|
|
@ -828,12 +817,6 @@ class _MangaDetailViewState extends ConsumerState<MangaDetailView>
|
|||
if (!chapters[i].isRead!) {
|
||||
chapters[i].isRead = true;
|
||||
chapters[i].lastPageRead = "1";
|
||||
ref
|
||||
.read(changedItemsManagerProvider(
|
||||
managerId: 1)
|
||||
.notifier)
|
||||
.addUpdatedChapter(
|
||||
chapters[i], false, false);
|
||||
isar.chapters.putSync(chapters[i]
|
||||
..manga.value = widget.manga);
|
||||
chapters[i].manga.saveSync();
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import 'package:mangayomi/models/download.dart';
|
|||
import 'package:mangayomi/models/manga.dart';
|
||||
import 'package:mangayomi/models/settings.dart';
|
||||
import 'package:mangayomi/modules/manga/download/providers/download_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'state_providers.g.dart';
|
||||
|
||||
|
|
@ -310,9 +309,6 @@ class ChapterSetIsBookmarkState extends _$ChapterSetIsBookmarkState {
|
|||
isar.writeTxnSync(() {
|
||||
for (var chapter in chapters) {
|
||||
chapter.isBookmarked = !chapter.isBookmarked!;
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.addUpdatedChapter(chapter, false, false);
|
||||
isar.chapters.putSync(chapter..manga.value = manga);
|
||||
chapter.manga.saveSync();
|
||||
}
|
||||
|
|
@ -332,9 +328,6 @@ class ChapterSetIsReadState extends _$ChapterSetIsReadState {
|
|||
isar.writeTxnSync(() {
|
||||
for (var chapter in chapters) {
|
||||
chapter.isRead = !chapter.isRead!;
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.addUpdatedChapter(chapter, false, false);
|
||||
isar.chapters.putSync(chapter..manga.value = manga);
|
||||
chapter.manga.saveSync();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -816,7 +816,7 @@ class _ChapterFilterResultStateProviderElement
|
|||
}
|
||||
|
||||
String _$chapterSetIsBookmarkStateHash() =>
|
||||
r'48d4f203ba51616e9d1142e0dd482d3ae065a4f4';
|
||||
r'113131bb13e50566390ee3e34aa2f08820a8870c';
|
||||
|
||||
abstract class _$ChapterSetIsBookmarkState
|
||||
extends BuildlessAutoDisposeNotifier<void> {
|
||||
|
|
@ -963,7 +963,7 @@ class _ChapterSetIsBookmarkStateProviderElement
|
|||
}
|
||||
|
||||
String _$chapterSetIsReadStateHash() =>
|
||||
r'1e219dd68898fc30b6cb64d294377776516775d4';
|
||||
r'c319f81ec30565ad81a28cb0a8ce7fddcb47cd77';
|
||||
|
||||
abstract class _$ChapterSetIsReadState
|
||||
extends BuildlessAutoDisposeNotifier<void> {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import 'package:mangayomi/main.dart';
|
|||
import 'package:mangayomi/models/chapter.dart';
|
||||
import 'package:mangayomi/models/update.dart';
|
||||
import 'package:mangayomi/models/manga.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/services/get_detail.dart';
|
||||
import 'package:mangayomi/utils/utils.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
|
@ -80,9 +79,6 @@ Future<dynamic> updateMangaDetail(Ref ref,
|
|||
}
|
||||
if (chapters.isNotEmpty) {
|
||||
for (var chap in chapters.reversed.toList()) {
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.addUpdatedChapter(chap, false, false);
|
||||
isar.chapters.putSync(chap);
|
||||
chap.manga.saveSync();
|
||||
if (manga.chapters.isNotEmpty) {
|
||||
|
|
@ -108,9 +104,6 @@ Future<dynamic> updateMangaDetail(Ref ref,
|
|||
newChap.name == oldChap.name) {
|
||||
oldChap.url = newChap.url;
|
||||
oldChap.scanlator = newChap.scanlator;
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.addUpdatedChapter(oldChap, false, false);
|
||||
isar.chapters.putSync(oldChap);
|
||||
oldChap.manga.saveSync();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'update_manga_detail_providers.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$updateMangaDetailHash() => r'a058dcca7f99974e89fce2aa7f048edf1a0f7854';
|
||||
String _$updateMangaDetailHash() => r'57330e79e3d1afcd9db5e8e0587bbc23d1e02379';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -11,9 +11,7 @@ import 'package:mangayomi/models/track.dart';
|
|||
import 'package:mangayomi/models/track_preference.dart';
|
||||
import 'package:mangayomi/modules/manga/detail/providers/track_state_providers.dart';
|
||||
import 'package:mangayomi/modules/more/providers/incognito_mode_state_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/modules/more/settings/track/providers/track_providers.dart';
|
||||
import 'package:mangayomi/services/sync_server.dart';
|
||||
import 'package:mangayomi/utils/chapter_recognition.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'reader_controller_provider.g.dart';
|
||||
|
|
@ -189,22 +187,12 @@ class ReaderController extends _$ReaderController {
|
|||
});
|
||||
}
|
||||
|
||||
void checkAndSyncProgress() {
|
||||
final syncAfterReading = ref.watch(syncAfterReadingStateProvider);
|
||||
if (syncAfterReading) {
|
||||
ref.read(syncServerProvider(syncId: 1).notifier).checkForSync(true);
|
||||
}
|
||||
}
|
||||
|
||||
void setChapterBookmarked() {
|
||||
if (incognitoMode) return;
|
||||
final isBookmarked = getChapterBookmarked();
|
||||
final chap = chapter;
|
||||
isar.writeTxnSync(() {
|
||||
chap.isBookmarked = !isBookmarked;
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.addUpdatedChapter(chap, false, false);
|
||||
isar.chapters.putSync(chap);
|
||||
});
|
||||
}
|
||||
|
|
@ -342,9 +330,6 @@ class ReaderController extends _$ReaderController {
|
|||
getIsarSetting()..chapterPageIndexList = chapterPageIndexs);
|
||||
chap.isRead = isRead;
|
||||
chap.lastPageRead = isRead ? '1' : (newIndex + 1).toString();
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.addUpdatedChapter(chap, false, false);
|
||||
isar.chapters.putSync(chap);
|
||||
});
|
||||
if (isRead) {
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ class _CurrentIndexProviderElement
|
|||
Chapter get chapter => (origin as CurrentIndexProvider).chapter;
|
||||
}
|
||||
|
||||
String _$readerControllerHash() => r'6576f3506dc5ef309f870de3e5c6e92efe03eefd';
|
||||
String _$readerControllerHash() => r'471617bf6fa730d837c8e0d9504bde17cfb635a8';
|
||||
|
||||
abstract class _$ReaderController extends BuildlessAutoDisposeNotifier<void> {
|
||||
late final Chapter chapter;
|
||||
|
|
|
|||
|
|
@ -143,7 +143,6 @@ class _MangaChapterPageGalleryState
|
|||
@override
|
||||
void dispose() {
|
||||
_readerController.setMangaHistoryUpdate();
|
||||
_readerController.checkAndSyncProgress();
|
||||
_readerController.setPageIndex(
|
||||
_geCurrentIndex(_uChapDataPreload[_currentIndex!].index!), true);
|
||||
_rebuildDetail.close();
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import 'package:mangayomi/main.dart';
|
|||
import 'package:mangayomi/models/chapter.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/providers/push_router.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/providers/reader_controller_provider.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/utils/date.dart';
|
||||
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
|
||||
import 'package:super_sliver_list/super_sliver_list.dart';
|
||||
|
|
@ -160,8 +159,6 @@ class _ChapterListTileState extends State<ChapterListTile> {
|
|||
isBookmarked = !isBookmarked;
|
||||
});
|
||||
isar.writeTxnSync(() => {
|
||||
addUpdatedChapterIndependentProvider.call(
|
||||
chapter, false, false),
|
||||
isar.chapters.putSync(chapter..isBookmarked = isBookmarked),
|
||||
});
|
||||
},
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import 'package:mangayomi/models/category.dart';
|
|||
import 'package:mangayomi/models/manga.dart';
|
||||
import 'package:mangayomi/modules/more/categories/providers/isar_providers.dart';
|
||||
import 'package:mangayomi/modules/more/categories/widgets/custom_textfield.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/modules/widgets/progress_center.dart';
|
||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
|
||||
|
|
@ -183,15 +182,6 @@ class _CategoriesTabState extends ConsumerState<CategoriesTab> {
|
|||
onPressed: () async {
|
||||
await isar.writeTxn(
|
||||
() async {
|
||||
await ref
|
||||
.read(changedItemsManagerProvider(
|
||||
managerId:
|
||||
1)
|
||||
.notifier)
|
||||
.addDeletedCategoryAsync(
|
||||
_entries[
|
||||
index],
|
||||
false);
|
||||
await isar
|
||||
.categorys
|
||||
.delete(_entries[
|
||||
|
|
|
|||
|
|
@ -1,210 +1,8 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/category.dart';
|
||||
import 'package:mangayomi/models/changed_items.dart';
|
||||
import 'package:mangayomi/models/chapter.dart';
|
||||
import 'package:mangayomi/models/manga.dart';
|
||||
import 'package:mangayomi/models/settings.dart';
|
||||
import 'package:mangayomi/models/sync_preference.dart';
|
||||
import 'package:mangayomi/services/sync_server.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
part 'sync_providers.g.dart';
|
||||
|
||||
@riverpod
|
||||
void addUpdatedChapterIndependent(
|
||||
Ref ref, Chapter chapter, bool deleted, bool txn) {
|
||||
final changedItems = isar.changedItems.getSync(1) ?? ChangedItems();
|
||||
bool updated = false;
|
||||
changedItems.updatedChapters = changedItems.updatedChapters?.map((e) {
|
||||
if (e.chapterId == chapter.id) {
|
||||
e.isBookmarked = chapter.isBookmarked;
|
||||
e.isRead = chapter.isRead;
|
||||
e.lastPageRead = chapter.lastPageRead;
|
||||
e.deleted = deleted;
|
||||
updated = true;
|
||||
}
|
||||
return e;
|
||||
}).toList();
|
||||
if (!updated) {
|
||||
final updatedChapter = UpdatedChapter(
|
||||
chapterId: chapter.id,
|
||||
isBookmarked: chapter.isBookmarked,
|
||||
isRead: chapter.isRead,
|
||||
lastPageRead: chapter.lastPageRead,
|
||||
deleted: deleted);
|
||||
changedItems.updatedChapters = changedItems.updatedChapters?.toList()
|
||||
?..add(updatedChapter);
|
||||
}
|
||||
if (!txn) {
|
||||
isar.changedItems.putSync(changedItems);
|
||||
} else {
|
||||
isar.writeTxnSync(() {
|
||||
isar.changedItems.putSync(changedItems);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
void checkForSyncIndependent(Ref ref, bool silent) {
|
||||
ref.read(SyncServerProvider(syncId: 1).notifier).checkForSync(silent);
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class ChangedItemsManager extends _$ChangedItemsManager {
|
||||
@override
|
||||
ChangedItems? build({required int? managerId}) {
|
||||
return isar.changedItems.getSync(managerId!);
|
||||
}
|
||||
|
||||
void cleanChangedItems(bool txn) {
|
||||
final changedItems =
|
||||
isar.changedItems.getSync(managerId!) ?? ChangedItems(id: managerId);
|
||||
changedItems.deletedMangas = [];
|
||||
changedItems.updatedChapters = [];
|
||||
changedItems.deletedCategories = [];
|
||||
if (!txn) {
|
||||
isar.changedItems.putSync(changedItems);
|
||||
} else {
|
||||
isar.writeTxnSync(() {
|
||||
isar.changedItems.putSync(changedItems);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void addDeletedManga(Manga manga, bool txn) {
|
||||
final changedItems =
|
||||
isar.changedItems.getSync(managerId!) ?? ChangedItems(id: managerId);
|
||||
log("DEBUG");
|
||||
log(jsonEncode(changedItems));
|
||||
final deletedManga = DeletedManga(mangaId: manga.id);
|
||||
changedItems.deletedMangas = changedItems.deletedMangas?.toList()
|
||||
?..add(deletedManga);
|
||||
if (!txn) {
|
||||
isar.changedItems.putSync(changedItems);
|
||||
} else {
|
||||
isar.writeTxnSync(() {
|
||||
isar.changedItems.putSync(changedItems);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Future addDeletedMangaAsync(Manga manga, bool txn) async {
|
||||
final changedItems =
|
||||
await isar.changedItems.get(managerId!) ?? ChangedItems(id: managerId);
|
||||
final deletedManga = DeletedManga(mangaId: manga.id);
|
||||
changedItems.deletedMangas = changedItems.deletedMangas?.toList()
|
||||
?..add(deletedManga);
|
||||
if (!txn) {
|
||||
await isar.changedItems.put(changedItems);
|
||||
} else {
|
||||
await isar.writeTxn(() async {
|
||||
await isar.changedItems.put(changedItems);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void addUpdatedChapter(Chapter chapter, bool deleted, bool txn) {
|
||||
final changedItems =
|
||||
isar.changedItems.getSync(managerId!) ?? ChangedItems(id: managerId);
|
||||
bool updated = false;
|
||||
changedItems.updatedChapters = changedItems.updatedChapters?.map((e) {
|
||||
if (e.chapterId == chapter.id && e.mangaId == chapter.mangaId) {
|
||||
e.isBookmarked = chapter.isBookmarked;
|
||||
e.isRead = chapter.isRead;
|
||||
e.lastPageRead = chapter.lastPageRead;
|
||||
e.deleted = deleted;
|
||||
updated = true;
|
||||
}
|
||||
return e;
|
||||
}).toList();
|
||||
if (!updated) {
|
||||
final updatedChapter = UpdatedChapter(
|
||||
chapterId: chapter.id,
|
||||
mangaId: chapter.mangaId,
|
||||
isBookmarked: chapter.isBookmarked,
|
||||
isRead: chapter.isRead,
|
||||
lastPageRead: chapter.lastPageRead,
|
||||
deleted: deleted);
|
||||
changedItems.updatedChapters = changedItems.updatedChapters?.toList()
|
||||
?..add(updatedChapter);
|
||||
}
|
||||
if (!txn) {
|
||||
isar.changedItems.putSync(changedItems);
|
||||
} else {
|
||||
isar.writeTxnSync(() {
|
||||
isar.changedItems.putSync(changedItems);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Future addUpdatedChapterAsync(Chapter chapter, bool deleted, bool txn) async {
|
||||
final changedItems =
|
||||
await isar.changedItems.get(managerId!) ?? ChangedItems(id: managerId);
|
||||
bool updated = false;
|
||||
changedItems.updatedChapters = changedItems.updatedChapters?.map((e) {
|
||||
if (e.chapterId == chapter.id && e.mangaId == chapter.mangaId) {
|
||||
e.isBookmarked = chapter.isBookmarked;
|
||||
e.isRead = chapter.isRead;
|
||||
e.lastPageRead = chapter.lastPageRead;
|
||||
e.deleted = deleted;
|
||||
updated = true;
|
||||
}
|
||||
return e;
|
||||
}).toList();
|
||||
if (!updated) {
|
||||
final updatedChapter = UpdatedChapter(
|
||||
chapterId: chapter.id,
|
||||
mangaId: chapter.mangaId,
|
||||
isBookmarked: chapter.isBookmarked,
|
||||
isRead: chapter.isRead,
|
||||
lastPageRead: chapter.lastPageRead,
|
||||
deleted: deleted);
|
||||
changedItems.updatedChapters = changedItems.updatedChapters?.toList()
|
||||
?..add(updatedChapter);
|
||||
}
|
||||
if (!txn) {
|
||||
await isar.changedItems.put(changedItems);
|
||||
} else {
|
||||
await isar.writeTxn(() async {
|
||||
await isar.changedItems.put(changedItems);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void addDeletedCategory(Category category, bool txn) {
|
||||
final changedItems =
|
||||
isar.changedItems.getSync(managerId!) ?? ChangedItems(id: managerId);
|
||||
final deletedCategory = DeletedCategory(categoryId: category.id);
|
||||
changedItems.deletedCategories = changedItems.deletedCategories?.toList()
|
||||
?..add(deletedCategory);
|
||||
if (!txn) {
|
||||
isar.changedItems.putSync(changedItems);
|
||||
} else {
|
||||
isar.writeTxnSync(() {
|
||||
isar.changedItems.putSync(changedItems);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Future addDeletedCategoryAsync(Category category, bool txn) async {
|
||||
final changedItems =
|
||||
await isar.changedItems.get(managerId!) ?? ChangedItems(id: managerId);
|
||||
final deletedCategory = DeletedCategory(categoryId: category.id);
|
||||
changedItems.deletedCategories = changedItems.deletedCategories?.toList()
|
||||
?..add(deletedCategory);
|
||||
if (!txn) {
|
||||
await isar.changedItems.put(changedItems);
|
||||
} else {
|
||||
await isar.writeTxn(() async {
|
||||
await isar.changedItems.put(changedItems);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class Synching extends _$Synching {
|
||||
@override
|
||||
|
|
@ -224,13 +22,6 @@ class Synching extends _$Synching {
|
|||
});
|
||||
}
|
||||
|
||||
void setLastSync(int timestamp) {
|
||||
isar.writeTxnSync(() {
|
||||
isar.syncPreferences.putSync(
|
||||
isar.syncPreferences.getSync(syncId!)!..lastSync = timestamp);
|
||||
});
|
||||
}
|
||||
|
||||
void setLastUpload(int timestamp) {
|
||||
isar.writeTxnSync(() {
|
||||
isar.syncPreferences.putSync(
|
||||
|
|
@ -252,33 +43,3 @@ class Synching extends _$Synching {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class SyncOnAppLaunchState extends _$SyncOnAppLaunchState {
|
||||
@override
|
||||
bool build() {
|
||||
return isar.settings.getSync(227)!.syncOnAppLaunch ?? false;
|
||||
}
|
||||
|
||||
void set(bool value) {
|
||||
final settings = isar.settings.getSync(227);
|
||||
state = value;
|
||||
isar.writeTxnSync(
|
||||
() => isar.settings.putSync(settings!..syncOnAppLaunch = value));
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class SyncAfterReadingState extends _$SyncAfterReadingState {
|
||||
@override
|
||||
bool build() {
|
||||
return isar.settings.getSync(227)!.syncAfterReading ?? false;
|
||||
}
|
||||
|
||||
void set(bool value) {
|
||||
final settings = isar.settings.getSync(227);
|
||||
state = value;
|
||||
isar.writeTxnSync(
|
||||
() => isar.settings.putSync(settings!..syncAfterReading = value));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@ part of 'sync_providers.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$addUpdatedChapterIndependentHash() =>
|
||||
r'7abb8f085a229ec0573c730234fa4fc4ff86d794';
|
||||
String _$synchingHash() => r'3ab44d9e753f2d4b51fd10af6c98ffac78cbf201';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
@ -30,450 +29,6 @@ class _SystemHash {
|
|||
}
|
||||
}
|
||||
|
||||
/// See also [addUpdatedChapterIndependent].
|
||||
@ProviderFor(addUpdatedChapterIndependent)
|
||||
const addUpdatedChapterIndependentProvider =
|
||||
AddUpdatedChapterIndependentFamily();
|
||||
|
||||
/// See also [addUpdatedChapterIndependent].
|
||||
class AddUpdatedChapterIndependentFamily extends Family<void> {
|
||||
/// See also [addUpdatedChapterIndependent].
|
||||
const AddUpdatedChapterIndependentFamily();
|
||||
|
||||
/// See also [addUpdatedChapterIndependent].
|
||||
AddUpdatedChapterIndependentProvider call(
|
||||
Chapter chapter,
|
||||
bool deleted,
|
||||
bool txn,
|
||||
) {
|
||||
return AddUpdatedChapterIndependentProvider(
|
||||
chapter,
|
||||
deleted,
|
||||
txn,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AddUpdatedChapterIndependentProvider getProviderOverride(
|
||||
covariant AddUpdatedChapterIndependentProvider provider,
|
||||
) {
|
||||
return call(
|
||||
provider.chapter,
|
||||
provider.deleted,
|
||||
provider.txn,
|
||||
);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
||||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'addUpdatedChapterIndependentProvider';
|
||||
}
|
||||
|
||||
/// See also [addUpdatedChapterIndependent].
|
||||
class AddUpdatedChapterIndependentProvider extends AutoDisposeProvider<void> {
|
||||
/// See also [addUpdatedChapterIndependent].
|
||||
AddUpdatedChapterIndependentProvider(
|
||||
Chapter chapter,
|
||||
bool deleted,
|
||||
bool txn,
|
||||
) : this._internal(
|
||||
(ref) => addUpdatedChapterIndependent(
|
||||
ref as AddUpdatedChapterIndependentRef,
|
||||
chapter,
|
||||
deleted,
|
||||
txn,
|
||||
),
|
||||
from: addUpdatedChapterIndependentProvider,
|
||||
name: r'addUpdatedChapterIndependentProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$addUpdatedChapterIndependentHash,
|
||||
dependencies: AddUpdatedChapterIndependentFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
AddUpdatedChapterIndependentFamily._allTransitiveDependencies,
|
||||
chapter: chapter,
|
||||
deleted: deleted,
|
||||
txn: txn,
|
||||
);
|
||||
|
||||
AddUpdatedChapterIndependentProvider._internal(
|
||||
super._createNotifier, {
|
||||
required super.name,
|
||||
required super.dependencies,
|
||||
required super.allTransitiveDependencies,
|
||||
required super.debugGetCreateSourceHash,
|
||||
required super.from,
|
||||
required this.chapter,
|
||||
required this.deleted,
|
||||
required this.txn,
|
||||
}) : super.internal();
|
||||
|
||||
final Chapter chapter;
|
||||
final bool deleted;
|
||||
final bool txn;
|
||||
|
||||
@override
|
||||
Override overrideWith(
|
||||
void Function(AddUpdatedChapterIndependentRef provider) create,
|
||||
) {
|
||||
return ProviderOverride(
|
||||
origin: this,
|
||||
override: AddUpdatedChapterIndependentProvider._internal(
|
||||
(ref) => create(ref as AddUpdatedChapterIndependentRef),
|
||||
from: from,
|
||||
name: null,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
debugGetCreateSourceHash: null,
|
||||
chapter: chapter,
|
||||
deleted: deleted,
|
||||
txn: txn,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AutoDisposeProviderElement<void> createElement() {
|
||||
return _AddUpdatedChapterIndependentProviderElement(this);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is AddUpdatedChapterIndependentProvider &&
|
||||
other.chapter == chapter &&
|
||||
other.deleted == deleted &&
|
||||
other.txn == txn;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||
hash = _SystemHash.combine(hash, chapter.hashCode);
|
||||
hash = _SystemHash.combine(hash, deleted.hashCode);
|
||||
hash = _SystemHash.combine(hash, txn.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin AddUpdatedChapterIndependentRef on AutoDisposeProviderRef<void> {
|
||||
/// The parameter `chapter` of this provider.
|
||||
Chapter get chapter;
|
||||
|
||||
/// The parameter `deleted` of this provider.
|
||||
bool get deleted;
|
||||
|
||||
/// The parameter `txn` of this provider.
|
||||
bool get txn;
|
||||
}
|
||||
|
||||
class _AddUpdatedChapterIndependentProviderElement
|
||||
extends AutoDisposeProviderElement<void>
|
||||
with AddUpdatedChapterIndependentRef {
|
||||
_AddUpdatedChapterIndependentProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
Chapter get chapter =>
|
||||
(origin as AddUpdatedChapterIndependentProvider).chapter;
|
||||
@override
|
||||
bool get deleted => (origin as AddUpdatedChapterIndependentProvider).deleted;
|
||||
@override
|
||||
bool get txn => (origin as AddUpdatedChapterIndependentProvider).txn;
|
||||
}
|
||||
|
||||
String _$checkForSyncIndependentHash() =>
|
||||
r'3a3658a67cd6cb210e76126b33592bd1ea67e3f0';
|
||||
|
||||
/// See also [checkForSyncIndependent].
|
||||
@ProviderFor(checkForSyncIndependent)
|
||||
const checkForSyncIndependentProvider = CheckForSyncIndependentFamily();
|
||||
|
||||
/// See also [checkForSyncIndependent].
|
||||
class CheckForSyncIndependentFamily extends Family<void> {
|
||||
/// See also [checkForSyncIndependent].
|
||||
const CheckForSyncIndependentFamily();
|
||||
|
||||
/// See also [checkForSyncIndependent].
|
||||
CheckForSyncIndependentProvider call(
|
||||
bool silent,
|
||||
) {
|
||||
return CheckForSyncIndependentProvider(
|
||||
silent,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
CheckForSyncIndependentProvider getProviderOverride(
|
||||
covariant CheckForSyncIndependentProvider provider,
|
||||
) {
|
||||
return call(
|
||||
provider.silent,
|
||||
);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
||||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'checkForSyncIndependentProvider';
|
||||
}
|
||||
|
||||
/// See also [checkForSyncIndependent].
|
||||
class CheckForSyncIndependentProvider extends AutoDisposeProvider<void> {
|
||||
/// See also [checkForSyncIndependent].
|
||||
CheckForSyncIndependentProvider(
|
||||
bool silent,
|
||||
) : this._internal(
|
||||
(ref) => checkForSyncIndependent(
|
||||
ref as CheckForSyncIndependentRef,
|
||||
silent,
|
||||
),
|
||||
from: checkForSyncIndependentProvider,
|
||||
name: r'checkForSyncIndependentProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$checkForSyncIndependentHash,
|
||||
dependencies: CheckForSyncIndependentFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
CheckForSyncIndependentFamily._allTransitiveDependencies,
|
||||
silent: silent,
|
||||
);
|
||||
|
||||
CheckForSyncIndependentProvider._internal(
|
||||
super._createNotifier, {
|
||||
required super.name,
|
||||
required super.dependencies,
|
||||
required super.allTransitiveDependencies,
|
||||
required super.debugGetCreateSourceHash,
|
||||
required super.from,
|
||||
required this.silent,
|
||||
}) : super.internal();
|
||||
|
||||
final bool silent;
|
||||
|
||||
@override
|
||||
Override overrideWith(
|
||||
void Function(CheckForSyncIndependentRef provider) create,
|
||||
) {
|
||||
return ProviderOverride(
|
||||
origin: this,
|
||||
override: CheckForSyncIndependentProvider._internal(
|
||||
(ref) => create(ref as CheckForSyncIndependentRef),
|
||||
from: from,
|
||||
name: null,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
debugGetCreateSourceHash: null,
|
||||
silent: silent,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AutoDisposeProviderElement<void> createElement() {
|
||||
return _CheckForSyncIndependentProviderElement(this);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is CheckForSyncIndependentProvider && other.silent == silent;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||
hash = _SystemHash.combine(hash, silent.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin CheckForSyncIndependentRef on AutoDisposeProviderRef<void> {
|
||||
/// The parameter `silent` of this provider.
|
||||
bool get silent;
|
||||
}
|
||||
|
||||
class _CheckForSyncIndependentProviderElement
|
||||
extends AutoDisposeProviderElement<void> with CheckForSyncIndependentRef {
|
||||
_CheckForSyncIndependentProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
bool get silent => (origin as CheckForSyncIndependentProvider).silent;
|
||||
}
|
||||
|
||||
String _$changedItemsManagerHash() =>
|
||||
r'a4f0363ab430ddb6c2a23fde6f5671ba8ec252cf';
|
||||
|
||||
abstract class _$ChangedItemsManager
|
||||
extends BuildlessAutoDisposeNotifier<ChangedItems?> {
|
||||
late final int? managerId;
|
||||
|
||||
ChangedItems? build({
|
||||
required int? managerId,
|
||||
});
|
||||
}
|
||||
|
||||
/// See also [ChangedItemsManager].
|
||||
@ProviderFor(ChangedItemsManager)
|
||||
const changedItemsManagerProvider = ChangedItemsManagerFamily();
|
||||
|
||||
/// See also [ChangedItemsManager].
|
||||
class ChangedItemsManagerFamily extends Family<ChangedItems?> {
|
||||
/// See also [ChangedItemsManager].
|
||||
const ChangedItemsManagerFamily();
|
||||
|
||||
/// See also [ChangedItemsManager].
|
||||
ChangedItemsManagerProvider call({
|
||||
required int? managerId,
|
||||
}) {
|
||||
return ChangedItemsManagerProvider(
|
||||
managerId: managerId,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
ChangedItemsManagerProvider getProviderOverride(
|
||||
covariant ChangedItemsManagerProvider provider,
|
||||
) {
|
||||
return call(
|
||||
managerId: provider.managerId,
|
||||
);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
||||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'changedItemsManagerProvider';
|
||||
}
|
||||
|
||||
/// See also [ChangedItemsManager].
|
||||
class ChangedItemsManagerProvider extends AutoDisposeNotifierProviderImpl<
|
||||
ChangedItemsManager, ChangedItems?> {
|
||||
/// See also [ChangedItemsManager].
|
||||
ChangedItemsManagerProvider({
|
||||
required int? managerId,
|
||||
}) : this._internal(
|
||||
() => ChangedItemsManager()..managerId = managerId,
|
||||
from: changedItemsManagerProvider,
|
||||
name: r'changedItemsManagerProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$changedItemsManagerHash,
|
||||
dependencies: ChangedItemsManagerFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
ChangedItemsManagerFamily._allTransitiveDependencies,
|
||||
managerId: managerId,
|
||||
);
|
||||
|
||||
ChangedItemsManagerProvider._internal(
|
||||
super._createNotifier, {
|
||||
required super.name,
|
||||
required super.dependencies,
|
||||
required super.allTransitiveDependencies,
|
||||
required super.debugGetCreateSourceHash,
|
||||
required super.from,
|
||||
required this.managerId,
|
||||
}) : super.internal();
|
||||
|
||||
final int? managerId;
|
||||
|
||||
@override
|
||||
ChangedItems? runNotifierBuild(
|
||||
covariant ChangedItemsManager notifier,
|
||||
) {
|
||||
return notifier.build(
|
||||
managerId: managerId,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Override overrideWith(ChangedItemsManager Function() create) {
|
||||
return ProviderOverride(
|
||||
origin: this,
|
||||
override: ChangedItemsManagerProvider._internal(
|
||||
() => create()..managerId = managerId,
|
||||
from: from,
|
||||
name: null,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
debugGetCreateSourceHash: null,
|
||||
managerId: managerId,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AutoDisposeNotifierProviderElement<ChangedItemsManager, ChangedItems?>
|
||||
createElement() {
|
||||
return _ChangedItemsManagerProviderElement(this);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is ChangedItemsManagerProvider && other.managerId == managerId;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||
hash = _SystemHash.combine(hash, managerId.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin ChangedItemsManagerRef on AutoDisposeNotifierProviderRef<ChangedItems?> {
|
||||
/// The parameter `managerId` of this provider.
|
||||
int? get managerId;
|
||||
}
|
||||
|
||||
class _ChangedItemsManagerProviderElement
|
||||
extends AutoDisposeNotifierProviderElement<ChangedItemsManager,
|
||||
ChangedItems?> with ChangedItemsManagerRef {
|
||||
_ChangedItemsManagerProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
int? get managerId => (origin as ChangedItemsManagerProvider).managerId;
|
||||
}
|
||||
|
||||
String _$synchingHash() => r'2ef7fd99da4292ed236252d2b727cff9a69f43a9';
|
||||
|
||||
abstract class _$Synching
|
||||
extends BuildlessAutoDisposeNotifier<SyncPreference?> {
|
||||
late final int? syncId;
|
||||
|
|
@ -616,40 +171,5 @@ class _SynchingProviderElement
|
|||
@override
|
||||
int? get syncId => (origin as SynchingProvider).syncId;
|
||||
}
|
||||
|
||||
String _$syncOnAppLaunchStateHash() =>
|
||||
r'dc7f3243e38a748462628229066c8fc0653c908b';
|
||||
|
||||
/// See also [SyncOnAppLaunchState].
|
||||
@ProviderFor(SyncOnAppLaunchState)
|
||||
final syncOnAppLaunchStateProvider =
|
||||
AutoDisposeNotifierProvider<SyncOnAppLaunchState, bool>.internal(
|
||||
SyncOnAppLaunchState.new,
|
||||
name: r'syncOnAppLaunchStateProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$syncOnAppLaunchStateHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$SyncOnAppLaunchState = AutoDisposeNotifier<bool>;
|
||||
String _$syncAfterReadingStateHash() =>
|
||||
r'e507acd490b5aea7fc1a8fd7a369ec01f4c47192';
|
||||
|
||||
/// See also [SyncAfterReadingState].
|
||||
@ProviderFor(SyncAfterReadingState)
|
||||
final syncAfterReadingStateProvider =
|
||||
AutoDisposeNotifierProvider<SyncAfterReadingState, bool>.internal(
|
||||
SyncAfterReadingState.new,
|
||||
name: r'syncAfterReadingStateProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$syncAfterReadingStateHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$SyncAfterReadingState = AutoDisposeNotifier<bool>;
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import 'package:isar/isar.dart';
|
|||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/utils/date.dart';
|
||||
import 'package:mangayomi/models/sync_preference.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/widgets/sync_listile.dart';
|
||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
import 'package:mangayomi/services/sync_server.dart';
|
||||
|
|
@ -15,8 +14,6 @@ class SyncScreen extends ConsumerWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final syncAfterReading = ref.watch(syncAfterReadingStateProvider);
|
||||
final syncOnAppLaunch = ref.watch(syncOnAppLaunchStateProvider);
|
||||
final l10n = l10nLocalizations(context)!;
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
|
|
@ -36,26 +33,6 @@ class SyncScreen extends ConsumerWidget {
|
|||
syncPreference.authToken?.isNotEmpty ?? false;
|
||||
return Column(
|
||||
children: [
|
||||
SwitchListTile(
|
||||
value: syncAfterReading,
|
||||
title: Text(context.l10n.syncAfterReading),
|
||||
onChanged: !isLogged
|
||||
? null
|
||||
: (value) {
|
||||
ref
|
||||
.read(syncAfterReadingStateProvider.notifier)
|
||||
.set(value);
|
||||
}),
|
||||
SwitchListTile(
|
||||
value: syncOnAppLaunch,
|
||||
title: Text(context.l10n.syncOnAppLaunch),
|
||||
onChanged: !isLogged
|
||||
? null
|
||||
: (value) {
|
||||
ref
|
||||
.read(syncOnAppLaunchStateProvider.notifier)
|
||||
.set(value);
|
||||
}),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 15, right: 15, bottom: 10, top: 5),
|
||||
|
|
@ -103,12 +80,6 @@ class SyncScreen extends ConsumerWidget {
|
|||
const SizedBox(width: 10),
|
||||
Column(children: [
|
||||
const SizedBox(width: 20),
|
||||
Text(
|
||||
"${l10n.last_sync}: ${dateFormat((syncPreference.lastSync ?? 0).toString(), ref: ref, context: context)} ${dateFormatHour((syncPreference.lastSync ?? 0).toString(), context)}",
|
||||
style: TextStyle(
|
||||
fontSize: 11,
|
||||
color: context.secondaryColor)),
|
||||
const SizedBox(width: 20),
|
||||
Text(
|
||||
"${l10n.last_upload}: ${dateFormat((syncPreference.lastUpload ?? 0).toString(), ref: ref, context: context)} ${dateFormatHour((syncPreference.lastUpload ?? 0).toString(), context)}",
|
||||
style: TextStyle(
|
||||
|
|
@ -127,27 +98,6 @@ class SyncScreen extends ConsumerWidget {
|
|||
),
|
||||
Row(
|
||||
children: [
|
||||
const SizedBox(width: 20),
|
||||
Column(
|
||||
children: [
|
||||
IconButton(
|
||||
onPressed: !isLogged
|
||||
? null
|
||||
: () {
|
||||
ref
|
||||
.read(syncServerProvider(syncId: 1)
|
||||
.notifier)
|
||||
.checkForSync(false);
|
||||
},
|
||||
icon: Icon(
|
||||
Icons.sync,
|
||||
color: !isLogged
|
||||
? context.secondaryColor
|
||||
: context.primaryColor,
|
||||
)),
|
||||
Text(l10n.sync_button_sync),
|
||||
],
|
||||
),
|
||||
const SizedBox(width: 20),
|
||||
Column(
|
||||
children: [
|
||||
|
|
|
|||
|
|
@ -10,9 +10,7 @@ import 'package:mangayomi/models/settings.dart';
|
|||
import 'package:mangayomi/models/track.dart';
|
||||
import 'package:mangayomi/models/track_preference.dart';
|
||||
import 'package:mangayomi/modules/manga/detail/providers/track_state_providers.dart';
|
||||
import 'package:mangayomi/modules/more/settings/sync/providers/sync_providers.dart';
|
||||
import 'package:mangayomi/modules/more/settings/track/providers/track_providers.dart';
|
||||
import 'package:mangayomi/services/sync_server.dart';
|
||||
import 'package:mangayomi/utils/chapter_recognition.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'novel_reader_controller_provider.g.dart';
|
||||
|
|
@ -81,10 +79,16 @@ class NovelReaderController extends _$NovelReaderController {
|
|||
});
|
||||
}
|
||||
|
||||
void checkAndSyncProgress() {
|
||||
final syncAfterReading = ref.watch(syncAfterReadingStateProvider);
|
||||
if (syncAfterReading) {
|
||||
ref.read(syncServerProvider(syncId: 1).notifier).checkForSync(true);
|
||||
void setChapterOffset(double newOffset, double maxOffset, bool save) {
|
||||
if (incognitoMode) return;
|
||||
final isRead = (newOffset / (maxOffset != 0 ? maxOffset : 1)) >= 0.9;
|
||||
if (isRead || save) {
|
||||
final ch = chapter;
|
||||
isar.writeTxnSync(() {
|
||||
ch.isRead = isRead;
|
||||
ch.lastPageRead = (maxOffset != 0 ? newOffset / maxOffset : 0).toString();
|
||||
isar.chapters.putSync(ch);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -94,9 +98,6 @@ class NovelReaderController extends _$NovelReaderController {
|
|||
final chap = chapter;
|
||||
isar.writeTxnSync(() {
|
||||
chap.isBookmarked = !isBookmarked;
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.addUpdatedChapter(chap, false, false);
|
||||
isar.chapters.putSync(chap);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ part of 'novel_reader_controller_provider.dart';
|
|||
// **************************************************************************
|
||||
|
||||
String _$novelReaderControllerHash() =>
|
||||
r'74ebbf38d60283d308646b59cfd5cfee07c85535';
|
||||
r'9ac937ab7fcc82a99088128f0f12f1aaad7fa1e8';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -64,12 +64,28 @@ class _NovelWebViewState extends ConsumerState<NovelWebView>
|
|||
with TickerProviderStateMixin {
|
||||
late final NovelReaderController _readerController =
|
||||
ref.read(novelReaderControllerProvider(chapter: chapter).notifier);
|
||||
final _scrollController = ScrollController(
|
||||
initialScrollOffset: 0,
|
||||
keepScrollOffset: true,
|
||||
);
|
||||
bool scrolled = false;
|
||||
double offset = 0;
|
||||
double maxOffset = 0;
|
||||
bool isDesktop = Platform.isMacOS || Platform.isLinux || Platform.isWindows;
|
||||
|
||||
void onScroll() {
|
||||
if (_scrollController.hasClients) {
|
||||
offset = _scrollController.offset;
|
||||
maxOffset = _scrollController.position.maxScrollExtent;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_readerController.setChapterOffset(offset, maxOffset, true);
|
||||
_readerController.setMangaHistoryUpdate();
|
||||
_readerController.checkAndSyncProgress();
|
||||
_scrollController.removeListener(onScroll);
|
||||
_scrollController.dispose();
|
||||
_rebuildDetail.close();
|
||||
clearGestureDetailsCache();
|
||||
if (isDesktop) {
|
||||
|
|
@ -88,6 +104,9 @@ class _NovelWebViewState extends ConsumerState<NovelWebView>
|
|||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
_scrollController.addListener(onScroll);
|
||||
});
|
||||
}
|
||||
|
||||
late bool _isBookmarked = _readerController.getChapterBookmarked();
|
||||
|
|
@ -113,7 +132,6 @@ class _NovelWebViewState extends ConsumerState<NovelWebView>
|
|||
Widget build(BuildContext context) {
|
||||
final backgroundColor = ref.watch(backgroundColorStateProvider);
|
||||
final fullScreenReader = ref.watch(fullScreenReaderStateProvider);
|
||||
final l10n = l10nLocalizations(context)!;
|
||||
return KeyboardListener(
|
||||
autofocus: true,
|
||||
focusNode: FocusNode(),
|
||||
|
|
@ -183,39 +201,92 @@ class _NovelWebViewState extends ConsumerState<NovelWebView>
|
|||
children: [
|
||||
widget.htmlContent.when(
|
||||
data: (htmlContent) {
|
||||
Future.delayed(const Duration(milliseconds: 1000),
|
||||
() {
|
||||
if (!scrolled && _scrollController.hasClients) {
|
||||
_scrollController.animateTo(
|
||||
_scrollController.position.maxScrollExtent *
|
||||
(double.tryParse(chapter.lastPageRead!) ??
|
||||
0),
|
||||
duration: Duration(seconds: 2),
|
||||
curve: Curves.fastOutSlowIn);
|
||||
scrolled = true;
|
||||
}
|
||||
});
|
||||
return Expanded(
|
||||
child: SingleChildScrollView(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
child: HtmlWidget(
|
||||
htmlContent,
|
||||
customStylesBuilder: (element) {
|
||||
switch (backgroundColor) {
|
||||
case BackgroundColor.black:
|
||||
return {
|
||||
'background-color': 'black',
|
||||
};
|
||||
default:
|
||||
return {
|
||||
'background-color': '#F0F0F0',
|
||||
};
|
||||
}
|
||||
},
|
||||
onTapUrl: (url) {
|
||||
print('tapped $url');
|
||||
return true;
|
||||
},
|
||||
renderMode: RenderMode.column,
|
||||
textStyle: TextStyle(
|
||||
color: backgroundColor ==
|
||||
BackgroundColor.white
|
||||
? Colors.black
|
||||
: Colors.white,
|
||||
//fontFamily: "Times New Roman",
|
||||
//fontFamilyFallback: ["Times", "serif"],
|
||||
fontSize: 14),
|
||||
),
|
||||
child: SingleChildScrollView(
|
||||
controller: _scrollController,
|
||||
physics: const BouncingScrollPhysics(),
|
||||
child: Column(
|
||||
children: [
|
||||
HtmlWidget(
|
||||
htmlContent,
|
||||
customStylesBuilder: (element) {
|
||||
switch (backgroundColor) {
|
||||
case BackgroundColor.black:
|
||||
return {
|
||||
'background-color': 'black',
|
||||
};
|
||||
default:
|
||||
return {
|
||||
'background-color': '#F0F0F0',
|
||||
};
|
||||
}
|
||||
},
|
||||
onTapUrl: (url) {
|
||||
context.push("/mangawebview",
|
||||
extra: {'url': url, 'title': url});
|
||||
return true;
|
||||
},
|
||||
renderMode: RenderMode.column,
|
||||
textStyle: TextStyle(
|
||||
color: backgroundColor ==
|
||||
BackgroundColor.white
|
||||
? Colors.black
|
||||
: Colors.white,
|
||||
fontSize: 14),
|
||||
),
|
||||
Center(
|
||||
child: IconButton(
|
||||
padding: const EdgeInsets.all(5),
|
||||
onPressed: () =>
|
||||
pushReplacementMangaReaderView(
|
||||
context: context,
|
||||
chapter:
|
||||
_readerController.getPrevChapter(),
|
||||
),
|
||||
icon: Icon(
|
||||
Icons.arrow_back,
|
||||
color: backgroundColor ==
|
||||
BackgroundColor.white
|
||||
? Colors.black
|
||||
: Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
Center(
|
||||
child: IconButton(
|
||||
padding: const EdgeInsets.all(5),
|
||||
onPressed: () =>
|
||||
pushReplacementMangaReaderView(
|
||||
context: context,
|
||||
chapter:
|
||||
_readerController.getNextChapter(),
|
||||
),
|
||||
icon: Icon(
|
||||
Icons.arrow_forward,
|
||||
color: backgroundColor ==
|
||||
BackgroundColor.white
|
||||
? Colors.black
|
||||
: Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);},
|
||||
),
|
||||
);
|
||||
},
|
||||
loading: () => const Expanded(
|
||||
child: Center(
|
||||
child: CircularProgressIndicator(),
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import 'package:isar/isar.dart';
|
|||
import 'package:mangayomi/eval/model/source_preference.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/category.dart';
|
||||
import 'package:mangayomi/models/changed_items.dart';
|
||||
import 'package:mangayomi/models/chapter.dart';
|
||||
import 'package:mangayomi/models/download.dart';
|
||||
import 'package:mangayomi/models/update.dart';
|
||||
|
|
@ -147,7 +146,6 @@ class StorageProvider {
|
|||
|
||||
final isar = Isar.openSync([
|
||||
MangaSchema,
|
||||
ChangedItemsSchema,
|
||||
ChapterSchema,
|
||||
CategorySchema,
|
||||
UpdateSchema,
|
||||
|
|
|
|||
|
|
@ -23,5 +23,5 @@ Future<String> getHtmlContent(Ref ref, {required Chapter chapter}) async {
|
|||
return '''<div id="readerViewContent"><div style="padding: 2em;">${html.substring(1, html.length - 1)}</div></div>'''
|
||||
.replaceAll("\\n", "")
|
||||
.replaceAll("\\t", "")
|
||||
.replaceAll("\\", "");
|
||||
.replaceAll("\\\"", "\"");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'get_html_content.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$getHtmlContentHash() => r'5369236d1d8058cd42a832d1d641a37777da653b';
|
||||
String _$getHtmlContentHash() => r'0c964239912b7f93bfb4c80a47f7266ff1ae3f5e';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
import 'package:crypto/crypto.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:mangayomi/eval/model/m_bridge.dart';
|
||||
import 'package:mangayomi/eval/model/source_preference.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/changed_items.dart';
|
||||
import 'package:mangayomi/models/update.dart';
|
||||
import 'package:mangayomi/models/sync_preference.dart';
|
||||
import 'package:mangayomi/models/track.dart';
|
||||
|
|
@ -30,8 +28,6 @@ part 'sync_server.g.dart';
|
|||
class SyncServer extends _$SyncServer {
|
||||
final http = MClient.init(reqcopyWith: {'useDartHttpClient': true});
|
||||
final String _loginUrl = '/login';
|
||||
final String _checkUrl = '/check';
|
||||
final String _syncUrl = '/sync';
|
||||
final String _uploadUrl = '/upload/full';
|
||||
final String _downloadUrl = '/download';
|
||||
|
||||
|
|
@ -67,78 +63,6 @@ class SyncServer extends _$SyncServer {
|
|||
}
|
||||
}
|
||||
|
||||
Future<void> checkForSync(bool silent) async {
|
||||
if (!silent) {
|
||||
botToast("Checking for sync...", second: 2);
|
||||
}
|
||||
try {
|
||||
final datas = _getData();
|
||||
final accessToken = _getAccessToken();
|
||||
final localHash = _getDataHash(datas);
|
||||
|
||||
var response = await http.get(
|
||||
Uri.parse('${_getServer()}$_checkUrl'),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer $accessToken'
|
||||
},
|
||||
);
|
||||
if (response.statusCode != 200) {
|
||||
botToast("Check failed", second: 5);
|
||||
return;
|
||||
}
|
||||
var jsonData = jsonDecode(response.body) as Map<String, dynamic>;
|
||||
final remoteHash = jsonData["hash"];
|
||||
if (localHash != remoteHash) {
|
||||
syncToServer(silent);
|
||||
} else if (!silent) {
|
||||
botToast("Sync up to date", second: 2);
|
||||
}
|
||||
} catch (error) {
|
||||
botToast(error.toString(), second: 5);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> syncToServer(bool silent) async {
|
||||
if (!silent) {
|
||||
botToast("Sync started...", second: 2);
|
||||
}
|
||||
try {
|
||||
final datas = _getData();
|
||||
final accessToken = _getAccessToken();
|
||||
|
||||
var response = await http.post(
|
||||
Uri.parse('${_getServer()}$_syncUrl'),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer $accessToken'
|
||||
},
|
||||
body: jsonEncode(
|
||||
{'backupData': datas, 'changedItems': _getChangedData()}),
|
||||
);
|
||||
if (response.statusCode != 200) {
|
||||
botToast("Sync failed", second: 5);
|
||||
return;
|
||||
}
|
||||
var jsonData = jsonDecode(response.body) as Map<String, dynamic>;
|
||||
final decodedBackupData = jsonData["backupData"] is String
|
||||
? jsonDecode(jsonData["backupData"])
|
||||
: jsonData["backupData"];
|
||||
_restoreMerge(decodedBackupData);
|
||||
ref
|
||||
.read(synchingProvider(syncId: syncId).notifier)
|
||||
.setLastSync(DateTime.now().millisecondsSinceEpoch);
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.cleanChangedItems(true);
|
||||
if (!silent) {
|
||||
botToast("Sync finished", second: 2);
|
||||
}
|
||||
} catch (error) {
|
||||
botToast(error.toString(), second: 5);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> uploadToServer(AppLocalizations l10n) async {
|
||||
botToast(l10n.sync_uploading, second: 2);
|
||||
try {
|
||||
|
|
@ -160,9 +84,6 @@ class SyncServer extends _$SyncServer {
|
|||
ref
|
||||
.read(synchingProvider(syncId: syncId).notifier)
|
||||
.setLastUpload(DateTime.now().millisecondsSinceEpoch);
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.cleanChangedItems(true);
|
||||
botToast(l10n.sync_upload_finished, second: 2);
|
||||
} catch (error) {
|
||||
botToast(error.toString(), second: 5);
|
||||
|
|
@ -192,49 +113,12 @@ class SyncServer extends _$SyncServer {
|
|||
ref
|
||||
.read(synchingProvider(syncId: syncId).notifier)
|
||||
.setLastDownload(DateTime.now().millisecondsSinceEpoch);
|
||||
ref
|
||||
.read(changedItemsManagerProvider(managerId: 1).notifier)
|
||||
.cleanChangedItems(true);
|
||||
botToast(l10n.sync_download_finished, second: 2);
|
||||
} catch (error) {
|
||||
botToast(error.toString(), second: 5);
|
||||
}
|
||||
}
|
||||
|
||||
String _getDataHash(Map<String, dynamic> data) {
|
||||
Map<String, dynamic> datas = {};
|
||||
datas["version"] = data["version"];
|
||||
datas["manga"] = data["manga"];
|
||||
datas["categories"] = data["categories"];
|
||||
datas["chapters"] = data["chapters"];
|
||||
datas["tracks"] = data["tracks"];
|
||||
datas["history"] = data["history"];
|
||||
datas["updates"] = data["updates"];
|
||||
var encodedJson = jsonEncode(datas);
|
||||
return sha256.convert(utf8.encode(encodedJson)).toString();
|
||||
}
|
||||
|
||||
Map<String, dynamic> _getChangedData() {
|
||||
Map<String, dynamic> data = {};
|
||||
final changedItems = isar.changedItems.getSync(1);
|
||||
if (changedItems != null) {
|
||||
data.addAll({
|
||||
"deletedMangas":
|
||||
changedItems.deletedMangas?.map((e) => e.toJson()).toList() ?? []
|
||||
});
|
||||
data.addAll({
|
||||
"updatedChapters":
|
||||
changedItems.updatedChapters?.map((e) => e.toJson()).toList() ?? []
|
||||
});
|
||||
data.addAll({
|
||||
"deletedCategories":
|
||||
changedItems.deletedCategories?.map((e) => e.toJson()).toList() ??
|
||||
[]
|
||||
});
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _getData() {
|
||||
Map<String, dynamic> datas = {};
|
||||
datas.addAll({"version": "1"});
|
||||
|
|
@ -309,93 +193,6 @@ class SyncServer extends _$SyncServer {
|
|||
return datas;
|
||||
}
|
||||
|
||||
void _restoreMerge(Map<String, dynamic> backup) {
|
||||
if (backup['version'] == "1") {
|
||||
try {
|
||||
final manga =
|
||||
(backup["manga"] as List?)?.map((e) => Manga.fromJson(e)).toList();
|
||||
final chapters = (backup["chapters"] as List?)
|
||||
?.map((e) => Chapter.fromJson(e))
|
||||
.toList();
|
||||
final categories = (backup["categories"] as List?)
|
||||
?.map((e) => Category.fromJson(e))
|
||||
.toList();
|
||||
final track =
|
||||
(backup["tracks"] as List?)?.map((e) => Track.fromJson(e)).toList();
|
||||
final history = (backup["history"] as List?)
|
||||
?.map((e) => History.fromJson(e))
|
||||
.toList();
|
||||
final updates = (backup["updates"] as List?)
|
||||
?.map((e) => Update.fromJson(e))
|
||||
.toList();
|
||||
|
||||
isar.writeTxnSync(() {
|
||||
isar.mangas.clearSync();
|
||||
if (manga != null) {
|
||||
isar.mangas.putAllSync(manga);
|
||||
if (chapters != null) {
|
||||
isar.chapters.clearSync();
|
||||
for (var chapter in chapters) {
|
||||
final manga = isar.mangas.getSync(chapter.mangaId!);
|
||||
if (manga != null) {
|
||||
isar.chapters.putSync(chapter..manga.value = manga);
|
||||
chapter.manga.saveSync();
|
||||
}
|
||||
}
|
||||
|
||||
isar.historys.clearSync();
|
||||
if (history != null) {
|
||||
for (var element in history) {
|
||||
final chapter = isar.chapters.getSync(element.chapterId!);
|
||||
if (chapter != null) {
|
||||
isar.historys.putSync(element..chapter.value = chapter);
|
||||
element.chapter.saveSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isar.updates.clearSync();
|
||||
if (updates != null) {
|
||||
final tempChapters =
|
||||
isar.chapters.filter().idIsNotNull().findAllSync().toList();
|
||||
for (var update in updates) {
|
||||
final matchingChapter = tempChapters
|
||||
.where((chapter) =>
|
||||
chapter.mangaId == update.mangaId &&
|
||||
chapter.name == update.chapterName)
|
||||
.firstOrNull;
|
||||
if (matchingChapter != null) {
|
||||
isar.updates
|
||||
.putSync(update..chapter.value = matchingChapter);
|
||||
update.chapter.saveSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
isar.categorys.clearSync();
|
||||
if (categories != null) {
|
||||
isar.categorys.putAllSync(categories);
|
||||
}
|
||||
}
|
||||
|
||||
isar.tracks.clearSync();
|
||||
if (track != null) {
|
||||
isar.tracks.putAllSync(track);
|
||||
}
|
||||
|
||||
ref.invalidate(themeModeStateProvider);
|
||||
ref.invalidate(blendLevelStateProvider);
|
||||
ref.invalidate(flexSchemeColorStateProvider);
|
||||
ref.invalidate(pureBlackDarkModeStateProvider);
|
||||
ref.invalidate(l10nLocaleStateProvider);
|
||||
});
|
||||
} catch (e) {
|
||||
botToast(e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _restore(Map<String, dynamic> backup) {
|
||||
if (backup['version'] == "1") {
|
||||
try {
|
||||
|
|
@ -489,8 +286,6 @@ class SyncServer extends _$SyncServer {
|
|||
if (extensionsPref != null) {
|
||||
isar.sourcePreferences.putAllSync(extensionsPref);
|
||||
}
|
||||
final syncAfterReading = isar.settings.getSync(227)!.syncAfterReading;
|
||||
final syncOnAppLaunch = isar.settings.getSync(227)!.syncOnAppLaunch;
|
||||
isar.settings.clearSync();
|
||||
if (settings != null) {
|
||||
isar.settings.putAllSync(settings);
|
||||
|
|
@ -498,10 +293,6 @@ class SyncServer extends _$SyncServer {
|
|||
if (isar.settings.getSync(227) == null) {
|
||||
isar.settings.putSync(Settings(id: 227));
|
||||
}
|
||||
isar.settings.putSync(
|
||||
isar.settings.getSync(227)!..syncAfterReading = syncAfterReading);
|
||||
isar.settings.putSync(
|
||||
isar.settings.getSync(227)!..syncOnAppLaunch = syncOnAppLaunch);
|
||||
ref.invalidate(themeModeStateProvider);
|
||||
ref.invalidate(blendLevelStateProvider);
|
||||
ref.invalidate(flexSchemeColorStateProvider);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'sync_server.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$syncServerHash() => r'99e16d503937f2973f00c0cf2e834a03cf4aa245';
|
||||
String _$syncServerHash() => r'db0f27093c2e76d4158b7af7960359c54c9a00b2';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
Loading…
Reference in a new issue