mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-08 16:07:52 -06:00
104 lines
3.3 KiB
Dart
104 lines
3.3 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:dio/dio.dart';
|
|
import 'package:paperless_mobile/core/database/tables/user_credentials.dart';
|
|
// import 'package:web_socket_channel/io.dart';
|
|
|
|
abstract class StatusService {
|
|
Future<void> startListeningBeforeDocumentUpload(
|
|
String httpUrl, UserCredentials credentials, String documentFileName);
|
|
}
|
|
|
|
class WebSocketStatusService implements StatusService {
|
|
late WebSocket? socket;
|
|
// late IOWebSocketChannel? _channel;
|
|
|
|
WebSocketStatusService();
|
|
|
|
@override
|
|
Future<void> startListeningBeforeDocumentUpload(
|
|
String httpUrl,
|
|
UserCredentials credentials,
|
|
String documentFileName,
|
|
) async {
|
|
// socket = await WebSocket.connect(
|
|
// httpUrl.replaceFirst("http", "ws") + "/ws/status/",
|
|
// customClient: getIt<HttpClient>(),
|
|
// headers: {
|
|
// 'Authorization': 'Token ${credentials.token}',
|
|
// },
|
|
// ).catchError((_) {
|
|
// // Use long polling if connection could not be established
|
|
// });
|
|
|
|
// if (socket != null) {
|
|
// socket!.where(isNotNull).listen((event) {
|
|
// final status = DocumentProcessingStatus.fromJson(event);
|
|
// getIt<DocumentStatusCubit>().updateStatus(status);
|
|
// if (status.currentProgress == 100) {
|
|
// socket!.close();
|
|
// }
|
|
// });
|
|
// }
|
|
}
|
|
}
|
|
|
|
class LongPollingStatusService implements StatusService {
|
|
final Dio client;
|
|
const LongPollingStatusService(this.client);
|
|
|
|
@override
|
|
Future<void> startListeningBeforeDocumentUpload(
|
|
String httpUrl,
|
|
UserCredentials credentials,
|
|
String documentFileName,
|
|
) async {
|
|
// final today = DateTime.now();
|
|
// bool consumptionFinished = false;
|
|
// int retryCount = 0;
|
|
|
|
// getIt<DocumentStatusCubit>().updateStatus(
|
|
// DocumentProcessingStatus(
|
|
// currentProgress: 0,
|
|
// filename: documentFileName,
|
|
// maxProgress: 100,
|
|
// message: ProcessingMessage.new_file,
|
|
// status: ProcessingStatus.working,
|
|
// taskId: DocumentProcessingStatus.unknownTaskId,
|
|
// documentId: null,
|
|
// isApproximated: true,
|
|
// ),
|
|
// );
|
|
|
|
// do {
|
|
// final response = await httpClient.get(
|
|
// Uri.parse(
|
|
// '$httpUrl/api/documents/?query=$documentFileName added:${formatDate(today)}'),
|
|
// );
|
|
// final data = await compute(
|
|
// PagedSearchResult.fromJson,
|
|
// PagedSearchResultJsonSerializer(
|
|
// jsonDecode(response.body), DocumentModel.fromJson),
|
|
// );
|
|
// if (data.count > 0) {
|
|
// consumptionFinished = true;
|
|
// final docId = data.results[0].id;
|
|
// getIt<DocumentStatusCubit>().updateStatus(
|
|
// DocumentProcessingStatus(
|
|
// currentProgress: 100,
|
|
// filename: documentFileName,
|
|
// maxProgress: 100,
|
|
// message: ProcessingMessage.finished,
|
|
// status: ProcessingStatus.success,
|
|
// taskId: DocumentProcessingStatus.unknownTaskId,
|
|
// documentId: docId,
|
|
// isApproximated: true,
|
|
// ),
|
|
// );
|
|
// return;
|
|
// }
|
|
// sleep(const Duration(seconds: 1));
|
|
// } while (!consumptionFinished && retryCount < maxRetries);
|
|
}
|
|
}
|