Add happy path
This commit is contained in:
parent
cc013a8f9e
commit
99ede8f687
3
lib/events/permission_granted_event.dart
Normal file
3
lib/events/permission_granted_event.dart
Normal file
|
@ -0,0 +1,3 @@
|
|||
import 'package:photos/events/event.dart';
|
||||
|
||||
class PermissionGrantedEvent extends Event {}
|
|
@ -12,6 +12,7 @@ import 'package:photos/core/network.dart';
|
|||
import 'package:photos/db/files_db.dart';
|
||||
import 'package:photos/events/collection_updated_event.dart';
|
||||
import 'package:photos/events/local_photos_updated_event.dart';
|
||||
import 'package:photos/events/permission_granted_event.dart';
|
||||
import 'package:photos/events/sync_status_update_event.dart';
|
||||
import 'package:photos/events/subscription_purchased_event.dart';
|
||||
import 'package:photos/models/file_type.dart';
|
||||
|
@ -42,6 +43,7 @@ class SyncService {
|
|||
SyncStatusUpdate _lastSyncStatusEvent;
|
||||
|
||||
static const kDbUpdationTimeKey = "db_updation_time";
|
||||
static const kHasGrantedPermissionsKey = "has_granted_permissions";
|
||||
static const kLastBackgroundUploadDetectedTime =
|
||||
"last_background_upload_detected_time";
|
||||
static const kDiffLimit = 200;
|
||||
|
@ -156,7 +158,27 @@ class SyncService {
|
|||
return _lastSyncStatusEvent;
|
||||
}
|
||||
|
||||
bool hasGrantedPermissions() {
|
||||
return _prefs.containsKey(kHasGrantedPermissionsKey) &&
|
||||
_prefs.getBool(kHasGrantedPermissionsKey);
|
||||
}
|
||||
|
||||
Future<void> onPermissionGranted() async {
|
||||
await _prefs.setBool(kHasGrantedPermissionsKey, true);
|
||||
Bus.instance.fire(PermissionGrantedEvent());
|
||||
_doSync();
|
||||
}
|
||||
|
||||
Future<void> _doSync() async {
|
||||
await _syncWithDevice();
|
||||
await syncWithRemote();
|
||||
}
|
||||
|
||||
Future<void> _syncWithDevice() async {
|
||||
if (!_prefs.containsKey(kHasGrantedPermissionsKey)) {
|
||||
_logger.info("Skipping local sync since permission has not been granted");
|
||||
return;
|
||||
}
|
||||
final existingLocalFileIDs = await _db.getExistingLocalFileIDs();
|
||||
final syncStartTime = DateTime.now().microsecondsSinceEpoch;
|
||||
if (_isBackground) {
|
||||
|
@ -187,7 +209,6 @@ class SyncService {
|
|||
}
|
||||
await _loadAndStorePhotos(startTime, syncStartTime, existingLocalFileIDs);
|
||||
}
|
||||
await syncWithRemote();
|
||||
}
|
||||
|
||||
Future<void> _loadAndStorePhotos(
|
||||
|
|
55
lib/ui/grant_permissions_widget.dart
Normal file
55
lib/ui/grant_permissions_widget.dart
Normal file
|
@ -0,0 +1,55 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:photo_manager/photo_manager.dart';
|
||||
import 'package:photos/services/sync_service.dart';
|
||||
|
||||
class GrantPermissionsWidget extends StatelessWidget {
|
||||
final _logger = Logger("GrantPermissionsWidget");
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(32),
|
||||
child: Text(
|
||||
"ente needs your permission to load and display your gallery",
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
height: 1.4,
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 64,
|
||||
padding: const EdgeInsets.fromLTRB(80, 0, 80, 0),
|
||||
child: RaisedButton(
|
||||
child: Text(
|
||||
"grant permission",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18,
|
||||
letterSpacing: 1.0,
|
||||
),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
onPressed: () async {
|
||||
final granted = await PhotoManager.requestPermission();
|
||||
if (granted) {
|
||||
SyncService.instance.onPermissionGranted();
|
||||
}
|
||||
},
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(10.0),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -7,6 +7,7 @@ import 'package:flutter/widgets.dart';
|
|||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/events/local_photos_updated_event.dart';
|
||||
import 'package:photos/events/permission_granted_event.dart';
|
||||
import 'package:photos/events/tab_changed_event.dart';
|
||||
import 'package:photos/models/filters/important_items_filter.dart';
|
||||
import 'package:photos/models/file.dart';
|
||||
|
@ -16,6 +17,7 @@ import 'package:photos/services/sync_service.dart';
|
|||
import 'package:photos/ui/collections_gallery_widget.dart';
|
||||
import 'package:photos/ui/extents_page_view.dart';
|
||||
import 'package:photos/ui/gallery.dart';
|
||||
import 'package:photos/ui/grant_permissions_widget.dart';
|
||||
import 'package:photos/ui/loading_photos_widget.dart';
|
||||
import 'package:photos/ui/loading_widget.dart';
|
||||
import 'package:photos/ui/memories_widget.dart';
|
||||
|
@ -51,6 +53,7 @@ class _HomeWidgetState extends State<HomeWidget> {
|
|||
|
||||
StreamSubscription<LocalPhotosUpdatedEvent> _photosUpdatedEvent;
|
||||
StreamSubscription<TabChangedEvent> _tabChangedEventSubscription;
|
||||
StreamSubscription<PermissionGrantedEvent> _permissionGrantedEvent;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
@ -75,6 +78,10 @@ class _HomeWidgetState extends State<HomeWidget> {
|
|||
);
|
||||
}
|
||||
});
|
||||
_permissionGrantedEvent =
|
||||
Bus.instance.on<PermissionGrantedEvent>().listen((event) {
|
||||
setState(() {});
|
||||
});
|
||||
_initDeepLinks();
|
||||
super.initState();
|
||||
}
|
||||
|
@ -91,9 +98,11 @@ class _HomeWidgetState extends State<HomeWidget> {
|
|||
children: [
|
||||
ExtentsPageView(
|
||||
children: [
|
||||
SyncService.instance.hasScannedDisk()
|
||||
? _getMainGalleryWidget()
|
||||
: LoadingPhotosWidget(),
|
||||
SyncService.instance.hasGrantedPermissions()
|
||||
? (SyncService.instance.hasScannedDisk()
|
||||
? _getMainGalleryWidget()
|
||||
: LoadingPhotosWidget())
|
||||
: GrantPermissionsWidget(),
|
||||
_deviceFolderGalleryWidget,
|
||||
_sharedCollectionGallery,
|
||||
],
|
||||
|
@ -254,6 +263,7 @@ class _HomeWidgetState extends State<HomeWidget> {
|
|||
void dispose() {
|
||||
_tabChangedEventSubscription.cancel();
|
||||
_photosUpdatedEvent.cancel();
|
||||
_permissionGrantedEvent.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue