mirror of
https://github.com/immich-app/immich
synced 2025-10-17 18:19:27 +00:00
fix: local share action not working on iPad (#22238)
fix: share photo not working on iPad Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
parent
7a0107fc79
commit
6609e70fa8
4 changed files with 16 additions and 10 deletions
|
|
@ -42,7 +42,7 @@ class ShareActionButton extends ConsumerWidget {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (BuildContext buildContext) {
|
builder: (BuildContext buildContext) {
|
||||||
ref.read(actionProvider.notifier).shareAssets(source).then((ActionResult result) {
|
ref.read(actionProvider.notifier).shareAssets(source, context).then((ActionResult result) {
|
||||||
ref.read(multiSelectProvider.notifier).reset();
|
ref.read(multiSelectProvider.notifier).reset();
|
||||||
|
|
||||||
if (!context.mounted) {
|
if (!context.mounted) {
|
||||||
|
|
|
||||||
|
|
@ -342,11 +342,11 @@ class ActionNotifier extends Notifier<void> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<ActionResult> shareAssets(ActionSource source) async {
|
Future<ActionResult> shareAssets(ActionSource source, BuildContext context) async {
|
||||||
final ids = _getAssets(source).toList(growable: false);
|
final ids = _getAssets(source).toList(growable: false);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await _service.shareAssets(ids);
|
await _service.shareAssets(ids, context);
|
||||||
return ActionResult(count: ids.length, success: true);
|
return ActionResult(count: ids.length, success: true);
|
||||||
} catch (error, stack) {
|
} catch (error, stack) {
|
||||||
_logger.severe('Failed to share assets', error, stack);
|
_logger.severe('Failed to share assets', error, stack);
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,19 @@
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
||||||
import 'package:immich_mobile/domain/models/exif.model.dart';
|
import 'package:immich_mobile/domain/models/exif.model.dart';
|
||||||
import 'package:immich_mobile/domain/models/store.model.dart';
|
import 'package:immich_mobile/domain/models/store.model.dart';
|
||||||
import 'package:immich_mobile/entities/asset.entity.dart' as asset_entity;
|
import 'package:immich_mobile/entities/asset.entity.dart' as asset_entity;
|
||||||
import 'package:immich_mobile/entities/store.entity.dart';
|
import 'package:immich_mobile/entities/store.entity.dart';
|
||||||
|
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||||
|
import 'package:immich_mobile/extensions/response_extensions.dart';
|
||||||
import 'package:immich_mobile/repositories/asset_api.repository.dart';
|
import 'package:immich_mobile/repositories/asset_api.repository.dart';
|
||||||
import 'package:immich_mobile/utils/hash.dart';
|
import 'package:immich_mobile/utils/hash.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:photo_manager/photo_manager.dart';
|
import 'package:photo_manager/photo_manager.dart';
|
||||||
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
|
||||||
import 'package:immich_mobile/extensions/response_extensions.dart';
|
|
||||||
import 'package:share_plus/share_plus.dart';
|
import 'package:share_plus/share_plus.dart';
|
||||||
|
|
||||||
final assetMediaRepositoryProvider = Provider((ref) => AssetMediaRepository(ref.watch(assetApiRepositoryProvider)));
|
final assetMediaRepositoryProvider = Provider((ref) => AssetMediaRepository(ref.watch(assetApiRepositoryProvider)));
|
||||||
|
|
@ -68,7 +70,7 @@ class AssetMediaRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: make this more efficient
|
// TODO: make this more efficient
|
||||||
Future<int> shareAssets(List<BaseAsset> assets) async {
|
Future<int> shareAssets(List<BaseAsset> assets, BuildContext context) async {
|
||||||
final downloadedXFiles = <XFile>[];
|
final downloadedXFiles = <XFile>[];
|
||||||
|
|
||||||
for (var asset in assets) {
|
for (var asset in assets) {
|
||||||
|
|
@ -105,8 +107,12 @@ class AssetMediaRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
// we dont want to await the share result since the
|
// we dont want to await the share result since the
|
||||||
// "preparing" dialog will not disappear unti
|
// "preparing" dialog will not disappear until
|
||||||
Share.shareXFiles(downloadedXFiles).then((result) async {
|
final size = context.sizeData;
|
||||||
|
Share.shareXFiles(
|
||||||
|
downloadedXFiles,
|
||||||
|
sharePositionOrigin: Rect.fromPoints(Offset.zero, Offset(size.width / 3, size.height)),
|
||||||
|
).then((result) async {
|
||||||
for (var file in downloadedXFiles) {
|
for (var file in downloadedXFiles) {
|
||||||
try {
|
try {
|
||||||
await File(file.path).delete();
|
await File(file.path).delete();
|
||||||
|
|
|
||||||
|
|
@ -224,8 +224,8 @@ class ActionService {
|
||||||
await _assetApiRepository.unStack(stackIds);
|
await _assetApiRepository.unStack(stackIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<int> shareAssets(List<BaseAsset> assets) {
|
Future<int> shareAssets(List<BaseAsset> assets, BuildContext context) {
|
||||||
return _assetMediaRepository.shareAssets(assets);
|
return _assetMediaRepository.shareAssets(assets, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<bool>> downloadAll(List<RemoteAsset> assets) {
|
Future<List<bool>> downloadAll(List<RemoteAsset> assets) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue