mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-09 15:38:13 -07:00
feature: Re-implemented syncing
This commit is contained in:
parent
c5c7f71b84
commit
86ff355e21
51 changed files with 3067 additions and 1147 deletions
|
|
@ -18,7 +18,6 @@ import 'package:fladder/models/items/media_segments_model.dart';
|
|||
import 'package:fladder/models/items/media_streams_model.dart';
|
||||
import 'package:fladder/models/items/trick_play_model.dart';
|
||||
import 'package:fladder/models/syncing/i_synced_item.dart';
|
||||
import 'package:fladder/providers/sync/sync_provider_helpers.dart';
|
||||
import 'package:fladder/providers/sync_provider.dart';
|
||||
import 'package:fladder/util/localization_helper.dart';
|
||||
|
||||
|
|
@ -44,6 +43,8 @@ class SyncedItem with _$SyncedItem {
|
|||
@Default([]) List<Chapter> fChapters,
|
||||
@Default([]) List<SubStreamModel> subtitles,
|
||||
@UserDataJsonSerializer() UserData? userData,
|
||||
// ignore: invalid_annotation_target
|
||||
@JsonKey(includeFromJson: false, includeToJson: false) ItemBaseModel? itemModel,
|
||||
}) = _SyncItem;
|
||||
|
||||
static String trickPlayPath = "TrickPlay";
|
||||
|
|
@ -70,9 +71,9 @@ class SyncedItem with _$SyncedItem {
|
|||
File get videoFile => File(joinAll(["$path", "$videoFileName"]));
|
||||
Directory get directory => Directory(path ?? "");
|
||||
|
||||
SyncStatus get status => switch (videoFile.existsSync()) {
|
||||
true => SyncStatus.complete,
|
||||
_ => SyncStatus.partially,
|
||||
TaskStatus get status => switch (videoFile.existsSync()) {
|
||||
true => TaskStatus.complete,
|
||||
_ => TaskStatus.notFound,
|
||||
};
|
||||
|
||||
String? get taskId => task?.taskId;
|
||||
|
|
@ -103,10 +104,9 @@ class SyncedItem with _$SyncedItem {
|
|||
return true;
|
||||
}
|
||||
|
||||
List<SyncedItem> nestedChildren(WidgetRef ref) => ref.watch(syncChildrenProvider(this));
|
||||
|
||||
List<SyncedItem> getChildren(Ref ref) => ref.read(syncProvider.notifier).getChildren(this);
|
||||
List<SyncedItem> getNestedChildren(Ref ref) => ref.read(syncProvider.notifier).getNestedChildren(this);
|
||||
Future<List<SyncedItem>> getChildren(Ref ref) async => await ref.read(syncProvider.notifier).getChildren(this);
|
||||
Future<List<SyncedItem>> getNestedChildren(Ref ref) async =>
|
||||
await ref.read(syncProvider.notifier).getNestedChildren(this);
|
||||
|
||||
Future<int> get getDirSize async {
|
||||
var files = await directory.list(recursive: true).toList();
|
||||
|
|
@ -158,44 +158,45 @@ class SyncedItem with _$SyncedItem {
|
|||
}
|
||||
}
|
||||
|
||||
enum SyncStatus {
|
||||
complete(
|
||||
Color.fromARGB(255, 141, 214, 58),
|
||||
IconsaxPlusLinear.tick_circle,
|
||||
),
|
||||
partially(
|
||||
Color.fromARGB(255, 221, 135, 23),
|
||||
IconsaxPlusLinear.more_circle,
|
||||
),
|
||||
;
|
||||
|
||||
const SyncStatus(this.color, this.icon);
|
||||
|
||||
final Color color;
|
||||
String label(BuildContext context) {
|
||||
return switch (this) {
|
||||
SyncStatus.partially => context.localized.syncStatusPartially,
|
||||
SyncStatus.complete => context.localized.syncStatusSynced,
|
||||
};
|
||||
}
|
||||
|
||||
final IconData icon;
|
||||
}
|
||||
|
||||
extension StatusExtension on TaskStatus {
|
||||
Color color(BuildContext context) => switch (this) {
|
||||
TaskStatus.enqueued => Colors.blueAccent,
|
||||
TaskStatus.running => Colors.limeAccent,
|
||||
TaskStatus.complete => Colors.limeAccent,
|
||||
TaskStatus.canceled || TaskStatus.notFound || TaskStatus.failed => Theme.of(context).colorScheme.error,
|
||||
TaskStatus.waitingToRetry => Colors.yellowAccent,
|
||||
TaskStatus.paused => Colors.orangeAccent,
|
||||
IconData get icon => switch (this) {
|
||||
TaskStatus.enqueued => IconsaxPlusLinear.calendar_circle,
|
||||
TaskStatus.running => IconsaxPlusLinear.arrow_down_1,
|
||||
TaskStatus.complete => IconsaxPlusLinear.tick_circle,
|
||||
TaskStatus.notFound => IconsaxPlusLinear.warning_2,
|
||||
TaskStatus.failed => IconsaxPlusLinear.tag_cross,
|
||||
TaskStatus.canceled => IconsaxPlusLinear.tag_cross,
|
||||
TaskStatus.waitingToRetry => IconsaxPlusLinear.clock,
|
||||
TaskStatus.paused => IconsaxPlusLinear.pause_circle,
|
||||
};
|
||||
|
||||
Color color(BuildContext context) {
|
||||
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
|
||||
return isDarkMode
|
||||
? switch (this) {
|
||||
TaskStatus.enqueued => Colors.blueAccent,
|
||||
TaskStatus.running => Colors.greenAccent,
|
||||
TaskStatus.complete => Colors.limeAccent,
|
||||
TaskStatus.notFound => const Color.fromARGB(255, 221, 135, 23),
|
||||
TaskStatus.canceled || TaskStatus.failed => Theme.of(context).colorScheme.error,
|
||||
TaskStatus.waitingToRetry => Colors.yellowAccent,
|
||||
TaskStatus.paused => Colors.tealAccent,
|
||||
}
|
||||
: switch (this) {
|
||||
TaskStatus.enqueued => Colors.blue,
|
||||
TaskStatus.running => Colors.green,
|
||||
TaskStatus.complete => Colors.lime,
|
||||
TaskStatus.notFound => const Color.fromARGB(255, 221, 135, 23),
|
||||
TaskStatus.canceled || TaskStatus.failed => Theme.of(context).colorScheme.error,
|
||||
TaskStatus.waitingToRetry => Colors.yellow,
|
||||
TaskStatus.paused => Colors.teal,
|
||||
};
|
||||
}
|
||||
|
||||
String name(BuildContext context) => switch (this) {
|
||||
TaskStatus.enqueued => context.localized.syncStatusEnqueued,
|
||||
TaskStatus.running => context.localized.syncStatusRunning,
|
||||
TaskStatus.complete => context.localized.syncStatusComplete,
|
||||
TaskStatus.complete => context.localized.syncStatusSynced,
|
||||
TaskStatus.notFound => context.localized.syncStatusNotFound,
|
||||
TaskStatus.failed => context.localized.syncStatusFailed,
|
||||
TaskStatus.canceled => context.localized.syncStatusCanceled,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue