62 lines
2.1 KiB
Dart
62 lines
2.1 KiB
Dart
import 'package:sqflite/sqflite.dart';
|
|
import 'package:worldhopper/database/database.dart';
|
|
import 'package:worldhopper/database/tables/series_cover_page_table.dart';
|
|
|
|
/// Repository for managing per-series "first page is cover" overrides
|
|
class SeriesCoverPageRepository {
|
|
final DatabaseHelper _dbHelper;
|
|
|
|
SeriesCoverPageRepository({DatabaseHelper? dbHelper})
|
|
: _dbHelper = dbHelper ?? DatabaseHelper.instance;
|
|
|
|
/// Get database instance
|
|
Future<Database> get _db async => await _dbHelper.database;
|
|
|
|
/// Get the cover page override for a series, or null if none set.
|
|
/// Updates last_accessed_at when a row is found.
|
|
Future<bool?> getCoverPage(String seriesFeedUrl) async {
|
|
final db = await _db;
|
|
final List<Map<String, dynamic>> maps = await db.query(
|
|
SeriesCoverPageTable.tableName,
|
|
where: 'series_feed_url = ?',
|
|
whereArgs: [seriesFeedUrl],
|
|
);
|
|
|
|
if (maps.isEmpty) return null;
|
|
|
|
// Update last_accessed_at
|
|
await db.update(
|
|
SeriesCoverPageTable.tableName,
|
|
{'last_accessed_at': DateTime.now().toUtc().toIso8601String()},
|
|
where: 'series_feed_url = ?',
|
|
whereArgs: [seriesFeedUrl],
|
|
);
|
|
|
|
return (maps.first['first_page_is_cover'] as int) == 1;
|
|
}
|
|
|
|
/// Set (insert or update) the cover page override for a series.
|
|
/// Preserves created_at on updates.
|
|
Future<void> setCoverPage(String seriesFeedUrl, bool value) async {
|
|
final db = await _db;
|
|
final now = DateTime.now().toUtc().toIso8601String();
|
|
await db.rawInsert('''
|
|
INSERT INTO ${SeriesCoverPageTable.tableName}
|
|
(series_feed_url, first_page_is_cover, created_at, last_accessed_at)
|
|
VALUES (?, ?, ?, ?)
|
|
ON CONFLICT(series_feed_url) DO UPDATE SET
|
|
first_page_is_cover = excluded.first_page_is_cover,
|
|
last_accessed_at = excluded.last_accessed_at
|
|
''', [seriesFeedUrl, value ? 1 : 0, now, now]);
|
|
}
|
|
|
|
/// Delete the cover page override for a series
|
|
Future<void> deleteCoverPage(String seriesFeedUrl) async {
|
|
final db = await _db;
|
|
await db.delete(
|
|
SeriesCoverPageTable.tableName,
|
|
where: 'series_feed_url = ?',
|
|
whereArgs: [seriesFeedUrl],
|
|
);
|
|
}
|
|
}
|