diff --git a/lib/src/services/mediafiles/mediafile.service.dart b/lib/src/services/mediafiles/mediafile.service.dart index 2dab6fd..001ad95 100644 --- a/lib/src/services/mediafiles/mediafile.service.dart +++ b/lib/src/services/mediafiles/mediafile.service.dart @@ -231,15 +231,14 @@ class MediaFileService { ), ); - if (originalPath.existsSync()) { - await originalPath.copy(tempPath.path); + if (originalPath.existsSync() && !tempPath.existsSync()) { await compressMedia(); } if (tempPath.existsSync()) { await tempPath.copy(storedPath.path); } else { Log.error( - 'Could not store image neither tempPath nor originalPath exists.', + 'Could not store image neither as tempPath does not exists.', ); } unawaited(createThumbnail()); diff --git a/lib/src/utils/misc.dart b/lib/src/utils/misc.dart index 27b151e..2b8f8dd 100644 --- a/lib/src/utils/misc.dart +++ b/lib/src/utils/misc.dart @@ -39,6 +39,7 @@ Future saveImageToGallery(Uint8List imageBytes) async { await Gal.putImageBytes(jpgImages); return null; } on GalException catch (e) { + Log.error(e); return e.type.message; } } @@ -52,6 +53,7 @@ Future saveVideoToGallery(String videoPath) async { await Gal.putVideo(videoPath); return null; } on GalException catch (e) { + Log.error(e); return e.type.message; } } diff --git a/lib/src/views/camera/camera_preview_components/save_to_gallery.dart b/lib/src/views/camera/camera_preview_components/save_to_gallery.dart index 4a2be05..1251fbb 100644 --- a/lib/src/views/camera/camera_preview_components/save_to_gallery.dart +++ b/lib/src/views/camera/camera_preview_components/save_to_gallery.dart @@ -4,6 +4,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:twonly/globals.dart'; import 'package:twonly/src/database/tables/mediafiles.table.dart'; import 'package:twonly/src/services/mediafiles/mediafile.service.dart'; +import 'package:twonly/src/utils/log.dart'; import 'package:twonly/src/utils/misc.dart'; class SaveToGalleryButton extends StatefulWidget { @@ -54,22 +55,24 @@ class SaveToGalleryButtonState extends State { final storedMediaPath = widget.mediaService.storedPath; - final storeToGallery = gUser.storeMediaFilesInGallery; - await widget.mediaService.storeMediaFile(); - if (storeToGallery) { - res = await saveVideoToGallery(storedMediaPath.path); + if (gUser.storeMediaFilesInGallery) { + if (widget.mediaService.mediaFile.type == MediaType.video) { + res = await saveVideoToGallery(storedMediaPath.path); + } else { + res = await saveImageToGallery( + storedMediaPath.readAsBytesSync(), + ); + } } - await widget.mediaService.compressMedia(); - await widget.mediaService.createThumbnail(); - if (res == null) { setState(() { _imageSaved = true; }); } else if (mounted && context.mounted) { + Log.error('Could not store media file in the gallery.'); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(res), diff --git a/lib/src/views/settings/data_and_storage.view.dart b/lib/src/views/settings/data_and_storage.view.dart index 5f5b964..2ddbf59 100644 --- a/lib/src/views/settings/data_and_storage.view.dart +++ b/lib/src/views/settings/data_and_storage.view.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter/material.dart'; +import 'package:twonly/globals.dart'; import 'package:twonly/src/services/api/mediafiles/download.service.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/utils/storage.dart'; @@ -14,24 +15,6 @@ class DataAndStorageView extends StatefulWidget { } class _DataAndStorageViewState extends State { - Map> autoDownloadOptions = defaultAutoDownloadOptions; - bool storeMediaFilesInGallery = true; - - @override - void initState() { - super.initState(); - } - - Future initAsync() async { - final user = await getUser(); - if (user == null) return; - setState(() { - autoDownloadOptions = - user.autoDownloadOptions ?? defaultAutoDownloadOptions; - storeMediaFilesInGallery = user.storeMediaFilesInGallery; - }); - } - Future showAutoDownloadOptions( BuildContext context, ConnectivityResult connectionMode, @@ -41,10 +24,11 @@ class _DataAndStorageViewState extends State { context: context, builder: (BuildContext context) { return AutoDownloadOptionsDialog( - autoDownloadOptions: autoDownloadOptions, + autoDownloadOptions: + gUser.autoDownloadOptions ?? defaultAutoDownloadOptions, connectionMode: connectionMode, onUpdate: () async { - await initAsync(); + setState(() {}); }, ); }, @@ -53,14 +37,16 @@ class _DataAndStorageViewState extends State { Future toggleStoreInGallery() async { await updateUserdata((u) { - u.storeMediaFilesInGallery = !storeMediaFilesInGallery; + u.storeMediaFilesInGallery = !u.storeMediaFilesInGallery; return u; }); - await initAsync(); + setState(() {}); } @override Widget build(BuildContext context) { + final autoDownloadOptions = + gUser.autoDownloadOptions ?? defaultAutoDownloadOptions; return Scaffold( appBar: AppBar( title: Text(context.lang.settingsStorageData), @@ -72,7 +58,7 @@ class _DataAndStorageViewState extends State { subtitle: Text(context.lang.settingsStorageDataStoreInGSubtitle), onTap: toggleStoreInGallery, trailing: Switch( - value: storeMediaFilesInGallery, + value: gUser.storeMediaFilesInGallery, onChanged: (a) => toggleStoreInGallery(), ), ), @@ -157,6 +143,14 @@ class _AutoDownloadOptionsDialogState extends State { await _updateAutoDownloadSetting(DownloadMediaTypes.video, value); }, ), + CheckboxListTile( + title: const Text('Audio'), + value: autoDownloadOptions[widget.connectionMode.name]! + .contains(DownloadMediaTypes.audio.name), + onChanged: (bool? value) async { + await _updateAutoDownloadSetting(DownloadMediaTypes.audio, value); + }, + ), ], ), actions: [