Tasks.js
[gitlive] / Tasks.js
1
2 XObject = imports.XObject.XObject;
3 XMLHttpRequest = imports.XMLHttpRequest.XMLHttpRequest;
4 Netrc = imports.Netrc.Netrc;
5 Date = imports.Date.Date;
6 /**
7  *
8  * Tasks
9  *
10  *  Flow
11  *
12  *    Commit
13  *      => Tasks.notify(commit)
14  *
15  *
16  *
17  *
18  */
19
20 Tasks = {
21     
22     curTask : false,
23     commitRepo : false, // the DB version of repo info..
24     lastCommit : false,
25     
26     lastPrompt : false, // time when the system last prompted a confirmation that a task is being worked on.
27     
28     
29     notifyIdle : function()
30     {
31         
32     },
33     
34     notify : function(commit)
35     {
36         if (this.inQuery && this.inQuery > (new Date())) {
37             // ignore the notification.. we are currently checking what the current
38             // status is.
39             
40             // we need to handle a WTF situation where something below failed... so
41             
42             return; 
43         }
44         this.inQuery = (new Date()).add(Date.MINUTE, 5);
45         this.lastCommit = commit;
46         this.commitRepo = false;
47         this.curTask = false;
48         this.fetchTask();
49     },
50     
51     
52     
53     fetchTask: function()
54     {
55         // have we got the status in the last 15 mins..
56         // we should not need to get it again... - it's probably not changed.
57         if (this.curTask && !this.curTask.hasExpired()) {
58             this.fetchRepo();
59         }
60         _this = this;
61         // do the request to get the task..
62         var r = new XMLHttpRequest({
63             onreadystatechange : function() {
64                 print("Got result.");
65                 if (this.status != 4) {
66                     return;
67                 }
68                 
69                   
70                 var res = JSON.parse(this.responseText);
71                 
72                 //print(JSON.stringify(res,null,4))
73                 //print([ res.success , res.data.length ]);
74                 _this.curTask = (res.success && res.data.length) ? (new Task(res.data[0])) : false;
75                 print(JSON.stringify(_this.curTask,null,4));
76                 _this.fetchRepo();
77             }
78             
79         });
80         var netrc  = Netrc.forHost('git.roojs.com');
81         
82         r.open('GET',
83                "http://roojs.com/admin.php/Roo/cash_invoice_entry?_current_task=1"
84                ,true, netrc.login, netrc.password  );
85         //print("SEding request");        
86         r.send();
87         
88     },
89     
90     verifyCommit : function()
91     {
92         // using curTask + lastCommit decide what to do.
93         
94         //tests:::
95         this.verifyTaskTime();
96         this.verifyTaskProject();
97           
98         
99         this.inQuery = 0;
100         
101     },
102     
103     verifyTaskTime : function()
104     {
105         // check to see if current task is being planned for too long..
106         // you should only enter task, and allow it to span over an hour.
107         // if you do the whole day on a task, then it will need to verify with you every so often that you
108         // need to confirm that you are still working on it..
109         
110         /*
111           
112            Example:
113            
114             Start at 10am, marked working on it till 3pm.
115             
116             So:
117                 at 11am, the system will pop up a warning - are you still working on it?
118                 -> if yes pressed, then next warning will be at 11pm
119                 
120           
121          */
122         if (!lastPrompt) {
123             
124             this.promptForTask();
125             
126         }
127         
128         
129         
130         
131     },
132     
133     
134     fetchRepo: function()
135     {
136         
137         var repo = this.lastCommit.repo;
138         
139          _this = this;
140         var r = new XMLHttpRequest({
141             onreadystatechange : function() {
142                 print("Got result.");
143                 if (this.status != 4) {
144                     return;
145                 }
146                 
147                   
148                 var res = JSON.parse(this.responseText);
149                 
150                 print(JSON.stringify(res,null,4))
151                 //print([ res.success , res.data.length ]);
152                 _this.commitRepo = (res.success && res.data.length) ? res.data[0] : false;
153                 print(JSON.stringify(_this.commitRepo))
154                 _this.verifyCommit();
155             }
156             
157         });
158         var netrc  = Netrc.forHost('git.roojs.com');
159         
160         r.open('GET',
161                "http://roojs.com/admin.php/Roo/mtrack_repos?shortname=" + repo.name
162                ,true, netrc.login, netrc.password  );
163         //print("SEding request");        
164         r.send();
165         
166         
167     }
168     
169     
170     
171     
172     
173     
174 };
175
176
177
178
179
180 Task = XObject.define(
181     function(cfg) {
182         // cal parent?
183         if (typeof(cfg) != 'object') {
184             print("CFG not oboject?");
185             return;
186         } 
187         XObject.extend(this,cfg);
188  
189         // fix up the values.
190         this.action_datetime = Date.parseDate(this.action_dt,'Y-m-d H:i:s');
191       // print("ACT DT: " + this.action_dt);
192         
193     },
194     Object,
195     {
196         /**
197          * This is similar to the cash_invoice_entry data..
198          * 
199          */
200         action_dt: '', //"2012-11-23 11:00:00"
201         description: '', //"QA on new site"
202         qtyvalue: 0, //"2.25"
203         
204         hasExpired : function()
205         {
206             
207             var exp = this.action_datetime.add(Date.HOUR, this.qtyvalue);
208             return (new Date()) > exp;  
209             
210         }
211     }
212 );
213
214
215
216
217
218
219
220
221
222
223 //-------------- testing
224 Gtk = imports.gi.Gtk;
225 Gtk.init(Seed.argv);
226 Tasks.notify( { repo : imports.Scm.Repo.Repo.get('gitlive') } );
227 Gtk.main();