fix: Increment on sqlite level to hopefully fix "race conditions"

This commit is contained in:
PapaTutuWawa committed 2026-03-08 13:49:50 +01:00
1 parent 7c4e23e32c
commit 4c5fa10ffd
18 files changed
+697 -119

No files matched your search

+39
View File
@@ -1,8 +1,11 @@
import 'dart:io';
import 'package:anitrack/src/data/anime.dart';
import 'package:anitrack/src/data/manga.dart';
import 'package:anitrack/src/service/migrations/0000_airing.dart';
import 'package:anitrack/src/service/migrations/0000_score.dart';
import 'package:sqflite/sqflite.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
const animeTable = 'Anime';
const mangaTable = 'Manga';
@@ -53,6 +56,12 @@ class DatabaseService {
late final Database _db;
Future<void> initialize() async {
// Allow initializing the database on Windows and Linux as well.
if (Platform.isLinux || Platform.isWindows) {
sqfliteFfiInit();
}
databaseFactory = databaseFactoryFfi;
_db = await openDatabase(
'anitrack.db',
version: 3,
@@ -113,6 +122,21 @@ class DatabaseService {
);
}
Future<AnimeTrackingData> incrementAnimeWatchCounter(AnimeTrackingData data, int value) async {
final result = await _db.rawQuery(
'UPDATE $animeTable SET episodesWatched = episodesWatched + $value WHERE id = ? RETURNING *',
[
data.id,
],
);
return result
.cast<Map<String, dynamic>>()
.map(AnimeTrackingData.fromJson)
.toList()
.first;
}
Future<void> deleteAnime(String id) async {
await _db.delete(
animeTable,
@@ -145,4 +169,19 @@ class DatabaseService {
whereArgs: [id],
);
}
Future<MangaTrackingData> incrementMangaReadChapters(MangaTrackingData data, int value) async {
final result = await _db.rawQuery(
'UPDATE $mangaTable SET episodesWatched = chaptersRead + $value WHERE id = ? RETURNING *',
[
data.id,
],
);
return result
.cast<Map<String, dynamic>>()
.map(MangaTrackingData.fromJson)
.toList()
.first;
}
}