Add 'tags-only' support (for Track-Only) to GitHub (and Codeberg)

This commit is contained in:
Imran Remtulla
2023-05-14 13:25:09 -04:00
parent e256ada2dc
commit 96c92c8df9
2 changed files with 37 additions and 15 deletions

View File

@ -56,10 +56,10 @@ class Codeberg extends AppSource {
String standardUrl, String standardUrl,
Map<String, dynamic> additionalSettings, Map<String, dynamic> additionalSettings,
) async { ) async {
return gh.getLatestAPKDetailsCommon( return await gh.getLatestAPKDetailsCommon2(standardUrl, additionalSettings,
'https://$host/api/v1/repos${standardUrl.substring('https://$host'.length)}/releases?per_page=100', (bool useTagUrl) async {
standardUrl, return 'https://$host/api/v1/repos${standardUrl.substring('https://$host'.length)}/${useTagUrl ? 'tags' : 'releases'}?per_page=100';
additionalSettings); }, null);
} }
AppNames getAppNames(String standardUrl) { AppNames getAppNames(String standardUrl) {

View File

@ -143,15 +143,17 @@ class GitHub extends AppSource {
} else if (b == null) { } else if (b == null) {
return 1; return 1;
} else { } else {
var stdFormats = findStandardFormatsForVersion(a['tag_name'], true) var nameA = a['tag_name'] ?? a['name'];
.intersection(findStandardFormatsForVersion(b['tag_name'], true)); var nameB = b['tag_name'] ?? b['name'];
var stdFormats = findStandardFormatsForVersion(nameA, true)
.intersection(findStandardFormatsForVersion(nameB, true));
if (stdFormats.isNotEmpty) { if (stdFormats.isNotEmpty) {
var reg = RegExp(stdFormats.first); var reg = RegExp(stdFormats.first);
var matchA = reg.firstMatch(a['tag_name']); var matchA = reg.firstMatch(nameA);
var matchB = reg.firstMatch(b['tag_name']); var matchB = reg.firstMatch(nameB);
return compareAlphaNumeric( return compareAlphaNumeric(
(a['tag_name'] as String).substring(matchA!.start, matchA.end), (nameA as String).substring(matchA!.start, matchA.end),
(b['tag_name'] as String).substring(matchB!.start, matchB.end)); (nameB as String).substring(matchB!.start, matchB.end));
} else { } else {
return getReleaseDateFromRelease(a)! return getReleaseDateFromRelease(a)!
.compareTo(getReleaseDateFromRelease(b)!); .compareTo(getReleaseDateFromRelease(b)!);
@ -191,7 +193,7 @@ class GitHub extends AppSource {
if (targetRelease == null) { if (targetRelease == null) {
throw NoReleasesError(); throw NoReleasesError();
} }
String? version = targetRelease['tag_name']; String? version = targetRelease['tag_name'] ?? targetRelease['name'];
DateTime? releaseDate = getReleaseDateFromRelease(targetRelease); DateTime? releaseDate = getReleaseDateFromRelease(targetRelease);
if (version == null) { if (version == null) {
throw NoVersionError(); throw NoVersionError();
@ -211,15 +213,35 @@ class GitHub extends AppSource {
} }
} }
getLatestAPKDetailsCommon2(
String standardUrl,
Map<String, dynamic> additionalSettings,
Future<String> Function(bool) reqUrlGenerator,
dynamic Function(Response)? onHttpErrorCode) async {
try {
return await getLatestAPKDetailsCommon(
await reqUrlGenerator(false), standardUrl, additionalSettings,
onHttpErrorCode: onHttpErrorCode);
} catch (err) {
if (err is NoReleasesError && additionalSettings['trackOnly'] == true) {
return await getLatestAPKDetailsCommon(
await reqUrlGenerator(true), standardUrl, additionalSettings,
onHttpErrorCode: onHttpErrorCode);
} else {
rethrow;
}
}
}
@override @override
Future<APKDetails> getLatestAPKDetails( Future<APKDetails> getLatestAPKDetails(
String standardUrl, String standardUrl,
Map<String, dynamic> additionalSettings, Map<String, dynamic> additionalSettings,
) async { ) async {
return getLatestAPKDetailsCommon( return await getLatestAPKDetailsCommon2(standardUrl, additionalSettings,
'https://${await getCredentialPrefixIfAny()}api.$host/repos${standardUrl.substring('https://$host'.length)}/releases?per_page=100', (bool useTagUrl) async {
standardUrl, return 'https://${await getCredentialPrefixIfAny()}api.$host/repos${standardUrl.substring('https://$host'.length)}/${useTagUrl ? 'tags' : 'releases'}?per_page=100';
additionalSettings, onHttpErrorCode: (Response res) { }, (Response res) {
rateLimitErrorCheck(res); rateLimitErrorCheck(res);
}); });
} }