mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 10:38:41 +00:00
fix upload
This commit is contained in:
parent
f1dc6dff54
commit
23e2cd5031
3 changed files with 53 additions and 22 deletions
|
|
@ -90,6 +90,7 @@ class _AppState extends State<App> with WidgetsBindingObserver {
|
||||||
} else if (state == AppLifecycleState.paused) {
|
} else if (state == AppLifecycleState.paused) {
|
||||||
wasPaused = true;
|
wasPaused = true;
|
||||||
globalIsAppInBackground = true;
|
globalIsAppInBackground = true;
|
||||||
|
handleUploadWhenAppGoesBackground();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -447,6 +447,8 @@ Future handleUploadStatusUpdate(TaskStatusUpdate update) async {
|
||||||
|
|
||||||
Future handleUploadSuccess(MediaUpload media) async {
|
Future handleUploadSuccess(MediaUpload media) async {
|
||||||
Log.info("Upload of ${media.mediaUploadId} success!");
|
Log.info("Upload of ${media.mediaUploadId} success!");
|
||||||
|
currentUploadTasks.remove(media.mediaUploadId);
|
||||||
|
|
||||||
await twonlyDB.mediaUploadsDao.updateMediaUpload(
|
await twonlyDB.mediaUploadsDao.updateMediaUpload(
|
||||||
media.mediaUploadId,
|
media.mediaUploadId,
|
||||||
MediaUploadsCompanion(
|
MediaUploadsCompanion(
|
||||||
|
|
@ -596,35 +598,63 @@ Future handleMediaUpload(MediaUpload media) async {
|
||||||
try {
|
try {
|
||||||
Log.info("Starting upload from ${media.mediaUploadId}");
|
Log.info("Starting upload from ${media.mediaUploadId}");
|
||||||
|
|
||||||
|
final task = UploadTask.fromFile(
|
||||||
|
taskId: "upload_${media.mediaUploadId}",
|
||||||
|
displayName: (media.metadata?.isVideo ?? false) ? "image" : "video",
|
||||||
|
file: uploadRequestFile,
|
||||||
|
url: apiUrl,
|
||||||
|
priority: 0,
|
||||||
|
retries: 10,
|
||||||
|
headers: {
|
||||||
|
'x-twonly-auth-token': apiAuthToken,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
currentUploadTasks[media.mediaUploadId] = task;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await uploadFileFast(media, uploadRequestBytes, apiUrl, apiAuthToken);
|
await uploadFileFast(media, uploadRequestBytes, apiUrl, apiAuthToken);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Log.error("Fast upload failed: $e. Using slow method.");
|
Log.error("Fast upload failed: $e. Using slow method directly.");
|
||||||
final task = UploadTask.fromFile(
|
enqueueUploadTask(media.mediaUploadId);
|
||||||
taskId: "upload_${media.mediaUploadId}",
|
|
||||||
displayName: (media.metadata?.isVideo ?? false) ? "image" : "video",
|
|
||||||
file: uploadRequestFile,
|
|
||||||
url: apiUrl,
|
|
||||||
priority: 0,
|
|
||||||
retries: 10,
|
|
||||||
headers: {
|
|
||||||
'x-twonly-auth-token': apiAuthToken,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
await FileDownloader().enqueue(task);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await twonlyDB.mediaUploadsDao.updateMediaUpload(
|
|
||||||
media.mediaUploadId,
|
|
||||||
MediaUploadsCompanion(
|
|
||||||
state: Value(UploadState.uploadTaskStarted),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Log.error("Exception during upload: $e");
|
Log.error("Exception during upload: $e");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map<int, UploadTask> currentUploadTasks = {};
|
||||||
|
|
||||||
|
Future enqueueUploadTask(int mediaUploadId) async {
|
||||||
|
if (currentUploadTasks[mediaUploadId] == null) {
|
||||||
|
Log.info("could not enqueue upload task: $mediaUploadId");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.info("Enqueue upload task: $mediaUploadId");
|
||||||
|
|
||||||
|
await FileDownloader().enqueue(currentUploadTasks[mediaUploadId]!);
|
||||||
|
currentUploadTasks.remove(mediaUploadId);
|
||||||
|
|
||||||
|
await twonlyDB.mediaUploadsDao.updateMediaUpload(
|
||||||
|
mediaUploadId,
|
||||||
|
MediaUploadsCompanion(
|
||||||
|
state: Value(UploadState.uploadTaskStarted),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future handleUploadWhenAppGoesBackground() async {
|
||||||
|
if (currentUploadTasks.keys.isEmpty) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Log.info("App goes into background. Enqueue uploads to the background.");
|
||||||
|
final keys = currentUploadTasks.keys.toList();
|
||||||
|
for (final key in keys) {
|
||||||
|
enqueueUploadTask(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future uploadFileFast(
|
Future uploadFileFast(
|
||||||
MediaUpload media,
|
MediaUpload media,
|
||||||
Uint8List uploadRequestFile,
|
Uint8List uploadRequestFile,
|
||||||
|
|
@ -643,7 +673,7 @@ Future uploadFileFast(
|
||||||
filename: "upload",
|
filename: "upload",
|
||||||
));
|
));
|
||||||
|
|
||||||
final response = await requestMultipart.send().timeout(Duration(seconds: 3));
|
final response = await requestMultipart.send();
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
Log.info('Upload successful!');
|
Log.info('Upload successful!');
|
||||||
await handleUploadSuccess(media);
|
await handleUploadSuccess(media);
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ description: "twonly, a privacy-friendly way to connect with friends through sec
|
||||||
# Prevent accidental publishing to pub.dev.
|
# Prevent accidental publishing to pub.dev.
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
|
|
||||||
version: 0.0.48+48
|
version: 0.0.49+49
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ^3.6.0
|
sdk: ^3.6.0
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue