[mob][photos] Handle deep link from public album by opening the album in app

This commit is contained in:
ashilkn
2024-11-20 21:10:02 +05:30
parent cda749ddfd
commit 1db6c99b28

View File

@@ -106,6 +106,8 @@ class _HomeWidgetState extends State<HomeWidget> {
late StreamSubscription<BackupFoldersUpdatedEvent> _backupFoldersUpdatedEvent;
late StreamSubscription<AccountConfiguredEvent> _accountConfiguredEvent;
late StreamSubscription<CollectionUpdatedEvent> _collectionUpdatedEvent;
late StreamSubscription _publicAlbumLinkSubscription;
final DiffFetcher _diffFetcher = DiffFetcher();
@override
@@ -219,6 +221,8 @@ class _HomeWidgetState extends State<HomeWidget> {
});
});
Platform.isIOS ? _initDeepLinkSubscriptionForPublicAlbums() : null;
// For sharing images coming from outside the app
_initMediaShareSubscription();
WidgetsBinding.instance.addPostFrameCallback(
@@ -351,6 +355,7 @@ class _HomeWidgetState extends State<HomeWidget> {
_collectionUpdatedEvent.cancel();
isOnSearchTabNotifier.dispose();
_pageController.dispose();
_publicAlbumLinkSubscription.cancel();
super.dispose();
}
@@ -393,6 +398,49 @@ class _HomeWidgetState extends State<HomeWidget> {
});
}
Future<void> _initDeepLinkSubscriptionForPublicAlbums() async {
// ... check initialUri
try {
final initialUri = await getInitialUri();
if (initialUri != null) {
if (initialUri.toString().contains("albums.ente.sh")) {
await _handlePublicAlbumLink(initialUri);
} else {
_logger.info(
"uri doesn't contain 'albums.ente.io' in initial public album deep link",
);
}
} else {
_logger.info(
"No initial link received in public album link subscription.",
);
}
} catch (e) {
_logger.severe("Error while getting initial public album deep link: $e");
}
// Attach a listener to the stream
_publicAlbumLinkSubscription = uriLinkStream.listen(
(Uri? uri) {
if (uri != null) {
if (uri.toString().contains("albums.ente.sh")) {
_handlePublicAlbumLink(uri);
} else {
_logger.info(
"uri doesn't contain 'albums.ente.io' in public album link subscription",
);
}
} else {
_logger.info("No link received in public album link subscription.");
}
},
onError: (err) {
// Handle exception by warning the user their action did not succeed
_logger.severe("Error while getting public album deep link: $err");
},
);
}
@override
Widget build(BuildContext context) {
_logger.info("Building home_Widget with tab $_selectedTabIndex");