GitMonitor.vala
[gitlive] / StatusIcon.vala
index aa37ef0..6419910 100644 (file)
@@ -39,7 +39,8 @@ public class StatusIconA : StatusIcon {
 
     public bool paused = false;
     public static StatusIconA statusicon;
-     
+    
     public StatusIconA() {
         
         statusicon = this;
@@ -56,7 +57,7 @@ public class StatusIconA : StatusIcon {
         menu.ref();       
                this.button_press_event.connect( ( ev ) =>{
              print("button press event called\n");
-             
             menu.show_all();
             
             if (this.paused) {
@@ -82,7 +83,7 @@ public class StatusIconA : StatusIcon {
            });
        this.popup_menu.connect( (  button,   time) =>{
        //this.button_press_event.connect( (  ) =>{
-               
             //print(Array.prototype.slice.call(arguments).join(','));
             print("menu activiate called\n");
             //var menu = this.get('menu');
@@ -247,13 +248,14 @@ public class StatusIconA : StatusIcon {
                 this.accel_group = null;
                 
                 this.activate.connect( () => {
+                    
+                    this.pullAll();
+                    /*
                     GitMonitor.gitmonitor.stop();
                     var tr = GitRepo.list();
                     
                     
                     
-                    
-                    
                     for (var i= 0; i< tr.length;i++) {
                         statusicon.set_from_stock( 
                                i%2 == 0 ?  Gtk.Stock.FULLSCREEN : Gtk.Stock.LEAVE_FULLSCREEN );
@@ -288,6 +290,7 @@ public class StatusIconA : StatusIcon {
                         }        
 
                     } 
+                    */
                            
                            
                 });
@@ -299,61 +302,69 @@ public class StatusIconA : StatusIcon {
                 GitMonitor.gitmonitor.stop();
                     
                 
-                var total = tr.length;
-                
+               this.total = tr.length;
+                this.has_error = 0;
+                this.pull_all_error_message = "";
                 for (var i= 0; i< tr.length;i++) {
                     statusicon.set_from_stock( 
                                i%2 == 0 ?  Gtk.Stock.FULLSCREEN : Gtk.Stock.LEAVE_FULLSCREEN );
                             
                     var repo = tr.index(i);
-                    //if (!repo.autocommit()) {
-                        //??? should we ignore ones not on autocommit..
-                    //    continue;
-                    //}
-                    //try {
-                        statusicon.set_tooltip_text("pull: " + repo.name);
-                        var str = "";
-                        repo.pull_async.begin((obj, syncres) => {
-                        
-                               var res = fetch_webpage.end(syncres);
-                               total--;`
-                               if (!Regex.match_simple ("Already up-to-date", str) ) {
-                                        
-                               
-                                               str += str.length > 0 ? "\n" : "";
-                                               str += "Updated: " +repo.name + "\n" + res +"\n";
-                                       }
-                                       if (total < 1) {
-                                       var notification = new Notify.Notification( 
-                                            "Pull completed ",
-                                            str,
-                                            "dialog-information"
-                                       );
-                                       notification.set_timeout(20);
-                                       notification.show();
-                                       statusicon.set_tooltip_text("Gitlive");
-                             
-                            
-                                               GitMonitor.gitmonitor.start();
-                               }
-                        });
-                                // do not care if it's already in sycn..
-                        
+                    //repo.ref();
+                    //this.ref();
                     
-                       
-                                 
-                    //} catch(Error e) {
-                   //     print("notification or push errror- probably to many in queue..");
-                    //    statusicon.set_from_stock( Gtk.Stock.MEDIA_RECORD );
-                    //    print(e.message);
+                    statusicon.set_tooltip_text("pull: " + repo.name);
+                                       
+                    repo.pull_async(this.pullAllCallback); 
+                                // do not care if it's already in sycn..
                         
-                   // }        
+                     
 
                 } 
 
                   
         
         
+               }
+               uint total = 0; 
+                       uint has_error = 0;
+                       string pull_all_error_message = "";
+               
+               void pullAllCallback(GitRepo repo, int err, string res)
+               {
+                       this.total--;
+                       
+                       if (err > 0) {
+                               this.has_error = 1;
+                               this.pull_all_error_message += this.pull_all_error_message.length > 0 ? "\n" : "";
+                               this.pull_all_error_message += "Error Pulling " + repo.name +"\n" + res;
+                       }
+                       
+                       if (!Regex.match_simple ("Already up-to-date", res) ) {
+                       var notification = new Notify.Notification( 
+                         "Pull completed ",
+                          "Updated: " +repo.name + "\n" + res +"\n",
+                            "dialog-information"
+                    );
+                    notification.set_timeout(20);
+                               notification.show();
+                       
+                       }
+                       if (this.total < 1) {
+                               if (this.has_error > 0) {
+                                       GitMonitor.gitmonitor.pauseError(this.pull_all_error_message);
+                                       return;
+                               }
+                       
+                               statusicon.set_tooltip_text("Gitlive");
+                  
+                               GitMonitor.gitmonitor.start();
+                               //this.unref();
+                               //repo.unref();
+                       }
+                       
                }
         
             
@@ -393,7 +404,7 @@ public class StatusIconA : StatusIcon {
                 this.accel_group = null;
                 
                 this.activate.connect( () => {
-                 //var ret = imports.Clones.Clones.show();
+                      Clones.singleton().show();
                 });
             }