Extract GitLab Asset Filenames (#2127)

This commit is contained in:
Imran Remtulla
2025-02-21 10:39:45 -05:00
parent 430d1f2690
commit 167d0ccced

View File

@ -163,29 +163,39 @@ class GitLab extends AppSource {
apkDetailsList = json.map((e) { apkDetailsList = json.map((e) {
var apkUrlsFromAssets = (e['assets']?['links'] as List<dynamic>? ?? []) var apkUrlsFromAssets = (e['assets']?['links'] as List<dynamic>? ?? [])
.map((e) { .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(); .toList();
List<String> uploadedAPKsFromDescription = var uploadedAPKsFromDescription = ((e['description'] ?? '') as String)
((e['description'] ?? '') as String) .split('](')
.split('](') .join('\n')
.join('\n') .split('.apk)')
.split('.apk)') .join('.apk\n')
.join('.apk\n') .split('\n')
.split('\n') .where((s) => s.startsWith('/uploads/') && s.endsWith('apk'))
.where((s) => s.startsWith('/uploads/') && s.endsWith('apk')) .map((s) => 'https://${hosts[0]}/-/project/$projectId$s')
.map((s) => 'https://${hosts[0]}/-/project/$projectId$s') .map((l) => MapEntry(Uri.parse(l).pathSegments.last, l))
.toList(); .toList();
var apkUrlsSet = apkUrlsFromAssets.toSet(); Map<String, String> apkUrls = {};
apkUrlsSet.addAll(uploadedAPKsFromDescription); for (var entry in apkUrlsFromAssets) {
apkUrls[entry.key] = entry.value;
}
for (var entry in uploadedAPKsFromDescription) {
apkUrls[entry.key] = entry.value;
}
var releaseDateString = var releaseDateString =
e['released_at'] ?? e['created_at'] ?? e['commit']?['created_at']; e['released_at'] ?? e['created_at'] ?? e['commit']?['created_at'];
DateTime? releaseDate = DateTime? releaseDate =
releaseDateString != null ? DateTime.parse(releaseDateString) : null; releaseDateString != null ? DateTime.parse(releaseDateString) : null;
return APKDetails( return APKDetails(e['tag_name'] ?? e['name'], apkUrls.entries.toList(),
e['tag_name'] ?? e['name'],
getApkUrlsFromUrls(apkUrlsSet.toList()),
AppNames(names.author, names.name.split('/').last), AppNames(names.author, names.name.split('/').last),
releaseDate: releaseDate); releaseDate: releaseDate);
}); });