mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-16 14:46:44 +02:00
Add 'tags-only' support (for Track-Only) to GitHub (and Codeberg)
This commit is contained in:
@ -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) {
|
||||||
|
@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user