Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Lewis <jtl1728@rit.edu>2010-01-12 21:57:55 (GMT)
committer Justin Lewis <jtl1728@rit.edu>2010-01-12 21:57:55 (GMT)
commit494db1554b59a43c1e886fa4eca1da73dc6372b2 (patch)
tree88e013082f3f1bd244036ed80dd121aa662e440a
parent537cb64fa14b682bea94d949ee6b4db7866c6631 (diff)
Fixed hang when server is offline.
Initialize gui sooner, then added signal to interrupt the network connection when the server is not responding after 10 seconds.
-rw-r--r--FileShare.activity/FileShareActivity.py51
-rw-r--r--FileShare.activity/GuiView.py15
-rw-r--r--FileShare.activity/MyExceptions.py1
3 files changed, 42 insertions, 25 deletions
diff --git a/FileShare.activity/FileShareActivity.py b/FileShare.activity/FileShareActivity.py
index dd83102..68bbb6f 100644
--- a/FileShare.activity/FileShareActivity.py
+++ b/FileShare.activity/FileShareActivity.py
@@ -33,14 +33,14 @@ from sugar import network
from sugar import profile
from GuiView import GuiView
-from MyExceptions import InShareException, FileUploadFailure, ServerRequestFailure, NoFreeTubes
+from MyExceptions import InShareException, FileUploadFailure, ServerRequestFailure, NoFreeTubes, TimeOut
from TubeSpeak import TubeSpeak
import FileInfo
from hashlib import sha1
import urllib, urllib2, MultipartPostHandler, httplib
-import threading
+import threading, signal
import logging
_logger = logging.getLogger('fileshare-activity')
@@ -106,6 +106,18 @@ class FileShareActivity(Activity):
self._user_nick = profile.get_nick_name()
self._user_permissions = 0
+ # INITIALIZE GUI
+ ################
+ self.set_title('File Share')
+
+ # Create Toolbox
+ toolbox = ActivityToolbox(self)
+ self.set_toolbox(toolbox)
+ toolbox.show()
+
+ # Set gui display object
+ self.disp = GuiView(self)
+
jabber_serv = None
#Need to check if on 82 or higher
if hasattr(prof, 'jabber_server'):
@@ -121,13 +133,12 @@ class FileShareActivity(Activity):
self.server_port= 14623
self.s_version = 0
+
+ self.disp.guiHandler.show_throbber(True, _("Please Wait... Searching for Server"))
if self.isServer and self.check_for_server() and self._server_mode():
self._mode = "SERVER"
self.isServer = False
- # Build and display gui
- self._buildGui()
-
if self._mode == 'P2P':
# Connect to shared and join calls
self.connect('shared', self._shared_cb)
@@ -153,12 +164,25 @@ class FileShareActivity(Activity):
self.disp.guiHandler.show_throbber(True, _("Please Wait... Requesting file list from server"))
threading.Thread(target=call).start()
+ # Build table and display the gui
+ self.disp.build_table()
+ self.set_canvas(self.disp)
+ self.show_all()
+
def check_for_server(self):
+
+ def raise_timeout(signum, frame):
+ raise TimeOut("Timeout!")
+
+ signal.signal(signal.SIGALRM, raise_timeout)
+
s_version = None
try:
+ signal.alarm(10) # raise alarm in 10 seconds
conn = httplib.HTTPConnection( self.server_ip, self.server_port)
conn.request("GET", "/version")
r1 = conn.getresponse()
+ signal.alarm(0)
if r1.status == 200:
s_version= r1.read()
conn.close()
@@ -181,10 +205,13 @@ class FileShareActivity(Activity):
# Older version didn't have permissions, set 1 as default (upload/remove)
self._user_permissions = 1
self.s_version = s_version
+ signal.alarm(0) # disable alarm
return True
else:
+ signal.alarm(0) # disable alarm
return False
except:
+ signal.alarm(0) # disable alarm
return False
def get_server_user_list(self):
@@ -333,20 +360,6 @@ class FileShareActivity(Activity):
else:
return False
-
- def _buildGui(self):
- self.set_title('File Share')
-
- # Create Toolbox
- ################
- toolbox = ActivityToolbox(self)
- self.set_toolbox(toolbox)
- toolbox.show()
-
- self.disp = GuiView(self)
- self.set_canvas(self.disp)
- self.show_all()
-
def _shared_cb(self, activity):
_logger.debug('Activity is now shared')
self.initiating = True
diff --git a/FileShare.activity/GuiView.py b/FileShare.activity/GuiView.py
index 528df49..49199ad 100644
--- a/FileShare.activity/GuiView.py
+++ b/FileShare.activity/GuiView.py
@@ -159,7 +159,7 @@ class GuiHandler():
- def show_throbber(self, show, mesg=""):
+ def show_throbber(self, show, mesg="", addon=None):
if show:
#Build Throbber
throbber = gtk.VBox()
@@ -168,6 +168,9 @@ class GuiHandler():
throbber.pack_start(img)
throbber.pack_start(gtk.Label(mesg))
+ if addon:
+ throbber.pack_start( addon )
+
self.activity.set_canvas(throbber)
self.activity.show_all()
else:
@@ -269,14 +272,14 @@ class GuiView(gtk.Table):
self.activity = activity
self.treeview = gtk.TreeView(gtk.TreeStore(str,object))
self.guiHandler = GuiHandler( activity, self.treeview )
- self.build_table(activity)
+ #self.build_table(activity)
- def build_table(self, activity):
+ def build_table(self):
# Create button bar
###################
hbbox = gtk.HButtonBox()
- if activity.isServer:
+ if self.activity.isServer:
addFileButton = gtk.Button(_("Add File"))
addFileButton.connect("clicked", self.guiHandler.requestAddFile, None)
hbbox.add(addFileButton)
@@ -290,7 +293,7 @@ class GuiView(gtk.Table):
hbbox.add(remFileButton)
else:
- if activity._mode == 'SERVER' and activity._user_permissions != 0:
+ if self.activity._mode == 'SERVER' and self.activity._user_permissions != 0:
addFileButton = gtk.Button(_("Upload A File"))
addFileButton.connect("clicked", self.guiHandler.requestAddFile, {'upload':True})
hbbox.add(addFileButton)
@@ -299,7 +302,7 @@ class GuiView(gtk.Table):
remFileButton.connect("clicked", self.guiHandler.requestRemFile, {'remove':True})
hbbox.add(remFileButton)
- if activity._user_permissions == 2:
+ if self.activity._user_permissions == 2:
adminButton = gtk.Button(_("Server Settings"))
adminButton.connect("clicked", self.guiHandler.showAdmin, None)
hbbox.add(adminButton)
diff --git a/FileShare.activity/MyExceptions.py b/FileShare.activity/MyExceptions.py
index 8f9b022..9753227 100644
--- a/FileShare.activity/MyExceptions.py
+++ b/FileShare.activity/MyExceptions.py
@@ -2,3 +2,4 @@ class InShareException(Exception): pass
class FileUploadFailure(Exception): pass
class ServerRequestFailure(Exception): pass
class NoFreeTubes(Exception): pass
+class TimeOut(Exception): pass