Improved GitHub starred import + other tweaks

This commit is contained in:
Imran Remtulla
2022-09-28 21:36:21 -04:00
parent 15c0ed04d1
commit 1a68b8abe6
3 changed files with 27 additions and 9 deletions

View File

@ -4,5 +4,5 @@ class RateLimitError {
@override
String toString() =>
'Rate limit reached - try again in $remainingMinutes minutes';
'Too many requests (rate limited) - try again in $remainingMinutes minutes';
}

View File

@ -1,6 +1,7 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:obtainium/custom_errors.dart';
import 'package:obtainium/providers/source_provider.dart';
class GitHubStars implements MassAppSource {
@ -10,23 +11,40 @@ class GitHubStars implements MassAppSource {
@override
late List<String> requiredArgs = ['Username'];
@override
Future<List<String>> getUrls(List<String> args) async {
if (args.length != requiredArgs.length) {
throw 'Wrong number of arguments provided';
}
Future<List<String>> getOnePageOfUserStarredUrls(
String username, int page) async {
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) {
return (jsonDecode(res.body) as List<dynamic>)
.map((e) => e['html_url'] as String)
.toList();
} else {
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';
}
}
@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;
}
}

View File

@ -115,7 +115,7 @@ class SettingsProvider with ChangeNotifier {
}
bool get showAppWebpage {
return prefs?.getBool('showAppWebpage') ?? true;
return prefs?.getBool('showAppWebpage') ?? false;
}
set showAppWebpage(bool show) {