This commit is contained in:
Imran Remtulla
2023-09-10 23:11:06 -04:00
parent 118e05a0fa
commit 2aea1d2631
3 changed files with 86 additions and 63 deletions

View File

@@ -28,8 +28,8 @@ class _ImportExportPageState extends State<ImportExportPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SourceProvider sourceProvider = SourceProvider(); SourceProvider sourceProvider = SourceProvider();
var appsProvider = context.read<AppsProvider>(); var appsProvider = context.watch<AppsProvider>();
var settingsProvider = context.read<SettingsProvider>(); var settingsProvider = context.watch<SettingsProvider>();
var outlineButtonStyle = ButtonStyle( var outlineButtonStyle = ButtonStyle(
shape: MaterialStateProperty.all( shape: MaterialStateProperty.all(
@@ -102,10 +102,12 @@ class _ImportExportPageState extends State<ImportExportPage> {
}); });
} }
runObtainiumExport() { runObtainiumExport() async {
HapticFeedback.selectionClick(); HapticFeedback.selectionClick();
appsProvider appsProvider
.exportApps(pickOnly: settingsProvider.exportDir == null) .exportApps(
pickOnly: (await settingsProvider.getExportDir()) == null,
sp: settingsProvider)
.then((String? result) { .then((String? result) {
if (result != null) { if (result != null) {
showError(tr('exportedTo', args: [result]), context); showError(tr('exportedTo', args: [result]), context);
@@ -304,6 +306,11 @@ class _ImportExportPageState extends State<ImportExportPage> {
const EdgeInsets.symmetric(vertical: 8, horizontal: 16), const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
FutureBuilder(
future: settingsProvider.getExportDir(),
builder: (context, snapshot) {
return Column(
children: [ children: [
Row( Row(
children: [ children: [
@@ -314,10 +321,10 @@ class _ImportExportPageState extends State<ImportExportPage> {
importInProgress importInProgress
? null ? null
: runObtainiumExport, : runObtainiumExport,
child: Text(tr( child: Text(tr(snapshot.data != null
settingsProvider.exportDir != null
? 'obtainiumExport' ? 'obtainiumExport'
: 'pickExportDirKeepLastN')))), : 'pickExportDir')),
)),
const SizedBox( const SizedBox(
width: 16, width: 16,
), ),
@@ -330,7 +337,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
child: Text(tr('obtainiumImport')))) child: Text(tr('obtainiumImport'))))
], ],
), ),
if (settingsProvider.exportDir != null) if (snapshot.data != null)
Column( Column(
children: [ children: [
const SizedBox(height: 16), const SizedBox(height: 16),
@@ -340,21 +347,29 @@ class _ImportExportPageState extends State<ImportExportPage> {
GeneratedFormSwitch( GeneratedFormSwitch(
'autoExportOnChanges', 'autoExportOnChanges',
label: tr('autoExportOnChanges'), label: tr('autoExportOnChanges'),
defaultValue: defaultValue: settingsProvider
settingsProvider.autoExportOnChanges, .autoExportOnChanges,
) )
] ]
], ],
onValueChanges: (value, valid, isBuilding) { onValueChanges:
(value, valid, isBuilding) {
if (valid && !isBuilding) { if (valid && !isBuilding) {
if (value['autoExportOnChanges'] != null) { if (value['autoExportOnChanges'] !=
settingsProvider.autoExportOnChanges = null) {
value['autoExportOnChanges'] == true; settingsProvider
.autoExportOnChanges = value[
'autoExportOnChanges'] ==
true;
} }
} }
}), }),
], ],
), ),
],
);
},
),
if (importInProgress) if (importInProgress)
const Column( const Column(
children: [ children: [

View File

@@ -1095,8 +1095,10 @@ class AppsProvider with ChangeNotifier {
return updateAppIds; return updateAppIds;
} }
Future<String?> exportApps({bool pickOnly = false, isAuto = false}) async { Future<String?> exportApps(
var exportDir = settingsProvider.exportDir; {bool pickOnly = false, isAuto = false, SettingsProvider? sp}) async {
SettingsProvider settingsProvider = sp ?? this.settingsProvider;
var exportDir = await settingsProvider.getExportDir();
if (isAuto) { if (isAuto) {
if (exportDir == null) { if (exportDir == null) {
logs.add('Skipping auto-export as dir is not set.'); logs.add('Skipping auto-export as dir is not set.');
@@ -1112,13 +1114,12 @@ class AppsProvider with ChangeNotifier {
logs.add('Previous auto-export deleted.'); logs.add('Previous auto-export deleted.');
} }
} }
exportDir = settingsProvider.exportDir;
if (exportDir == null || pickOnly) { if (exportDir == null || pickOnly) {
await settingsProvider.pickExportDirKeepLastN(); await settingsProvider.pickExportDir();
exportDir = settingsProvider.exportDir; exportDir = await settingsProvider.getExportDir();
} }
if (exportDir == null) { if (exportDir == null) {
throw ObtainiumError(tr('unexpectedError')); return null;
} }
String? returnPath; String? returnPath;
if (!pickOnly) { if (!pickOnly) {

View File

@@ -362,18 +362,25 @@ class SettingsProvider with ChangeNotifier {
notifyListeners(); notifyListeners();
} }
Uri? get exportDir { Future<Uri?> getExportDir() async {
var uriString = prefs?.getString('exportDir'); var uriString = prefs?.getString('exportDir');
if (uriString != null) { if (uriString != null) {
return Uri.parse(uriString); Uri? uri = Uri.parse(uriString);
if (!(await saf.canRead(uri) ?? false) ||
!(await saf.canWrite(uri) ?? false)) {
uri = null;
prefs?.remove('exportDir');
notifyListeners();
}
return uri;
} else { } else {
return null; return null;
} }
} }
Future<void> pickExportDirKeepLastN({bool remove = false}) async { Future<void> pickExportDir({bool remove = false}) async {
var existingSAFPerms = (await saf.persistedUriPermissions()) ?? []; var existingSAFPerms = (await saf.persistedUriPermissions()) ?? [];
var currentOneWayDataSyncDir = exportDir; var currentOneWayDataSyncDir = await getExportDir();
Uri? newOneWayDataSyncDir; Uri? newOneWayDataSyncDir;
if (!remove) { if (!remove) {
newOneWayDataSyncDir = (await saf.openDocumentTree()); newOneWayDataSyncDir = (await saf.openDocumentTree());