Merge branch 'master' into caption

This commit is contained in:
ashilkn 2022-11-05 17:43:04 +05:30
commit 837a2b468e
2 changed files with 70 additions and 31 deletions

View file

@ -415,49 +415,88 @@ class FadingAppBarState extends State<FadingAppBar> {
Future<void> _download(File file) async {
final dialog = createProgressDialog(context, "Downloading...");
await dialog.show();
final FileType type = file.fileType;
// save and track image for livePhoto/image and video for FileType.video
final io.File fileToSave = await getFile(file);
final savedAsset = type == FileType.video
? (await PhotoManager.editor.saveVideo(fileToSave, title: file.title))
: (await PhotoManager.editor
.saveImageWithPath(fileToSave.path, title: file.title));
// immediately track assetID to avoid duplicate upload
await LocalSyncService.instance.trackDownloadedFile(savedAsset.id);
file.localID = savedAsset.id;
await FilesDB.instance.insert(file);
try {
final FileType type = file.fileType;
final bool downloadLivePhotoOnDroid =
type == FileType.livePhoto && Platform.isAndroid;
AssetEntity savedAsset;
final io.File fileToSave = await getFile(file);
if (type == FileType.image) {
savedAsset = await PhotoManager.editor
.saveImageWithPath(fileToSave.path, title: file.title);
} else if (type == FileType.video) {
savedAsset =
await PhotoManager.editor.saveVideo(fileToSave, title: file.title);
} else if (type == FileType.livePhoto) {
final io.File liveVideoFile =
await getFileFromServer(file, liveVideo: true);
if (liveVideoFile == null) {
throw AssertionError("Live video can not be null");
}
if (downloadLivePhotoOnDroid) {
await _saveLivePhotoOnDroid(fileToSave, liveVideoFile, file);
} else {
savedAsset = await PhotoManager.editor.darwin.saveLivePhoto(
imageFile: fileToSave,
videoFile: liveVideoFile,
title: file.title,
);
}
}
if (type == FileType.livePhoto) {
final io.File liveVideo = await getFileFromServer(file, liveVideo: true);
if (liveVideo == null) {
_logger.warning("Failed to find live video" + file.tag);
} else {
final videoTitle = file_path.basenameWithoutExtension(file.title) +
file_path.extension(liveVideo.path);
final savedAsset = (await PhotoManager.editor.saveVideo(
liveVideo,
title: videoTitle,
));
if (savedAsset != null) {
// immediately track assetID to avoid duplicate upload
await LocalSyncService.instance.trackDownloadedFile(savedAsset.id);
final ignoreVideoFile = IgnoredFile(
savedAsset.id,
savedAsset.title ?? videoTitle,
savedAsset.title ?? "",
savedAsset.relativePath ?? 'remoteDownload',
"remoteDownload",
);
debugPrint("IgnoreFile for auto-upload ${ignoreVideoFile.toString()}");
await IgnoredFilesService.instance.cacheAndInsert([ignoreVideoFile]);
file.localID = savedAsset.id;
await FilesDB.instance.insert(file);
Bus.instance.fire(LocalPhotosUpdatedEvent([file]));
} else if (!downloadLivePhotoOnDroid && savedAsset == null) {
_logger.severe('Failed to save assert of type $type');
}
}
Bus.instance.fire(LocalPhotosUpdatedEvent([file]));
await dialog.hide();
if (file.fileType == FileType.livePhoto) {
showToast(context, "Photo and video saved to gallery");
} else {
showToast(context, "File saved to gallery");
await dialog.hide();
} catch (e) {
_logger.warning("Failed to save file", e);
await dialog.hide();
showGenericErrorDialog(context);
}
}
Future<void> _saveLivePhotoOnDroid(
io.File image, io.File video, File enteFile) async {
debugPrint("Downloading LivePhoto on Droid");
AssetEntity savedAsset = await PhotoManager.editor
.saveImageWithPath(image.path, title: enteFile.title);
IgnoredFile ignoreVideoFile = IgnoredFile(
savedAsset.id,
savedAsset.title ?? '',
savedAsset.relativePath ?? 'remoteDownload',
"remoteDownload",
);
await IgnoredFilesService.instance.cacheAndInsert([ignoreVideoFile]);
final videoTitle = file_path.basenameWithoutExtension(enteFile.title) +
file_path.extension(video.path);
savedAsset = (await PhotoManager.editor.saveVideo(
video,
title: videoTitle,
));
ignoreVideoFile = IgnoredFile(
savedAsset.id,
savedAsset.title ?? videoTitle,
savedAsset.relativePath ?? 'remoteDownload',
"remoteDownload",
);
await IgnoredFilesService.instance.cacheAndInsert([ignoreVideoFile]);
}
Future<void> _setAs(File file) async {
final dialog = createProgressDialog(context, "Please wait...");
await dialog.show();

View file

@ -934,7 +934,7 @@ packages:
name: photo_manager
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.1"
version: "2.5.0"
photo_view:
dependency: "direct main"
description: