NewBranch.bjs
[gitlive] / RooProject.vala
1
2
3 static RooProject  _RooProject;
4 public class RooProject  : Object 
5 {
6         static Gee.ArrayList<RooProject> _projects;
7         static int loadcount = 0;
8         const string roourl = "https://roojs.com/admin.php/Roo";  
9         
10         
11         public static RooProject singleton()
12     {
13        if (_RooProject == null) {
14             _RooProject = new RooProject();
15                 RooProject.loadcount = 0;
16             RooProject.loadProjects();
17
18         }
19         return _RooProject;
20     }
21         
22         public string  id; // not really important that they are numbers..
23         public string code;
24         public string name;
25         public string type;
26
27         
28         public static Gee.ArrayList<RooProject> projects()
29         {
30                 RooProject.singleton();
31
32                 return RooProject._projects;
33         }
34         
35         public static  RooProject addProject(Json.Object t)
36         {
37                 RooProject.singleton(); // init...
38                 
39                 var add = new RooProject();
40                 add.id = t.get_string_member("id");
41                 add.name = t.get_string_member("name");
42                 add.type = t.get_string_member("type");
43                 add.code = t.get_string_member("code");                                         
44                 RooProject._projects.add(add);
45                 GLib.debug("ADD project  %s : %s : %s", add.id, add.code, add.name);
46                 return add;
47         }
48
49         static void reloadProjects()  /// has to be called on singleton..
50         {
51                 RooProject.loadcount = 0;
52                 RooProject.singleton();
53                 if (RooProject.loadcount == 0 ) {
54                         RooProject.loadProjects();
55                 }
56         }
57         
58         static  void loadProjects() // called from singleton...
59         {
60                 RooProject._projects = new Gee.ArrayList<RooProject>();
61          
62         RooProject.loadcount ++;        
63                 var table = new GLib.HashTable<string, string>(str_hash, str_equal);
64          
65                 table.insert("query[project_filter]","P,N,U");
66                 table.insert("limit","200");
67                 table.insert("sort","name");
68                 table.insert("dir","ASC");
69
70                 var params = Soup.Form.encode_hash(table);
71                 
72                 var url = "%s/%s?%s" . printf(roourl, "core_project", 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                                 RooProject.addProject(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         
117         
118 }
119