Ability to share selective exports (#1752)

This commit is contained in:
Imran Remtulla
2024-07-28 17:18:36 -04:00
parent ce200403e0
commit 9c16f24a08
2 changed files with 50 additions and 11 deletions

View File

@@ -917,6 +917,27 @@ class AppsPageState extends State<AppsPage> {
},
child: Text(tr('shareAppConfigLinks'))),
const Divider(),
TextButton(
onPressed: selectedAppIds.isEmpty
? null
: () {
var exportJSON = jsonEncode(
appsProvider.generateExportJSON(
appIds: selectedApps
.map((e) => e.id)
.toList(),
overrideExportSettings: false));
XFile f = XFile.fromData(
Uint8List.fromList(
utf8.encode(exportJSON)),
mimeType: 'application/json',
name:
'${tr('obtainiumExportHyphenatedLowercase')}-${selectedApps.length}-${DateTime.now().millisecondsSinceEpoch}');
Share.shareXFiles([f]);
},
child: Text(
'${tr('share')} - ${tr('obtainiumExport')}')),
const Divider(),
TextButton(
onPressed: () {
appsProvider

View File

@@ -1501,6 +1501,34 @@ class AppsProvider with ChangeNotifier {
return updateAppIds;
}
Map<String, dynamic> generateExportJSON(
{List<String>? appIds, bool? overrideExportSettings}) {
Map<String, dynamic> finalExport = {};
finalExport['apps'] = apps.values
.where((e) {
if (appIds == null) {
return true;
} else {
return appIds.contains(e.app.id);
}
})
.map((e) => e.app.toJson())
.toList();
bool shouldExportSettings = settingsProvider.exportSettings;
if (overrideExportSettings != null) {
shouldExportSettings = overrideExportSettings;
}
if (shouldExportSettings) {
finalExport['settings'] = Map<String, Object?>.fromEntries(
(settingsProvider.prefs
?.getKeys()
.map((key) => MapEntry(key, settingsProvider.prefs?.get(key)))
.toList()) ??
[]);
}
return finalExport;
}
Future<String?> export(
{bool pickOnly = false, isAuto = false, SettingsProvider? sp}) async {
SettingsProvider settingsProvider = sp ?? this.settingsProvider;
@@ -1531,17 +1559,7 @@ class AppsProvider with ChangeNotifier {
}
String? returnPath;
if (!pickOnly) {
Map<String, dynamic> finalExport = {};
finalExport['apps'] = apps.values.map((e) => e.app.toJson()).toList();
if (settingsProvider.exportSettings) {
finalExport['settings'] = Map<String, Object?>.fromEntries(
(settingsProvider.prefs
?.getKeys()
.map((key) =>
MapEntry(key, settingsProvider.prefs?.get(key)))
.toList()) ??
[]);
}
Map<String, dynamic> finalExport = generateExportJSON();
var result = await saf.createFile(exportDir,
displayName:
'${tr('obtainiumExportHyphenatedLowercase')}-${DateTime.now().toIso8601String().replaceAll(':', '-')}${isAuto ? '-auto' : ''}.json',