Spawn.vala
[gitlive] / Spawn.vala
index 8b081b4..32c514a 100644 (file)
@@ -397,29 +397,42 @@ public class Spawn : Object
        // print("prop: " + prop);
         var _this = this;
         string str_return;
-       
+        
         //print(JSON.stringify(ch, null,4));
         while (true) {
-           
-            var status = ch.read_line( str_return, len, term_pos );
+            string buffer;
+            size_t term_pos;
+            size_t len;
+            IOStatus status;
+            try {
+                status = ch.read_line( out buffer,  out len,  out term_pos );
+            } catch (Error e) {
+                //FIXme
+                break; // ??
+                
+            }
             // print('status: '  +JSON.stringify(status));
             // print(JSON.stringify(x));
              switch(status) {
                 case GLib.IOStatus.NORMAL:
                
                     //write(fn, x.str);
-                    if (this.listeners[prop]) {
-                        this.listeners[prop].call(this, x.str_return);
+                    //if (this.listeners[prop]) {
+                    //    this.listeners[prop].call(this, x.str_return);
+                    //}
+                    if (ch == this.out_ch) {
+                        this.output += buffer;
+                    } else {
+                        this.stderr += buffer;
                     }
-                    _this[prop] += x.str_return;
-                    if (_this.debug) {
-                        print(prop + ':' + x.str_return.replace(/\n/, ''));
+                    //_this[prop] += x.str_return;
+                    if (this.cfg.debug) {
+                        stdout.printf("%s : %s", prop , str_return);
                     }
-                    if (this.async) {
+                    if (this.cfg.async) {
                         try {
-                            if (imports.gi.Gtk.events_pending()) {
-                                imports.gi.Gtk.main_iteration();
+                            if ( Gtk.events_pending()) {
+                                 Gtk.main_iteration();
                             }
                         } catch(Error e) {