From ce200403e0e8685aba068471242d167724e42a80 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sun, 28 Jul 2024 16:41:01 -0400 Subject: [PATCH 1/3] Update GitLab for new uploads URL scheme (#1742) --- lib/app_sources/gitlab.dart | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/app_sources/gitlab.dart b/lib/app_sources/gitlab.dart index f49545a..b22a806 100644 --- a/lib/app_sources/gitlab.dart +++ b/lib/app_sources/gitlab.dart @@ -131,6 +131,18 @@ class GitLab extends AppSource { bool trackOnly = additionalSettings['trackOnly'] == true; + // Get project ID + Response res0 = await sourceRequest( + 'https://${hosts[0]}/api/v4/projects/${names.author}%2F${names.name}?$optionalAuth', + additionalSettings); + if (res0.statusCode != 200) { + throw getObtainiumHttpError(res0); + } + int? projectId = jsonDecode(res0.body)['id']; + if (projectId == null) { + throw NoReleasesError(); + } + // Request data from REST API Response res = await sourceRequest( 'https://${hosts[0]}/api/v4/projects/${names.author}%2F${names.name}/${trackOnly ? 'repository/tags' : 'releases'}?$optionalAuth', @@ -157,7 +169,7 @@ class GitLab extends AppSource { .join('.apk\n') .split('\n') .where((s) => s.startsWith('/uploads/') && s.endsWith('apk')) - .map((s) => '$standardUrl$s') + .map((s) => 'https://${hosts[0]}/-/project/$projectId$s') .toList(); var apkUrlsSet = apkUrlsFromAssets.toSet(); apkUrlsSet.addAll(uploadedAPKsFromDescription); From 9c16f24a088c66ea8e7664cc334da53fc314f618 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sun, 28 Jul 2024 17:18:36 -0400 Subject: [PATCH 2/3] Ability to share selective exports (#1752) --- lib/pages/apps.dart | 21 +++++++++++++++++ lib/providers/apps_provider.dart | 40 +++++++++++++++++++++++--------- 2 files changed, 50 insertions(+), 11 deletions(-) diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index 0cad218..6ef26ab 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -917,6 +917,27 @@ class AppsPageState extends State { }, 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 diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index de4c505..e3b9595 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -1501,6 +1501,34 @@ class AppsProvider with ChangeNotifier { return updateAppIds; } + Map generateExportJSON( + {List? appIds, bool? overrideExportSettings}) { + Map 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.fromEntries( + (settingsProvider.prefs + ?.getKeys() + .map((key) => MapEntry(key, settingsProvider.prefs?.get(key))) + .toList()) ?? + []); + } + return finalExport; + } + Future 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 finalExport = {}; - finalExport['apps'] = apps.values.map((e) => e.app.toJson()).toList(); - if (settingsProvider.exportSettings) { - finalExport['settings'] = Map.fromEntries( - (settingsProvider.prefs - ?.getKeys() - .map((key) => - MapEntry(key, settingsProvider.prefs?.get(key))) - .toList()) ?? - []); - } + Map finalExport = generateExportJSON(); var result = await saf.createFile(exportDir, displayName: '${tr('obtainiumExportHyphenatedLowercase')}-${DateTime.now().toIso8601String().replaceAll(':', '-')}${isAuto ? '-auto' : ''}.json', From 15ae98d42693870f77db948ffa005b06c39ff09c Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sun, 28 Jul 2024 17:27:18 -0400 Subject: [PATCH 3/3] Update Flutter + packages, increment version --- .flutter | 2 +- pubspec.lock | 44 ++++++++++++++++++++++---------------------- pubspec.yaml | 2 +- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.flutter b/.flutter index 761747b..b0850be 160000 --- a/.flutter +++ b/.flutter @@ -1 +1 @@ -Subproject commit 761747bfc538b5af34aa0d3fac380f1bc331ec49 +Subproject commit b0850beeb25f6d5b10426284f506557f66181b36 diff --git a/pubspec.lock b/pubspec.lock index 671c87e..c8f981f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -311,10 +311,10 @@ packages: dependency: transitive description: name: flex_seed_scheme - sha256: cb5b7ec4ba525d9846d8992858a1c6cfc88f9466d96b8850e2a061aa5f682539 + sha256: cc08c81879ecfd2ab840664ce4770980da0b8a319e35f51bcf763849b7f7596b url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" flutter: dependency: "direct main" description: flutter @@ -441,10 +441,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: c6b0b4c05c458e1c01ad9bcc14041dd7b1f6783d487be4386f793f47a8a4d03e + sha256: "9d98bd47ef9d34e803d438f17fd32b116d31009f534a6fa5ce3a1167f189a6de" url: "https://pub.dev" source: hosted - version: "2.0.20" + version: "2.0.21" flutter_test: dependency: "direct dev" description: flutter @@ -507,10 +507,10 @@ packages: dependency: "direct main" description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" http_parser: dependency: transitive description: @@ -651,10 +651,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "30c5aa827a6ae95ce2853cdc5fe3971daaac00f6f081c419c013f7f57bff2f5e" + sha256: e84c8a53fe1510ef4582f118c7b4bdf15b03002b51d7c2b66983c65843d61193 url: "https://pub.dev" source: hosted - version: "2.2.7" + version: "2.2.8" path_provider_foundation: dependency: transitive description: @@ -715,10 +715,10 @@ packages: dependency: transitive description: name: permission_handler_html - sha256: "54bf176b90f6eddd4ece307e2c06cf977fb3973719c35a93b85cc7093eb6070d" + sha256: "6cac773d389e045a8d4f85418d07ad58ef9e42a56e063629ce14c4c26344de24" url: "https://pub.dev" source: hosted - version: "0.1.1" + version: "0.1.2" permission_handler_platform_interface: dependency: transitive description: @@ -827,10 +827,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577" + sha256: "3d4571b3c5eb58ce52a419d86e655493d0bc3020672da79f72fa0c16ca3a8ec1" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.2.4" shared_preferences_foundation: dependency: transitive description: @@ -851,10 +851,10 @@ packages: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + sha256: "034650b71e73629ca08a0bd789fd1d83cc63c2d1e405946f7cef7bc37432f93a" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shared_preferences_web: dependency: transitive description: @@ -1001,10 +1001,10 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: ceb2625f0c24ade6ef6778d1de0b2e44f2db71fded235eb52295247feba8c5cf + sha256: c24484594a8dea685610569ab0f2547de9c7a1907500a9bc5e37e4c9a3cbfb23 url: "https://pub.dev" source: hosted - version: "6.3.3" + version: "6.3.6" url_launcher_ios: dependency: transitive description: @@ -1049,10 +1049,10 @@ packages: dependency: transitive description: name: url_launcher_windows - sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" uuid: dependency: transitive description: @@ -1097,10 +1097,10 @@ packages: dependency: transitive description: name: webview_flutter_android - sha256: f42447ca49523f11d8f70abea55ea211b3cafe172dd7a0e7ac007bb35dd356dc + sha256: "060e1a621add859dc822f3e4c59b01468e8515ea78cfc5ac4c6b28bc903b5f74" url: "https://pub.dev" source: hosted - version: "3.16.4" + version: "3.16.5" webview_flutter_platform_interface: dependency: transitive description: @@ -1129,10 +1129,10 @@ packages: dependency: transitive description: name: win32_registry - sha256: "10589e0d7f4e053f2c61023a31c9ce01146656a70b7b7f0828c0b46d7da2a9bb" + sha256: "723b7f851e5724c55409bb3d5a32b203b3afe8587eaf5dafb93a5fed8ecda0d6" url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "1.1.4" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index c2c0eac..2136551 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.1.14+2271 +version: 1.1.15+2272 environment: sdk: '>=3.0.0 <4.0.0'