feat: Restructure providers and repositories (WIP, not compiling)

This commit is contained in:
Anton Stubenbord
2023-04-30 20:49:36 +02:00
parent 4e87a196f9
commit 88085b5662
14 changed files with 776 additions and 269 deletions

View File

@@ -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,
});
}

View 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});
}

View 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);
}
}

View File

@@ -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);

View File

@@ -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();
}
}