mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-16 06:36:44 +02:00
Improved GitHub starred import + other tweaks
This commit is contained in:
@ -4,5 +4,5 @@ class RateLimitError {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() =>
|
String toString() =>
|
||||||
'Rate limit reached - try again in $remainingMinutes minutes';
|
'Too many requests (rate limited) - try again in $remainingMinutes minutes';
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:http/http.dart';
|
import 'package:http/http.dart';
|
||||||
|
import 'package:obtainium/custom_errors.dart';
|
||||||
import 'package:obtainium/providers/source_provider.dart';
|
import 'package:obtainium/providers/source_provider.dart';
|
||||||
|
|
||||||
class GitHubStars implements MassAppSource {
|
class GitHubStars implements MassAppSource {
|
||||||
@ -10,23 +11,40 @@ class GitHubStars implements MassAppSource {
|
|||||||
@override
|
@override
|
||||||
late List<String> requiredArgs = ['Username'];
|
late List<String> requiredArgs = ['Username'];
|
||||||
|
|
||||||
@override
|
Future<List<String>> getOnePageOfUserStarredUrls(
|
||||||
Future<List<String>> getUrls(List<String> args) async {
|
String username, int page) async {
|
||||||
if (args.length != requiredArgs.length) {
|
|
||||||
throw 'Wrong number of arguments provided';
|
|
||||||
}
|
|
||||||
Response res = await get(Uri.parse(
|
Response res = await get(Uri.parse(
|
||||||
'https://api.github.com/users/${args[0]}/starred?per_page=100')); //TODO: Make requests for more pages until you run out
|
'https://api.github.com/users/$username/starred?per_page=100&page=$page'));
|
||||||
if (res.statusCode == 200) {
|
if (res.statusCode == 200) {
|
||||||
return (jsonDecode(res.body) as List<dynamic>)
|
return (jsonDecode(res.body) as List<dynamic>)
|
||||||
.map((e) => e['html_url'] as String)
|
.map((e) => e['html_url'] as String)
|
||||||
.toList();
|
.toList();
|
||||||
} else {
|
} else {
|
||||||
if (res.headers['x-ratelimit-remaining'] == '0') {
|
if (res.headers['x-ratelimit-remaining'] == '0') {
|
||||||
throw 'Rate limit reached - try again in ${(int.parse(res.headers['x-ratelimit-reset'] ?? '1800000000') / 60000000).toString()} minutes';
|
throw RateLimitError(
|
||||||
|
(int.parse(res.headers['x-ratelimit-reset'] ?? '1800000000') /
|
||||||
|
60000000)
|
||||||
|
.round());
|
||||||
}
|
}
|
||||||
|
|
||||||
throw 'Unable to find user\'s starred repos';
|
throw 'Unable to find user\'s starred repos';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<String>> getUrls(List<String> args) async {
|
||||||
|
if (args.length != requiredArgs.length) {
|
||||||
|
throw 'Wrong number of arguments provided';
|
||||||
|
}
|
||||||
|
List<String> urls = [];
|
||||||
|
var page = 1;
|
||||||
|
while (true) {
|
||||||
|
var pageUrls = await getOnePageOfUserStarredUrls(args[0], page++);
|
||||||
|
urls.addAll(pageUrls);
|
||||||
|
if (pageUrls.length < 100) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return urls;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ class SettingsProvider with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool get showAppWebpage {
|
bool get showAppWebpage {
|
||||||
return prefs?.getBool('showAppWebpage') ?? true;
|
return prefs?.getBool('showAppWebpage') ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
set showAppWebpage(bool show) {
|
set showAppWebpage(bool show) {
|
||||||
|
Reference in New Issue
Block a user