diff --git a/assets/fonts/Montserrat-Regular.ttf b/assets/fonts/Montserrat-Regular.ttf new file mode 100644 index 0000000..48ba65e Binary files /dev/null and b/assets/fonts/Montserrat-Regular.ttf differ diff --git a/assets/fonts/WixMadeforDisplay-Regular.otf b/assets/fonts/WixMadeforDisplay-Regular.otf deleted file mode 100644 index ee29f61..0000000 Binary files a/assets/fonts/WixMadeforDisplay-Regular.otf and /dev/null differ diff --git a/assets/translations/bs.json b/assets/translations/bs.json index 3f64e1b..bdac46a 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -255,7 +255,7 @@ "intermediateLinkNotFound": "Intermediate veza nije nađena", "intermediateLink": "Intermediate veza", "exemptFromBackgroundUpdates": "Izuzmi iz ažuriranja u pozadini (ako su uključeni)", - "bgUpdatesOnWiFiOnly": "Isključite ažuriranje u pozadini kada niste na WiFi-ju", + "bgUpdatesOnWiFiOnly": "Isključite ažuriranje u pozadini kada niste naWi-Fi-ju", "bgUpdatesWhileChargingOnly": "Disable background updates when not charging", "autoSelectHighestVersionCode": "Automatski izaberite najveću (verziju) versionCode APK-a", "versionExtractionRegEx": "RegEx ekstrakcija verzije", diff --git a/assets/translations/en.json b/assets/translations/en.json index b5ee818..9df8b04 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -255,7 +255,7 @@ "intermediateLinkNotFound": "Intermediate link not found", "intermediateLink": "Intermediate link", "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)", - "bgUpdatesOnWiFiOnly": "Disable background updates when not on WiFi", + "bgUpdatesOnWiFiOnly": "Disable background updates when not onWi-Fi", "bgUpdatesWhileChargingOnly": "Disable background updates when not charging", "autoSelectHighestVersionCode": "Auto-select highest versionCode APK", "versionExtractionRegEx": "Version String Extraction RegEx", diff --git a/assets/translations/es.json b/assets/translations/es.json index 1b84042..10a5169 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -255,7 +255,7 @@ "intermediateLinkNotFound": "Enlace intermedio no encontrado", "intermediateLink": "Enlace intermedio", "exemptFromBackgroundUpdates": "Exenta de actualizciones en segundo plano (si están habilitadas)", - "bgUpdatesOnWiFiOnly": "Deshabilitar las actualizaciones en segundo plano sin WiFi", + "bgUpdatesOnWiFiOnly": "Deshabilitar las actualizaciones en segundo plano sinWi-Fi", "bgUpdatesWhileChargingOnly": "Desactiva las actualizaciones en segundo plano cuando no estés cargando", "autoSelectHighestVersionCode": "Auto selección del paquete APK con versión más reciente", "versionExtractionRegEx": "Versión de extracción RegEx", diff --git a/assets/translations/fa.json b/assets/translations/fa.json index c0a6a09..916984d 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -255,7 +255,7 @@ "intermediateLinkNotFound": "لینک میانی پیدا نشد", "intermediateLink": "پیوند میانی", "exemptFromBackgroundUpdates": "معاف از به‌روزرسانی‌های پس‌زمینه (در صورت فعال بودن)", - "bgUpdatesOnWiFiOnly": "به‌روزرسانی‌های پس‌زمینه را در صورت عدم اتصال به WiFi غیرفعال کنید", + "bgUpdatesOnWiFiOnly": "به‌روزرسانی‌های پس‌زمینه را در صورت عدم اتصال بهWi-Fi غیرفعال کنید", "bgUpdatesWhileChargingOnly": "به‌روزرسانی‌های پس‌زمینه را هنگام شارژ نشدن غیرفعال کنید", "autoSelectHighestVersionCode": "انتخاب خودکار بالاترین نسخه کد APK", "versionExtractionRegEx": "نسخه استخراج RegEx", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 82944e8..3be1251 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -255,7 +255,7 @@ "intermediateLinkNotFound": "Lien intermédiaire introuvable", "intermediateLink": "Lien intermédiaire", "exemptFromBackgroundUpdates": "Exclure de la mise à jour en arrière-plan (si activé)", - "bgUpdatesOnWiFiOnly": "Désactiver les mises à jour en arrière-plan lorsque vous n'êtes pas en WiFi", + "bgUpdatesOnWiFiOnly": "Désactiver les mises à jour en arrière-plan lorsque vous n'êtes pas enWi-Fi", "bgUpdatesWhileChargingOnly": "Désactiver les mises à jour en arrière-plan lorsque le véhicule n'est pas en charge", "autoSelectHighestVersionCode": "Sélectionner automatiquement la version la plus récente du code APK", "versionExtractionRegEx": "Extraire la version par Expression régulière", diff --git a/assets/translations/id.json b/assets/translations/id.json index d7862df..df4b4bd 100644 --- a/assets/translations/id.json +++ b/assets/translations/id.json @@ -255,7 +255,7 @@ "intermediateLinkNotFound": "Tautan perantara tidak ditemukan", "intermediateLink": "Tautan perantara", "exemptFromBackgroundUpdates": "Dikecualikan dari pembaruan latar belakang (jika diaktifkan)", - "bgUpdatesOnWiFiOnly": "Nonaktifkan pembaruan latar belakang saat tidak menggunakan WiFi", + "bgUpdatesOnWiFiOnly": "Nonaktifkan pembaruan latar belakang saat tidak menggunakanWi-Fi", "bgUpdatesWhileChargingOnly": "Menonaktifkan pembaruan latar belakang saat tidak mengisi daya", "autoSelectHighestVersionCode": "Pilih otomatis APK dengan versi kode tertinggi", "versionExtractionRegEx": "Reguler ekspresi terkait ekstraksi versi string", diff --git a/assets/translations/it.json b/assets/translations/it.json index 87713fa..8891758 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -255,7 +255,7 @@ "intermediateLinkNotFound": "Link intermedio non trovato", "intermediateLink": "Collegamento intermedio", "exemptFromBackgroundUpdates": "Esente da aggiornamenti in secondo piano (se attivo)", - "bgUpdatesOnWiFiOnly": "Disattiva aggiornamenti in secondo piano quando non si usa il WiFi", + "bgUpdatesOnWiFiOnly": "Disattiva aggiornamenti in secondo piano quando non si usa ilWi-Fi", "bgUpdatesWhileChargingOnly": "Disabilita gli aggiornamenti in background quando non è in carica", "autoSelectHighestVersionCode": "Auto-seleziona APK con versionCode più alto", "versionExtractionRegEx": "RegEx di estrazione versione", diff --git a/assets/translations/nl.json b/assets/translations/nl.json index 6a91b09..d42f7f9 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -255,7 +255,7 @@ "intermediateLinkNotFound": "Intermediaire link niet gevonden", "intermediateLink": "Intermediaire link", "exemptFromBackgroundUpdates": "Vrijgesteld van achtergrond-updates (indien ingeschakeld)", - "bgUpdatesOnWiFiOnly": "Achtergrond-updates uitschakelen wanneer niet verbonden met WiFi", + "bgUpdatesOnWiFiOnly": "Achtergrond-updates uitschakelen wanneer niet verbonden metWi-Fi", "bgUpdatesWhileChargingOnly": "Achtergrondupdates uitschakelen als er niet wordt opgeladen", "autoSelectHighestVersionCode": "De APK met de hoogste versiecode automatisch selecteren", "versionExtractionRegEx": "Reguliere expressie voor versie-extractie", diff --git a/assets/translations/sv.json b/assets/translations/sv.json index ab9d0b3..ab7118e 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -255,7 +255,7 @@ "intermediateLinkNotFound": "Mellanlänk hittades inte", "intermediateLink": "Mellanlänk", "exemptFromBackgroundUpdates": "Undta från bakgrundsuppdateringar (om aktiverad)", - "bgUpdatesOnWiFiOnly": "Inaktivera Bakgrundsuppdateringar utan WiFi", + "bgUpdatesOnWiFiOnly": "Inaktivera Bakgrundsuppdateringar utanWi-Fi", "bgUpdatesWhileChargingOnly": "Inaktivera bakgrundsuppdateringar när du inte laddar", "autoSelectHighestVersionCode": "Välj automatiskt högsta versionskod APK", "versionExtractionRegEx": "Version Extraction RegEx", diff --git a/assets/translations/vi.json b/assets/translations/vi.json index b8f3ffd..00566f9 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -255,7 +255,7 @@ "intermediateLinkNotFound": "Không tìm thấy liên kết trung gian", "intermediateLink": "Liên kết trung gian", "exemptFromBackgroundUpdates": "Miễn cập nhật nền (nếu được bật)", - "bgUpdatesOnWiFiOnly": "Tắt cập nhật nền khi không có WiFi", + "bgUpdatesOnWiFiOnly": "Tắt cập nhật nền khi không cóWi-Fi", "bgUpdatesWhileChargingOnly": "Disable background updates when not charging", "autoSelectHighestVersionCode": "Tự động chọn APK mã phiên bản cao nhất", "versionExtractionRegEx": "Trích xuất phiên bản RegEx", diff --git a/assets/translations/zh-Hant-TW.json b/assets/translations/zh-Hant-TW.json index a5d091a..a6ccaf4 100644 --- a/assets/translations/zh-Hant-TW.json +++ b/assets/translations/zh-Hant-TW.json @@ -255,7 +255,7 @@ "intermediateLinkNotFound": "沒有找到中間連結", "intermediateLink": "中間連結", "exemptFromBackgroundUpdates": "免除背景更新(若已啟用)", - "bgUpdatesOnWiFiOnly": "停用非 WiFi 的背景更新", + "bgUpdatesOnWiFiOnly": "停用非Wi-Fi 的背景更新", "bgUpdatesWhileChargingOnly": "Disable background updates when not charging", "autoSelectHighestVersionCode": "自動選擇最高 versionCode 的 APK", "versionExtractionRegEx": "版本字串提取正則表達式", diff --git a/lib/app_sources/gitlab.dart b/lib/app_sources/gitlab.dart index 70bbcd0..b42b6b8 100644 --- a/lib/app_sources/gitlab.dart +++ b/lib/app_sources/gitlab.dart @@ -163,29 +163,39 @@ class GitLab extends AppSource { apkDetailsList = json.map((e) { var apkUrlsFromAssets = (e['assets']?['links'] as List? ?? []) .map((e) { - return (e['direct_asset_url'] ?? e['url'] ?? '') as String; + var url = (e['direct_asset_url'] ?? e['url'] ?? '') as String; + var parsedUrl = url.isNotEmpty ? Uri.parse(url) : null; + return MapEntry( + (e['name'] ?? + (parsedUrl != null && parsedUrl.pathSegments.isNotEmpty + ? parsedUrl.pathSegments.last + : 'unknown')) as String, + (e['direct_asset_url'] ?? e['url'] ?? '') as String); }) - .where((s) => s.isNotEmpty) + .where((s) => s.key.isNotEmpty) .toList(); - List uploadedAPKsFromDescription = - ((e['description'] ?? '') as String) - .split('](') - .join('\n') - .split('.apk)') - .join('.apk\n') - .split('\n') - .where((s) => s.startsWith('/uploads/') && s.endsWith('apk')) - .map((s) => 'https://${hosts[0]}/-/project/$projectId$s') - .toList(); - var apkUrlsSet = apkUrlsFromAssets.toSet(); - apkUrlsSet.addAll(uploadedAPKsFromDescription); + var uploadedAPKsFromDescription = ((e['description'] ?? '') as String) + .split('](') + .join('\n') + .split('.apk)') + .join('.apk\n') + .split('\n') + .where((s) => s.startsWith('/uploads/') && s.endsWith('apk')) + .map((s) => 'https://${hosts[0]}/-/project/$projectId$s') + .map((l) => MapEntry(Uri.parse(l).pathSegments.last, l)) + .toList(); + Map apkUrls = {}; + for (var entry in apkUrlsFromAssets) { + apkUrls[entry.key] = entry.value; + } + for (var entry in uploadedAPKsFromDescription) { + apkUrls[entry.key] = entry.value; + } var releaseDateString = e['released_at'] ?? e['created_at'] ?? e['commit']?['created_at']; DateTime? releaseDate = releaseDateString != null ? DateTime.parse(releaseDateString) : null; - return APKDetails( - e['tag_name'] ?? e['name'], - getApkUrlsFromUrls(apkUrlsSet.toList()), + return APKDetails(e['tag_name'] ?? e['name'], apkUrls.entries.toList(), AppNames(names.author, names.name.split('/').last), releaseDate: releaseDate); }); diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart index cc81521..86d73e4 100644 --- a/lib/app_sources/html.dart +++ b/lib/app_sources/html.dart @@ -358,10 +358,12 @@ class HTML extends AppSource { .toString(); return APKDetails( version, - [rel] - .map((e) => - MapEntry('${e.hashCode}-${Uri.parse(e).pathSegments.last}', e)) - .toList(), + [rel].map((e) { + var uri = Uri.parse(e); + var fileName = + uri.pathSegments.isNotEmpty ? uri.pathSegments.last : uri.origin; + return MapEntry('${e.hashCode}-$fileName', e); + }).toList(), AppNames(uri.host, tr('app'))); } } diff --git a/lib/main.dart b/lib/main.dart index db1c0be..e34b1ea 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -251,17 +251,15 @@ class _ObtainiumState extends State { colorScheme: settingsProvider.theme == ThemeSettings.dark ? darkColorScheme : lightColorScheme, - fontFamily: settingsProvider.useSystemFont - ? 'SystemFont' - : 'Wix-Madefor-Display'), + fontFamily: + settingsProvider.useSystemFont ? 'SystemFont' : 'Montserrat'), darkTheme: ThemeData( useMaterial3: true, colorScheme: settingsProvider.theme == ThemeSettings.light ? lightColorScheme : darkColorScheme, - fontFamily: settingsProvider.useSystemFont - ? 'SystemFont' - : 'Wix-Madefor-Display'), + fontFamily: + settingsProvider.useSystemFont ? 'SystemFont' : 'Montserrat'), home: Shortcuts(shortcuts: { LogicalKeySet(LogicalKeyboardKey.select): const ActivateIntent(), }, child: const HomePage())); diff --git a/pubspec.lock b/pubspec.lock index 77586f3..f276b4b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -48,10 +48,10 @@ packages: dependency: "direct main" description: name: app_links - sha256: "433df2e61b10519407475d7f69e470789d23d593f28224c38ba1068597be7950" + sha256: "85ed8fc1d25a76475914fff28cc994653bd900bc2c26e4b57a49e097febb54ba" url: "https://pub.dev" source: hosted - version: "6.3.3" + version: "6.4.0" app_links_linux: dependency: transitive description: @@ -288,10 +288,10 @@ packages: dependency: transitive description: name: ffi - sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" file: dependency: transitive description: @@ -304,10 +304,10 @@ packages: dependency: "direct main" description: name: file_picker - sha256: "3d57312a53746ed4eb8c843dc50372454bbda37dd0c01a4d40fedc83e2ce4921" + sha256: "6f6bfa8797f296965bdc3e1f702574ab49a540c19b9237b401e7c2b25dfe594c" url: "https://pub.dev" source: hosted - version: "8.3.5" + version: "9.0.0" fixnum: dependency: transitive description: @@ -756,26 +756,26 @@ packages: dependency: "direct main" description: name: permission_handler - sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" + sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849" url: "https://pub.dev" source: hosted - version: "11.3.1" + version: "11.4.0" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1" + sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc url: "https://pub.dev" source: hosted - version: "12.0.13" + version: "12.1.0" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0 + sha256: f84a188e79a35c687c132a0a0556c254747a08561e99ab933f12f6ca71ef3c98 url: "https://pub.dev" source: hosted - version: "9.4.5" + version: "9.4.6" permission_handler_html: dependency: transitive description: @@ -788,10 +788,10 @@ packages: dependency: transitive description: name: permission_handler_platform_interface - sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 + sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878 url: "https://pub.dev" source: hosted - version: "4.2.3" + version: "4.3.0" permission_handler_windows: dependency: transitive description: @@ -900,10 +900,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: ea86be7b7114f9e94fddfbb52649e59a03d6627ccd2387ebddcd6624719e9f16 + sha256: a768fc8ede5f0c8e6150476e14f38e2417c0864ca36bb4582be8e21925a03c22 url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.6" shared_preferences_foundation: dependency: transitive description: @@ -932,10 +932,10 @@ packages: dependency: transitive description: name: shared_preferences_web - sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e + sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.4.3" shared_preferences_windows: dependency: transitive description: @@ -1219,18 +1219,18 @@ packages: dependency: transitive description: name: webview_flutter_wkwebview - sha256: "8e0593559bfecd35eb1757d6907ed6b995a41ef82607d6113df897c2805ce6be" + sha256: d7403ef4f042714c9ee2b26eaac4cadae7394cb0d4e608b1dd850c3ff96bd893 url: "https://pub.dev" source: hosted - version: "3.18.0" + version: "3.18.2" win32: dependency: transitive description: name: win32 - sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e + sha256: b89e6e24d1454e149ab20fbb225af58660f0c0bf4475544650700d8e2da54aef url: "https://pub.dev" source: hosted - version: "5.10.1" + version: "5.11.0" win32_registry: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 9a881c3..7d81647 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,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.41+2298 +version: 1.1.42+2299 environment: sdk: ^3.6.0 @@ -47,7 +47,7 @@ dependencies: permission_handler: ^11.0.0 fluttertoast: ^8.0.9 device_info_plus: ^11.0.0 - file_picker: ^8.0.0+1 + file_picker: ^9.0.0 animations: ^2.0.4 android_package_installer: # TODO: See if PR will be accepted (dev may not be active), else remove this comment git: @@ -151,6 +151,6 @@ flutter: # see https://flutter.dev/to/font-from-package fonts: - - family: Wix-Madefor-Display + - family: Montserrat fonts: - - asset: assets/fonts/WixMadeforDisplay-Regular.otf \ No newline at end of file + - asset: assets/fonts/Montserrat-Regular.ttf \ No newline at end of file