mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-01 05:10:15 +02:00
Ability to share selective exports (#1752)
This commit is contained in:
@@ -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
|
||||
|
@@ -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',
|
||||
|
Reference in New Issue
Block a user