@@ -3,11 +3,15 @@ import 'dart:io';
3
3
import 'package:background_downloader/background_downloader.dart' ;
4
4
import 'package:hooks_riverpod/hooks_riverpod.dart' ;
5
5
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' ;
6
8
import 'package:immich_mobile/extensions/string_extensions.dart' ;
7
9
import 'package:immich_mobile/models/upload/share_intent_attachment.model.dart' ;
8
10
import 'package:immich_mobile/routing/router.dart' ;
11
+ import 'package:immich_mobile/services/api.service.dart' ;
9
12
import 'package:immich_mobile/services/share_intent_service.dart' ;
10
13
import 'package:immich_mobile/services/upload.service.dart' ;
14
+ import 'package:path/path.dart' ;
11
15
12
16
final shareIntentUploadProvider = StateNotifierProvider <ShareIntentUploadStateNotifier , List <ShareIntentAttachment >>(
13
17
((ref) => ShareIntentUploadStateNotifier (
@@ -101,7 +105,53 @@ class ShareIntentUploadStateNotifier extends StateNotifier<List<ShareIntentAttac
101
105
];
102
106
}
103
107
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
+ );
106
156
}
107
157
}
0 commit comments