mangayomi-mirror/lib/modules/main_view/providers/migration.dart

55 lines
1.8 KiB
Dart

import 'package:isar/isar.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/download.dart';
import 'package:mangayomi/models/history.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/track.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
part 'migration.g.dart';
@riverpod
Future<void> migration(Ref ref) async {
final chapters =
isar.chapters.filter().idIsNotNull().mangaIdIsNull().findAllSync();
final downloads =
isar.downloads.filter().idIsNotNull().mangaIdIsNull().findAllSync();
final histories = isar.historys
.filter()
.idIsNotNull()
.chapterIdIsNull()
.or()
.idIsNotNull()
.findAllSync();
final tracks = isar.tracks.filter().idIsNotNull().findAllSync();
isar.writeTxnSync(() {
//mangaId in chapter
for (var chapter in chapters) {
final mangaId = chapter.manga.value?.id;
isar.chapters.putSync(chapter..mangaId = mangaId);
}
//mangaId in Download
for (var download in downloads) {
final mangaId = download.chapter.value?.manga.value?.id;
isar.downloads.putSync(download..mangaId = mangaId);
}
//chapterId and isManga in History
for (var history in histories) {
final chapterId = history.chapter.value?.id;
final itemType =
history.chapter.value?.manga.value?.itemType ?? ItemType.manga;
isar.historys.putSync(history
..chapterId = chapterId
..itemType = itemType);
}
// isManga in Track
for (var track in tracks) {
final isManga =
(isar.mangas.getSync(track.mangaId!)?.itemType ?? ItemType.manga) ==
ItemType.manga;
isar.tracks.putSync(track..isManga = isManga);
}
});
}