diff --git a/lib/mass_app_sources/githubstars.dart b/lib/mass_app_sources/githubstars.dart index c9b3984..de85411 100644 --- a/lib/mass_app_sources/githubstars.dart +++ b/lib/mass_app_sources/githubstars.dart @@ -12,14 +12,20 @@ class GitHubStars implements MassAppUrlSource { @override late List requiredArgs = ['Username']; - Future> getOnePageOfUserStarredUrls( + Future> getOnePageOfUserStarredUrlsWithDescriptions( String username, int page) async { Response res = await get(Uri.parse( 'https://${await GitHub().getCredentialPrefixIfAny()}api.github.com/users/$username/starred?per_page=100&page=$page')); if (res.statusCode == 200) { - return (jsonDecode(res.body) as List) - .map((e) => e['html_url'] as String) - .toList(); + Map urlsWithDescriptions = {}; + for (var e in (jsonDecode(res.body) as List)) { + urlsWithDescriptions.addAll({ + e['html_url'] as String: e['description'] != null + ? e['description'] as String + : 'No description' + }); + } + return urlsWithDescriptions; } else { if (res.headers['x-ratelimit-remaining'] == '0') { throw RateLimitError( @@ -33,19 +39,20 @@ class GitHubStars implements MassAppUrlSource { } @override - Future> getUrls(List args) async { + Future> getUrlsWithDescriptions(List args) async { if (args.length != requiredArgs.length) { throw ObtainiumError('Wrong number of arguments provided'); } - List urls = []; + Map urlsWithDescriptions = {}; var page = 1; while (true) { - var pageUrls = await getOnePageOfUserStarredUrls(args[0], page++); - urls.addAll(pageUrls); + var pageUrls = + await getOnePageOfUserStarredUrlsWithDescriptions(args[0], page++); + urlsWithDescriptions.addAll(pageUrls); if (pageUrls.length < 100) { break; } } - return urls; + return urlsWithDescriptions; } } diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index ff8aa1b..1d61f48 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -357,8 +357,10 @@ class _ImportExportPageState extends State { setState(() { importInProgress = true; }); - var urls = await source - .getUrls(values); + var urlsWithDescriptions = + await source + .getUrlsWithDescriptions( + values); var selectedUrls = await showDialog< List?>( @@ -368,10 +370,7 @@ class _ImportExportPageState extends State { ctx) { return UrlSelectionModal( urlsWithDescriptions: - Map.fromIterable( - urls, - value: (item) => - '')); + urlsWithDescriptions); }); if (selectedUrls != null) { var errors = diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index 934a726..c39656f 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -167,7 +167,7 @@ class AppSource { abstract class MassAppUrlSource { late String name; late List requiredArgs; - Future> getUrls(List args); + Future> getUrlsWithDescriptions(List args); } class SourceProvider {