mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-09 06:07:54 -06:00
feat: Restructure providers and repositories (WIP, not compiling)
This commit is contained in:
@@ -14,15 +14,15 @@ class LocalUserAccount extends HiveObject {
|
||||
final String id;
|
||||
|
||||
@HiveField(4)
|
||||
LocalUserSettings settings;
|
||||
final LocalUserSettings settings;
|
||||
|
||||
@HiveField(5)
|
||||
UserModel paperlessUser;
|
||||
@HiveField(6)
|
||||
final int paperlessUserId;
|
||||
|
||||
LocalUserAccount({
|
||||
required this.id,
|
||||
required this.serverUrl,
|
||||
required this.settings,
|
||||
required this.paperlessUser,
|
||||
required this.paperlessUserId,
|
||||
});
|
||||
}
|
||||
|
||||
10
lib/core/factory/paperless_api_factory.dart
Normal file
10
lib/core/factory/paperless_api_factory.dart
Normal file
@@ -0,0 +1,10 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
|
||||
abstract class PaperlessApiFactory {
|
||||
PaperlessDocumentsApi createDocumentsApi(Dio dio, {required int apiVersion});
|
||||
PaperlessSavedViewsApi createSavedViewsApi(Dio dio, {required int apiVersion});
|
||||
PaperlessLabelsApi createLabelsApi(Dio dio, {required int apiVersion});
|
||||
PaperlessServerStatsApi createServerStatsApi(Dio dio, {required int apiVersion});
|
||||
PaperlessTasksApi createTasksApi(Dio dio, {required int apiVersion});
|
||||
}
|
||||
35
lib/core/factory/paperless_api_factory_impl.dart
Normal file
35
lib/core/factory/paperless_api_factory_impl.dart
Normal file
@@ -0,0 +1,35 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/core/factory/paperless_api_factory.dart';
|
||||
import 'package:paperless_mobile/core/security/session_manager.dart';
|
||||
|
||||
class PaperlessApiFactoryImpl implements PaperlessApiFactory {
|
||||
final SessionManager sessionManager;
|
||||
|
||||
PaperlessApiFactoryImpl(this.sessionManager);
|
||||
|
||||
@override
|
||||
PaperlessDocumentsApi createDocumentsApi(Dio dio, {required int apiVersion}) {
|
||||
return PaperlessDocumentsApiImpl(dio);
|
||||
}
|
||||
|
||||
@override
|
||||
PaperlessLabelsApi createLabelsApi(Dio dio, {required int apiVersion}) {
|
||||
return PaperlessLabelApiImpl(dio);
|
||||
}
|
||||
|
||||
@override
|
||||
PaperlessSavedViewsApi createSavedViewsApi(Dio dio, {required int apiVersion}) {
|
||||
return PaperlessSavedViewsApiImpl(dio);
|
||||
}
|
||||
|
||||
@override
|
||||
PaperlessServerStatsApi createServerStatsApi(Dio dio, {required int apiVersion}) {
|
||||
return PaperlessServerStatsApiImpl(dio);
|
||||
}
|
||||
|
||||
@override
|
||||
PaperlessTasksApi createTasksApi(Dio dio, {required int apiVersion}) {
|
||||
return PaperlessTasksApiImpl(dio);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hydrated_bloc/hydrated_bloc.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/core/repository/saved_view_repository_state.dart';
|
||||
@@ -25,6 +26,10 @@ class SavedViewRepository extends HydratedCubit<SavedViewRepositoryState> {
|
||||
|
||||
SavedViewRepository(this._api) : super(const SavedViewRepositoryState());
|
||||
|
||||
Future<void> initialize() {
|
||||
return findAll();
|
||||
}
|
||||
|
||||
Future<SavedView> create(SavedView object) async {
|
||||
final created = await _api.save(object);
|
||||
final updatedState = {...state.savedViews}..putIfAbsent(created.id!, () => created);
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'dart:io';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:dio/io.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:paperless_mobile/core/interceptor/retry_on_connection_change_interceptor.dart';
|
||||
import 'package:paperless_mobile/features/login/model/client_certificate.dart';
|
||||
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
|
||||
@@ -10,15 +10,10 @@ import 'package:pretty_dio_logger/pretty_dio_logger.dart';
|
||||
/// Manages the security context, authentication and base request URL for
|
||||
/// an underlying [Dio] client which is injected into all services
|
||||
/// requiring authenticated access to the Paperless HTTP API.
|
||||
class SessionManager {
|
||||
final Dio _client;
|
||||
PaperlessServerInformationModel _serverInformation;
|
||||
class SessionManager extends ValueNotifier<Dio> {
|
||||
Dio get client => value;
|
||||
|
||||
Dio get client => _client;
|
||||
|
||||
SessionManager([List<Interceptor> interceptors = const []])
|
||||
: _client = _initDio(interceptors),
|
||||
_serverInformation = PaperlessServerInformationModel();
|
||||
SessionManager([List<Interceptor> interceptors = const []]) : super(_initDio(interceptors));
|
||||
|
||||
static Dio _initDio(List<Interceptor> interceptors) {
|
||||
//en- and decoded by utf8 by default
|
||||
@@ -48,7 +43,6 @@ class SessionManager {
|
||||
String? baseUrl,
|
||||
String? authToken,
|
||||
ClientCertificate? clientCertificate,
|
||||
PaperlessServerInformationModel? serverInformation,
|
||||
}) {
|
||||
if (clientCertificate != null) {
|
||||
final context = SecurityContext()
|
||||
@@ -81,15 +75,13 @@ class SessionManager {
|
||||
});
|
||||
}
|
||||
|
||||
if (serverInformation != null) {
|
||||
_serverInformation = serverInformation;
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void resetSettings() {
|
||||
client.httpClientAdapter = IOHttpClientAdapter();
|
||||
client.options.baseUrl = '';
|
||||
client.options.headers.remove(HttpHeaders.authorizationHeader);
|
||||
_serverInformation = PaperlessServerInformationModel();
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user