mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-09 16:07:57 -06:00
Feat: Update scanner persistence, more migrations and bugfixes
This commit is contained in:
@@ -39,8 +39,6 @@ class DioHttpErrorInterceptor extends Interceptor {
|
||||
),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
return handler.next(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
12
lib/core/model/info_message_exception.dart
Normal file
12
lib/core/model/info_message_exception.dart
Normal file
@@ -0,0 +1,12 @@
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
|
||||
class InfoMessageException implements Exception {
|
||||
final ErrorCode code;
|
||||
final String? message;
|
||||
final StackTrace? stackTrace;
|
||||
InfoMessageException({
|
||||
required this.code,
|
||||
this.message,
|
||||
this.stackTrace,
|
||||
});
|
||||
}
|
||||
@@ -43,6 +43,7 @@ Future<void> pushSavedViewDetailsRoute(
|
||||
context.read(),
|
||||
context.read(),
|
||||
LocalUserAppState.current,
|
||||
context.read(),
|
||||
savedView: savedView,
|
||||
),
|
||||
child: SavedViewDetailsPage(
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:dio/dio.dart';
|
||||
import 'package:dio/io.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:paperless_mobile/core/interceptor/dio_http_error_interceptor.dart';
|
||||
import 'package:paperless_mobile/core/interceptor/dio_offline_interceptor.dart';
|
||||
import 'package:paperless_mobile/core/interceptor/dio_unauthorized_interceptor.dart';
|
||||
import 'package:paperless_mobile/core/interceptor/retry_on_connection_change_interceptor.dart';
|
||||
import 'package:paperless_mobile/features/login/model/client_certificate.dart';
|
||||
@@ -37,6 +38,7 @@ class SessionManager extends ValueNotifier<Dio> {
|
||||
...interceptors,
|
||||
DioUnauthorizedInterceptor(),
|
||||
DioHttpErrorInterceptor(),
|
||||
DioOfflineInterceptor(),
|
||||
PrettyDioLogger(
|
||||
compact: true,
|
||||
responseBody: false,
|
||||
|
||||
@@ -7,6 +7,7 @@ import 'package:paperless_mobile/core/interceptor/server_reachability_error_inte
|
||||
import 'package:paperless_mobile/core/security/session_manager.dart';
|
||||
import 'package:paperless_mobile/features/login/model/client_certificate.dart';
|
||||
import 'package:paperless_mobile/features/login/model/reachability_status.dart';
|
||||
import 'package:rxdart/subjects.dart';
|
||||
|
||||
abstract class ConnectivityStatusService {
|
||||
Future<bool> isConnectedToInternet();
|
||||
@@ -20,14 +21,19 @@ abstract class ConnectivityStatusService {
|
||||
|
||||
class ConnectivityStatusServiceImpl implements ConnectivityStatusService {
|
||||
final Connectivity _connectivity;
|
||||
final BehaviorSubject<bool> _connectivityState$ = BehaviorSubject();
|
||||
|
||||
ConnectivityStatusServiceImpl(this._connectivity);
|
||||
ConnectivityStatusServiceImpl(this._connectivity) {
|
||||
_connectivityState$.addStream(
|
||||
_connectivity.onConnectivityChanged
|
||||
.map(_hasActiveInternetConnection)
|
||||
.asBroadcastStream(),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Stream<bool> connectivityChanges() {
|
||||
return _connectivity.onConnectivityChanged
|
||||
.map(_hasActiveInternetConnection)
|
||||
.asBroadcastStream();
|
||||
return _connectivityState$.asBroadcastStream();
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -98,3 +104,31 @@ class ConnectivityStatusServiceImpl implements ConnectivityStatusService {
|
||||
return ReachabilityStatus.notReachable;
|
||||
}
|
||||
}
|
||||
|
||||
class ConnectivityStatusServiceMock implements ConnectivityStatusService {
|
||||
final bool isConnected;
|
||||
|
||||
ConnectivityStatusServiceMock(this.isConnected);
|
||||
@override
|
||||
Stream<bool> connectivityChanges() {
|
||||
return Stream.value(isConnected);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> isConnectedToInternet() async {
|
||||
return isConnected;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<ReachabilityStatus> isPaperlessServerReachable(String serverAddress,
|
||||
[ClientCertificate? clientCertificate]) async {
|
||||
return isConnected
|
||||
? ReachabilityStatus.reachable
|
||||
: ReachabilityStatus.notReachable;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> isServerReachable(String serverAddress) async {
|
||||
return isConnected;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ class FileService {
|
||||
case PaperlessDirectoryType.temporary:
|
||||
return temporaryDirectory;
|
||||
case PaperlessDirectoryType.scans:
|
||||
return scanDirectory;
|
||||
return temporaryScansDirectory;
|
||||
case PaperlessDirectoryType.download:
|
||||
return downloadsDirectory;
|
||||
}
|
||||
@@ -52,8 +52,7 @@ class FileService {
|
||||
} else if (Platform.isIOS) {
|
||||
final appDir = await getApplicationDocumentsDirectory();
|
||||
final dir = Directory('${appDir.path}/documents');
|
||||
dir.createSync();
|
||||
return dir;
|
||||
return dir.create(recursive: true);
|
||||
} else {
|
||||
throw UnsupportedError("Platform not supported.");
|
||||
}
|
||||
@@ -72,33 +71,22 @@ class FileService {
|
||||
} else if (Platform.isIOS) {
|
||||
final appDir = await getApplicationDocumentsDirectory();
|
||||
final dir = Directory('${appDir.path}/downloads');
|
||||
dir.createSync();
|
||||
return dir;
|
||||
return dir.create(recursive: true);
|
||||
} else {
|
||||
throw UnsupportedError("Platform not supported.");
|
||||
}
|
||||
}
|
||||
|
||||
static Future<Directory?> get scanDirectory async {
|
||||
if (Platform.isAndroid) {
|
||||
final scanDir = await getExternalStorageDirectories(
|
||||
type: StorageDirectory.dcim,
|
||||
);
|
||||
return scanDir!.first;
|
||||
} else if (Platform.isIOS) {
|
||||
final appDir = await getApplicationDocumentsDirectory();
|
||||
final dir = Directory('${appDir.path}/scans');
|
||||
dir.createSync();
|
||||
return dir;
|
||||
} else {
|
||||
throw UnsupportedError("Platform not supported.");
|
||||
}
|
||||
static Future<Directory> get temporaryScansDirectory async {
|
||||
final tempDir = await temporaryDirectory;
|
||||
final scansDir = Directory('${tempDir.path}/scans');
|
||||
return scansDir.create(recursive: true);
|
||||
}
|
||||
|
||||
static Future<void> clearUserData() async {
|
||||
final scanDir = await scanDirectory;
|
||||
final scanDir = await temporaryScansDirectory;
|
||||
final tempDir = await temporaryDirectory;
|
||||
await scanDir?.delete(recursive: true);
|
||||
await scanDir.delete(recursive: true);
|
||||
await tempDir.delete(recursive: true);
|
||||
}
|
||||
|
||||
|
||||
@@ -75,5 +75,6 @@ String translateError(BuildContext context, ErrorCode code) {
|
||||
ErrorCode.loadTasksError => S.of(context)!.couldNotLoadTasks,
|
||||
ErrorCode.userNotFound => S.of(context)!.userNotFound,
|
||||
ErrorCode.updateSavedViewError => S.of(context)!.couldNotUpdateSavedView,
|
||||
ErrorCode.userAlreadyExists => S.of(context)!.userAlreadyExists,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user