[baobab/wip/vala] Start to implement "Scan remote dir"



commit b8e2465e11a1502e61ec4671d65bf9c3d5ce4217
Author: Paolo Borelli <pborelli gnome org>
Date:   Sat Feb 4 00:09:56 2012 +0100

    Start to implement "Scan remote dir"
    
    Instead of reimplementing it, spawn nautilus-connect-server and grab the
    output uri. The actual scanning does not work yet.

 src/Makefile.am                |    1 +
 src/baobab-connect-server.vala |   59 ++++++++++++++++++++++++++++++++++++++++
 src/baobab-window.vala         |   13 +++++++-
 3 files changed, 71 insertions(+), 2 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 0aa7da2..9daab6a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -27,6 +27,7 @@ baobab_SOURCES = \
 	baobab-cellrenderers.vala	\
 	baobab-application.vala		\
 	baobab-window.vala		\
+	baobab-connect-server.vala	\
 	main.vala
 
 AM_CFLAGS = \
diff --git a/src/baobab-connect-server.vala b/src/baobab-connect-server.vala
new file mode 100644
index 0000000..554e1a2
--- /dev/null
+++ b/src/baobab-connect-server.vala
@@ -0,0 +1,59 @@
+namespace Baobab {
+	class ConnectServer : Object {
+		string[] argv = {
+			"nautilus-connect-server",
+			"--print-uri"
+		};
+
+		public signal void selected(string? uri);
+
+		void on_child_watch (Pid pid, int status) {
+			Process.close_pid (pid);
+		}
+
+		bool on_out_watch (IOChannel channel, IOCondition cond) {
+			if (IOCondition.HUP in cond) {
+				selected(null);
+				return false;
+			}
+
+			try {
+				string uri;
+				size_t len;
+				channel.read_line(out uri, out len, null);
+				selected(uri);
+			} catch {
+				selected(null);
+			}
+
+			return true;
+		}
+
+		public void show () {
+
+			Pid pid;
+			int out_fd;
+
+			try {
+				Process.spawn_async_with_pipes (
+				    null,
+				    argv,
+				    null, // envp
+				    SpawnFlags.SEARCH_PATH | SpawnFlags.STDERR_TO_DEV_NULL,
+				    null, // child_setup
+				    out pid,
+				    null, // stdin
+				    out out_fd,
+				    null // stderr
+				);
+			} catch (SpawnError e) {
+				warning ("Failed to run nautilus-connect-server: %s", e.message);
+			}
+
+			var out_channel = new IOChannel.unix_new (out_fd);
+			out_channel.add_watch (IOCondition.IN | IOCondition.HUP, on_out_watch);
+
+			ChildWatch.add (pid, on_child_watch);
+		}
+	}
+}
diff --git a/src/baobab-window.vala b/src/baobab-window.vala
index a79d7d9..6f8a1bd 100644
--- a/src/baobab-window.vala
+++ b/src/baobab-window.vala
@@ -138,7 +138,7 @@ namespace Baobab {
 
 			file_chooser.set_modal (true);
 
-			file_chooser.response.connect((response) => {
+			file_chooser.response.connect ((response) => {
 				if (response == Gtk.ResponseType.ACCEPT) {
 					var dir = file_chooser.get_file ();
 					scan_directory (dir);
@@ -150,7 +150,16 @@ namespace Baobab {
 		}
 
 		void on_scan_remote_activate () {
-			print ("sr\n");
+			var connect_server = new ConnectServer ();
+
+			connect_server.selected.connect ((uri) => {
+				if (uri != null) {
+					var dir = File.new_for_uri (uri);
+					scan_directory (dir);
+				}
+			});
+
+			connect_server.show ();
 		}
 
 		void on_stop_activate () {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]