mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-09 20:07:51 -06:00
feat: bugfixes, finished go_router migration, implemented better visibility of states
This commit is contained in:
@@ -1,9 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:paperless_mobile/core/database/tables/local_user_account.dart';
|
||||
import 'package:paperless_mobile/extensions/flutter_extensions.dart';
|
||||
import 'package:paperless_mobile/features/sharing/cubit/receive_share_cubit.dart';
|
||||
import 'package:paperless_mobile/features/sharing/view/widgets/file_thumbnail.dart';
|
||||
import 'package:paperless_mobile/features/sharing/view/widgets/upload_queue_shell.dart';
|
||||
import 'package:paperless_mobile/features/sharing/view/widgets/event_listener_shell.dart';
|
||||
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
@@ -3,19 +3,22 @@ import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_animate/flutter_animate.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/core/bloc/connectivity_cubit.dart';
|
||||
import 'package:paperless_mobile/core/config/hive/hive_config.dart';
|
||||
import 'package:paperless_mobile/core/config/hive/hive_extensions.dart';
|
||||
import 'package:paperless_mobile/core/database/tables/local_user_account.dart';
|
||||
import 'package:paperless_mobile/core/notifier/document_changed_notifier.dart';
|
||||
import 'package:paperless_mobile/core/service/connectivity_status_service.dart';
|
||||
import 'package:paperless_mobile/features/document_upload/view/document_upload_preparation_page.dart';
|
||||
import 'package:paperless_mobile/features/inbox/cubit/inbox_cubit.dart';
|
||||
import 'package:paperless_mobile/features/notifications/services/local_notification_service.dart';
|
||||
import 'package:paperless_mobile/features/sharing/cubit/receive_share_cubit.dart';
|
||||
import 'package:paperless_mobile/features/sharing/view/dialog/discard_shared_file_dialog.dart';
|
||||
import 'package:paperless_mobile/features/sharing/view/dialog/pending_files_info_dialog.dart';
|
||||
import 'package:paperless_mobile/features/tasks/model/pending_tasks_notifier.dart';
|
||||
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
|
||||
import 'package:paperless_mobile/helpers/message_helpers.dart';
|
||||
@@ -23,25 +26,33 @@ import 'package:paperless_mobile/routes/typed/branches/scanner_route.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
||||
|
||||
class UploadQueueShell extends StatefulWidget {
|
||||
class EventListenerShell extends StatefulWidget {
|
||||
final Widget child;
|
||||
const UploadQueueShell({super.key, required this.child});
|
||||
const EventListenerShell({super.key, required this.child});
|
||||
|
||||
@override
|
||||
State<UploadQueueShell> createState() => _UploadQueueShellState();
|
||||
State<EventListenerShell> createState() => _EventListenerShellState();
|
||||
}
|
||||
|
||||
class _UploadQueueShellState extends State<UploadQueueShell> {
|
||||
class _EventListenerShellState extends State<EventListenerShell>
|
||||
with WidgetsBindingObserver {
|
||||
StreamSubscription? _subscription;
|
||||
StreamSubscription? _documentDeletedSubscription;
|
||||
Timer? _inboxTimer;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addObserver(this);
|
||||
ReceiveSharingIntent.getInitialMedia().then(_onReceiveSharedFiles);
|
||||
_subscription =
|
||||
ReceiveSharingIntent.getMediaStream().listen(_onReceiveSharedFiles);
|
||||
context.read<PendingTasksNotifier>().addListener(_onTasksChanged);
|
||||
|
||||
_documentDeletedSubscription =
|
||||
context.read<DocumentChangedNotifier>().$deleted.listen((event) {
|
||||
showSnackBar(context, S.of(context)!.documentSuccessfullyDeleted);
|
||||
});
|
||||
_listenToInboxChanges();
|
||||
// WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||
// final notifier = context.read<ConsumptionChangeNotifier>();
|
||||
// await notifier.isInitialized;
|
||||
@@ -67,6 +78,52 @@ class _UploadQueueShellState extends State<UploadQueueShell> {
|
||||
// });
|
||||
}
|
||||
|
||||
void _listenToInboxChanges() {
|
||||
final cubit = context.read<InboxCubit>();
|
||||
final currentUser = context.read<LocalUserAccount>();
|
||||
if (!currentUser.paperlessUser.canViewInbox || _inboxTimer != null) {
|
||||
return;
|
||||
}
|
||||
cubit.refreshItemsInInboxCount(false);
|
||||
_inboxTimer = Timer.periodic(30.seconds, (_) {
|
||||
cubit.refreshItemsInInboxCount(false);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
WidgetsBinding.instance.removeObserver(this);
|
||||
_subscription?.cancel();
|
||||
_documentDeletedSubscription?.cancel();
|
||||
_inboxTimer?.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeAppLifecycleState(AppLifecycleState state) {
|
||||
switch (state) {
|
||||
case AppLifecycleState.resumed:
|
||||
debugPrint(
|
||||
"App resumed, reloading connectivity and "
|
||||
"restarting periodic query for inbox changes...",
|
||||
);
|
||||
context.read<ConnectivityCubit>().reload();
|
||||
_listenToInboxChanges();
|
||||
break;
|
||||
case AppLifecycleState.inactive:
|
||||
case AppLifecycleState.paused:
|
||||
case AppLifecycleState.detached:
|
||||
default:
|
||||
_inboxTimer?.cancel();
|
||||
_inboxTimer = null;
|
||||
debugPrint(
|
||||
"App either paused or hidden, stopping "
|
||||
"periodic query for inbox changes.",
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void _onTasksChanged() {
|
||||
final taskNotifier = context.read<PendingTasksNotifier>();
|
||||
final userId = context.read<LocalUserAccount>().id;
|
||||
@@ -96,12 +153,6 @@ class _UploadQueueShellState extends State<UploadQueueShell> {
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_subscription?.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return widget.child;
|
||||
@@ -167,9 +218,9 @@ Future<void> consumeLocalFile(
|
||||
);
|
||||
await consumptionNotifier.discardFile(file, userId: userId);
|
||||
|
||||
if (result.taskId != null) {
|
||||
taskNotifier.listenToTaskChanges(result.taskId!);
|
||||
}
|
||||
// if (result.taskId != null) {
|
||||
// taskNotifier.listenToTaskChanges(result.taskId!);
|
||||
// }
|
||||
if (exitAppAfterConsumed) {
|
||||
SystemNavigator.pop();
|
||||
}
|
||||
Reference in New Issue
Block a user