refactor: type server identifiers

This commit is contained in:
edde746
2026-06-01 11:06:03 +02:00
parent 7b59dac26b
commit 74b8dc4561
258 changed files with 2296 additions and 2080 deletions
+8 -7
View File
@@ -1,4 +1,5 @@
import 'dart:io';
import '../media/ids.dart';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:flutter/foundation.dart';
@@ -258,7 +259,7 @@ class AppDatabase extends _$AppDatabase {
}
/// Get pending watch actions for a specific server
Future<List<OfflineWatchProgressItem>> getPendingWatchActionsForServer(String serverId, {String? profileId}) {
Future<List<OfflineWatchProgressItem>> getPendingWatchActionsForServer(ServerId serverId, {String? profileId}) {
return (select(offlineWatchProgress)
..where(
(t) =>
@@ -381,14 +382,14 @@ class AppDatabase extends _$AppDatabase {
/// Insert or update a progress action (merges with existing).
Future<void> upsertProgressAction({
String? profileId,
required String serverId,
required ServerId serverId,
String? clientScopeId,
required String ratingKey,
required int viewOffset,
required int? duration,
required bool shouldMarkWatched,
}) async {
final globalKey = buildGlobalKey(serverId, ratingKey);
final globalKey = buildGlobalKey(ServerId(serverId), ratingKey);
final now = DateTime.now().millisecondsSinceEpoch;
await transaction(() async {
@@ -444,12 +445,12 @@ class AppDatabase extends _$AppDatabase {
/// Removes conflicting actions for the same item.
Future<void> insertWatchAction({
String? profileId,
required String serverId,
required ServerId serverId,
String? clientScopeId,
required String ratingKey,
required String actionType, // 'watched' or 'unwatched'
}) async {
final globalKey = buildGlobalKey(serverId, ratingKey);
final globalKey = buildGlobalKey(ServerId(serverId), ratingKey);
final now = DateTime.now().millisecondsSinceEpoch;
// Remove conflicting actions (opposite action type and progress)
@@ -524,7 +525,7 @@ class AppDatabase extends _$AppDatabase {
Future<void> insertSyncRule({
String profileId = '',
required String serverId,
required ServerId serverId,
required String ratingKey,
required String globalKey,
required String targetType,
@@ -570,7 +571,7 @@ class AppDatabase extends _$AppDatabase {
if (profileId.isEmpty) return;
final legacyRules = await (select(syncRules)..where((t) => t.profileId.equals(''))).get();
for (final rule in legacyRules) {
final scopedKey = buildProfileScopedGlobalKey(profileId, rule.serverId, rule.ratingKey);
final scopedKey = buildProfileScopedGlobalKey(profileId, ServerId(rule.serverId), rule.ratingKey);
final duplicate = await getSyncRule(scopedKey);
if (duplicate != null) {
await (delete(syncRules)..where((t) => t.id.equals(rule.id))).go();
+8 -7
View File
@@ -1,4 +1,5 @@
import 'package:drift/drift.dart';
import '../media/ids.dart';
import 'app_database.dart';
import '../models/download_models.dart';
@@ -76,7 +77,7 @@ extension DownloadDatabaseOperations on AppDatabase {
}
Future<void> insertDownload({
required String serverId,
required ServerId serverId,
String? clientScopeId,
required String ratingKey,
required String globalKey,
@@ -209,14 +210,14 @@ extension DownloadDatabaseOperations on AppDatabase {
Future<List<DownloadedMediaItem>> getEpisodesBySeason(
String seasonKey, {
String? serverId,
ServerId? serverId,
String? clientScopeId,
bool filterClientScope = false,
}) {
return (select(downloadedMedia)..where(
(t) =>
t.parentRatingKey.equals(seasonKey) &
_optionalServerPredicate(t.serverId, serverId) &
_optionalServerPredicate(t.serverId, serverIdOrNull(serverId)) &
_optionalClientScopePredicate(t.clientScopeId, clientScopeId, filterClientScope: filterClientScope),
))
.get();
@@ -224,24 +225,24 @@ extension DownloadDatabaseOperations on AppDatabase {
Future<List<DownloadedMediaItem>> getEpisodesByShow(
String showKey, {
String? serverId,
ServerId? serverId,
String? clientScopeId,
bool filterClientScope = false,
}) {
return (select(downloadedMedia)..where(
(t) =>
t.grandparentRatingKey.equals(showKey) &
_optionalServerPredicate(t.serverId, serverId) &
_optionalServerPredicate(t.serverId, serverIdOrNull(serverId)) &
_optionalClientScopePredicate(t.clientScopeId, clientScopeId, filterClientScope: filterClientScope),
))
.get();
}
Future<List<DownloadedMediaItem>> getDownloadsByServerId(String serverId) {
Future<List<DownloadedMediaItem>> getDownloadsByServerId(ServerId serverId) {
return (select(downloadedMedia)..where((t) => t.serverId.equals(serverId))).get();
}
Expression<bool> _optionalServerPredicate(GeneratedColumn<String> column, String? serverId) {
Expression<bool> _optionalServerPredicate(GeneratedColumn<String> column, ServerId? serverId) {
return serverId == null ? const Constant(true) : column.equals(serverId);
}