From 167d0ccced05cfb14765ea10f5a7caae5165f000 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Fri, 21 Feb 2025 10:39:45 -0500 Subject: [PATCH] Extract GitLab Asset Filenames (#2127) --- lib/app_sources/gitlab.dart | 44 +++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 17 deletions(-) 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); });