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