RooRepo.vala
[gitlive] / RooRepo.vala
1
2
3 static RooRepo _RooRepo ;
4
5 public class RooRepo : Object 
6 {
7  
8         const string roourl = "https://roojs.com/admin.php/Roo";  
9
10         public string  id; // not really important that they are numbers..
11         public string project_id;
12         public string description;
13         public string shortname;
14         
15         
16         static RooRepo init()
17         {
18                 if (_RooRepo == null) {
19                         _RooRepo = new RooRepo();
20                         RooRepo.load();
21                 }
22                 return _RooRepo;
23         }
24         
25         static Gee.ArrayList<RooRepo> _repos; // only available for singletonn.         
26         static int loadcount = 0;
27         public static  Gee.ArrayList<RooRepo> repos() {
28                 RooRepo.init();
29                 return RooRepo._repos;
30         }
31         
32         static RooRepo add(Json.Object t)
33         {
34                 var add = new RooRepo();
35                 add.id = t.get_string_member("id");
36                 add.shortname = t.get_string_member("shortname");
37                 add.description = t.get_string_member("description");           
38                 add.project_id = t.get_string_member("project_id");                                             
39                 RooRepo._repos.add(add);
40                 GLib.debug("ADD project  %s : %s : %s", add.id, add.shortname, add.project_id);
41                 return add;
42         }
43         static void load() // only called from above
44         {
45
46                 RooRepo._repos = new Gee.ArrayList<RooRepo>();
47          
48                 
49                 var table = new GLib.HashTable<string, string>(str_hash, str_equal);
50          
51
52                 table.insert("limit","200");
53                 table.insert("sort","shortname");
54                 table.insert("dir","ASC");
55
56                 var params = Soup.Form.encode_hash(table);
57                 
58                 var url = "%s/%s?%s" . printf(roourl, "mtrack_repos", params);
59                 
60                 GLib.debug("request %s", url);
61                 
62                 var session = new Soup.Session ();
63                 session.timeout = 0;
64                 var message = new Soup.Message ("GET", url);
65                 
66                 
67                 RooTicket.setAuth(message);
68                 
69                 session.send_message (message);
70                 
71                 var data = (string) message.response_body.flatten().data;
72                 //GLib.debug("got %s", data);
73                 try {
74                         var parser = new Json.Parser ();
75                         parser.load_from_data (data, -1);
76
77                         var response = parser.get_root().get_object();
78                         var status = response.get_boolean_member("success");
79                 
80                         if(!status){
81                                 GLib.error(response.get_string_member("errorMsg"));
82                                 return;
83                         }
84                         var rd = response.get_array_member ("data");
85                         
86                         // got a valid result...
87  
88                         for(var i = 0; i < rd.get_length(); i++) {
89                                 RooRepo.add(rd.get_object_element(i));
90                         }
91                          
92                 
93                 } catch (Error e) {
94                         GLib.error(e.message);
95                         return;
96                 }
97                 
98         }
99
100
101
102 }