feat: move files when changing book directory in settings

This commit is contained in:
Clovis DUGUÉ
2024-08-26 19:32:29 +02:00
parent 7f36ca98b7
commit 669e5f7a66
2 changed files with 25 additions and 1 deletions

View File

@ -40,6 +40,23 @@ Future<void> moveFilesToAndroidInternalStorage() async {
}
}
Future<void> 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<bool> isFileExists(String filePath) async {
return await File(filePath).exists();
}

View File

@ -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);
},