Email gateway integration
Sending/receiving from the send tab, reply from inbox and registration/unregistration context menu.
This commit is contained in:
parent
b4fa5d4abf
commit
2bc9c7ff4c
|
@ -34,6 +34,7 @@ from newsubscriptiondialog import *
|
||||||
from regenerateaddresses import *
|
from regenerateaddresses import *
|
||||||
from newchandialog import *
|
from newchandialog import *
|
||||||
from specialaddressbehavior import *
|
from specialaddressbehavior import *
|
||||||
|
from emailgateway import *
|
||||||
from settings import *
|
from settings import *
|
||||||
from about import *
|
from about import *
|
||||||
from help import *
|
from help import *
|
||||||
|
@ -213,6 +214,10 @@ class MyForm(QtGui.QMainWindow):
|
||||||
_translate(
|
_translate(
|
||||||
"MainWindow", "Special address behavior..."),
|
"MainWindow", "Special address behavior..."),
|
||||||
self.on_action_SpecialAddressBehaviorDialog)
|
self.on_action_SpecialAddressBehaviorDialog)
|
||||||
|
self.actionEmailGateway = self.ui.addressContextMenuToolbarYourIdentities.addAction(
|
||||||
|
_translate(
|
||||||
|
"MainWindow", "Email gateway"),
|
||||||
|
self.on_action_EmailGatewayDialog)
|
||||||
|
|
||||||
self.ui.treeWidgetYourIdentities.setContextMenuPolicy(
|
self.ui.treeWidgetYourIdentities.setContextMenuPolicy(
|
||||||
QtCore.Qt.CustomContextMenu)
|
QtCore.Qt.CustomContextMenu)
|
||||||
|
@ -230,6 +235,7 @@ class MyForm(QtGui.QMainWindow):
|
||||||
self.popMenuYourIdentities.addAction(self.actionDisableYourIdentities)
|
self.popMenuYourIdentities.addAction(self.actionDisableYourIdentities)
|
||||||
self.popMenuYourIdentities.addAction(self.actionSetAvatarYourIdentities)
|
self.popMenuYourIdentities.addAction(self.actionSetAvatarYourIdentities)
|
||||||
self.popMenuYourIdentities.addAction(self.actionSpecialAddressBehaviorYourIdentities)
|
self.popMenuYourIdentities.addAction(self.actionSpecialAddressBehaviorYourIdentities)
|
||||||
|
self.popMenuYourIdentities.addAction(self.actionEmailGateway)
|
||||||
|
|
||||||
def init_chan_popup_menu(self, connectSignal=True):
|
def init_chan_popup_menu(self, connectSignal=True):
|
||||||
# Popup menu for the Channels tab
|
# Popup menu for the Channels tab
|
||||||
|
@ -902,6 +908,7 @@ class MyForm(QtGui.QMainWindow):
|
||||||
|
|
||||||
subjectItem = QtGui.QTableWidgetItem(unicode(acct.subject, 'utf-8'))
|
subjectItem = QtGui.QTableWidgetItem(unicode(acct.subject, 'utf-8'))
|
||||||
subjectItem.setToolTip(unicode(acct.subject, 'utf-8'))
|
subjectItem.setToolTip(unicode(acct.subject, 'utf-8'))
|
||||||
|
subjectItem.setData(Qt.UserRole, str(subject))
|
||||||
subjectItem.setFlags(
|
subjectItem.setFlags(
|
||||||
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
|
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
|
||||||
tableWidget.setItem(0, 2, subjectItem)
|
tableWidget.setItem(0, 2, subjectItem)
|
||||||
|
@ -1038,6 +1045,7 @@ class MyForm(QtGui.QMainWindow):
|
||||||
# subject
|
# subject
|
||||||
subject_item = QtGui.QTableWidgetItem(unicode(acct.subject, 'utf-8'))
|
subject_item = QtGui.QTableWidgetItem(unicode(acct.subject, 'utf-8'))
|
||||||
subject_item.setToolTip(unicode(acct.subject, 'utf-8'))
|
subject_item.setToolTip(unicode(acct.subject, 'utf-8'))
|
||||||
|
subject_item.setData(Qt.UserRole, str(subject))
|
||||||
subject_item.setFlags(
|
subject_item.setFlags(
|
||||||
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
|
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
|
||||||
if not read:
|
if not read:
|
||||||
|
@ -1968,6 +1976,8 @@ more work your computer must do to send the message. A Time-To-Live of four or f
|
||||||
QMessageBox.about(self, _translate("MainWindow", "Message too long"), _translate(
|
QMessageBox.about(self, _translate("MainWindow", "Message too long"), _translate(
|
||||||
"MainWindow", "The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.").arg(len(message) - (2 ** 18 - 500)))
|
"MainWindow", "The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.").arg(len(message) - (2 ** 18 - 500)))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
acct = accountClass(fromAddress)
|
||||||
|
|
||||||
if sendMessageToPeople: # To send a message to specific people (rather than broadcast)
|
if sendMessageToPeople: # To send a message to specific people (rather than broadcast)
|
||||||
toAddressesList = [s.strip()
|
toAddressesList = [s.strip()
|
||||||
|
@ -1976,6 +1986,12 @@ more work your computer must do to send the message. A Time-To-Live of four or f
|
||||||
toAddressesList)) # remove duplicate addresses. If the user has one address with a BM- and the same address without the BM-, this will not catch it. They'll send the message to the person twice.
|
toAddressesList)) # remove duplicate addresses. If the user has one address with a BM- and the same address without the BM-, this will not catch it. They'll send the message to the person twice.
|
||||||
for toAddress in toAddressesList:
|
for toAddress in toAddressesList:
|
||||||
if toAddress != '':
|
if toAddress != '':
|
||||||
|
if toAddress.find("@") >= 0 and isinstance(acct, GatewayAccount):
|
||||||
|
acct.createMessage(toAddress, fromAddress, subject, message)
|
||||||
|
subject = acct.subject
|
||||||
|
toAddress = acct.toAddress
|
||||||
|
print "Subject: %s" % (subject)
|
||||||
|
print "address: %s" % (toAddress)
|
||||||
status, addressVersionNumber, streamNumber, ripe = decodeAddress(
|
status, addressVersionNumber, streamNumber, ripe = decodeAddress(
|
||||||
toAddress)
|
toAddress)
|
||||||
if status != 'success':
|
if status != 'success':
|
||||||
|
@ -2197,6 +2213,8 @@ more work your computer must do to send the message. A Time-To-Live of four or f
|
||||||
self.ui.tableWidgetInbox.setItem(0, 1, newItem)
|
self.ui.tableWidgetInbox.setItem(0, 1, newItem)
|
||||||
newItem = QtGui.QTableWidgetItem(unicode(acct.subject, 'utf-8)'))
|
newItem = QtGui.QTableWidgetItem(unicode(acct.subject, 'utf-8)'))
|
||||||
newItem.setToolTip(unicode(acct.subject, 'utf-8)'))
|
newItem.setToolTip(unicode(acct.subject, 'utf-8)'))
|
||||||
|
newItem.setData(Qt.UserRole, str(subject))
|
||||||
|
|
||||||
#newItem.setData(Qt.UserRole, unicode(message, 'utf-8)')) # No longer hold the message in the table; we'll use a SQL query to display it as needed.
|
#newItem.setData(Qt.UserRole, unicode(message, 'utf-8)')) # No longer hold the message in the table; we'll use a SQL query to display it as needed.
|
||||||
self.ui.tableWidgetInbox.setItem(0, 2, newItem)
|
self.ui.tableWidgetInbox.setItem(0, 2, newItem)
|
||||||
# newItem = QtGui.QTableWidgetItem('Doing work necessary to send
|
# newItem = QtGui.QTableWidgetItem('Doing work necessary to send
|
||||||
|
@ -2242,6 +2260,8 @@ more work your computer must do to send the message. A Time-To-Live of four or f
|
||||||
self.ui.tableWidgetInbox.setItem(0, 1, newItem)
|
self.ui.tableWidgetInbox.setItem(0, 1, newItem)
|
||||||
newItem = QtGui.QTableWidgetItem(unicode(acct.subject, 'utf-8)'))
|
newItem = QtGui.QTableWidgetItem(unicode(acct.subject, 'utf-8)'))
|
||||||
newItem.setToolTip(unicode(acct.subject, 'utf-8)'))
|
newItem.setToolTip(unicode(acct.subject, 'utf-8)'))
|
||||||
|
newItem.setData(Qt.UserRole, str(subject))
|
||||||
|
|
||||||
#newItem.setData(Qt.UserRole, unicode(message, 'utf-8)')) # No longer hold the message in the table; we'll use a SQL query to display it as needed.
|
#newItem.setData(Qt.UserRole, unicode(message, 'utf-8)')) # No longer hold the message in the table; we'll use a SQL query to display it as needed.
|
||||||
newItem.setFont(font)
|
newItem.setFont(font)
|
||||||
self.ui.tableWidgetInbox.setItem(0, 2, newItem)
|
self.ui.tableWidgetInbox.setItem(0, 2, newItem)
|
||||||
|
@ -2631,6 +2651,30 @@ more work your computer must do to send the message. A Time-To-Live of four or f
|
||||||
shared.writeKeysFile()
|
shared.writeKeysFile()
|
||||||
self.rerenderInboxToLabels()
|
self.rerenderInboxToLabels()
|
||||||
|
|
||||||
|
def on_action_EmailGatewayDialog(self):
|
||||||
|
self.dialog = EmailGatewayDialog(self)
|
||||||
|
# For Modal dialogs
|
||||||
|
if self.dialog.exec_():
|
||||||
|
addressAtCurrentRow = self.getCurrentAccount()
|
||||||
|
acct = accountClass(addressAtCurrentRow)
|
||||||
|
if isinstance(acct, GatewayAccount) and self.dialog.ui.radioButtonUnregister.isChecked():
|
||||||
|
print "unregister"
|
||||||
|
acct.unregister()
|
||||||
|
shared.config.remove_option(addressAtCurrentRow, 'gateway')
|
||||||
|
shared.writeKeysFile()
|
||||||
|
elif (not isinstance(acct, GatewayAccount)) and self.dialog.ui.radioButtonRegister.isChecked():
|
||||||
|
print "register"
|
||||||
|
email = str(self.dialog.ui.lineEditEmail.text().toUtf8())
|
||||||
|
acct = MailchuckAccount(addressAtCurrentRow)
|
||||||
|
acct.register(email)
|
||||||
|
shared.config.set(addressAtCurrentRow, 'label', email)
|
||||||
|
shared.config.set(addressAtCurrentRow, 'gateway', 'mailchuck')
|
||||||
|
shared.writeKeysFile()
|
||||||
|
else:
|
||||||
|
print "well nothing"
|
||||||
|
# shared.writeKeysFile()
|
||||||
|
# self.rerenderInboxToLabels()
|
||||||
|
|
||||||
def click_NewAddressDialog(self):
|
def click_NewAddressDialog(self):
|
||||||
addresses = []
|
addresses = []
|
||||||
configSections = shared.config.sections()
|
configSections = shared.config.sections()
|
||||||
|
@ -2638,11 +2682,11 @@ more work your computer must do to send the message. A Time-To-Live of four or f
|
||||||
if addressInKeysFile == 'bitmessagesettings':
|
if addressInKeysFile == 'bitmessagesettings':
|
||||||
continue
|
continue
|
||||||
addresses.append(addressInKeysFile)
|
addresses.append(addressInKeysFile)
|
||||||
self.dialog = Ui_NewAddressWizard(addresses)
|
# self.dialog = Ui_NewAddressWizard(addresses)
|
||||||
self.dialog.exec_()
|
# self.dialog.exec_()
|
||||||
# print "Name: " + self.dialog.field("name").toString()
|
# print "Name: " + self.dialog.field("name").toString()
|
||||||
# print "Email: " + self.dialog.field("email").toString()
|
# print "Email: " + self.dialog.field("email").toString()
|
||||||
return
|
# return
|
||||||
self.dialog = NewAddressDialog(self)
|
self.dialog = NewAddressDialog(self)
|
||||||
# For Modal dialogs
|
# For Modal dialogs
|
||||||
if self.dialog.exec_():
|
if self.dialog.exec_():
|
||||||
|
@ -2789,6 +2833,7 @@ more work your computer must do to send the message. A Time-To-Live of four or f
|
||||||
currentInboxRow = tableWidget.currentRow()
|
currentInboxRow = tableWidget.currentRow()
|
||||||
toAddressAtCurrentInboxRow = str(tableWidget.item(
|
toAddressAtCurrentInboxRow = str(tableWidget.item(
|
||||||
currentInboxRow, 0).data(Qt.UserRole).toPyObject())
|
currentInboxRow, 0).data(Qt.UserRole).toPyObject())
|
||||||
|
acct = accountClass(toAddressAtCurrentInboxRow)
|
||||||
fromAddressAtCurrentInboxRow = str(tableWidget.item(
|
fromAddressAtCurrentInboxRow = str(tableWidget.item(
|
||||||
currentInboxRow, 1).data(Qt.UserRole).toPyObject())
|
currentInboxRow, 1).data(Qt.UserRole).toPyObject())
|
||||||
msgid = str(tableWidget.item(
|
msgid = str(tableWidget.item(
|
||||||
|
@ -2798,6 +2843,7 @@ more work your computer must do to send the message. A Time-To-Live of four or f
|
||||||
if queryreturn != []:
|
if queryreturn != []:
|
||||||
for row in queryreturn:
|
for row in queryreturn:
|
||||||
messageAtCurrentInboxRow, = row
|
messageAtCurrentInboxRow, = row
|
||||||
|
acct.parseMessage(toAddressAtCurrentInboxRow, fromAddressAtCurrentInboxRow, str(tableWidget.item(currentInboxRow, 2).data(Qt.UserRole).toPyObject()), messageAtCurrentInboxRow)
|
||||||
if toAddressAtCurrentInboxRow == self.str_broadcast_subscribers:
|
if toAddressAtCurrentInboxRow == self.str_broadcast_subscribers:
|
||||||
#TODO what does this if?..
|
#TODO what does this if?..
|
||||||
a = a
|
a = a
|
||||||
|
@ -2810,7 +2856,7 @@ more work your computer must do to send the message. A Time-To-Live of four or f
|
||||||
else:
|
else:
|
||||||
self.setBroadcastEnablementDependingOnWhetherThisIsAChanAddress(toAddressAtCurrentInboxRow)
|
self.setBroadcastEnablementDependingOnWhetherThisIsAChanAddress(toAddressAtCurrentInboxRow)
|
||||||
|
|
||||||
self.ui.lineEditTo.setText(str(fromAddressAtCurrentInboxRow))
|
self.ui.lineEditTo.setText(str(acct.fromLabel))
|
||||||
|
|
||||||
# If the previous message was to a chan then we should send our reply to the chan rather than to the particular person who sent the message.
|
# If the previous message was to a chan then we should send our reply to the chan rather than to the particular person who sent the message.
|
||||||
if shared.config.has_section(toAddressAtCurrentInboxRow):
|
if shared.config.has_section(toAddressAtCurrentInboxRow):
|
||||||
|
@ -2827,12 +2873,10 @@ more work your computer must do to send the message. A Time-To-Live of four or f
|
||||||
|
|
||||||
quotedText = self.quoted_text(unicode(messageAtCurrentInboxRow, 'utf-8'))
|
quotedText = self.quoted_text(unicode(messageAtCurrentInboxRow, 'utf-8'))
|
||||||
self.ui.textEditMessage.setText(quotedText)
|
self.ui.textEditMessage.setText(quotedText)
|
||||||
if tableWidget.item(currentInboxRow, 2).text()[0:3] in ['Re:', 'RE:']:
|
if acct.subject[0:3] in ['Re:', 'RE:']:
|
||||||
self.ui.lineEditSubject.setText(
|
self.ui.lineEditSubject.setText(acct.subject)
|
||||||
tableWidget.item(currentInboxRow, 2).text())
|
|
||||||
else:
|
else:
|
||||||
self.ui.lineEditSubject.setText(
|
self.ui.lineEditSubject.setText('Re: ' + acct.subject)
|
||||||
'Re: ' + tableWidget.item(currentInboxRow, 2).text())
|
|
||||||
self.ui.tabWidgetSend.setCurrentIndex(0)
|
self.ui.tabWidgetSend.setCurrentIndex(0)
|
||||||
self.ui.tabWidget.setCurrentIndex(1)
|
self.ui.tabWidget.setCurrentIndex(1)
|
||||||
|
|
||||||
|
@ -3774,6 +3818,23 @@ class SpecialAddressBehaviorDialog(QtGui.QDialog):
|
||||||
|
|
||||||
QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self))
|
QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self))
|
||||||
|
|
||||||
|
class EmailGatewayDialog(QtGui.QDialog):
|
||||||
|
|
||||||
|
def __init__(self, parent):
|
||||||
|
QtGui.QWidget.__init__(self, parent)
|
||||||
|
self.ui = Ui_EmailGatewayDialog()
|
||||||
|
self.ui.setupUi(self)
|
||||||
|
self.parent = parent
|
||||||
|
addressAtCurrentRow = parent.getCurrentAccount()
|
||||||
|
acct = accountClass(addressAtCurrentRow)
|
||||||
|
# if isinstance(acct, GatewayAccount):
|
||||||
|
label = shared.config.get(addressAtCurrentRow, 'label')
|
||||||
|
if label.find("@mailchuck.com") > -1:
|
||||||
|
self.ui.lineEditEmail.setText(label)
|
||||||
|
|
||||||
|
QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self))
|
||||||
|
|
||||||
|
|
||||||
class AddAddressDialog(QtGui.QDialog):
|
class AddAddressDialog(QtGui.QDialog):
|
||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
|
@ -4001,11 +4062,11 @@ def run():
|
||||||
if shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'):
|
if shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'):
|
||||||
myapp.showConnectDialog() # ask the user if we may connect
|
myapp.showConnectDialog() # ask the user if we may connect
|
||||||
|
|
||||||
try:
|
# try:
|
||||||
if shared.config.get('bitmessagesettings', 'mailchuck') < 1:
|
# if shared.config.get('bitmessagesettings', 'mailchuck') < 1:
|
||||||
myapp.showMigrationWizard(shared.config.get('bitmessagesettings', 'mailchuck'))
|
# myapp.showMigrationWizard(shared.config.get('bitmessagesettings', 'mailchuck'))
|
||||||
except:
|
# except:
|
||||||
myapp.showMigrationWizard(0)
|
# myapp.showMigrationWizard(0)
|
||||||
|
|
||||||
# only show after wizards and connect dialogs have completed
|
# only show after wizards and connect dialogs have completed
|
||||||
if not shared.config.getboolean('bitmessagesettings', 'startintray'):
|
if not shared.config.getboolean('bitmessagesettings', 'startintray'):
|
||||||
|
|
|
@ -5,6 +5,9 @@ import re
|
||||||
import sys
|
import sys
|
||||||
import inspect
|
import inspect
|
||||||
from helper_sql import *
|
from helper_sql import *
|
||||||
|
from addresses import decodeAddress
|
||||||
|
from pyelliptic.openssl import OpenSSL
|
||||||
|
import time
|
||||||
|
|
||||||
def accountClass(address):
|
def accountClass(address):
|
||||||
if not shared.config.has_section(address):
|
if not shared.config.has_section(address):
|
||||||
|
@ -57,6 +60,31 @@ class GatewayAccount(BMAccount):
|
||||||
gatewayName = None
|
gatewayName = None
|
||||||
def __init__(self, address):
|
def __init__(self, address):
|
||||||
super(BMAccount, self).__init__(address)
|
super(BMAccount, self).__init__(address)
|
||||||
|
|
||||||
|
def send(self):
|
||||||
|
status, addressVersionNumber, streamNumber, ripe = decodeAddress(self.toAddress)
|
||||||
|
ackdata = OpenSSL.rand(32)
|
||||||
|
t = ()
|
||||||
|
sqlExecute(
|
||||||
|
'''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''',
|
||||||
|
'',
|
||||||
|
self.toAddress,
|
||||||
|
ripe,
|
||||||
|
self.fromAddress,
|
||||||
|
self.subject,
|
||||||
|
self.message,
|
||||||
|
ackdata,
|
||||||
|
int(time.time()), # sentTime (this will never change)
|
||||||
|
int(time.time()), # lastActionTime
|
||||||
|
0, # sleepTill time. This will get set when the POW gets done.
|
||||||
|
'msgqueued',
|
||||||
|
0, # retryNumber
|
||||||
|
'sent', # folder
|
||||||
|
2, # encodingtype
|
||||||
|
shared.config.getint('bitmessagesettings', 'ttl')
|
||||||
|
)
|
||||||
|
|
||||||
|
shared.workerQueue.put(('sendmessage', self.toAddress))
|
||||||
|
|
||||||
def parseMessage(self, toAddress, fromAddress, subject, message):
|
def parseMessage(self, toAddress, fromAddress, subject, message):
|
||||||
super(BMAccount, self).parseMessage(toAddress, fromAddress, subject, message)
|
super(BMAccount, self).parseMessage(toAddress, fromAddress, subject, message)
|
||||||
|
@ -71,6 +99,26 @@ class MailchuckAccount(GatewayAccount):
|
||||||
regExpOutgoing = re.compile("(\S+) (.*)")
|
regExpOutgoing = re.compile("(\S+) (.*)")
|
||||||
def __init__(self, address):
|
def __init__(self, address):
|
||||||
super(GatewayAccount, self).__init__(address)
|
super(GatewayAccount, self).__init__(address)
|
||||||
|
|
||||||
|
def createMessage(self, toAddress, fromAddress, subject, message):
|
||||||
|
self.subject = toAddress + " " + subject
|
||||||
|
self.toAddress = self.relayAddress
|
||||||
|
self.fromAddress = fromAddress
|
||||||
|
self.message = message
|
||||||
|
|
||||||
|
def register(self, email):
|
||||||
|
self.toAddress = self.registrationAddress
|
||||||
|
self.subject = email
|
||||||
|
self.message = ""
|
||||||
|
self.fromAddress = self.address
|
||||||
|
self.send()
|
||||||
|
|
||||||
|
def unregister(self):
|
||||||
|
self.toAddress = self.unregistrationAddress
|
||||||
|
self.subject = ""
|
||||||
|
self.message = ""
|
||||||
|
self.fromAddress = self.address
|
||||||
|
self.send()
|
||||||
|
|
||||||
def parseMessage(self, toAddress, fromAddress, subject, message):
|
def parseMessage(self, toAddress, fromAddress, subject, message):
|
||||||
super(GatewayAccount, self).parseMessage(toAddress, fromAddress, subject, message)
|
super(GatewayAccount, self).parseMessage(toAddress, fromAddress, subject, message)
|
||||||
|
@ -84,10 +132,12 @@ class MailchuckAccount(GatewayAccount):
|
||||||
self.subject += matches.group(3)
|
self.subject += matches.group(3)
|
||||||
if not matches.group(2) is None:
|
if not matches.group(2) is None:
|
||||||
self.fromLabel = matches.group(2)
|
self.fromLabel = matches.group(2)
|
||||||
|
self.fromAddress = matches.group(2)
|
||||||
if toAddress == self.relayAddress:
|
if toAddress == self.relayAddress:
|
||||||
matches = self.regExpOutgoing.search(subject)
|
matches = self.regExpOutgoing.search(subject)
|
||||||
if not matches is None:
|
if not matches is None:
|
||||||
if not matches.group(2) is None:
|
if not matches.group(2) is None:
|
||||||
self.subject = matches.group(2)
|
self.subject = matches.group(2)
|
||||||
if not matches.group(1) is None:
|
if not matches.group(1) is None:
|
||||||
self.toLabel = matches.group(1)
|
self.toLabel = matches.group(1)
|
||||||
|
self.toAddress = matches.group(1)
|
64
src/bitmessageqt/emailgateway.py
Normal file
64
src/bitmessageqt/emailgateway.py
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'emailgateway.ui'
|
||||||
|
#
|
||||||
|
# Created: Fri Apr 26 17:43:31 2013
|
||||||
|
# by: PyQt4 UI code generator 4.9.4
|
||||||
|
#
|
||||||
|
# WARNING! All changes made in this file will be lost!
|
||||||
|
|
||||||
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
|
try:
|
||||||
|
_fromUtf8 = QtCore.QString.fromUtf8
|
||||||
|
except AttributeError:
|
||||||
|
_fromUtf8 = lambda s: s
|
||||||
|
|
||||||
|
class Ui_EmailGatewayDialog(object):
|
||||||
|
def setupUi(self, EmailGatewayDialog):
|
||||||
|
EmailGatewayDialog.setObjectName(_fromUtf8("EmailGatewayDialog"))
|
||||||
|
EmailGatewayDialog.resize(386, 172)
|
||||||
|
self.gridLayout = QtGui.QGridLayout(EmailGatewayDialog)
|
||||||
|
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
|
||||||
|
self.radioButtonRegister = QtGui.QRadioButton(EmailGatewayDialog)
|
||||||
|
self.radioButtonRegister.setChecked(True)
|
||||||
|
self.radioButtonRegister.setObjectName(_fromUtf8("radioButtonRegister"))
|
||||||
|
self.gridLayout.addWidget(self.radioButtonRegister, 1, 0, 1, 1)
|
||||||
|
self.radioButtonUnregister = QtGui.QRadioButton(EmailGatewayDialog)
|
||||||
|
self.radioButtonUnregister.setObjectName(_fromUtf8("radioButtonUnregister"))
|
||||||
|
self.gridLayout.addWidget(self.radioButtonUnregister, 4, 0, 1, 1)
|
||||||
|
self.label = QtGui.QLabel(EmailGatewayDialog)
|
||||||
|
self.label.setWordWrap(True)
|
||||||
|
self.label.setObjectName(_fromUtf8("label"))
|
||||||
|
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
|
||||||
|
self.label_2 = QtGui.QLabel(EmailGatewayDialog)
|
||||||
|
self.label_2.setObjectName(_fromUtf8("label_2"))
|
||||||
|
self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
|
||||||
|
self.lineEditEmail = QtGui.QLineEdit(EmailGatewayDialog)
|
||||||
|
self.lineEditEmail.setEnabled(True)
|
||||||
|
self.lineEditEmail.setObjectName(_fromUtf8("lineEditEmail"))
|
||||||
|
self.gridLayout.addWidget(self.lineEditEmail, 3, 0, 1, 1)
|
||||||
|
self.buttonBox = QtGui.QDialogButtonBox(EmailGatewayDialog)
|
||||||
|
self.buttonBox.setMinimumSize(QtCore.QSize(368, 0))
|
||||||
|
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
||||||
|
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
|
||||||
|
self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
|
||||||
|
self.gridLayout.addWidget(self.buttonBox, 5, 0, 1, 1)
|
||||||
|
|
||||||
|
self.retranslateUi(EmailGatewayDialog)
|
||||||
|
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), EmailGatewayDialog.accept)
|
||||||
|
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), EmailGatewayDialog.reject)
|
||||||
|
QtCore.QObject.connect(self.radioButtonRegister, QtCore.SIGNAL(_fromUtf8("clicked(bool)")), self.lineEditEmail.setEnabled)
|
||||||
|
QtCore.QObject.connect(self.radioButtonUnregister, QtCore.SIGNAL(_fromUtf8("clicked(bool)")), self.lineEditEmail.setDisabled)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(EmailGatewayDialog)
|
||||||
|
EmailGatewayDialog.setTabOrder(self.radioButtonRegister, self.lineEditEmail)
|
||||||
|
EmailGatewayDialog.setTabOrder(self.lineEditEmail, self.radioButtonUnregister)
|
||||||
|
EmailGatewayDialog.setTabOrder(self.radioButtonUnregister, self.buttonBox)
|
||||||
|
|
||||||
|
def retranslateUi(self, EmailGatewayDialog):
|
||||||
|
EmailGatewayDialog.setWindowTitle(QtGui.QApplication.translate("EmailGatewayDialog", "Email gateway", None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
self.radioButtonRegister.setText(QtGui.QApplication.translate("EmailGatewayDialog", "Register on email gateway", None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
self.radioButtonUnregister.setText(QtGui.QApplication.translate("EmailGatewayDialog", "Unregister from email gateway", None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
self.label.setText(QtGui.QApplication.translate("EmailGatewayDialog", "Email gateway allows you to communicate with email users. Currently, only the Mailchuck email gateway (@mailchuck.com) is available.", None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
self.label_2.setText(QtGui.QApplication.translate("EmailGatewayDialog", "Desired email address (including @mailchuck.com):", None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
|
157
src/bitmessageqt/emailgateway.ui
Normal file
157
src/bitmessageqt/emailgateway.ui
Normal file
|
@ -0,0 +1,157 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>EmailGatewayDialog</class>
|
||||||
|
<widget class="QDialog" name="EmailGatewayDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>386</width>
|
||||||
|
<height>172</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Email gateway</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Desired email address (including @mailchuck.com)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QRadioButton" name="radioButtonRegister">
|
||||||
|
<property name="text">
|
||||||
|
<string>Register on email gateway</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="0">
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>368</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
|
<widget class="QLineEdit" name="lineEditEmailAddress">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>@mailchuck.com</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Email gateway alows you to communicate with email users. Currently, only the Mailchuck email gateway (@mailchuck.com) is available.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="0">
|
||||||
|
<widget class="QRadioButton" name="radioButtonUnregister">
|
||||||
|
<property name="text">
|
||||||
|
<string>Unregister from email gateway</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>radioButtonRegister</tabstop>
|
||||||
|
<tabstop>lineEditEmailAddress</tabstop>
|
||||||
|
<tabstop>buttonBox</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>EmailGatewayDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>227</x>
|
||||||
|
<y>152</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>171</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>EmailGatewayDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>295</x>
|
||||||
|
<y>158</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>171</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>radioButtonRegister</sender>
|
||||||
|
<signal>clicked(bool)</signal>
|
||||||
|
<receiver>lineEditEmailAddress</receiver>
|
||||||
|
<slot>setEnabled(bool)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>95</x>
|
||||||
|
<y>40</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>94</x>
|
||||||
|
<y>123</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>radioButtonUnregister</sender>
|
||||||
|
<signal>clicked(bool)</signal>
|
||||||
|
<receiver>lineEditEmailAddress</receiver>
|
||||||
|
<slot>setDisabled(bool)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>139</x>
|
||||||
|
<y>19</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>187</x>
|
||||||
|
<y>123</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
Loading…
Reference in New Issue
Block a user