mirror of
https://github.com/immich-app/immich.git
synced 2024-11-24 08:52:28 +02:00
refactor(mobile): assert lists are sorted for diffing (#13180)
This commit is contained in:
parent
6bbaba7866
commit
0f3b8b67fe
@ -138,7 +138,6 @@ class SyncService {
|
|||||||
Future<bool> _syncUsersFromServer(List<User> users) async {
|
Future<bool> _syncUsersFromServer(List<User> users) async {
|
||||||
users.sortBy((u) => u.id);
|
users.sortBy((u) => u.id);
|
||||||
final dbUsers = await _userRepository.getAll(sortBy: UserSort.id);
|
final dbUsers = await _userRepository.getAll(sortBy: UserSort.id);
|
||||||
assert(dbUsers.isSortedBy((u) => u.id), "dbUsers not sorted!");
|
|
||||||
final List<int> toDelete = [];
|
final List<int> toDelete = [];
|
||||||
final List<User> toUpsert = [];
|
final List<User> toUpsert = [];
|
||||||
final changes = diffSortedListsSync(
|
final changes = diffSortedListsSync(
|
||||||
@ -322,8 +321,6 @@ class SyncService {
|
|||||||
ownerId: isShared ? null : me.isarId,
|
ownerId: isShared ? null : me.isarId,
|
||||||
sortBy: AlbumSort.remoteId,
|
sortBy: AlbumSort.remoteId,
|
||||||
);
|
);
|
||||||
assert(dbAlbums.isSortedBy((e) => e.remoteId!), "dbAlbums not sorted!");
|
|
||||||
|
|
||||||
final List<Asset> toDelete = [];
|
final List<Asset> toDelete = [];
|
||||||
final List<Asset> existing = [];
|
final List<Asset> existing = [];
|
||||||
|
|
||||||
@ -512,7 +509,6 @@ class SyncService {
|
|||||||
await _albumRepository.getAll(remote: false, sortBy: AlbumSort.localId);
|
await _albumRepository.getAll(remote: false, sortBy: AlbumSort.localId);
|
||||||
final List<Asset> deleteCandidates = [];
|
final List<Asset> deleteCandidates = [];
|
||||||
final List<Asset> existing = [];
|
final List<Asset> existing = [];
|
||||||
assert(inDb.isSorted((a, b) => a.localId!.compareTo(b.localId!)), "sort!");
|
|
||||||
final bool anyChanges = await diffSortedLists(
|
final bool anyChanges = await diffSortedLists(
|
||||||
onDevice,
|
onDevice,
|
||||||
inDb,
|
inDb,
|
||||||
|
@ -1,16 +1,20 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:collection/collection.dart';
|
||||||
|
|
||||||
/// Efficiently compares two sorted lists in O(n), calling the given callback
|
/// Efficiently compares two sorted lists in O(n), calling the given callback
|
||||||
/// for each item.
|
/// for each item.
|
||||||
/// Return `true` if there are any differences found, else `false`
|
/// Return `true` if there are any differences found, else `false`
|
||||||
Future<bool> diffSortedLists<A, B>(
|
Future<bool> diffSortedLists<T>(
|
||||||
List<A> la,
|
List<T> la,
|
||||||
List<B> lb, {
|
List<T> lb, {
|
||||||
required int Function(A a, B b) compare,
|
required int Function(T a, T b) compare,
|
||||||
required FutureOr<bool> Function(A a, B b) both,
|
required FutureOr<bool> Function(T a, T b) both,
|
||||||
required FutureOr<void> Function(A a) onlyFirst,
|
required FutureOr<void> Function(T a) onlyFirst,
|
||||||
required FutureOr<void> Function(B b) onlySecond,
|
required FutureOr<void> Function(T b) onlySecond,
|
||||||
}) async {
|
}) async {
|
||||||
|
assert(la.isSorted(compare), "first argument must be sorted");
|
||||||
|
assert(lb.isSorted(compare), "second argument must be sorted");
|
||||||
bool diff = false;
|
bool diff = false;
|
||||||
int i = 0, j = 0;
|
int i = 0, j = 0;
|
||||||
for (; i < la.length && j < lb.length;) {
|
for (; i < la.length && j < lb.length;) {
|
||||||
@ -38,14 +42,16 @@ Future<bool> diffSortedLists<A, B>(
|
|||||||
/// Efficiently compares two sorted lists in O(n), calling the given callback
|
/// Efficiently compares two sorted lists in O(n), calling the given callback
|
||||||
/// for each item.
|
/// for each item.
|
||||||
/// Return `true` if there are any differences found, else `false`
|
/// Return `true` if there are any differences found, else `false`
|
||||||
bool diffSortedListsSync<A, B>(
|
bool diffSortedListsSync<T>(
|
||||||
List<A> la,
|
List<T> la,
|
||||||
List<B> lb, {
|
List<T> lb, {
|
||||||
required int Function(A a, B b) compare,
|
required int Function(T a, T b) compare,
|
||||||
required bool Function(A a, B b) both,
|
required bool Function(T a, T b) both,
|
||||||
required void Function(A a) onlyFirst,
|
required void Function(T a) onlyFirst,
|
||||||
required void Function(B b) onlySecond,
|
required void Function(T b) onlySecond,
|
||||||
}) {
|
}) {
|
||||||
|
assert(la.isSorted(compare), "first argument must be sorted");
|
||||||
|
assert(lb.isSorted(compare), "second argument must be sorted");
|
||||||
bool diff = false;
|
bool diff = false;
|
||||||
int i = 0, j = 0;
|
int i = 0, j = 0;
|
||||||
for (; i < la.length && j < lb.length;) {
|
for (; i < la.length && j < lb.length;) {
|
||||||
|
Loading…
Reference in New Issue
Block a user