[Xfce4-commits] <eatmonkey:aria2-xml-rpc> Add connected/disconnected signals

Mike Massonnet noreply at xfce.org
Sat Jan 30 15:12:02 CET 2010


Updating branch refs/heads/aria2-xml-rpc
         to 4f5695d31b402ba00bbf7c6d263bce84050b6f9a (commit)
       from 04459dfb4480ab62495c368347adca374daeb196 (commit)

commit 4f5695d31b402ba00bbf7c6d263bce84050b6f9a
Author: Mike Massonnet <mmassonnet at xfce.org>
Date:   Sat Jan 30 00:12:24 2010 +0100

    Add connected/disconnected signals
    
    Still needs further work. Aria2 needs to do the connection/shutdown/etc
    in a thread so that it doesn't block the GUI because currently when the
    local server is killed it will recreated a new one and the sensitivity
    changes aren't visible.

 src/config.rb     |    4 ++++
 src/eat.rb        |    1 -
 src/eataria2.rb   |   10 ++++++++++
 src/eatmanager.rb |   30 +++++++++++++++++++++++++-----
 4 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/src/config.rb b/src/config.rb
new file mode 100644
index 0000000..6b399bb
--- /dev/null
+++ b/src/config.rb
@@ -0,0 +1,4 @@
+#!/usr/bin/ruby -w
+
+PACKAGE_STRING = "Eatmonkey 0.1.0"
+PACKAGE_URL = "http://goodies.xfce.org/projects/applications/eatmonkey"
diff --git a/src/eat.rb b/src/eat.rb
index f8bfb7a..01857f2 100755
--- a/src/eat.rb
+++ b/src/eat.rb
@@ -17,7 +17,6 @@ if __FILE__ == $0
 		aria2.use_custom_server(settings["xmlrpc-host"], settings["xmlrpc-port"], settings["xmlrpc-user"], settings["xmlrpc-passwd"])
 	end
 	aria2.connect
-	puts "Version: aria2 %s" % aria2.version
 
 	manager = Eat::Manager.new
 	manager.show
diff --git a/src/eataria2.rb b/src/eataria2.rb
index ddb19cb..ddad3ed 100644
--- a/src/eataria2.rb
+++ b/src/eataria2.rb
@@ -37,6 +37,10 @@ class Eat::Aria2 < GLib::Object
 
 	type_register
 
+	signal_new("connected", GLib::Signal::RUN_FIRST, nil,
+			nil)					# Return type: void
+	signal_new("disconnected", GLib::Signal::RUN_FIRST, nil,
+			nil)					# Return type: void
 	signal_new("download_status", GLib::Signal::RUN_FIRST, nil,
 			nil,					# Return type: void
 			String)					# Parameters: gid
@@ -50,6 +54,10 @@ class Eat::Aria2 < GLib::Object
 			nil,					# Return type: void
 			String)					# Parameters: gid
 
+	def signal_do_connected()
+	end
+	def signal_do_disconnected()
+	end
 	def signal_do_download_status(gid)
 	end
 	def signal_do_download_completed(gid)
@@ -151,6 +159,7 @@ class Eat::Aria2 < GLib::Object
 		rescue Errno::EPIPE => e
 			# Connection interrupted/timed out/server shutdown
 			return nil if !@is_connected
+			signal_emit("disconnected")
 			connect(true)
 			result = call(method, args)
 		rescue Errno::ECONNREFUSED => e
@@ -184,6 +193,7 @@ class Eat::Aria2 < GLib::Object
 			raise Exception.new("Unable to get an appropriate response to our request") if result == nil
 			@version = result["version"]
 			@is_connected = true
+			signal_emit("connected")
 		rescue Exception => e
 			@@client = nil
 			puts "Can't establish a connection"
diff --git a/src/eatmanager.rb b/src/eatmanager.rb
index bdca1ad..9ae67bf 100644
--- a/src/eatmanager.rb
+++ b/src/eatmanager.rb
@@ -3,6 +3,7 @@
 require "gtk2"
 require "pango"
 
+require "config"
 require "eataria2"
 require "eatsettings"
 
@@ -20,6 +21,8 @@ class Eat::Manager
 	def initialize()
 		# Setup aria2 listener
 		@aria2 = Eat::Aria2Listener.instance
+		@aria2.signal_connect("connected") { set_sensitive(true) }
+		@aria2.signal_connect("disconnected") { set_sensitive(false) }
 		@aria2.signal_connect("download_status") { |this, gid| update_row(gid) }
 		@aria2.signal_connect("download_completed") { |this, gid| update_row(gid) }
 		@aria2.signal_connect("download_removed") { |this, gid| update_row(gid) }
@@ -38,11 +41,16 @@ class Eat::Manager
 		@select_file = builder["select-file"]
 		@select_file_dialog = builder["filechooserdialog-new-download"]
 
+		@action_add = builder["action-add"]
+		@action_pause = builder["action-pause"]
+		@action_resume = builder["action-resume"]
+		@action_remove = builder["action-remove"]
+
 		# Setup actions
-		builder["action-add"].signal_connect("activate") { action_add }
-		builder["action-pause"].signal_connect("activate") { action_pause }
-		builder["action-resume"].signal_connect("activate") { action_resume }
-		builder["action-remove"].signal_connect("activate") { action_remove }
+		@action_add.signal_connect("activate") { action_add }
+		@action_pause.signal_connect("activate") { action_pause }
+		@action_resume.signal_connect("activate") { action_resume }
+		@action_remove.signal_connect("activate") { action_remove }
 		builder["action-settings"].signal_connect("activate") { show_settings_dialog }
 		builder["action-quit"].signal_connect("activate") { action_quit }
 		builder["action-about"].signal_connect("activate") { show_about_dialog }
@@ -65,7 +73,7 @@ class Eat::Manager
 		# Setup statusbar
 		@statuscontext = { "main" => @statusbar.get_context_id("main context"),
 				"menu" => @statusbar.get_context_id("menu context") }
-		@statusbar.push(@statuscontext["main"], "Eatmonkey 0.1.0 - aria2 #{@aria2.version}")
+		@statusbar.push(@statuscontext["main"], "#{PACKAGE_STRING} - aria2 #{@aria2.version}")
 
 #		builder["menuitem-add"].signal_connect("select") do
 #			@statusbar.push(@statuscontext["menu"], "Add a new download")
@@ -74,6 +82,9 @@ class Eat::Manager
 #			@statusbar.pop(@statuscontext["menu"])
 #		end
 
+		# Set initial sensitivity
+		set_sensitive(@aria2.is_connected)
+
 		# Setup new download dialog
 		file_filter = builder["filefilter-new-download"]
 		file_filter.name = "Torrents, Metalinks"
@@ -92,6 +103,15 @@ class Eat::Manager
 		@window.show_all
 	end
 
+	def set_sensitive(sensitive)
+		@treeview.set_sensitive(sensitive)
+		@action_add.set_sensitive(sensitive)
+		@action_pause.set_sensitive(sensitive)
+		@action_resume.set_sensitive(sensitive)
+		@action_remove.set_sensitive(sensitive)
+		@statusbar.push(@statuscontext["main"], "#{PACKAGE_STRING} - aria2 #{@aria2.version}")
+	end
+
 	def update_row(gid)
 		row_iter = nil
 		gid_i = gid.to_i



More information about the Xfce4-commits mailing list