X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/07242504e450410dbafb5c627434bddd1140ac51..939c323eadd7ec9d3656bfe59a46c630415bdb19:/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py index e58f19a0..25639818 100755 --- a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py +++ b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py @@ -2,16 +2,18 @@ from Plugins.Plugin import PluginDescriptor from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigText, ConfigSelection, ConfigYesNo,ConfigText from Components.ConfigList import ConfigListScreen from Components.ActionMap import ActionMap -from Components.Label import Label +from Components.Sources.StaticText import StaticText from Components.Pixmap import Pixmap from Screens.Screen import Screen from Screens.VirtualKeyBoard import VirtualKeyBoard from Screens.ChoiceBox import ChoiceBox from Screens.MessageBox import MessageBox from enigma import ePoint +from Tools import Notifications import os from twisted.mail import smtp, relaymanager +import MimeWriter, mimetools, StringIO config.plugins.crashlogautosubmit = ConfigSubsection() config.plugins.crashlogautosubmit.sendmail = ConfigSelection(default = "send", choices = [ @@ -21,24 +23,25 @@ config.plugins.crashlogautosubmit.sendlog = ConfigSelection(default = "rename", config.plugins.crashlogautosubmit.attachemail = ConfigYesNo(default = False) config.plugins.crashlogautosubmit.email = ConfigText(default = "myemail@home.com", fixed_size = False) config.plugins.crashlogautosubmit.name = ConfigText(default = "Dreambox User", fixed_size = False) - +config.plugins.crashlogautosubmit.sendAnonCrashlog = ConfigYesNo(default = True) +config.plugins.crashlogautosubmit.addNetwork = ConfigYesNo(default = False) +config.plugins.crashlogautosubmit.addWlan = ConfigYesNo(default = False) class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen): oldMailEntryValue = config.plugins.crashlogautosubmit.sendmail.value skin = """ - - - - - - - - - - - + + + + + + + + + + """ def __init__(self, session): @@ -49,6 +52,9 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen): self.addEmailEntry = None self.EmailEntry = None self.NameEntry = None + self.AnonCrashlogEntry = None + self.NetworkEntry = None + self.WlanEntry = None self.msgCrashlogMailer = False self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions" ], @@ -59,23 +65,21 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen): "green": self.keySave, }, -2) - self["VirtualKB"] = ActionMap(["ColorActions" ], + self["VirtualKB"] = ActionMap(["VirtualKeyboardActions" ], { - "yellow": self.KeyYellow, + "showVirtualKeyboard": self.KeyText, }, -1) self.list = [] ConfigListScreen.__init__(self, self.list,session = self.session) self.createSetup() - self["VKeyButton"] = Pixmap() + self["key_red"] = StaticText(_("Close")) + self["key_green"] = StaticText(_("Save")) + self["status"] = StaticText() self["VKeyIcon"] = Pixmap() - self["closetext"] = Label(_("Close")) - self["installtext"] = Label(_("Save")) - self["HelpWindow"] = Label() - self["status"] = Label() + self["HelpWindow"] = Pixmap() - self["VKeyButton"].hide() self["VKeyIcon"].hide() self["VirtualKB"].setEnabled(False) self.onShown.append(self.setWindowTitle) @@ -93,7 +97,7 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen): ConfigListScreen.keyRight(self) self.newConfig() - def KeyYellow(self): + def KeyText(self): if self["config"].getCurrent() == self.EmailEntry: self.session.openWithCallback(self.EmailCallback, VirtualKeyBoard, title = (_("Please enter your email address here:")), text = config.plugins.crashlogautosubmit.email.value) if self["config"].getCurrent() == self.NameEntry: @@ -116,6 +120,10 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen): self.addEmailEntry = getConfigListEntry(_("Include your email and name (optional) in the mail?"), config.plugins.crashlogautosubmit.attachemail) self.EmailEntry = getConfigListEntry(_("Your email address:"), config.plugins.crashlogautosubmit.email) self.NameEntry = getConfigListEntry(_("Your name (optional):"), config.plugins.crashlogautosubmit.name) + self.AnonCrashlogEntry = getConfigListEntry(_("Anonymize crashlog?"), config.plugins.crashlogautosubmit.sendAnonCrashlog) + self.NetworkEntry = getConfigListEntry(_("Add network configuration?"), config.plugins.crashlogautosubmit.addNetwork) + self.WlanEntry = getConfigListEntry(_("Add WLAN configuration?"), config.plugins.crashlogautosubmit.addWlan) + self.list.append( self.MailEntry ) if config.plugins.crashlogautosubmit.sendmail.value is not "send_never": self.list.append( self.LogEntry ) @@ -123,6 +131,9 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen): if config.plugins.crashlogautosubmit.attachemail.value is True: self.list.append( self.EmailEntry ) self.list.append( self.NameEntry ) + self.list.append( self.AnonCrashlogEntry ) + self.list.append( self.NetworkEntry ) + self.list.append( self.WlanEntry ) self["config"].list = self.list self["config"].l.setList(self.list) @@ -163,9 +174,17 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen): self["status"].setText(_("Optionally enter your name if you want to.")) self.enableVKeyIcon() self.showKeypad() + elif current == self.AnonCrashlogEntry: + self["status"].setText(_("Adds enigma2 settings and dreambox model informations like SN, rev... if enabled.")) + self.disableVKeyIcon() + elif current == self.NetworkEntry: + self["status"].setText(_("Adds network configuration if enabled.")) + self.disableVKeyIcon() + elif current == self.WlanEntry: + self["status"].setText(_("Adds wlan configuration if enabled.")) + self.disableVKeyIcon() def enableVKeyIcon(self): - self["VKeyButton"].show() self["VKeyIcon"].show() self["VirtualKB"].setEnabled(True) @@ -178,7 +197,6 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen): current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) def disableVKeyIcon(self): - self["VKeyButton"].hide() self["VKeyIcon"].hide() self["VirtualKB"].setEnabled(False) @@ -219,13 +237,28 @@ class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen): def mxServerFound(mxServer,session): print "[CrashlogAutoSubmit] - mxServerFound -->", mxServer - attachments = [] crashLogFilelist = [] + message = StringIO.StringIO() + writer = MimeWriter.MimeWriter(message) mailFrom = "enigma2@crashlog.dream-multimedia-tv.de" mailTo = "enigma2@crashlog.dream-multimedia-tv.de" subject = "Automatically generated crashlogmail" - mailtext = "\nHello\n\nHere are some crashlogs i found for you.\n" - mailfooter = "\n\nThis is an automatically generated email from the CrashlogAutoSubmit plugin.\n\n\nHave a nice day.\n" + # Define the main body headers. + writer.addheader('To', "dream-multimedia-crashlogs ") + writer.addheader('From', "CrashlogAutoSubmitter ") + writer.addheader('Subject', str(subject)) + writer.addheader('Date', smtp.rfc822date()) + if config.plugins.crashlogautosubmit.attachemail.value is True: + if str(config.plugins.crashlogautosubmit.email.value) != "myemail@home.com": + writer.addheader('Reply-To', str(str(config.plugins.crashlogautosubmit.email.value))) + writer.addheader('MIME-Version', '1.0') + writer.startmultipartbody('mixed') + # start with a text/plain part + part = writer.nextpart() + body = part.startbody('text/plain') + part.flushheaders() + # Define the message body + body_text1 = "\nHello\n\nHere are some crashlogs i found for you.\n" if str(config.plugins.crashlogautosubmit.email.value) == "myemail@home.com": user_email = "" else: @@ -234,11 +267,9 @@ def mxServerFound(mxServer,session): user_name = "" else: user_name = "\n\nOptional supplied name: " + str(config.plugins.crashlogautosubmit.name.value) - headers = { 'from': 'CrashlogAutoSubmitter ', 'to': 'dream-multimedia-crashlogs ', 'subject' : str(subject) } - mailData = mailtext + user_email + user_name + mailfooter - if config.plugins.crashlogautosubmit.attachemail.value is True: - if str(config.plugins.crashlogautosubmit.email.value) != "myemail@home.com": - headers["reply-to"] = str(config.plugins.crashlogautosubmit.email.value) + body_text2 = "\n\nThis is an automatically generated email from the CrashlogAutoSubmit plugin.\n\n\nHave a nice day.\n" + body_text = body_text1 + user_email + user_name + body_text2 + body.write(body_text) list = ( (_("Yes"), "send"), @@ -263,16 +294,17 @@ def mxServerFound(mxServer,session): def send_mail(): print "[CrashlogAutoSubmit] - send_mail" - attachments = [] if len(crashLogFilelist): for crashlog in crashLogFilelist: filename = str(os.path.basename(crashlog)) - mimetype = "text/plain" - f = open (crashlog, 'r') - attachment = str(f.read()) - f.close() - attachments.append ((filename,mimetype,attachment)) - sending = smtp.sendEmail(str(mxServer), mailFrom, mailTo, str(mailData), headers, attachments) + subpart = writer.nextpart() + subpart.addheader("Content-Transfer-Encoding", 'base64') + subpart.addheader("Content-Disposition",'attachment; filename="%s"' % filename) + subpart.addheader('Content-Description', 'Enigma2 crashlog') + body = subpart.startbody("%s; name=%s" % ('application/octet-stream', filename)) + mimetools.encode(open(crashlog, 'rb'), body, 'base64') + writer.lastpart() + sending = smtp.sendmail(str(mxServer), mailFrom, mailTo, message.getvalue()) sending.addCallback(handleSuccess).addErrback(handleError) def handleAnswer(answer): @@ -296,7 +328,6 @@ def mxServerFound(mxServer,session): elif answer == "send_not": print "[CrashlogAutoSubmit] - not sending crashlogs for this time." - for crashlog in os.listdir('/media/hdd'): if crashlog.startswith("enigma2_crash_") and crashlog.endswith(".log"): print "[CrashlogAutoSubmit] - found crashlog: ",os.path.basename(crashlog) @@ -304,7 +335,7 @@ def mxServerFound(mxServer,session): if len(crashLogFilelist): if config.plugins.crashlogautosubmit.sendmail.value == "send": - session.openWithCallback(handleAnswer, ChoiceBox, title=_("Crashlogs found!\nSend them to Dream Multimedia ?"), list = list) + Notifications.AddNotificationWithCallback(handleAnswer, ChoiceBox, title=_("Crashlogs found!\nSend them to Dream Multimedia?"), list = list) elif config.plugins.crashlogautosubmit.sendmail.value == "send_always": send_mail() else: @@ -313,14 +344,10 @@ def mxServerFound(mxServer,session): def getMailExchange(host): print "[CrashlogAutoSubmit] - getMailExchange" + return relaymanager.MXCalculator().getMX(host).addCallback(_gotMXRecord) - def handleMXError(error): - print "[CrashlogAutoSubmit] - DNS-Error, sending aborted -->", error.getErrorMessage() - - def cbMX(mxRecord): - return str(mxRecord.name) - - return relaymanager.MXCalculator().getMX(host).addCallback(cbMX).addErrback(handleMXError) +def _gotMXRecord(mxRecord): + return str(mxRecord.name) def startMailer(session): @@ -328,8 +355,15 @@ def startMailer(session): print "[CrashlogAutoSubmit] - not starting CrashlogAutoSubmit" return False + def gotMXServer(mxServer): + print "[CrashlogAutoSubmit] gotMXServer: ",mxServer + mxServerFound(mxServer,session) + + def handleMXError(error): + print "[CrashlogAutoSubmit] - MX resolve ERROR:", error.getErrorMessage() + if not config.misc.firstrun.value: - getMailExchange('crashlog.dream-multimedia-tv.de').addCallback(mxServerFound,session) + getMailExchange('crashlog.dream-multimedia-tv.de').addCallback(gotMXServer).addErrback(handleMXError) def callCrashMailer(result,session): @@ -357,7 +391,7 @@ def selSetup(menuid, **kwargs): if menuid != "system": return [ ] - return [(_("Crashlog settings") + "...", openconfig, "crashlog_config", 70)] + return [(_("Crashlog settings"), openconfig, "crashlog_config", 70)] def Plugins(**kwargs):