Author: daelstorm
Date: 2007-03-16 05:00:37 +0100 (Fri, 16 Mar 2007)
New Revision: 368
Modified:
trunk/nicotine+/pynicotine/gtkgui/frame.py
trunk/nicotine+/pynicotine/gtkgui/settingswindow.py
trunk/nicotine+/pynicotine/gtkgui/utils.py
trunk/nicotine+/pynicotine/pynicotine.py
trunk/nicotine+/pynicotine/slskmessages.py
Log:
Settings now doesn't close if a UserWarning exception occurs during a settings-closed event; settings window popups up if the server complains of an invalid password
Modified: trunk/nicotine+/pynicotine/gtkgui/frame.py
===================================================================
--- trunk/nicotine+/pynicotine/gtkgui/frame.py 2007-03-16 02:48:46 UTC (rev 367)
+++ trunk/nicotine+/pynicotine/gtkgui/frame.py 2007-03-16 04:00:37 UTC (rev 368)
@@ -559,8 +559,6 @@
else: path = None
if path != None and exists:
if command == "Gstreamer (gst-python)":
- if sys.platform == "win32":
- return
if self.gstreamer.player is None:
return
self.gstreamer.play(path)
@@ -1232,9 +1230,14 @@
def OnSettingsClosed(self, widget, msg):
if msg == "cancel":
+ self.settingswindow.SettingsWindow.hide()
return
-
- needrescan, needcolors, config = self.settingswindow.GetSettings()
+ output = self.settingswindow.GetSettings()
+ if type(output) is not tuple:
+ return
+ if msg == "ok":
+ self.settingswindow.SettingsWindow.hide()
+ needrescan, needcolors, config = output
for (key, data) in config.items():
self.np.config.sections[key].update(data)
@@ -2163,7 +2166,7 @@
pygst.require("0.10")
import gst
except Exception, error:
- print _("Gstreamer-python failed to play:"), error
+ #print _("Gstreamer-python failed to play:"), error
return
self.gst = gst
self.player = gst.element_factory_make("playbin", "player")
Modified: trunk/nicotine+/pynicotine/gtkgui/settingswindow.py
===================================================================
--- trunk/nicotine+/pynicotine/gtkgui/settingswindow.py 2007-03-16 02:48:46 UTC (rev 367)
+++ trunk/nicotine+/pynicotine/gtkgui/settingswindow.py 2007-03-16 04:00:37 UTC (rev 368)
@@ -18,6 +18,7 @@
class ServerFrame(settings_glade.ServerFrame):
def __init__(self, parent, encodings):
+ self.p = parent
self.frame = parent.frame
settings_glade.ServerFrame.__init__(self, False)
self.Server.append_text("server.slsknet.org:2240")
@@ -60,13 +61,16 @@
except:
server = None
if str(self.Login.get_text()) == "None":
- popupWarning(None, _("Warning: Bad Username"), _("Username 'None' is not a good one, please pick another.") )
+ popupWarning(self.p.SettingsWindow, _("Warning: Bad Username"), _("Username 'None' is not a good one, please pick another."), self.frame.images["n"] )
+ raise UserWarning
try:
firstport = int(self.FirstPort.get_text())
lastport = int(self.LastPort.get_text())
portrange = (firstport, lastport)
except:
portrange = None
+ popupWarning(self.p.SettingsWindow, _("Warning: Invalid ports"), _("Client ports are invalid."), self.frame.images["n"] )
+ raise UserWarning
return {
"server": {
@@ -82,6 +86,7 @@
class SharesFrame(settings_glade.SharesFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
settings_glade.SharesFrame.__init__(self, False)
self.needrescan = 0
@@ -103,33 +108,23 @@
def SetSettings(self, config):
transfers = config["transfers"]
- if win32:
- place = "Windows"
- homedir = "C:\windows"
- else:
- place = "Home"
- homedir = pwd.getpwuid(os.getuid())[5]
+
if transfers["incompletedir"] is not None:
self.IncompleteDir.set_text(recode(transfers["incompletedir"]))
if transfers["downloaddir"] is not None:
self.DownloadDir.set_text(recode(transfers["downloaddir"]))
if transfers["sharedownloaddir"] is not None:
- if homedir == transfers["downloaddir"] and transfers["sharedownloaddir"]:
- popupWarning(None, _("Warning"),_("Security Risk: you should not share your %s directory!") %place)
+
self.ShareDownloadDir.set_active(transfers["sharedownloaddir"])
self.shareslist.clear()
self.bshareslist.clear()
if transfers["shared"] is not None:
for share in transfers["shared"]:
- if homedir == share:
- popupWarning(None, _("Warning"),_("Security Risk: you should not share your %s directory!") %place)
self.shareslist.append([recode(share), share])
self.shareddirs = transfers["shared"][:]
if transfers["buddyshared"] is not None:
for share in transfers["buddyshared"]:
- if homedir == share:
- popupWarning(None, _("Warning"),_("Security Risk: you should not share your %s directory!") %place)
self.bshareslist.append([recode(share), share])
self.bshareddirs = transfers["buddyshared"][:]
if transfers["rescanonstartup"] is not None:
@@ -140,6 +135,19 @@
self.needrescan = 0
def GetSettings(self):
+ if win32:
+ place = "Windows"
+ homedir = "C:\windows"
+ else:
+ place = "Home"
+ homedir = pwd.getpwuid(os.getuid())[5]
+ if homedir == recode2(self.DownloadDir.get_text()) and self.ShareDownloadDir.get_active():
+ popupWarning(self.p.SettingsWindow, _("Warning"),_("Security Risk: you should not share your %s directory!") %place, self.frame.images["n"])
+ raise UserWarning
+ for share in self.shareddirs+self.bshareddirs:
+ if homedir == share:
+ popupWarning(self.p.SettingsWindow, _("Warning"),_("Security Risk: you should not share your %s directory!") %place, self.frame.images["n"])
+ raise UserWarning
return {
"transfers": {
"incompletedir": recode2(self.IncompleteDir.get_text()),
@@ -222,6 +230,7 @@
class TransfersFrame(settings_glade.TransfersFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
settings_glade.TransfersFrame.__init__(self, False)
self.UploadsAllowed_List.clear()
@@ -492,6 +501,7 @@
class GeoBlockFrame(settings_glade.GeoBlockFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
settings_glade.GeoBlockFrame.__init__(self, False)
@@ -521,6 +531,7 @@
class UserinfoFrame(settings_glade.UserinfoFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
settings_glade.UserinfoFrame.__init__(self, False)
@@ -555,6 +566,7 @@
class BanFrame(settings_glade.BanFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
settings_glade.BanFrame.__init__(self, False)
self.banned = []
@@ -647,6 +659,7 @@
class SoundsFrame(settings_glade.SoundsFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
settings_glade.SoundsFrame.__init__(self, False)
for executable in ["xmms -e $", "audacious -e $", "amarok -a $"]:
@@ -683,9 +696,16 @@
self.audioPlayerCombo.child.set_text(config["players"]["default"])
self.audioPlayerCombo.append_text( config["players"]["default"] )
def GetSettings(self):
+
+ soundcommand = self.SoundCommand.child.get_text()
+ if soundcommand == "Gstreamer (gst-python)":
+ if self.frame.gstreamer.player is None:
+ popupWarning(self.p.SettingsWindow, _("Warning"), _("Gstreamer-python is not installed") , self.frame.images["n"] )
+ raise UserWarning
+
return {
"ui": {
- "soundcommand": self.SoundCommand.child.get_text(),
+ "soundcommand": soundcommand,
"soundtheme": self.SoundDirectory.get_text(),
"soundenabled": self.SoundCheck.get_active(),
},
@@ -703,6 +723,7 @@
class IconsFrame(settings_glade.IconsFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
settings_glade.IconsFrame.__init__(self, False)
self.ThemeButton.connect("clicked", self.OnChooseThemeDir)
@@ -747,6 +768,7 @@
class BloatFrame(settings_glade.BloatFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
self.needcolors = 0
settings_glade.BloatFrame.__init__(self, False)
@@ -994,6 +1016,7 @@
class LogFrame(settings_glade.LogFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
settings_glade.LogFrame.__init__(self, False)
@@ -1027,6 +1050,7 @@
class SearchFrame(settings_glade.SearchFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
settings_glade.SearchFrame.__init__(self, False)
@@ -1076,6 +1100,7 @@
class AwayFrame(settings_glade.AwayFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
settings_glade.AwayFrame.__init__(self, False)
@@ -1100,6 +1125,7 @@
class EventsFrame(settings_glade.EventsFrame):
def __init__(self, parent):
+ self.p = parent
self.frame = parent.frame
settings_glade.EventsFrame.__init__(self, False)
@@ -1168,17 +1194,18 @@
Import = ImportWinSlskConfig(self.config, Path, Queue, Login, Rooms, BuddyList, BanList, IgnoreList, UserInfo, UserImage)
response = Import.Run()
if response == 0:
- popupWarning(None, _("Nothing Imported"), _("Config files for the official Soulseek client not found in \"%s\"") % Path )
+ popupWarning(self.p.SettingsWindow, _("Nothing Imported"), _("Config files for the official Soulseek client not found in \"%s\"") % Path , self.frame.images["n"])
elif response == 1:
- popupWarning(None, _("Imported Soulseek Config"), _("Config was imported. You may need to restart for changes to take effect. If you changed your user name, buddy list or queue then you should restart immediately.") )
+ popupWarning(self.p.SettingsWindow, _("Imported Soulseek Config"), _("Config was imported. You may need to restart for changes to take effect. If you changed your user name, buddy list or queue then you should restart immediately."), self.frame.images["n"] )
self.p.SetSettings(self.frame.np.config.sections)
elif response == 2:
- popupWarning(None, _("Nothing Imported"), _("No options were selected") )
+ popupWarning(self.p.SettingsWindow, _("Nothing Imported"), _("No options were selected") , self.frame.images["n"])
class UrlCatchFrame(settings_glade.UrlCatchFrame):
def __init__(self, parent):
self.frame = parent.frame
+ self.p = parent
settings_glade.UrlCatchFrame.__init__(self, False)
self.protocolmodel = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
self.protocols = {}
@@ -1297,39 +1324,39 @@
self.empty_label = gtk.Label("")
self.empty_label.show()
self.viewport1.add(self.empty_label)
-
+ self.tree = {}
self.pages = p = {}
model = gtk.TreeStore(gobject.TYPE_STRING)
- row = model.append(None, [_("Connection")])
- model.append(row, [_("Server")])
- model.append(row, [_("Shares")])
- model.append(row, [_("Transfers")])
+ self.tree[_("Connection")] = row = model.append(None, [_("Connection")])
+ self.tree[_("Server")] = model.append(row, [_("Server")])
+ self.tree[_("Shares")] = model.append(row, [_("Shares")])
+ self.tree[_("Transfers")] = model.append(row, [_("Transfers")])
try:
import GeoIP
- model.append(row, [_("Geo Block")])
+ self.tree[_("Geo Block")] = model.append(row, [_("Geo Block")])
except ImportError:
try:
import _GeoIP
- model.append(row, [_("Geo Block")])
+ self.tree[_("Geo Block")] = model.append(row, [_("Geo Block")])
except ImportError:
pass
- row = model.append(None, [_("UI")])
- model.append(row, [_("Icons")])
- model.append(row, [_("Interface")])
- model.append(row, [_("URL Catching")])
+ self.tree[_("UI")] = row = model.append(None, [_("UI")])
+ self.tree[_("Icons")] = model.append(row, [_("Icons")])
+ self.tree[_("Interface")] = model.append(row, [_("Interface")])
+ self.tree[_("URL Catching")] = model.append(row, [_("URL Catching")])
- row = model.append(None, [_("Misc")])
- model.append(row, [_("Away mode")])
- model.append(row, [_("Ban / ignore")])
- model.append(row, [_("Logging")])
- model.append(row, [_("Sounds")])
- model.append(row, [_("Searches")])
- model.append(row, [_("User info")])
- row = model.append(None, [_("Advanced")])
- model.append(row, [_("Events")])
- model.append(row, [_("Import Config")])
+ self.tree[_("Misc")] = row = model.append(None, [_("Misc")])
+ self.tree[_("Away mode")] = model.append(row, [_("Away mode")])
+ self.tree[_("Ban / ignore")] = model.append(row, [_("Ban / ignore")])
+ self.tree[_("Logging")] = model.append(row, [_("Logging")])
+ self.tree[_("Sounds")] = model.append(row, [_("Sounds")])
+ self.tree[_("Searches")] = model.append(row, [_("Searches")])
+ self.tree[_("User info")] = model.append(row, [_("User info")])
+ self.tree[_("Advanced")] = row = model.append(None, [_("Advanced")])
+ self.tree[_("Events")] = model.append(row, [_("Events")])
+ self.tree[_("Import Config")] = model.append(row, [_("Import Config")])
p[_("Server")] = ServerFrame(self, frame.np.getencodings())
p[_("Shares")] = SharesFrame(self)
@@ -1375,16 +1402,31 @@
self.viewport1.add(self.pages[page].Main)
else:
self.viewport1.add(self.empty_label)
+
+ def SwitchToPage(self, page):
+ child = self.viewport1.get_child()
+ if child:
+ self.viewport1.remove(child)
+
+ if self.tree[page] is None:
+ self.viewport1.add(self.empty_label)
+ return
+ model = self.SettingsTreeview.get_model()
+ sel = self.SettingsTreeview.get_selection()
+ sel.unselect_all()
+ path = model.get_path(self.tree[page])
+ if path is not None:
+ sel.select_path(path)
+
+
def OnApply(self, widget):
self.SettingsWindow.emit("settings-closed", "apply")
def OnOk(self, widget):
- self.SettingsWindow.hide()
self.SettingsWindow.emit("settings-closed", "ok")
def OnCancel(self, widget):
- self.SettingsWindow.hide()
self.SettingsWindow.emit("settings-closed", "cancel")
def OnDelete(self, widget, event):
@@ -1397,21 +1439,24 @@
page.SetSettings(config)
def GetSettings(self):
- config = {
- "server": {},
- "transfers": {},
- "userinfo": {},
- "logging": {},
- "searches": {},
- "privatechat": {},
- "ui": {},
- "urls": {},
- "players": {},
+ try:
+ config = {
+ "server": {},
+ "transfers": {},
+ "userinfo": {},
+ "logging": {},
+ "searches": {},
+ "privatechat": {},
+ "ui": {},
+ "urls": {},
+ "players": {},
+
+ }
- }
-
- for page in self.pages.values():
- sub = page.GetSettings()
- for (key,data) in sub.items():
- config[key].update(data)
- return self.pages[_("Shares")].GetNeedRescan(), self.pages[_("Interface")].needcolors, config
+ for page in self.pages.values():
+ sub = page.GetSettings()
+ for (key,data) in sub.items():
+ config[key].update(data)
+ return self.pages[_("Shares")].GetNeedRescan(), self.pages[_("Interface")].needcolors, config
+ except UserWarning, warning:
+ return None
Modified: trunk/nicotine+/pynicotine/gtkgui/utils.py
===================================================================
--- trunk/nicotine+/pynicotine/gtkgui/utils.py 2007-03-16 02:48:46 UTC (rev 367)
+++ trunk/nicotine+/pynicotine/gtkgui/utils.py 2007-03-16 04:00:37 UTC (rev 368)
@@ -24,11 +24,11 @@
HUMANIZE_URLS = 0
USERNAMEHOTSPOTS = 0
-def popupWarning(parent, title, warning):
+def popupWarning(parent, title, warning, icon=None):
dlg = gtk.Dialog(title = title, parent = parent,
buttons = (gtk.STOCK_OK, gtk.RESPONSE_OK))
dlg.set_default_response(gtk.RESPONSE_OK)
-
+ dlg.set_icon(icon)
dlg.set_border_width(10)
dlg.vbox.set_spacing(10)
hbox = gtk.HBox(spacing=5)
Modified: trunk/nicotine+/pynicotine/pynicotine.py
===================================================================
--- trunk/nicotine+/pynicotine/pynicotine.py 2007-03-16 02:48:46 UTC (rev 367)
+++ trunk/nicotine+/pynicotine/pynicotine.py 2007-03-16 04:00:37 UTC (rev 368)
@@ -447,7 +447,9 @@
self.frame.manualdisconnect = 1
self.setStatus(_("Can not log in, reason: %s") %(msg.reason))
self.logMessage(_("Can not log in, reason: %s") %(msg.reason))
-
+ self.frame.OnSettings(None)
+ self.frame.settingswindow.SwitchToPage(_("Server"))
+
def NotifyPrivileges(self, msg):
if msg.token != None:
pass
Modified: trunk/nicotine+/pynicotine/slskmessages.py
===================================================================
--- trunk/nicotine+/pynicotine/slskmessages.py 2007-03-16 02:48:46 UTC (rev 367)
+++ trunk/nicotine+/pynicotine/slskmessages.py 2007-03-16 04:00:37 UTC (rev 368)
@@ -218,21 +218,25 @@
len1, self.success = 1, ord(message[0])
if not self.success:
len1,self.reason = self.getObject(message,types.StringType,len1)
+
else:
len1,self.banner = self.getObject(message,types.StringType,len1)
- try:
- len1,self.num = self.getObject(message, types.IntType,len1)
- # Unknown number
- #print self.num
- except Exception, error:
- print "Unpack number", error
- try:
- if len(message[len1:]) > 0:
- len1, self.checksum = self.getObject(message,types.StringType,len1)
- #print self.checksum
- except Exception, error:
- # Not an official client on the official server
- pass
+ if len(message[len1:]) > 0 :
+ try:
+
+ len2,self.num = self.getObject(message, types.IntType,len1)
+ # Unknown number
+
+ except Exception, error:
+ print "Unpack number", error
+ try:
+
+ if len(message[len1:]) > 0:
+ len1, self.checksum = self.getObject(message,types.StringType,len1)
+ #print self.checksum
+ except Exception, error:
+ # Not an official client on the official server
+ pass
class SetWaitPort(ServerMessage):
|