mirror of
https://github.com/immich-app/immich
synced 2025-10-17 18:19:27 +00:00
fix: parse correct metadata to userDto for SQlite store implmentation (#21154)
This commit is contained in:
parent
01edf6533b
commit
13c8a6e61d
4 changed files with 50 additions and 17 deletions
|
|
@ -74,7 +74,6 @@ isOnboarded: $isOnboarded,
|
||||||
int get hashCode => isOnboarded.hashCode;
|
int get hashCode => isOnboarded.hashCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: wait to be overwritten
|
|
||||||
class Preferences {
|
class Preferences {
|
||||||
final bool foldersEnabled;
|
final bool foldersEnabled;
|
||||||
final bool memoriesEnabled;
|
final bool memoriesEnabled;
|
||||||
|
|
@ -133,17 +132,17 @@ class Preferences {
|
||||||
|
|
||||||
factory Preferences.fromMap(Map<String, Object?> map) {
|
factory Preferences.fromMap(Map<String, Object?> map) {
|
||||||
return Preferences(
|
return Preferences(
|
||||||
foldersEnabled: map["folders-Enabled"] as bool? ?? false,
|
foldersEnabled: (map["folders"] as Map<String, Object?>?)?["enabled"] as bool? ?? false,
|
||||||
memoriesEnabled: map["memories-Enabled"] as bool? ?? true,
|
memoriesEnabled: (map["memories"] as Map<String, Object?>?)?["enabled"] as bool? ?? true,
|
||||||
peopleEnabled: map["people-Enabled"] as bool? ?? true,
|
peopleEnabled: (map["people"] as Map<String, Object?>?)?["enabled"] as bool? ?? true,
|
||||||
ratingsEnabled: map["ratings-Enabled"] as bool? ?? false,
|
ratingsEnabled: (map["ratings"] as Map<String, Object?>?)?["enabled"] as bool? ?? false,
|
||||||
sharedLinksEnabled: map["sharedLinks-Enabled"] as bool? ?? true,
|
sharedLinksEnabled: (map["sharedLinks"] as Map<String, Object?>?)?["enabled"] as bool? ?? true,
|
||||||
tagsEnabled: map["tags-Enabled"] as bool? ?? false,
|
tagsEnabled: (map["tags"] as Map<String, Object?>?)?["enabled"] as bool? ?? false,
|
||||||
userAvatarColor: AvatarColor.values.firstWhere(
|
userAvatarColor: AvatarColor.values.firstWhere(
|
||||||
(e) => e.value == map["avatar-Color"] as String?,
|
(e) => e.value == (map["avatar"] as Map<String, Object?>?)?["color"] as String?,
|
||||||
orElse: () => AvatarColor.primary,
|
orElse: () => AvatarColor.primary,
|
||||||
),
|
),
|
||||||
showSupportBadge: map["purchase-ShowSupportBadge"] as bool? ?? true,
|
showSupportBadge: (map["purchase"] as Map<String, Object?>?)?["showSupportBadge"] as bool? ?? true,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -213,7 +212,7 @@ class License {
|
||||||
|
|
||||||
factory License.fromMap(Map<String, Object?> map) {
|
factory License.fromMap(Map<String, Object?> map) {
|
||||||
return License(
|
return License(
|
||||||
activatedAt: map["activatedAt"] as DateTime,
|
activatedAt: DateTime.parse(map["activatedAt"] as String),
|
||||||
activationKey: map["activationKey"] as String,
|
activationKey: map["activationKey"] as String,
|
||||||
licenseKey: map["licenseKey"] as String,
|
licenseKey: map["licenseKey"] as String,
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
import 'package:drift/drift.dart';
|
import 'package:drift/drift.dart';
|
||||||
import 'package:immich_mobile/constants/enums.dart';
|
import 'package:immich_mobile/constants/enums.dart';
|
||||||
import 'package:immich_mobile/domain/models/user.model.dart';
|
import 'package:immich_mobile/domain/models/user.model.dart';
|
||||||
|
import 'package:immich_mobile/domain/models/user_metadata.model.dart';
|
||||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as entity;
|
import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as entity;
|
||||||
import 'package:immich_mobile/infrastructure/entities/user.entity.drift.dart';
|
import 'package:immich_mobile/infrastructure/entities/user.entity.drift.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
||||||
|
import 'package:immich_mobile/infrastructure/repositories/user_metadata.repository.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
class IsarUserRepository extends IsarDatabaseRepository {
|
class IsarUserRepository extends IsarDatabaseRepository {
|
||||||
|
|
@ -70,8 +72,16 @@ class DriftUserRepository extends DriftDatabaseRepository {
|
||||||
final Drift _db;
|
final Drift _db;
|
||||||
const DriftUserRepository(super.db) : _db = db;
|
const DriftUserRepository(super.db) : _db = db;
|
||||||
|
|
||||||
Future<UserDto?> get(String id) =>
|
Future<UserDto?> get(String id) async {
|
||||||
_db.managers.userEntity.filter((user) => user.id.equals(id)).getSingleOrNull().then((user) => user?.toDto());
|
final user = await _db.managers.userEntity.filter((user) => user.id.equals(id)).getSingleOrNull();
|
||||||
|
|
||||||
|
if (user == null) return null;
|
||||||
|
|
||||||
|
final query = _db.userMetadataEntity.select()..where((e) => e.userId.equals(id));
|
||||||
|
final metadata = await query.map((row) => row.toDto()).get();
|
||||||
|
|
||||||
|
return user.toDto(metadata);
|
||||||
|
}
|
||||||
|
|
||||||
Future<UserDto> upsert(UserDto user) async {
|
Future<UserDto> upsert(UserDto user) async {
|
||||||
await _db.userEntity.insertOnConflictUpdate(
|
await _db.userEntity.insertOnConflictUpdate(
|
||||||
|
|
@ -87,10 +97,35 @@ class DriftUserRepository extends DriftDatabaseRepository {
|
||||||
);
|
);
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<List<UserDto>> getAll() async {
|
||||||
|
final users = await _db.userEntity.select().get();
|
||||||
|
final List<UserDto> result = [];
|
||||||
|
|
||||||
|
for (final user in users) {
|
||||||
|
final query = _db.userMetadataEntity.select()..where((e) => e.userId.equals(user.id));
|
||||||
|
final metadata = await query.map((row) => row.toDto()).get();
|
||||||
|
result.add(user.toDto(metadata));
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension on UserEntityData {
|
extension on UserEntityData {
|
||||||
UserDto toDto() {
|
UserDto toDto([List<UserMetadata>? metadata]) {
|
||||||
|
AvatarColor avatarColor = AvatarColor.primary;
|
||||||
|
bool memoryEnabled = true;
|
||||||
|
|
||||||
|
if (metadata != null) {
|
||||||
|
for (final meta in metadata) {
|
||||||
|
if (meta.key == UserMetadataKey.preferences && meta.preferences != null) {
|
||||||
|
avatarColor = meta.preferences?.userAvatarColor ?? AvatarColor.primary;
|
||||||
|
memoryEnabled = meta.preferences?.memoriesEnabled ?? true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return UserDto(
|
return UserDto(
|
||||||
id: id,
|
id: id,
|
||||||
email: email,
|
email: email,
|
||||||
|
|
@ -99,6 +134,8 @@ extension on UserEntityData {
|
||||||
updatedAt: updatedAt,
|
updatedAt: updatedAt,
|
||||||
profileChangedAt: profileChangedAt,
|
profileChangedAt: profileChangedAt,
|
||||||
hasProfileImage: hasProfileImage,
|
hasProfileImage: hasProfileImage,
|
||||||
|
avatarColor: avatarColor,
|
||||||
|
memoryEnabled: memoryEnabled,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ class DriftUserMetadataRepository extends DriftDatabaseRepository {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension on UserMetadataEntityData {
|
extension UserMetadataDataExtension on UserMetadataEntityData {
|
||||||
UserMetadata toDto() => switch (key) {
|
UserMetadata toDto() => switch (key) {
|
||||||
UserMetadataKey.onboarding => UserMetadata(userId: userId, key: key, onboarding: Onboarding.fromMap(value)),
|
UserMetadataKey.onboarding => UserMetadata(userId: userId, key: key, onboarding: Onboarding.fromMap(value)),
|
||||||
UserMetadataKey.preferences => UserMetadata(userId: userId, key: key, preferences: Preferences.fromMap(value)),
|
UserMetadataKey.preferences => UserMetadata(userId: userId, key: key, preferences: Preferences.fromMap(value)),
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,6 @@ class MainTimelinePage extends ConsumerWidget {
|
||||||
final memoryLaneProvider = ref.watch(driftMemoryFutureProvider);
|
final memoryLaneProvider = ref.watch(driftMemoryFutureProvider);
|
||||||
final memoriesEnabled = ref.watch(currentUserProvider.select((user) => user?.memoryEnabled ?? true));
|
final memoriesEnabled = ref.watch(currentUserProvider.select((user) => user?.memoryEnabled ?? true));
|
||||||
|
|
||||||
// TODO: the user preferences need to be updated
|
|
||||||
// from the server to get live hiding/showing of memory lane
|
|
||||||
|
|
||||||
return memoryLaneProvider.maybeWhen(
|
return memoryLaneProvider.maybeWhen(
|
||||||
data: (memories) {
|
data: (memories) {
|
||||||
return memories.isEmpty || !memoriesEnabled
|
return memories.isEmpty || !memoriesEnabled
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue