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