mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-15 04:12:30 -06:00
Feat: Update scanner persistence, more migrations and bugfixes
This commit is contained in:
@@ -3,6 +3,7 @@ import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/core/database/tables/local_user_app_state.dart';
|
||||
import 'package:paperless_mobile/core/notifier/document_changed_notifier.dart';
|
||||
import 'package:paperless_mobile/core/repository/label_repository.dart';
|
||||
import 'package:paperless_mobile/core/service/connectivity_status_service.dart';
|
||||
import 'package:paperless_mobile/features/paged_document_view/cubit/paged_documents_state.dart';
|
||||
import 'package:paperless_mobile/features/paged_document_view/cubit/document_paging_bloc_mixin.dart';
|
||||
import 'package:paperless_mobile/features/settings/model/view_type.dart';
|
||||
@@ -15,7 +16,8 @@ class SavedViewDetailsCubit extends Cubit<SavedViewDetailsState>
|
||||
final PaperlessDocumentsApi api;
|
||||
|
||||
final LabelRepository _labelRepository;
|
||||
|
||||
@override
|
||||
final ConnectivityStatusService connectivityStatusService;
|
||||
@override
|
||||
final DocumentChangedNotifier notifier;
|
||||
|
||||
@@ -27,7 +29,8 @@ class SavedViewDetailsCubit extends Cubit<SavedViewDetailsState>
|
||||
this.api,
|
||||
this.notifier,
|
||||
this._labelRepository,
|
||||
this._userState, {
|
||||
this._userState,
|
||||
this.connectivityStatusService, {
|
||||
required this.savedView,
|
||||
int initialCount = 25,
|
||||
}) : super(
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/core/service/connectivity_status_service.dart';
|
||||
|
||||
part 'saved_view_preview_state.dart';
|
||||
part 'saved_view_preview_cubit.freezed.dart';
|
||||
@@ -8,11 +9,21 @@ part 'saved_view_preview_cubit.freezed.dart';
|
||||
class SavedViewPreviewCubit extends Cubit<SavedViewPreviewState> {
|
||||
final PaperlessDocumentsApi _api;
|
||||
final SavedView view;
|
||||
SavedViewPreviewCubit(this._api, this.view)
|
||||
: super(const SavedViewPreviewState.initial());
|
||||
final ConnectivityStatusService _connectivityStatusService;
|
||||
SavedViewPreviewCubit(
|
||||
this._api,
|
||||
this._connectivityStatusService, {
|
||||
required this.view,
|
||||
}) : super(const InitialSavedViewPreviewState());
|
||||
|
||||
Future<void> initialize() async {
|
||||
emit(const SavedViewPreviewState.loading());
|
||||
final isConnected =
|
||||
await _connectivityStatusService.isConnectedToInternet();
|
||||
if (!isConnected) {
|
||||
emit(const OfflineSavedViewPreviewState());
|
||||
return;
|
||||
}
|
||||
emit(const LoadingSavedViewPreviewState());
|
||||
try {
|
||||
final documents = await _api.findAll(
|
||||
view.toDocumentFilter().copyWith(
|
||||
@@ -20,9 +31,9 @@ class SavedViewPreviewCubit extends Cubit<SavedViewPreviewState> {
|
||||
pageSize: 5,
|
||||
),
|
||||
);
|
||||
emit(SavedViewPreviewState.loaded(documents: documents.results));
|
||||
emit(LoadedSavedViewPreviewState(documents: documents.results));
|
||||
} catch (e) {
|
||||
emit(const SavedViewPreviewState.error());
|
||||
emit(const ErrorSavedViewPreviewState());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,29 @@
|
||||
part of 'saved_view_preview_cubit.dart';
|
||||
|
||||
@freezed
|
||||
class SavedViewPreviewState with _$SavedViewPreviewState {
|
||||
const factory SavedViewPreviewState.initial() = _Initial;
|
||||
const factory SavedViewPreviewState.loading() = _Loading;
|
||||
const factory SavedViewPreviewState.loaded({
|
||||
required List<DocumentModel> documents,
|
||||
}) = _Loaded;
|
||||
const factory SavedViewPreviewState.error() = _Error;
|
||||
sealed class SavedViewPreviewState {
|
||||
const SavedViewPreviewState();
|
||||
}
|
||||
|
||||
class InitialSavedViewPreviewState extends SavedViewPreviewState {
|
||||
const InitialSavedViewPreviewState();
|
||||
}
|
||||
|
||||
class LoadingSavedViewPreviewState extends SavedViewPreviewState {
|
||||
const LoadingSavedViewPreviewState();
|
||||
}
|
||||
|
||||
class LoadedSavedViewPreviewState extends SavedViewPreviewState {
|
||||
final List<DocumentModel> documents;
|
||||
|
||||
const LoadedSavedViewPreviewState({
|
||||
required this.documents,
|
||||
});
|
||||
}
|
||||
|
||||
class ErrorSavedViewPreviewState extends SavedViewPreviewState {
|
||||
const ErrorSavedViewPreviewState();
|
||||
}
|
||||
|
||||
class OfflineSavedViewPreviewState extends SavedViewPreviewState {
|
||||
const OfflineSavedViewPreviewState();
|
||||
}
|
||||
|
||||
@@ -22,8 +22,11 @@ class SavedViewPreview extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Provider(
|
||||
create: (context) =>
|
||||
SavedViewPreviewCubit(context.read(), savedView)..initialize(),
|
||||
create: (context) => SavedViewPreviewCubit(
|
||||
context.read(),
|
||||
context.read(),
|
||||
view: savedView,
|
||||
)..initialize(),
|
||||
builder: (context, child) {
|
||||
return ExpansionCard(
|
||||
initiallyExpanded: expanded,
|
||||
@@ -33,34 +36,40 @@ class SavedViewPreview extends StatelessWidget {
|
||||
children: [
|
||||
BlocBuilder<SavedViewPreviewCubit, SavedViewPreviewState>(
|
||||
builder: (context, state) {
|
||||
return state.maybeWhen(
|
||||
loaded: (documents) {
|
||||
if (documents.isEmpty) {
|
||||
return Text(S.of(context)!.noDocumentsFound).padded();
|
||||
} else {
|
||||
return Column(
|
||||
children: [
|
||||
for (final document in documents)
|
||||
DocumentListItem(
|
||||
document: document,
|
||||
isLabelClickable: false,
|
||||
isSelected: false,
|
||||
isSelectionActive: false,
|
||||
onTap: (document) {
|
||||
DocumentDetailsRoute($extra: document)
|
||||
.push(context);
|
||||
},
|
||||
onSelected: null,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
},
|
||||
error: () => Text(S.of(context)!.couldNotLoadSavedViews),
|
||||
orElse: () => const Center(
|
||||
child: CircularProgressIndicator(),
|
||||
).paddedOnly(top: 8, bottom: 24),
|
||||
);
|
||||
return switch (state) {
|
||||
LoadedSavedViewPreviewState(documents: var documents) =>
|
||||
Builder(
|
||||
builder: (context) {
|
||||
if (documents.isEmpty) {
|
||||
return Text(S.of(context)!.noDocumentsFound)
|
||||
.padded();
|
||||
} else {
|
||||
return Column(
|
||||
children: [
|
||||
for (final document in documents)
|
||||
DocumentListItem(
|
||||
document: document,
|
||||
isLabelClickable: false,
|
||||
isSelected: false,
|
||||
isSelectionActive: false,
|
||||
onTap: (document) {
|
||||
DocumentDetailsRoute($extra: document)
|
||||
.push(context);
|
||||
},
|
||||
onSelected: null,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
ErrorSavedViewPreviewState() =>
|
||||
Text(S.of(context)!.couldNotLoadSavedViews).padded(16),
|
||||
OfflineSavedViewPreviewState() =>
|
||||
Text(S.of(context)!.youAreCurrentlyOffline).padded(16),
|
||||
_ => const CircularProgressIndicator()
|
||||
.paddedOnly(top: 8, bottom: 24),
|
||||
};
|
||||
},
|
||||
),
|
||||
Row(
|
||||
|
||||
Reference in New Issue
Block a user