diff --git a/ankiqt/ui/getshared.py b/ankiqt/ui/getshared.py
index 47a4fa9c5..cfb125747 100644
--- a/ankiqt/ui/getshared.py
+++ b/ankiqt/ui/getshared.py
@@ -5,7 +5,7 @@
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import ankiqt, simplejson, time, cStringIO, zipfile, tempfile, os, re
-import traceback, urllib2
+import traceback, urllib2, socket, cgi
from ankiqt.ui.utils import saveGeom, restoreGeom, showInfo
from anki.utils import fmtTimeSpan
@@ -29,6 +29,11 @@ class GetShared(QDialog):
self.form = ankiqt.forms.getshared.Ui_Dialog()
self.form.setupUi(self)
self.ok = True
+ self.conErrMsg = _("""\
+Unable to connect to the server.
+Please check your network connection or try again in a few minutes.
+
+Error was:
%s""") restoreGeom(self, "getshared") self.setupTable() self.onChangeType(type) @@ -49,16 +54,24 @@ class GetShared(QDialog): self.limit) def fetchData(self): + self.parent.setProgressParent(None) + self.parent.deck.startProgress() + self.parent.deck.updateProgress() try: - sock = urllib2.urlopen( - "http://anki.ichi2.net/file/search?t=%d" % self.type) - self.allList = simplejson.loads(unicode(sock.read())) - except: - showInfo(_("Unable to connect to server.\n\n") + - traceback.format_exc()) - self.close() - self.ok = False - return + socket.setdefaulttimeout(30) + try: + sock = urllib2.urlopen( + "http://anki.ichi2.net/file/search?t=%d" % self.type) + self.allList = simplejson.loads(unicode(sock.read())) + except: + showInfo(self.conErrMsg % cgi.escape(unicode( + traceback.format_exc(), "utf-8", "replace"))) + self.close() + self.ok = False + return + finally: + self.parent.deck.finishProgress() + socket.setdefaulttimeout(None) self.form.search.setFocus() self.typeChanged() self.limit() @@ -156,8 +169,10 @@ class GetShared(QDialog): tmpfile = os.fdopen(fd, "w+b") cnt = 0 try: + socket.setdefaulttimeout(30) self.parent.setProgressParent(self) self.parent.startProgress() + self.parent.updateProgress() try: sock = urllib2.urlopen( "http://anki.ichi2.net/file/get?id=%d" % @@ -171,11 +186,12 @@ class GetShared(QDialog): self.parent.updateProgress( label=_("Downloaded %dKB") % (cnt/1024.0)) except: - showInfo(_("Unable to connect to server.\n\n") + - unicode(traceback.format_exc(), "utf-8", "replace")) + showInfo(self.conErrMsg % cgi.escape(unicode( + traceback.format_exc(), "utf-8", "replace"))) self.close() return finally: + socket.setdefaulttimeout(None) self.parent.setProgressParent(None) self.parent.finishProgress() QDialog.accept(self)