1+ import 'package:http/http.dart' as http;
12import 'package:args/args.dart' ;
2- import 'package:dio/dio.dart' ;
33import 'dart:convert' ;
44import 'dart:io' ;
55
@@ -26,7 +26,8 @@ class GthUser {
2626 GthUser (String username) : this ._url = BASE_URL + username;
2727
2828 Future <void > init () async {
29- var obj = await Dio ().get (this ._url).data;
29+ var res = await http.get (Uri .parse (this ._url));
30+ var obj = jsonDecode (res.body);
3031
3132 this .name = obj["name" ];
3233 this .bio = obj["bio" ];
@@ -38,10 +39,81 @@ class GthUser {
3839 this .following = GthUserItem (obj["following" ]);
3940 }
4041
41- Future <void > fetch (String thing) async {}
42+ Future <void > fetch (String thing) async {
43+ var url = "${this ._url }/$thing " ;
44+ var res = await http.get (Uri .parse (url));
45+ var arr = jsonDecode (res.body);
46+
47+ switch (thing) {
48+ case "repos" :
49+ for (var v in arr) this .repos.arr.add (v["name" ]);
50+ break ;
51+ case "gists" :
52+ for (var v in arr) this .gists.arr.add (v["description" ]);
53+ break ;
54+ case "followers" :
55+ for (var v in arr) this .followers.arr.add (v["login" ]);
56+ break ;
57+ case "following" :
58+ for (var v in arr) this .following.arr.add (v["login" ]);
59+ break ;
60+ default : break ;
61+ }
62+ }
4263}
4364
4465void main (List <String > args) async {
45- var user = GthUser (args[0 ]);
46- await user.init ();
66+ var parser = ArgParser ();
67+ parser.addFlag ("repos" , abbr: "r" , defaultsTo: false );
68+ parser.addFlag ("gists" , abbr: "g" , defaultsTo: false );
69+ parser.addFlag ("followers" , abbr: "f" , defaultsTo: false );
70+ parser.addFlag ("following" , abbr: "F" , defaultsTo: false );
71+
72+ var opts = parser.parse (args);
73+ args = opts.rest;
74+
75+ if (args.isNotEmpty) {
76+ for (var arg in args) {
77+ var user = GthUser (arg);
78+ await user.init ();
79+
80+ print ("Name: ${user .name }" );
81+ print ("Bio: ${user .bio }" );
82+ print ("Link: ${user .link }" );
83+
84+ print ("Public repos: ${user .repos .count }" );
85+ if (opts["repos" ]) {
86+ await user.fetch ("repos" );
87+
88+ for (var i = 0 ; i < user.repos.arr.length; i++ )
89+ print (" | ${i + 1 }. ${user .repos .arr [i ]}" );
90+ }
91+
92+ print ("Public gists: ${user .gists .count }" );
93+ if (opts["gists" ]) {
94+ await user.fetch ("gists" );
95+
96+ for (var i = 0 ; i < user.gists.arr.length; i++ )
97+ print (" | ${i + 1 }. ${user .gists .arr [i ]}" );
98+ }
99+
100+ print ("Followers: ${user .followers .count }" );
101+ if (opts["followers" ]) {
102+ await user.fetch ("followers" );
103+
104+ for (var i = 0 ; i < user.followers.arr.length; i++ )
105+ print (" | ${i + 1 }. ${user .followers .arr [i ]}" );
106+ }
107+
108+ print ("Following: ${user .following .count }" );
109+ if (opts["following" ]) {
110+ await user.fetch ("following" );
111+
112+ for (var i = 0 ; i < user.following.arr.length; i++ )
113+ print (" | ${i + 1 }. ${user .following .arr [i ]}" );
114+ }
115+ }
116+ } else {
117+ print ("No arguments, nothing to do." );
118+ }
47119}
0 commit comments