diff --git a/lib/modules/more/backup_and_restore/backup_and_restore.dart b/lib/modules/more/backup_and_restore/backup_and_restore.dart index 4d21407b..f7f06684 100644 --- a/lib/modules/more/backup_and_restore/backup_and_restore.dart +++ b/lib/modules/more/backup_and_restore/backup_and_restore.dart @@ -1,3 +1,4 @@ +import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -7,6 +8,7 @@ import 'package:mangayomi/modules/more/backup_and_restore/providers/auto_backup. import 'package:mangayomi/modules/more/backup_and_restore/providers/backup.dart'; import 'package:mangayomi/modules/more/backup_and_restore/providers/restore.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; +import 'package:mangayomi/providers/storage_provider.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; class BackupAndRestore extends ConsumerWidget { @@ -77,8 +79,15 @@ class BackupAndRestore extends ConsumerWidget { )), TextButton( onPressed: () async { - final result = await FilePicker.platform - .getDirectoryPath(); + String? result; + if (Platform.isIOS) { + result = (await StorageProvider() + .getIosBackupDirectory())! + .path; + } else { + result = await FilePicker.platform + .getDirectoryPath(); + } if (result != null && context.mounted) { ref.watch(doBackUpProvider( @@ -248,25 +257,25 @@ class BackupAndRestore extends ConsumerWidget { style: TextStyle(fontSize: 11, color: context.secondaryColor), ), ), - // if (!isIOS) - ListTile( - onTap: () async { - String? result = await FilePicker.platform.getDirectoryPath(); + if (!Platform.isIOS) + ListTile( + onTap: () async { + String? result = await FilePicker.platform.getDirectoryPath(); - if (result != null) { - ref - .read(autoBackupLocationStateProvider.notifier) - .set(result); - } - }, - title: Text(l10n.backup_location), - subtitle: Text( - autoBackupLocation.$2.isEmpty - ? autoBackupLocation.$1 - : autoBackupLocation.$2, - style: TextStyle(fontSize: 11, color: context.secondaryColor), + if (result != null) { + ref + .read(autoBackupLocationStateProvider.notifier) + .set(result); + } + }, + title: Text(l10n.backup_location), + subtitle: Text( + autoBackupLocation.$2.isEmpty + ? autoBackupLocation.$1 + : autoBackupLocation.$2, + style: TextStyle(fontSize: 11, color: context.secondaryColor), + ), ), - ), ListTile( onTap: () { final list = _getList(context); diff --git a/lib/modules/more/backup_and_restore/providers/auto_backup.dart b/lib/modules/more/backup_and_restore/providers/auto_backup.dart index db6f0a1e..1f16af14 100644 --- a/lib/modules/more/backup_and_restore/providers/auto_backup.dart +++ b/lib/modules/more/backup_and_restore/providers/auto_backup.dart @@ -51,10 +51,14 @@ class AutoBackupLocationState extends _$AutoBackupLocationState { Directory? _storageProvider; Future refresh() async { - _storageProvider = await StorageProvider().getDefaultDirectory(); + _storageProvider = Platform.isIOS + ? await StorageProvider().getIosBackupDirectory() + : await StorageProvider().getDefaultDirectory(); final settings = isar.settings.getSync(227); state = ( - "${_storageProvider!.path}backup/", + Platform.isIOS + ? _storageProvider!.path + : "${_storageProvider!.path}backup/", settings!.autoBackupLocation ?? "" ); } @@ -75,10 +79,14 @@ Future checkAndBackup(CheckAndBackupRef ref) async { await storageProvider.requestPermission(); final defaulteDirectory = await storageProvider.getDefaultDirectory(); final backupLocation = ref.watch(autoBackupLocationStateProvider).$2; - final backupDirectory = Directory(backupLocation.isEmpty + Directory? backupDirectory; + backupDirectory = Directory(backupLocation.isEmpty ? "${defaulteDirectory!.path}backup/" : backupLocation); - if (!(await backupDirectory.exists())) { + if (Platform.isIOS) { + backupDirectory = await (storageProvider.getIosBackupDirectory()); + } + if (!(await backupDirectory!.exists())) { backupDirectory.create(); } ref.watch(doBackUpProvider( diff --git a/lib/modules/more/backup_and_restore/providers/backup.dart b/lib/modules/more/backup_and_restore/providers/backup.dart index 50dfb510..1a7fa414 100644 --- a/lib/modules/more/backup_and_restore/providers/backup.dart +++ b/lib/modules/more/backup_and_restore/providers/backup.dart @@ -15,7 +15,6 @@ import 'package:mangayomi/models/settings.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/track.dart'; import 'package:mangayomi/models/track_preference.dart'; -import 'package:mangayomi/utils/extensions/string_extensions.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:share_plus/share_plus.dart'; part 'backup.g.dart'; @@ -115,7 +114,7 @@ void doBackUp(DoBackUpRef ref, datas.addAll({"extensions_preferences": resSourePref}); } final name = - 'mangayomi_${DateTime.now().toString().substringBefore(' ').replaceAll('-', '_')}'; + 'mangayomi_${DateTime.now().toString().replaceAll(' ','_').replaceAll('-', '_')}'; final backupFilePath = '$path/$name.backup.db'; final file = File(backupFilePath); diff --git a/lib/providers/storage_provider.dart b/lib/providers/storage_provider.dart index 1ecbf3fc..d31aea72 100644 --- a/lib/providers/storage_provider.dart +++ b/lib/providers/storage_provider.dart @@ -52,6 +52,13 @@ class StorageProvider { return Directory(dbDir); } + Future getIosBackupDirectory() async { + final gefaultDirectory = await getDefaultDirectory(); + String dbDir = path.join(gefaultDirectory!.path, 'backup'); + await Directory(dbDir).create(recursive: true); + return Directory(dbDir); + } + Future getDirectory() async { Directory? directory; String path = isar.settings.getSync(227)!.downloadLocation ?? "";