Skip to content

Commit b14c768

Browse files
authored
fix: share to app upload (#20271)
1 parent 07cb2fb commit b14c768

File tree

2 files changed

+54
-4
lines changed

2 files changed

+54
-4
lines changed

mobile/lib/providers/asset_viewer/share_intent_upload.provider.dart

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@ import 'dart:io';
33
import 'package:background_downloader/background_downloader.dart';
44
import 'package:hooks_riverpod/hooks_riverpod.dart';
55
import 'package:immich_mobile/constants/constants.dart';
6+
import 'package:immich_mobile/domain/models/store.model.dart';
7+
import 'package:immich_mobile/entities/store.entity.dart';
68
import 'package:immich_mobile/extensions/string_extensions.dart';
79
import 'package:immich_mobile/models/upload/share_intent_attachment.model.dart';
810
import 'package:immich_mobile/routing/router.dart';
11+
import 'package:immich_mobile/services/api.service.dart';
912
import 'package:immich_mobile/services/share_intent_service.dart';
1013
import 'package:immich_mobile/services/upload.service.dart';
14+
import 'package:path/path.dart';
1115

1216
final shareIntentUploadProvider = StateNotifierProvider<ShareIntentUploadStateNotifier, List<ShareIntentAttachment>>(
1317
((ref) => ShareIntentUploadStateNotifier(
@@ -101,7 +105,53 @@ class ShareIntentUploadStateNotifier extends StateNotifier<List<ShareIntentAttac
101105
];
102106
}
103107

104-
Future<void> upload(File file) {
105-
return _uploadService.buildUploadTask(file, group: kManualUploadGroup);
108+
Future<void> upload(File file) async {
109+
final task = await _buildUploadTask(
110+
hash(file.path).toString(),
111+
file,
112+
);
113+
114+
_uploadService.enqueueTasks([task]);
115+
}
116+
117+
Future<UploadTask> _buildUploadTask(
118+
String id,
119+
File file, {
120+
Map<String, String>? fields,
121+
}) async {
122+
final serverEndpoint = Store.get(StoreKey.serverEndpoint);
123+
final url = Uri.parse('$serverEndpoint/assets').toString();
124+
final headers = ApiService.getRequestHeaders();
125+
final deviceId = Store.get(StoreKey.deviceId);
126+
127+
final (baseDirectory, directory, filename) = await Task.split(filePath: file.path);
128+
final stats = await file.stat();
129+
final fileCreatedAt = stats.changed;
130+
final fileModifiedAt = stats.modified;
131+
132+
final fieldsMap = {
133+
'filename': filename,
134+
'deviceAssetId': id,
135+
'deviceId': deviceId,
136+
'fileCreatedAt': fileCreatedAt.toUtc().toIso8601String(),
137+
'fileModifiedAt': fileModifiedAt.toUtc().toIso8601String(),
138+
'isFavorite': 'false',
139+
'duration': '0',
140+
if (fields != null) ...fields,
141+
};
142+
143+
return UploadTask(
144+
taskId: id,
145+
httpRequestMethod: 'POST',
146+
url: url,
147+
headers: headers,
148+
filename: filename,
149+
fields: fieldsMap,
150+
baseDirectory: baseDirectory,
151+
directory: directory,
152+
fileField: 'assetData',
153+
group: kManualUploadGroup,
154+
updates: Updates.statusAndProgress,
155+
);
106156
}
107157
}

mobile/lib/repositories/upload.repository.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ class UploadRepository {
2222
);
2323
FileDownloader().registerCallbacks(
2424
group: kManualUploadGroup,
25-
taskStatusCallback: (_) => {},
26-
taskProgressCallback: (_) => {},
25+
taskStatusCallback: (update) => onUploadStatus?.call(update),
26+
taskProgressCallback: (update) => onTaskProgress?.call(update),
2727
);
2828
}
2929

0 commit comments

Comments
 (0)