support.py.bak
1 """Composing support request message functions.""" 2 # pylint: disable=no-member 3 4 import ctypes 5 import ssl 6 import sys 7 import time 8 9 from PyQt4 import QtCore 10 11 import account 12 import defaults 13 import network.stats 14 import paths 15 import proofofwork 16 import queues 17 import state 18 from bmconfigparser import config 19 from foldertree import AccountMixin 20 from helper_sql import sqlExecute, sqlQuery 21 from l10n import getTranslationLanguage 22 from openclpow import openclEnabled 23 from pyelliptic.openssl import OpenSSL 24 from settings import getSOCKSProxyType 25 from version import softwareVersion 26 from tr import _translate 27 28 29 # this is BM support address going to Peter Surda 30 OLD_SUPPORT_ADDRESS = 'BM-2cTkCtMYkrSPwFTpgcBrMrf5d8oZwvMZWK' 31 SUPPORT_ADDRESS = 'BM-2cUdgkDDAahwPAU6oD2A7DnjqZz3hgY832' 32 SUPPORT_LABEL = _translate("Support", "PyBitmessage support") 33 SUPPORT_MY_LABEL = _translate("Support", "My new address") 34 SUPPORT_SUBJECT = 'Support request' 35 SUPPORT_MESSAGE = _translate("Support", ''' 36 You can use this message to send a report to one of the PyBitmessage core \ 37 developers regarding PyBitmessage or the mailchuck.com email service. \ 38 If you are using PyBitmessage involuntarily, for example because \ 39 your computer was infected with ransomware, this is not an appropriate venue \ 40 for resolving such issues. 41 42 Please describe what you are trying to do: 43 44 Please describe what you expect to happen: 45 46 Please describe what happens instead: 47 48 49 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 50 Please write above this line and if possible, keep the information about your \ 51 environment below intact. 52 53 PyBitmessage version: {} 54 Operating system: {} 55 Architecture: {}bit 56 Python Version: {} 57 OpenSSL Version: {} 58 Frozen: {} 59 Portable mode: {} 60 C PoW: {} 61 OpenCL PoW: {} 62 Locale: {} 63 SOCKS: {} 64 UPnP: {} 65 Connected hosts: {} 66 ''') 67 68 69 def checkAddressBook(myapp): 70 sqlExecute('DELETE from addressbook WHERE address=?', OLD_SUPPORT_ADDRESS) 71 queryreturn = sqlQuery('SELECT * FROM addressbook WHERE address=?', SUPPORT_ADDRESS) 72 if queryreturn == []: 73 sqlExecute( 74 'INSERT INTO addressbook VALUES (?,?)', 75 SUPPORT_LABEL.toUtf8(), SUPPORT_ADDRESS) 76 myapp.rerenderAddressBook() 77 78 79 def checkHasNormalAddress(): 80 for address in config.addresses(): 81 acct = account.accountClass(address) 82 if acct.type == AccountMixin.NORMAL and config.safeGetBoolean(address, 'enabled'): 83 return address 84 return False 85 86 87 def createAddressIfNeeded(myapp): 88 if not checkHasNormalAddress(): 89 queues.addressGeneratorQueue.put(( 90 'createRandomAddress', 4, 1, 91 str(SUPPORT_MY_LABEL.toUtf8()), 92 1, "", False, 93 defaults.networkDefaultProofOfWorkNonceTrialsPerByte, 94 defaults.networkDefaultPayloadLengthExtraBytes 95 )) 96 while state.shutdown == 0 and not checkHasNormalAddress(): 97 time.sleep(.2) 98 myapp.rerenderComboBoxSendFrom() 99 return checkHasNormalAddress() 100 101 102 def createSupportMessage(myapp): 103 checkAddressBook(myapp) 104 address = createAddressIfNeeded(myapp) 105 if state.shutdown: 106 return 107 108 myapp.ui.lineEditSubject.setText(SUPPORT_SUBJECT) 109 addrIndex = myapp.ui.comboBoxSendFrom.findData( 110 address, QtCore.Qt.UserRole, 111 QtCore.Qt.MatchFixedString | QtCore.Qt.MatchCaseSensitive) 112 if addrIndex == -1: # something is very wrong 113 return 114 myapp.ui.comboBoxSendFrom.setCurrentIndex(addrIndex) 115 myapp.ui.lineEditTo.setText(SUPPORT_ADDRESS) 116 117 version = softwareVersion 118 commit = paths.lastCommit().get('commit') 119 if commit: 120 version += " GIT " + commit 121 122 os = sys.platform 123 if os == "win32": 124 windowsversion = sys.getwindowsversion() 125 os = "Windows " + str(windowsversion[0]) + "." + str(windowsversion[1]) 126 else: 127 try: 128 from os import uname 129 unixversion = uname() 130 os = unixversion[0] + " " + unixversion[2] 131 except: 132 pass 133 architecture = "32" if ctypes.sizeof(ctypes.c_voidp) == 4 else "64" 134 pythonversion = sys.version 135 136 opensslversion = "%s (Python internal), %s (external for PyElliptic)" % ( 137 ssl.OPENSSL_VERSION, OpenSSL._version) 138 139 frozen = "N/A" 140 if paths.frozen: 141 frozen = paths.frozen 142 portablemode = "True" if state.appdata == paths.lookupExeFolder() else "False" 143 cpow = "True" if proofofwork.bmpow else "False" 144 openclpow = str( 145 config.safeGet('bitmessagesettings', 'opencl') 146 ) if openclEnabled() else "None" 147 locale = getTranslationLanguage() 148 socks = getSOCKSProxyType(config) or "N/A" 149 upnp = config.safeGet('bitmessagesettings', 'upnp', "N/A") 150 connectedhosts = len(network.stats.connectedHostsList()) 151 152 myapp.ui.textEditMessage.setText(unicode(SUPPORT_MESSAGE, 'utf-8').format( 153 version, os, architecture, pythonversion, opensslversion, frozen, 154 portablemode, cpow, openclpow, locale, socks, upnp, connectedhosts)) 155 156 # single msg tab 157 myapp.ui.tabWidgetSend.setCurrentIndex( 158 myapp.ui.tabWidgetSend.indexOf(myapp.ui.sendDirect) 159 ) 160 # send tab 161 myapp.ui.tabWidget.setCurrentIndex( 162 myapp.ui.tabWidget.indexOf(myapp.ui.send) 163 )