mirror of
https://github.com/dstark5/Openlib.git
synced 2025-05-20 16:06:23 +08:00
feat: move files when changing book directory in settings
This commit is contained in:
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
},
|
||||
|
Reference in New Issue
Block a user