feat: Implement updated receive share logic

This commit is contained in:
Anton Stubenbord
2023-10-02 23:59:42 +02:00
parent 653344c9ee
commit 37ed8bbb04
47 changed files with 1695 additions and 730 deletions

View File

@@ -1,36 +1,26 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:paperless_api/paperless_api.dart';
part 'task_status_state.dart';
class TaskStatusCubit extends Cubit<TaskStatusState> {
class PendingTasksNotifier extends ValueNotifier<Map<String, Task>> {
final PaperlessTasksApi _api;
TaskStatusCubit(this._api) : super(const TaskStatusState());
PendingTasksNotifier(this._api) : super({});
void listenToTaskChanges(String taskId) {
_api
.listenForTaskChanges(taskId)
.forEach(
(element) => emit(
TaskStatusState(
isListening: true,
task: element,
),
),
)
.whenComplete(() => emit(state.copyWith(isListening: false)));
}
Future<void> acknowledgeCurrentTask() async {
if (state.task == null) {
return;
}
final task = await _api.acknowledgeTask(state.task!);
emit(
state.copyWith(
task: task,
isListening: false,
),
_api.listenForTaskChanges(taskId).forEach((task) {
value = {...value, taskId: task};
notifyListeners();
}).whenComplete(
() {
value = value..remove(taskId);
notifyListeners();
},
);
}
Future<void> acknowledgeTasks(Iterable<String> taskIds) async {
final tasks = value.values.where((task) => taskIds.contains(task.taskId));
await Future.wait([for (var task in tasks) _api.acknowledgeTask(task)]);
value = value..removeWhere((key, value) => taskIds.contains(key));
notifyListeners();
}
}

View File

@@ -1,31 +0,0 @@
part of 'task_status_cubit.dart';
class TaskStatusState extends Equatable {
final Task? task;
final bool isListening;
const TaskStatusState({
this.task,
this.isListening = false,
});
bool get isSuccess => task?.status == TaskStatus.success;
bool get isAcknowledged => task?.acknowledged ?? false;
String? get taskId => task?.taskId;
@override
List<Object?> get props => [task, isListening];
TaskStatusState copyWith({
Task? task,
bool? isListening,
bool? isAcknowledged,
}) {
return TaskStatusState(
task: task ?? this.task,
isListening: isListening ?? this.isListening,
);
}
}