diff --git a/GUI/Options/Panels/AutojoinMemos.py b/GUI/Options/Panels/AutojoinMemos.py new file mode 100644 index 0000000..aa0fd7a --- /dev/null +++ b/GUI/Options/Panels/AutojoinMemos.py @@ -0,0 +1,57 @@ +from PyQt4 import QtCore +from PyQt4 import QtGui + +class MemoEntryItem(QtGui.QListWidgetItem): + def __init__(self,MemoName): + QtGui.QListWidgetItem.__init__(self,MemoName) + self.MemoName = MemoName + +class Panel(QtGui.QWidget): + def __init__(self,Config): + QtGui.QWidget.__init__(self) + self.Config = Config + + self.TitleLabel = QtGui.QLabel("Memos to join on startup:") + self.MemosList = QtGui.QListWidget() + self.MemoNameEntry = QtGui.QLineEdit() + self.RemoveButton = QtGui.QPushButton("REMOVE") + self.AddButton = QtGui.QPushButton("ADD") + + Layout = QtGui.QVBoxLayout(self) + Layout.setAlignment(QtCore.Qt.AlignTop) + Layout.addWidget(self.TitleLabel) + Layout.addWidget(self.MemosList) + Layout.addWidget(self.MemoNameEntry) + AddRemoveButtonLayout = QtGui.QHBoxLayout() + AddRemoveButtonLayout.addWidget(self.RemoveButton) + AddRemoveButtonLayout.addWidget(self.AddButton) + Layout.addLayout(AddRemoveButtonLayout) + + self.connect(self.RemoveButton,QtCore.SIGNAL("clicked()"),self,QtCore.SLOT("RemoveSelectedMemo()")) + self.connect(self.AddButton,QtCore.SIGNAL("clicked()"),self,QtCore.SLOT("AddMemoFromTextEntry()")) + + for MemoName in self.Config.config.get("AutojoinMemos",[]): + self.AddMemoEntry(MemoName) + + @QtCore.pyqtSlot() + def RemoveSelectedMemo(self): + self.MemosList.takeItem(self.MemosList.currentRow()) + + @QtCore.pyqtSlot() + def AddMemoFromTextEntry(self): + MemoName = str(self.MemoNameEntry.text()).strip() + if (MemoName != ""): + self.AddMemoEntry(MemoName) + self.MemoNameEntry.setText("") + + def AddMemoEntry(self,MemoName): + self.MemosList.addItem(MemoEntryItem(MemoName)) + + def SaveOptions(self): + MemosListed = [] + + for MemoIndex in range(self.MemosList.count()): + MemoItem = self.MemosList.item(MemoIndex) + MemosListed.append(MemoItem.MemoName) + + self.Config.set("AutojoinMemos",MemosListed) diff --git a/GUI/Options/Panels/Connection.py b/GUI/Options/Panels/Connection.py new file mode 100644 index 0000000..c4d13aa --- /dev/null +++ b/GUI/Options/Panels/Connection.py @@ -0,0 +1,76 @@ +from PyQt4 import QtCore +from PyQt4 import QtGui + +class MemoEntryItem(QtGui.QListWidgetItem): + def __init__(self,MemoName): + QtGui.QListWidgetItem.__init__(self,MemoName) + self.MemoName = MemoName + +class Panel(QtGui.QWidget): + def __init__(self,Config): + QtGui.QWidget.__init__(self) + self.Config = Config + + self.AutoIdentifyCheck = QtGui.QCheckBox("Automatically identify with nickserv") + self.PasswordLabel = QtGui.QLabel("Password:") + self.PasswordEntry = QtGui.QLineEdit() + self.PasswordEntry.setEchoMode(QtGui.QLineEdit.Password) + + self.TitleLabel = QtGui.QLabel("Memos to join on startup:") + self.MemosList = QtGui.QListWidget() + self.MemoNameEntry = QtGui.QLineEdit() + self.RemoveButton = QtGui.QPushButton("REMOVE") + self.AddButton = QtGui.QPushButton("ADD") + + Layout = QtGui.QVBoxLayout(self) + Layout.setAlignment(QtCore.Qt.AlignTop) + Layout.addWidget(self.AutoIdentifyCheck) + NickservPasswordLayout = QtGui.QHBoxLayout() + NickservPasswordLayout.addWidget(self.PasswordLabel) + NickservPasswordLayout.addWidget(self.PasswordEntry) + Layout.addLayout(NickservPasswordLayout) + Layout.addWidget(self.TitleLabel) + Layout.addWidget(self.MemosList) + Layout.addWidget(self.MemoNameEntry) + AddRemoveButtonLayout = QtGui.QHBoxLayout() + AddRemoveButtonLayout.addWidget(self.RemoveButton) + AddRemoveButtonLayout.addWidget(self.AddButton) + Layout.addLayout(AddRemoveButtonLayout) + + self.connect(self.RemoveButton,QtCore.SIGNAL("clicked()"),self,QtCore.SLOT("RemoveSelectedMemo()")) + self.connect(self.AddButton,QtCore.SIGNAL("clicked()"),self,QtCore.SLOT("AddMemoFromTextEntry()")) + + if self.Config.userprofile.userprofile.get("AutoIdentify",False): + self.AutoIdentifyCheck.setChecked(True) + + self.PasswordEntry.setText(self.Config.userprofile.userprofile.get("NickservPassword","")) + + for MemoName in self.Config.config.get("AutojoinMemos",[]): + self.AddMemoEntry(MemoName) + + @QtCore.pyqtSlot() + def RemoveSelectedMemo(self): + self.MemosList.takeItem(self.MemosList.currentRow()) + + @QtCore.pyqtSlot() + def AddMemoFromTextEntry(self): + MemoName = str(self.MemoNameEntry.text()).strip() + if (MemoName != ""): + self.AddMemoEntry(MemoName) + self.MemoNameEntry.setText("") + + def AddMemoEntry(self,MemoName): + self.MemosList.addItem(MemoEntryItem(MemoName)) + + def SaveOptions(self): + MemosListed = [] + + for MemoIndex in range(self.MemosList.count()): + MemoItem = self.MemosList.item(MemoIndex) + MemosListed.append(MemoItem.MemoName) + + self.Config.set("AutojoinMemos",MemosListed) + + self.Config.userprofile.userprofile["AutoIdentify"] = self.AutoIdentifyCheck.isChecked() + self.Config.userprofile.userprofile["NickservPassword"] = str(self.PasswordEntry.text()) + self.Config.userprofile.save() #barf, why are there different classes for both configs with different behaviors diff --git a/GUI/Options/Panels/__init__.py b/GUI/Options/Panels/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/GUI/Options/__init__.py b/GUI/Options/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/GUI/__init__.py b/GUI/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/irc.py b/irc.py index 0fe8e26..685a516 100644 --- a/irc.py +++ b/irc.py @@ -325,6 +325,9 @@ def killSomeQuirks(self, channel, handle): quirkDisable = QtCore.pyqtSignal(QtCore.QString, QtCore.QString, QtCore.QString) class PesterHandler(DefaultCommandHandler): + def __init__(self,client): + DefaultCommandHandler.__init__(self,client) + self.AutojoinDone = False def notice(self, nick, chan, msg): try: msg = msg.decode('utf-8') diff --git a/menus.py b/menus.py index 9bd1f1c..ee9e987 100644 --- a/menus.py +++ b/menus.py @@ -1,5 +1,6 @@ from PyQt4 import QtGui, QtCore import re, ostools +import GUI.Options.Panels.Connection from os import remove from generic import RightClickList, RightClickTree, MultiTextDialog @@ -1001,7 +1002,7 @@ def __init__(self, config, theme, parent): self.tabs = QtGui.QButtonGroup(self) self.connect(self.tabs, QtCore.SIGNAL('buttonClicked(int)'), self, QtCore.SLOT('changePage(int)')) - tabNames = ["Chum List", "Conversations", "Interface", "Sound", "Notifications", "Logging", "Idle/Updates", "Theme"] + tabNames = ["Chum List", "Conversations", "Interface", "Sound", "Notifications", "Logging", "Idle/Updates", "Theme", "Connection"] if parent.advanced: tabNames.append("Advanced") for t in tabNames: button = QtGui.QPushButton(t) @@ -1374,6 +1375,9 @@ def __init__(self, config, theme, parent): layout_advanced.addLayout(layout_change) self.pages.addWidget(widget) + self.ConnectionPanel = GUI.Options.Panels.Connection.Panel(self.config) + self.pages.addWidget(self.ConnectionPanel) + layout_0 = QtGui.QVBoxLayout() layout_1 = QtGui.QHBoxLayout() layout_1.addLayout(layout_4) diff --git a/pesterchum.py b/pesterchum.py index 34e4706..9991c52 100644 --- a/pesterchum.py +++ b/pesterchum.py @@ -986,6 +986,7 @@ def __init__(self, options, parent=None): MovingWindow.__init__(self, parent, (QtCore.Qt.CustomizeWindowHint | QtCore.Qt.FramelessWindowHint)) + self.AutojoinDone = False self.convos = CaseInsensitiveDict() self.memos = CaseInsensitiveDict() self.tabconvo = None @@ -1222,6 +1223,8 @@ def __init__(self, options, parent=None): self.lastping = int(time()) self.pingtimer.start(1000*90) + + @QtCore.pyqtSlot() def mspacheck(self): # Fuck you EVEN more OSX leopard! >:(((( @@ -1706,11 +1709,23 @@ def systemTrayFunction(self): else: self.waitingMessages.answerMessage() + def DoAutoIdentify(self): + if self.config.userprofile.userprofile.get("AutoIdentify",False): + self.sendMessage.emit("identify " + self.config.userprofile.userprofile.get("NickservPassword",""), "nickserv") + @QtCore.pyqtSlot() def connected(self): if self.loadingscreen: self.loadingscreen.done(QtGui.QDialog.Accepted) self.loadingscreen = None + + self.DoAutoIdentify() + + if not self.AutojoinDone: + self.AutojoinDone = True + for MemoName in self.config.config.get("AutojoinMemos",[]): + self.newMemo("#" + MemoName,"i") + @QtCore.pyqtSlot() def blockSelectedChum(self): curChumListing = self.chumList.currentItem() @@ -2449,6 +2464,7 @@ def updateOptions(self): newmodes = self.optionmenu.modechange.text() if newmodes: self.setChannelMode.emit(self.profile().handle, newmodes, "") + self.optionmenu.ConnectionPanel.SaveOptions() #yeah this is bad design but it's so much cleaner than what's currently goin on here except Exception, e: logging.error(e) finally: @@ -2618,6 +2634,7 @@ def nickCollision(self, handle, tmphandle): @QtCore.pyqtSlot(QtCore.QString) def myHandleChanged(self, handle): if self.profile().handle == handle: + self.DoAutoIdentify() return else: self.nickCollision(self.profile().handle, handle) @@ -2698,6 +2715,8 @@ def __init__(self): options = self.oppts(sys.argv[1:]) + self.AutojoinDone = False + if pygame and pygame.mixer: # we could set the frequency higher but i love how cheesy it sounds try: @@ -2966,6 +2985,7 @@ def showLoading(self, widget, msg="CONN3CT1NG"): @QtCore.pyqtSlot() def connected(self): self.attempts = 0 + @QtCore.pyqtSlot() def tryAgain(self): if not self.reconnectok: