RooProject.vala
[gitlive] / RooProject.vala
1 /**
2 This a mostly a static class that manages an array of it'self...
3
4 */
5
6 static RooProject  _RooProject;
7 public class RooProject  : Object 
8 {
9         static Gee.ArrayList<RooProject> _projects;
10         static int loadcount = 0;
11         const string roourl = "https://roojs.com/admin.php/Roo";  
12         
13         
14         static RooProject singleton()
15     {
16        if (_RooProject == null) {
17             _RooProject = new RooProject();
18                 RooProject.loadcount = 0;
19             RooProject.loadProjects();
20
21         }
22         return _RooProject;
23     }
24         
25         public string  id; // not really important that they are numbers..
26         public string code;
27         public string name;
28         public string type;
29
30         
31         public static Gee.ArrayList<RooProject> projects()
32         {
33                 RooProject.singleton();
34
35                 return RooProject._projects;
36         }
37         
38         
39         public static  RooProject? getProjectByRepo(GitRepo repo)
40         {
41                 RooProject.singleton();
42                 
43                 // fixme -- needs to get from rep list..
44                 var rt = RooTicket.singleton();         
45                 if (rt.repos.size < 1) {
46                         rt.loadRepos();
47                 }
48                  
49                 
50                 var pid = "";
51                 foreach(var roo_repo in rt.repos) {
52                         if (roo_repo.shortname == repo.name) {
53                                 pid = roo_repo.project_id;
54                                 break;
55                         }
56                 }
57                 if (pid == "") {
58                         GLib.debug("getProjectByRepo: repo has no project");            
59                         return null;
60                 }
61                 // get project by id...
62                 foreach(var roo_project in RooProject.projects()) {
63                         if (roo_project.id == pid) {
64                                 GLib.debug("getProjectByRepo: project_id = %s", pid);
65                                 return roo_project;
66                         }
67                 }
68                 GLib.debug("getProjectByRepo: can not find project");                           
69                 return null;
70         
71         }
72         
73         
74         public static  RooProject addProject(Json.Object t)
75         {
76                 RooProject.singleton(); // init...
77                 
78                 var add = new RooProject();
79                 add.id = t.get_string_member("id");
80                 add.name = t.get_string_member("name");
81                 add.type = t.get_string_member("type");
82                 add.code = t.get_string_member("code");                                         
83                 RooProject._projects.add(add);
84                 GLib.debug("ADD project  %s : %s : %s", add.id, add.code, add.name);
85                 return add;
86         }
87
88         public static void reload()  /// has to be called on singleton..
89         {
90                 RooProject.loadcount = 0;
91                 RooProject.singleton();
92                 if (RooProject.loadcount == 0 ) {
93                         RooProject.loadProjects();
94                 }
95         }
96         
97         static  void loadProjects() // called from singleton...
98         {
99                 RooProject._projects = new Gee.ArrayList<RooProject>();
100          
101         RooProject.loadcount ++;        
102                 var table = new GLib.HashTable<string, string>(str_hash, str_equal);
103          
104                 table.insert("query[project_filter]","P,N,U");
105                 table.insert("limit","200");
106                 table.insert("sort","name");
107                 table.insert("dir","ASC");
108
109                 var params = Soup.Form.encode_hash(table);
110                 
111                 var url = "%s/%s?%s" . printf(roourl, "core_project", params);
112                 
113                 GLib.debug("request %s", url);
114                 
115                 var session = new Soup.Session ();
116                 session.timeout = 0;
117                 var message = new Soup.Message ("GET", url);
118                 
119                 
120                 RooTicket.setAuth(message);
121                 
122                 session.send_message (message);
123                 
124                 var data = (string) message.response_body.flatten().data;
125                 //GLib.debug("got %s", data);
126                 try {
127                         var parser = new Json.Parser ();
128                         parser.load_from_data (data, -1);
129
130                         var response = parser.get_root().get_object();
131                         var status = response.get_boolean_member("success");
132                 
133                         if(!status){
134                                 GLib.error(response.get_string_member("errorMsg"));
135                                 return;
136                         }
137                         var rd = response.get_array_member ("data");
138                         
139                         // got a valid result...
140
141                         for(var i = 0; i < rd.get_length(); i++) {
142                                 RooProject.addProject(rd.get_object_element(i));
143                         }
144                          
145                 
146                 } catch (Error e) {
147                         GLib.error(e.message);
148                         return;
149                 }
150                 
151         }
152          
153         
154         
155         
156         
157 }
158