iOS: fix backup & restore

This commit is contained in:
kodjomoustapha 2024-01-28 21:14:56 +01:00
parent b40cf595b7
commit 1ba3a35d3d
4 changed files with 48 additions and 25 deletions

View file

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

View file

@ -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<void> 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(

View file

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

View file

@ -52,6 +52,13 @@ class StorageProvider {
return Directory(dbDir);
}
Future<Directory?> getIosBackupDirectory() async {
final gefaultDirectory = await getDefaultDirectory();
String dbDir = path.join(gefaultDirectory!.path, 'backup');
await Directory(dbDir).create(recursive: true);
return Directory(dbDir);
}
Future<Directory?> getDirectory() async {
Directory? directory;
String path = isar.settings.getSync(227)!.downloadLocation ?? "";