misc logs and fix

This commit is contained in:
shenlong-tanwen 2025-05-24 01:26:19 +05:30
parent 5ea136cd32
commit dc31ff7547
3 changed files with 79 additions and 48 deletions

View File

@ -175,6 +175,7 @@ class DeviceSyncService {
// Faster path - only new assets added // Faster path - only new assets added
if (await checkAddition(dbAlbum, deviceAlbum)) { if (await checkAddition(dbAlbum, deviceAlbum)) {
_log.fine("Fast synced device album ${dbAlbum.name}"); _log.fine("Fast synced device album ${dbAlbum.name}");
DLog.log("Fast synced device album ${dbAlbum.name}");
return true; return true;
} }

View File

@ -28,10 +28,17 @@ class BackgroundSyncManager {
return _deviceAlbumSyncTask!.future; return _deviceAlbumSyncTask!.future;
} }
_deviceAlbumSyncTask = runInIsolateGentle( // We use a ternary operator to avoid [_deviceAlbumSyncTask] from being
computation: (ref) => // captured by the closure passed to [runInIsolateGentle].
ref.read(deviceSyncServiceProvider).sync(full: full), _deviceAlbumSyncTask = full
); ? runInIsolateGentle(
computation: (ref) =>
ref.read(deviceSyncServiceProvider).sync(full: true),
)
: runInIsolateGentle(
computation: (ref) =>
ref.read(deviceSyncServiceProvider).sync(full: false),
);
return _deviceAlbumSyncTask!.whenComplete(() { return _deviceAlbumSyncTask!.whenComplete(() {
_deviceAlbumSyncTask = null; _deviceAlbumSyncTask = null;

View File

@ -14,21 +14,22 @@ PlatformException _createConnectionError(String channelName) {
message: 'Unable to establish connection on channel: "$channelName".', message: 'Unable to establish connection on channel: "$channelName".',
); );
} }
bool _deepEquals(Object? a, Object? b) { bool _deepEquals(Object? a, Object? b) {
if (a is List && b is List) { if (a is List && b is List) {
return a.length == b.length && return a.length == b.length &&
a.indexed a.indexed
.every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1])); .every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1]));
} }
if (a is Map && b is Map) { if (a is Map && b is Map) {
return a.length == b.length && a.entries.every((MapEntry<Object?, Object?> entry) => return a.length == b.length &&
(b as Map<Object?, Object?>).containsKey(entry.key) && a.entries.every((MapEntry<Object?, Object?> entry) =>
_deepEquals(entry.value, b[entry.key])); (b as Map<Object?, Object?>).containsKey(entry.key) &&
_deepEquals(entry.value, b[entry.key]));
} }
return a == b; return a == b;
} }
class ImAsset { class ImAsset {
ImAsset({ ImAsset({
required this.id, required this.id,
@ -63,7 +64,8 @@ class ImAsset {
} }
Object encode() { Object encode() {
return _toList(); } return _toList();
}
static ImAsset decode(Object result) { static ImAsset decode(Object result) {
result as List<Object?>; result as List<Object?>;
@ -91,8 +93,7 @@ class ImAsset {
@override @override
// ignore: avoid_equals_and_hash_code_on_mutable_classes // ignore: avoid_equals_and_hash_code_on_mutable_classes
int get hashCode => Object.hashAll(_toList()) int get hashCode => Object.hashAll(_toList());
;
} }
class ImAlbum { class ImAlbum {
@ -125,7 +126,8 @@ class ImAlbum {
} }
Object encode() { Object encode() {
return _toList(); } return _toList();
}
static ImAlbum decode(Object result) { static ImAlbum decode(Object result) {
result as List<Object?>; result as List<Object?>;
@ -152,8 +154,7 @@ class ImAlbum {
@override @override
// ignore: avoid_equals_and_hash_code_on_mutable_classes // ignore: avoid_equals_and_hash_code_on_mutable_classes
int get hashCode => Object.hashAll(_toList()) int get hashCode => Object.hashAll(_toList());
;
} }
class SyncDelta { class SyncDelta {
@ -182,7 +183,8 @@ class SyncDelta {
} }
Object encode() { Object encode() {
return _toList(); } return _toList();
}
static SyncDelta decode(Object result) { static SyncDelta decode(Object result) {
result as List<Object?>; result as List<Object?>;
@ -190,7 +192,8 @@ class SyncDelta {
hasChanges: result[0]! as bool, hasChanges: result[0]! as bool,
updates: (result[1] as List<Object?>?)!.cast<ImAsset>(), updates: (result[1] as List<Object?>?)!.cast<ImAsset>(),
deletes: (result[2] as List<Object?>?)!.cast<String>(), deletes: (result[2] as List<Object?>?)!.cast<String>(),
assetAlbums: (result[3] as Map<Object?, Object?>?)!.cast<String, List<String>>(), assetAlbums:
(result[3] as Map<Object?, Object?>?)!.cast<String, List<String>>(),
); );
} }
@ -208,11 +211,9 @@ class SyncDelta {
@override @override
// ignore: avoid_equals_and_hash_code_on_mutable_classes // ignore: avoid_equals_and_hash_code_on_mutable_classes
int get hashCode => Object.hashAll(_toList()) int get hashCode => Object.hashAll(_toList());
;
} }
class _PigeonCodec extends StandardMessageCodec { class _PigeonCodec extends StandardMessageCodec {
const _PigeonCodec(); const _PigeonCodec();
@override @override
@ -220,13 +221,13 @@ class _PigeonCodec extends StandardMessageCodec {
if (value is int) { if (value is int) {
buffer.putUint8(4); buffer.putUint8(4);
buffer.putInt64(value); buffer.putInt64(value);
} else if (value is ImAsset) { } else if (value is ImAsset) {
buffer.putUint8(129); buffer.putUint8(129);
writeValue(buffer, value.encode()); writeValue(buffer, value.encode());
} else if (value is ImAlbum) { } else if (value is ImAlbum) {
buffer.putUint8(130); buffer.putUint8(130);
writeValue(buffer, value.encode()); writeValue(buffer, value.encode());
} else if (value is SyncDelta) { } else if (value is SyncDelta) {
buffer.putUint8(131); buffer.putUint8(131);
writeValue(buffer, value.encode()); writeValue(buffer, value.encode());
} else { } else {
@ -237,11 +238,11 @@ class _PigeonCodec extends StandardMessageCodec {
@override @override
Object? readValueOfType(int type, ReadBuffer buffer) { Object? readValueOfType(int type, ReadBuffer buffer) {
switch (type) { switch (type) {
case 129: case 129:
return ImAsset.decode(readValue(buffer)!); return ImAsset.decode(readValue(buffer)!);
case 130: case 130:
return ImAlbum.decode(readValue(buffer)!); return ImAlbum.decode(readValue(buffer)!);
case 131: case 131:
return SyncDelta.decode(readValue(buffer)!); return SyncDelta.decode(readValue(buffer)!);
default: default:
return super.readValueOfType(type, buffer); return super.readValueOfType(type, buffer);
@ -253,9 +254,11 @@ class NativeSyncApi {
/// Constructor for [NativeSyncApi]. The [binaryMessenger] named argument is /// Constructor for [NativeSyncApi]. The [binaryMessenger] named argument is
/// available for dependency injection. If it is left null, the default /// available for dependency injection. If it is left null, the default
/// BinaryMessenger will be used which routes to the host platform. /// BinaryMessenger will be used which routes to the host platform.
NativeSyncApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) NativeSyncApi(
{BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''})
: pigeonVar_binaryMessenger = binaryMessenger, : pigeonVar_binaryMessenger = binaryMessenger,
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; pigeonVar_messageChannelSuffix =
messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
final BinaryMessenger? pigeonVar_binaryMessenger; final BinaryMessenger? pigeonVar_binaryMessenger;
static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec(); static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec();
@ -263,8 +266,10 @@ class NativeSyncApi {
final String pigeonVar_messageChannelSuffix; final String pigeonVar_messageChannelSuffix;
Future<bool> shouldFullSync() async { Future<bool> shouldFullSync() async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.shouldFullSync$pigeonVar_messageChannelSuffix'; final String pigeonVar_channelName =
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>( 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.shouldFullSync$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
@ -291,8 +296,10 @@ class NativeSyncApi {
} }
Future<SyncDelta> getMediaChanges() async { Future<SyncDelta> getMediaChanges() async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.getMediaChanges$pigeonVar_messageChannelSuffix'; final String pigeonVar_channelName =
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>( 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.getMediaChanges$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
@ -319,8 +326,10 @@ class NativeSyncApi {
} }
Future<void> checkpointSync() async { Future<void> checkpointSync() async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.checkpointSync$pigeonVar_messageChannelSuffix'; final String pigeonVar_channelName =
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>( 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.checkpointSync$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
@ -342,8 +351,10 @@ class NativeSyncApi {
} }
Future<void> clearSyncCheckpoint() async { Future<void> clearSyncCheckpoint() async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.clearSyncCheckpoint$pigeonVar_messageChannelSuffix'; final String pigeonVar_channelName =
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>( 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.clearSyncCheckpoint$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
@ -365,13 +376,16 @@ class NativeSyncApi {
} }
Future<List<String>> getAssetIdsForAlbum(String albumId) async { Future<List<String>> getAssetIdsForAlbum(String albumId) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.getAssetIdsForAlbum$pigeonVar_messageChannelSuffix'; final String pigeonVar_channelName =
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>( 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.getAssetIdsForAlbum$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
); );
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[albumId]); final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[albumId]);
final List<Object?>? pigeonVar_replyList = final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?; await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) { if (pigeonVar_replyList == null) {
@ -393,8 +407,10 @@ class NativeSyncApi {
} }
Future<List<ImAlbum>> getAlbums() async { Future<List<ImAlbum>> getAlbums() async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.getAlbums$pigeonVar_messageChannelSuffix'; final String pigeonVar_channelName =
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>( 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.getAlbums$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
@ -421,13 +437,16 @@ class NativeSyncApi {
} }
Future<int> getAssetsCountSince(String albumId, int timestamp) async { Future<int> getAssetsCountSince(String albumId, int timestamp) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.getAssetsCountSince$pigeonVar_messageChannelSuffix'; final String pigeonVar_channelName =
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>( 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.getAssetsCountSince$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
); );
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[albumId, timestamp]); final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[albumId, timestamp]);
final List<Object?>? pigeonVar_replyList = final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?; await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) { if (pigeonVar_replyList == null) {
@ -448,14 +467,18 @@ class NativeSyncApi {
} }
} }
Future<List<ImAsset>> getAssetsForAlbum(String albumId, {int? updatedTimeCond}) async { Future<List<ImAsset>> getAssetsForAlbum(String albumId,
final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.NativeSyncApi.getAssetsForAlbum$pigeonVar_messageChannelSuffix'; {int? updatedTimeCond}) async {
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>( final String pigeonVar_channelName =
'dev.flutter.pigeon.immich_mobile.NativeSyncApi.getAssetsForAlbum$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel =
BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
); );
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[albumId, updatedTimeCond]); final Future<Object?> pigeonVar_sendFuture =
pigeonVar_channel.send(<Object?>[albumId, updatedTimeCond]);
final List<Object?>? pigeonVar_replyList = final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture as List<Object?>?; await pigeonVar_sendFuture as List<Object?>?;
if (pigeonVar_replyList == null) { if (pigeonVar_replyList == null) {