From 669e5f7a66ceafb9f9eb8b96cc6b182167067877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Clovis=20DUGU=C3=89?= Date: Mon, 26 Aug 2024 19:32:29 +0200 Subject: [PATCH] feat: move files when changing book directory in settings --- lib/services/files.dart | 17 +++++++++++++++++ lib/ui/settings_page.dart | 9 ++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/services/files.dart b/lib/services/files.dart index 3bcd593..aade036 100644 --- a/lib/services/files.dart +++ b/lib/services/files.dart @@ -40,6 +40,23 @@ Future moveFilesToAndroidInternalStorage() async { } } +Future moveFolderContents( + String source_path, String destination_path) async { + final source = Directory(source_path); + source.listSync(recursive: false).forEach((var entity) { + if (entity is Directory) { + var newDirectory = + Directory('${destination_path}/${entity.path.split('/').last}'); + newDirectory.createSync(); + moveFolderContents(entity.path, newDirectory.path); + entity.deleteSync(); + } else if (entity is File) { + entity.copySync('${destination_path}/${entity.path.split('/').last}'); + entity.deleteSync(); + } + }); +} + Future isFileExists(String filePath) async { return await File(filePath).exists(); } diff --git a/lib/ui/settings_page.dart b/lib/ui/settings_page.dart index 6e758bb..a06996a 100644 --- a/lib/ui/settings_page.dart +++ b/lib/ui/settings_page.dart @@ -9,6 +9,7 @@ import 'package:flutter/services.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:openlib/services/files.dart'; import 'package:permission_handler/permission_handler.dart'; // Project imports: @@ -113,10 +114,16 @@ class SettingsPage extends ConsumerWidget { ), _PaddedContainer( onClick: () async { + final currentDirectory = + await dataBase.getPreference('bookStorageDirectory'); String? pickedDirectory = await FilePicker.platform.getDirectoryPath(); - // TODO: Attempt moving existing books to the new directory + if (pickedDirectory == null) { + return; + } await requestStoragePermission(); + // Attempt moving existing books to the new directory + moveFolderContents(currentDirectory, pickedDirectory); dataBase.savePreference( 'bookStorageDirectory', pickedDirectory); },