mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-15 06:12:29 -06:00
feat: Implement updated receive share logic
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user