Add happy path

This commit is contained in:
Vishnu Mohandas 2021-03-12 14:10:36 +05:30
parent cc013a8f9e
commit 99ede8f687
4 changed files with 93 additions and 4 deletions

View file

@ -0,0 +1,3 @@
import 'package:photos/events/event.dart';
class PermissionGrantedEvent extends Event {}

View file

@ -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(

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

View file

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