diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index a18a31da..0c00fba0 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -23,6 +23,7 @@ from settings import * from about import * from help import * from iconglossary import * +from connect import * import sys from time import strftime, localtime, gmtime import time @@ -424,6 +425,8 @@ class MyForm(QtGui.QMainWindow): self.rerenderComboBoxSendFrom() + + # Show or hide the application window after clicking an item within the # tray icon or, on Windows, the try icon itself. def appIndicatorShowOrHideWindow(self): @@ -1160,6 +1163,16 @@ class MyForm(QtGui.QMainWindow): "MainWindow", "Successfully joined chan. ")) self.ui.tabWidget.setCurrentIndex(3) + def showConnectDialog(self): + self.connectDialogInstance = connectDialog(self) + if self.connectDialogInstance.exec_(): + if self.connectDialogInstance.ui.radioButtonConnectNow.isChecked(): + shared.config.remove_option('bitmessagesettings', 'dontconnect') + with open(shared.appdata + 'keys.dat', 'wb') as configfile: + shared.config.write(configfile) + else: + self.click_actionSettings() + def openKeysFile(self): if 'linux' in sys.platform: subprocess.call(["xdg-open", shared.appdata + 'keys.dat']) @@ -1946,8 +1959,9 @@ class MyForm(QtGui.QMainWindow): shared.config.set('bitmessagesettings', 'startintray', str( self.settingsDialogInstance.ui.checkBoxStartInTray.isChecked())) if int(shared.config.get('bitmessagesettings', 'port')) != int(self.settingsDialogInstance.ui.lineEditTCPPort.text()): - QMessageBox.about(self, _translate("MainWindow", "Restart"), _translate( - "MainWindow", "You must restart Bitmessage for the port number change to take effect.")) + if not shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): + QMessageBox.about(self, _translate("MainWindow", "Restart"), _translate( + "MainWindow", "You must restart Bitmessage for the port number change to take effect.")) shared.config.set('bitmessagesettings', 'port', str( self.settingsDialogInstance.ui.lineEditTCPPort.text())) if shared.config.get('bitmessagesettings', 'socksproxytype') == 'none' and str(self.settingsDialogInstance.ui.comboBoxProxyType.currentText())[0:5] == 'SOCKS': @@ -2867,7 +2881,15 @@ class helpDialog(QtGui.QDialog): self.parent = parent self.ui.labelHelpURI.setOpenExternalLinks(True) QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self)) + +class connectDialog(QtGui.QDialog): + def __init__(self, parent): + QtGui.QWidget.__init__(self, parent) + self.ui = Ui_connectDialog() + self.ui.setupUi(self) + self.parent = parent + QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self)) class aboutDialog(QtGui.QDialog): @@ -3211,6 +3233,8 @@ def run(): myapp.appIndicatorInit(app) myapp.ubuntuMessagingMenuInit() myapp.notifierInit() + if shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): + myapp.showConnectDialog() # ask the user if we may connect if gevent is None: sys.exit(app.exec_()) else: diff --git a/src/bitmessageqt/connect.py b/src/bitmessageqt/connect.py new file mode 100644 index 00000000..de950cdb --- /dev/null +++ b/src/bitmessageqt/connect.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'connect.ui' +# +# Created: Wed Jul 24 10:41:58 2013 +# by: PyQt4 UI code generator 4.10 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +try: + _fromUtf8 = QtCore.QString.fromUtf8 +except AttributeError: + def _fromUtf8(s): + return s + +try: + _encoding = QtGui.QApplication.UnicodeUTF8 + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig, _encoding) +except AttributeError: + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig) + +class Ui_connectDialog(object): + def setupUi(self, connectDialog): + connectDialog.setObjectName(_fromUtf8("connectDialog")) + connectDialog.resize(400, 124) + self.gridLayout = QtGui.QGridLayout(connectDialog) + self.gridLayout.setObjectName(_fromUtf8("gridLayout")) + self.label = QtGui.QLabel(connectDialog) + self.label.setObjectName(_fromUtf8("label")) + self.gridLayout.addWidget(self.label, 0, 0, 1, 2) + self.radioButtonConnectNow = QtGui.QRadioButton(connectDialog) + self.radioButtonConnectNow.setChecked(True) + self.radioButtonConnectNow.setObjectName(_fromUtf8("radioButtonConnectNow")) + self.gridLayout.addWidget(self.radioButtonConnectNow, 1, 0, 1, 2) + self.radioButton = QtGui.QRadioButton(connectDialog) + self.radioButton.setObjectName(_fromUtf8("radioButton")) + self.gridLayout.addWidget(self.radioButton, 2, 0, 1, 2) + spacerItem = QtGui.QSpacerItem(185, 24, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem, 3, 0, 1, 1) + self.buttonBox = QtGui.QDialogButtonBox(connectDialog) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok) + self.buttonBox.setObjectName(_fromUtf8("buttonBox")) + self.gridLayout.addWidget(self.buttonBox, 3, 1, 1, 1) + + self.retranslateUi(connectDialog) + QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), connectDialog.accept) + QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), connectDialog.reject) + QtCore.QMetaObject.connectSlotsByName(connectDialog) + + def retranslateUi(self, connectDialog): + connectDialog.setWindowTitle(_translate("connectDialog", "Dialog", None)) + self.label.setText(_translate("connectDialog", "Bitmessage won\'t connect to anyone until you let it. ", None)) + self.radioButtonConnectNow.setText(_translate("connectDialog", "Connect now", None)) + self.radioButton.setText(_translate("connectDialog", "Let me configure special network settings first", None)) + diff --git a/src/bitmessageqt/connect.ui b/src/bitmessageqt/connect.ui new file mode 100644 index 00000000..a5e390dd --- /dev/null +++ b/src/bitmessageqt/connect.ui @@ -0,0 +1,101 @@ + + + connectDialog + + + + 0 + 0 + 400 + 124 + + + + Dialog + + + + + + Bitmessage won't connect to anyone until you let it. + + + + + + + Connect now + + + true + + + + + + + Let me configure special network settings first + + + + + + + Qt::Horizontal + + + + 185 + 24 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + connectDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + connectDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/class_outgoingSynSender.py b/src/class_outgoingSynSender.py index 5c21d72c..ac0b11ac 100644 --- a/src/class_outgoingSynSender.py +++ b/src/class_outgoingSynSender.py @@ -23,7 +23,8 @@ class outgoingSynSender(threading.Thread): self.selfInitiatedConnections = selfInitiatedConnections def run(self): - time.sleep(1) + while shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): + time.sleep(2) while True: while len(self.selfInitiatedConnections[self.streamNumber]) >= 8: # maximum number of outgoing connections = 8 time.sleep(10) diff --git a/src/class_singleListener.py b/src/class_singleListener.py index d6b46643..f339b2ba 100644 --- a/src/class_singleListener.py +++ b/src/class_singleListener.py @@ -26,7 +26,9 @@ class singleListener(threading.Thread): # proxy 'none' or configure SOCKS listening then this will start listening for # connections. while shared.config.get('bitmessagesettings', 'socksproxytype')[0:5] == 'SOCKS' and not shared.config.getboolean('bitmessagesettings', 'sockslisten'): - time.sleep(300) + time.sleep(10) + while shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'): + time.sleep(1) with shared.printLock: print 'Listening for incoming connections.' diff --git a/src/helper_startup.py b/src/helper_startup.py index f3069658..d60ad681 100644 --- a/src/helper_startup.py +++ b/src/helper_startup.py @@ -66,6 +66,7 @@ def loadConfig(): 'bitmessagesettings', 'maxacceptablenoncetrialsperbyte', '0') shared.config.set( 'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes', '0') + shared.config.set('bitmessagesettings', 'dontconnect', 'true') if storeConfigFilesInSameDirectoryAsProgramByDefault: # Just use the same directory as the program and forget about