X-Git-Url: http://git.roojs.org/?p=gitlive;a=blobdiff_plain;f=RooTicket.vala;h=d32ad47802fb93d3148a7abb989f65ddf103e591;hp=5ddbeae1b2afd019067bf6bddc9f5e2fef344ce4;hb=d33736b91e5bdee2a751dce3d4199d22244ca786;hpb=0c10a808ad544684bdda587cb45daeed6cc039b9 diff --git a/RooTicket.vala b/RooTicket.vala index 5ddbeae1..d32ad478 100644 --- a/RooTicket.vala +++ b/RooTicket.vala @@ -1,26 +1,67 @@ -/** +/** code to fetch ticket info... */ + + +public class RooOption : Object +{ + + public string id; // not really important that they are numbers.. + public string name; + public string display_name; + + public RooOption (string id, string name, string display_name) + { + this.id = id; + this.name = name; + this.display_name = name; + } + +} + + static RooTicket _RooTicket; public class RooTicket : Object { - - const string baseurl = "https://roojs.com/admin.php/Roo/mtrack_ticket"; - + + public enum Who { + ANYBODY, + ME + } + public enum Status { + ALL, + ACTIVE + } + + //const string baseurl = "https://roojs.com/admin.php/Ro/mtrack_ticket"; + const string roourl = "https://roojs.com/admin.php/Roo"; public static RooTicket singleton() { if (_RooTicket == null) { _RooTicket = new RooTicket(); _RooTicket.tickets = new Gee.ArrayList(); + + + } return _RooTicket; } public Gee.ArrayList tickets; // only available for singletonn. + + + + public Gee.ArrayList milestones; + public Gee.ArrayList priorities; + public Gee.ArrayList serverities; + public Gee.ArrayList classifications; + public Gee.ArrayList developers; + + public string username = ""; // only available for singletonn. public string password = ""; // only available for singletonn. @@ -52,6 +93,20 @@ public class RooTicket : Object } + public Gee.ArrayList readJsonArray(Json.Array a) + { + var ret = new Gee.ArrayList(); + for(var i = 0; i < a.get_length(); i++) { + var t = a.get_object_element(i); + ret.add(new RooOption( + t.get_string_member("id"), + t.get_string_member("name"), + t.get_string_member("display_name") + )); + } + return ret; + + } public RooTicket addTicket(Json.Object t) { @@ -64,6 +119,22 @@ public class RooTicket : Object GLib.debug("ADD ticket %s : %s : %s", add.id, add.summary, add.project_id_name); return add; } + + + + + + public static RooTicket fakeTicket() + { + var t = new RooTicket(); + t.id = "-1"; + t.summary = ""; + t.description = ""; + t.project_id_name = ""; + RooTicket.singleton().tickets.add(t); + return t; + } + public RooTicket? getById(string id) { @@ -72,69 +143,81 @@ public class RooTicket : Object return t; } } + if (id == "-1") { + return RooTicket.fakeTicket(); + } + return this.loadTicket(id); } - public RooTicket? loadTicket(string id) - { - - var table = new GLib.HashTable(str_hash, str_equal); - table.insert("_id",id); - - var params = Soup.Form.encode_hash(table); - var url = "%s?%s" . printf(baseurl, params); - GLib.debug("request %s", url); - - var session = new Soup.Session (); - session.timeout = 0; - var message = new Soup.Message ("GET", url); - RooTicket.setAuth(message); - session.send_message (message); - - - var data = (string) message.response_body.flatten().data; - GLib.debug("got %s", data); - try { - var parser = new Json.Parser (); - parser.load_from_data (data, -1); - - var response = parser.get_root().get_object(); - var status = response.get_boolean_member("success"); - - if(!status){ - GLib.error(response.get_string_member("errorMsg")); - return null; - } - var rd = response.get_object_member ("data"); - - return this.addTicket(rd); - - - - } catch (Error e) { - GLib.error(e.message); - return null; - } - } + public RooTicket? loadTicket(string id) + { + + var table = new GLib.HashTable(str_hash, str_equal); + table.insert("_id",id); + + var params = Soup.Form.encode_hash(table); + var url = "%s/%s?%s" . printf(roourl, "mtrack_ticket", params); + GLib.debug("request %s", url); + + var session = new Soup.Session (); + session.timeout = 0; + var message = new Soup.Message ("GET", url); + RooTicket.setAuth(message); + session.send_message (message); + + + var data = (string) message.response_body.flatten().data; + GLib.debug("got %s", data); + try { + var parser = new Json.Parser (); + parser.load_from_data (data, -1); + + var response = parser.get_root().get_object(); + var status = response.get_boolean_member("success"); + + if(!status){ + GLib.error(response.get_string_member("errorMsg")); + return null; + } + var rd = response.get_object_member ("data"); + + return this.addTicket(rd); + + + + } catch (Error e) { + GLib.error(e.message); + return null; + } + } - public void loadTickets() + public void loadTickets(string project_id, Who who, Status status) { RooTicket.singleton().tickets = new Gee.ArrayList(); var table = new GLib.HashTable(str_hash, str_equal); - - table.insert("query[viewtype]","me"); - table.insert("limit","999"); + + table.insert("_developer", who.to_string().down().substring(15)); + + table.insert("query[viewtype]", status.to_string().down().substring(18)); + + table.insert("limit","200"); table.insert("sort","summary"); table.insert("dir","ASC"); + + if (project_id != "") { + table.insert("project_id",project_id); + } + var params = Soup.Form.encode_hash(table); - var url = "%s?%s" . printf(baseurl, params); + var url = "%s/%s?%s" . printf(roourl, "mtrack_ticket", params); GLib.debug("request %s", url); @@ -148,15 +231,15 @@ public class RooTicket : Object session.send_message (message); var data = (string) message.response_body.flatten().data; - GLib.debug("got %s", data); + //GLib.debug("got %s", data); try { var parser = new Json.Parser (); parser.load_from_data (data, -1); var response = parser.get_root().get_object(); - var status = response.get_boolean_member("success"); + var success = response.get_boolean_member("success"); - if(!status){ + if(!success){ GLib.error(response.get_string_member("errorMsg")); return; } @@ -176,6 +259,75 @@ public class RooTicket : Object } + + public void loadProjectOptions(string pid) + { + var rt = RooTicket.singleton(); + rt.milestones = new Gee.ArrayList(); + rt.priorities = new Gee.ArrayList(); + rt.serverities = new Gee.ArrayList(); + rt.classifications = new Gee.ArrayList(); + rt.developers = new Gee.ArrayList(); + + if (pid == "") { + return; + } + + + + var table = new GLib.HashTable(str_hash, str_equal); + + table.insert("_options_for",pid); + + var params = Soup.Form.encode_hash(table); + + var url = "%s/%s?%s" . printf(roourl, "mtrack_ticket", params); + + GLib.debug("request %s", url); + + var session = new Soup.Session (); + session.timeout = 0; + var message = new Soup.Message ("GET", url); + + + RooTicket.setAuth(message); + + session.send_message (message); + + var data = (string) message.response_body.flatten().data; + //GLib.debug("got %s", data); + try { + var parser = new Json.Parser (); + parser.load_from_data (data, -1); + + var response = parser.get_root().get_object(); + var status = response.get_boolean_member("success"); + + if(!status){ + GLib.error(response.get_string_member("errorMsg")); + return; + } + var rd = response.get_object_member ("data"); + + rt.milestones = this.readJsonArray( rd.get_array_member("milestone")); + rt.priorities = this.readJsonArray( rd.get_array_member("priority")); + rt.serverities = this.readJsonArray( rd.get_array_member("severity")); + rt.classifications = this.readJsonArray( rd.get_array_member("classification")); + rt.developers = this.readJsonArray( rd.get_array_member("developer")); + + + + + // got a valid result... + + + } catch (Error e) { + GLib.error(e.message); + return; + } + + } + public static void setAuth(Soup.Message message) { var rs = RooTicket.singleton(); @@ -207,50 +359,111 @@ public class RooTicket : Object } - public void close(string commits) - { - var table = new GLib.HashTable(str_hash, str_equal); - table.insert("id",id); - table.insert("status_name","resolved"); - table.insert("reason","fixed by Commits: %s".printf(commits)); - var params = Soup.Form.encode_hash(table); - - GLib.debug("request POST %s / %s", baseurl, id); - - var session = new Soup.Session (); - session.timeout = 0; - var message = new Soup.Message ("POST", baseurl); - RooTicket.setAuth(message); - - message.set_request ("application/x-www-form-urlencoded", Soup.MemoryUse.STATIC, params.data); - session.send_message (message); - - - var data = (string) message.response_body.flatten().data; - GLib.debug("got %s", data); - try { - var parser = new Json.Parser (); - parser.load_from_data (data, -1); - - var response = parser.get_root().get_object(); - var status = response.get_boolean_member("success"); - - if(!status){ - GLib.error(response.get_string_member("errorMsg")); - return ; - } - - - - - } catch (Error e) { - GLib.error(e.message); - return ; - } - - } + public void close(string commits) + { + if (this.id == "-1") { + return; + } + var table = new GLib.HashTable(str_hash, str_equal); + table.insert("id",id); + table.insert("status_name","resolved"); + table.insert("reason","fixed by Commits: %s".printf(commits)); + var params = Soup.Form.encode_hash(table); + GLib.debug("request POST %s / %s", roourl, id); + var session = new Soup.Session (); + session.timeout = 0; + var message = new Soup.Message ("POST", roourl + "/mtrack_ticket"); + RooTicket.setAuth(message); + + message.set_request ("application/x-www-form-urlencoded", Soup.MemoryUse.STATIC, params.data); + session.send_message (message); + + + var data = (string) message.response_body.flatten().data; + GLib.debug("got %s", data); + try { + var parser = new Json.Parser (); + parser.load_from_data (data, -1); + + var response = parser.get_root().get_object(); + var status = response.get_boolean_member("success"); + + if(!status){ + GLib.error(response.get_string_member("errorMsg")); + return ; + } + + + + + } catch (Error e) { + GLib.error(e.message); + return ; + } + + } + public string createTicket( + string project_id, + string milestone_id, + string priority_id, + string severity_id, + string classification_id, + string developer_id, + string summary, + string description + ) + { + + var table = new GLib.HashTable(str_hash, str_equal); + + table.insert("project_id", project_id); + table.insert("milestone_id", milestone_id); + table.insert("priority_id", priority_id); + table.insert("severity_id", classification_id); + table.insert("classification_id", classification_id); + table.insert("developer_id", developer_id); + table.insert("summary", summary); + table.insert("description", description); + + var params = Soup.Form.encode_hash(table); + + GLib.debug("request POST %s / %s", roourl, id); + + var session = new Soup.Session (); + session.timeout = 0; + var message = new Soup.Message ("POST", roourl + "/mtrack_ticket"); + RooTicket.setAuth(message); + + message.set_request ("application/x-www-form-urlencoded", Soup.MemoryUse.STATIC, params.data); + session.send_message (message); + + + var data = (string) message.response_body.flatten().data; + GLib.debug("got %s", data); + try { + var parser = new Json.Parser (); + parser.load_from_data (data, -1); + + var response = parser.get_root().get_object(); + var status = response.get_boolean_member("success"); + + if(!status){ + GLib.error(response.get_string_member("errorMsg")); + return "" ; + } + var rd = response.get_object_member ("data"); + return rd.get_string_member("id"); + + + + } catch (Error e) { + GLib.error(e.message); + return ""; + } + + } - - } \ No newline at end of file +} +