mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-13 17:30:31 -07:00
feature: Improved sync capability
This commit is contained in:
parent
f3e920ac79
commit
c5c7f71b84
31 changed files with 500 additions and 344 deletions
|
|
@ -11,30 +11,40 @@ part 'sync_provider_helpers.g.dart';
|
|||
@riverpod
|
||||
class SyncChildren extends _$SyncChildren {
|
||||
@override
|
||||
List<SyncedItem> build(SyncedItem arg) {
|
||||
final syncedItemIsar = ref.watch(syncProvider.notifier).isar;
|
||||
final allChildren = <SyncedItem>[];
|
||||
List<SyncedItem> toProcess = [arg];
|
||||
List<SyncedItem> build(SyncedItem root) {
|
||||
final isar = ref.watch(syncProvider.notifier).isar;
|
||||
final syncPath = ref.read(syncProvider.notifier).syncPath ?? "";
|
||||
|
||||
if (isar == null) return [];
|
||||
|
||||
final all = <SyncedItem>[];
|
||||
List<SyncedItem> toProcess = [root];
|
||||
|
||||
while (toProcess.isNotEmpty) {
|
||||
final currentLevel = toProcess.map(
|
||||
(parent) {
|
||||
final children = syncedItemIsar?.iSyncedItems.where().parentIdEqualTo(parent.id).sortBySortName().findAll();
|
||||
return children?.map((e) => SyncedItem.fromIsar(e, ref.read(syncProvider.notifier).syncPath ?? "")) ??
|
||||
<SyncedItem>[];
|
||||
},
|
||||
);
|
||||
allChildren.addAll(currentLevel.expand((list) => list));
|
||||
toProcess = currentLevel.expand((list) => list).toList();
|
||||
final parentIds = toProcess.map((e) => e.id).toList();
|
||||
|
||||
final children = <ISyncedItem>[];
|
||||
for (final id in parentIds) {
|
||||
final results = isar.iSyncedItems.where().parentIdEqualTo(id).sortBySortName().findAll();
|
||||
children.addAll(results);
|
||||
}
|
||||
|
||||
if (children.isEmpty) break;
|
||||
|
||||
final wrapped = children.map((e) => SyncedItem.fromIsar(e, syncPath)).toList();
|
||||
all.addAll(wrapped);
|
||||
toProcess = wrapped;
|
||||
}
|
||||
return allChildren;
|
||||
|
||||
return all;
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class SyncDownloadStatus extends _$SyncDownloadStatus {
|
||||
@override
|
||||
DownloadStream? build(SyncedItem arg) {
|
||||
final nestedChildren = ref.watch(syncChildrenProvider(arg));
|
||||
DownloadStream? build(SyncedItem arg, List<SyncedItem> children) {
|
||||
final nestedChildren = children;
|
||||
|
||||
ref.watch(downloadTasksProvider(arg.id));
|
||||
for (var element in nestedChildren) {
|
||||
|
|
@ -64,20 +74,23 @@ class SyncDownloadStatus extends _$SyncDownloadStatus {
|
|||
@riverpod
|
||||
class SyncStatuses extends _$SyncStatuses {
|
||||
@override
|
||||
FutureOr<SyncStatus> build(SyncedItem arg) async {
|
||||
final nestedChildren = ref.watch(syncChildrenProvider(arg));
|
||||
FutureOr<SyncStatus> build(SyncedItem arg, List<SyncedItem>? children) async {
|
||||
final nestedChildren = children;
|
||||
|
||||
ref.watch(downloadTasksProvider(arg.id));
|
||||
for (var element in nestedChildren) {
|
||||
ref.watch(downloadTasksProvider(element.id));
|
||||
}
|
||||
if (nestedChildren != null) {
|
||||
for (var element in nestedChildren) {
|
||||
ref.watch(downloadTasksProvider(element.id));
|
||||
}
|
||||
|
||||
for (var i = 0; i < nestedChildren.length; i++) {
|
||||
final item = nestedChildren[i];
|
||||
if (item.hasVideoFile && !await item.videoFile.exists()) {
|
||||
return SyncStatus.partially;
|
||||
for (var i = 0; i < nestedChildren.length; i++) {
|
||||
final item = nestedChildren[i];
|
||||
if (item.hasVideoFile && !await item.videoFile.exists()) {
|
||||
return SyncStatus.partially;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (arg.hasVideoFile && !await arg.videoFile.exists()) {
|
||||
return SyncStatus.partially;
|
||||
}
|
||||
|
|
@ -88,17 +101,21 @@ class SyncStatuses extends _$SyncStatuses {
|
|||
@riverpod
|
||||
class SyncSize extends _$SyncSize {
|
||||
@override
|
||||
int? build(SyncedItem arg) {
|
||||
final nestedChildren = ref.watch(syncChildrenProvider(arg));
|
||||
int? build(SyncedItem arg, List<SyncedItem>? children) {
|
||||
final nestedChildren = children;
|
||||
|
||||
ref.watch(downloadTasksProvider(arg.id));
|
||||
for (var element in nestedChildren) {
|
||||
ref.watch(downloadTasksProvider(element.id));
|
||||
}
|
||||
int size = arg.fileSize ?? 0;
|
||||
for (var element in nestedChildren) {
|
||||
size += element.fileSize ?? 0;
|
||||
|
||||
if (nestedChildren != null) {
|
||||
for (var element in nestedChildren) {
|
||||
ref.watch(downloadTasksProvider(element.id));
|
||||
}
|
||||
for (var element in nestedChildren) {
|
||||
size += element.fileSize ?? 0;
|
||||
}
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue