refactor(mobile): share action button in new timeline (#19967)

* share asset button

* include source

* move to repository

* formatting
This commit is contained in:
Mert 2025-07-17 19:41:30 +03:00 committed by GitHub
parent 531515daf9
commit 055b930066
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 158 additions and 24 deletions

View file

@ -58,15 +58,18 @@ class ActionNotifier extends Notifier<void> {
.toList(growable: false);
}
Iterable<T> _getIdsForSource<T extends BaseAsset>(ActionSource source) {
final Set<BaseAsset> assets = switch (source) {
Set<BaseAsset> _getAssets(ActionSource source) {
return switch (source) {
ActionSource.timeline => ref.read(multiSelectProvider).selectedAssets,
ActionSource.viewer => switch (ref.read(currentAssetNotifier)) {
BaseAsset asset => {asset},
null => const {},
},
};
}
Iterable<T> _getIdsForSource<T extends BaseAsset>(ActionSource source) {
final Set<BaseAsset> assets = _getAssets(source);
return switch (T) {
const (RemoteAsset) => assets.whereType<RemoteAsset>(),
const (LocalAsset) => assets.whereType<LocalAsset>(),
@ -266,6 +269,22 @@ class ActionNotifier extends Notifier<void> {
);
}
}
Future<ActionResult> shareAssets(ActionSource source) async {
final ids = _getAssets(source).toList(growable: false);
try {
final count = await _service.shareAssets(ids);
return ActionResult(count: count, success: true);
} catch (error, stack) {
_logger.severe('Failed to share assets', error, stack);
return ActionResult(
count: ids.length,
success: false,
error: error.toString(),
);
}
}
}
extension on Iterable<RemoteAsset> {