From: acid-burn Date: Wed, 29 Jul 2009 07:45:35 +0000 (+0200) Subject: add CrashlogAutoSubmit Plugin for automatic crashlog mailing, needs oe update X-Git-Tag: 2.6.0~174 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/0f4f760b0db7365d6603ddb2a8430ccf8fe4aceb add CrashlogAutoSubmit Plugin for automatic crashlog mailing, needs oe update --- diff --git a/configure.ac b/configure.ac index e15e6762..cba4cfa7 100755 --- a/configure.ac +++ b/configure.ac @@ -127,6 +127,7 @@ lib/python/Plugins/SystemPlugins/Videomode/Makefile lib/python/Plugins/SystemPlugins/VideoTune/Makefile lib/python/Plugins/SystemPlugins/DiseqcTester/Makefile lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/Makefile +lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/Makefile lib/python/Plugins/DemoPlugins/Makefile lib/python/Plugins/DemoPlugins/TestPlugin/Makefile lib/python/Plugins/Extensions/Makefile diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/LICENSE b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/LICENSE new file mode 100755 index 00000000..f8473e02 --- /dev/null +++ b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/LICENSE @@ -0,0 +1,12 @@ +This plugin is licensed under the Creative Commons +Attribution-NonCommercial-ShareAlike 3.0 Unported +License. To view a copy of this license, visit +http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative +Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. + +Alternatively, this plugin may be distributed and executed on hardware which +is licensed by Dream Multimedia GmbH. + +This plugin is NOT free software. It is open source, you are allowed to +modify it (if you keep the license), but it may not be commercially +distributed other than under the conditions noted above. diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/Makefile.am b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/Makefile.am new file mode 100755 index 00000000..23d14dae --- /dev/null +++ b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/Makefile.am @@ -0,0 +1,7 @@ +installdir = $(LIBDIR)/enigma2/python/Plugins/SystemPlugins/CrashlogAutoSubmit + +install_PYTHON = \ + __init__.py \ + plugin.py + +install_DATA = LICENSE diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/__init__.py b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/__init__.py new file mode 100755 index 00000000..e69de29b diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/Makefile.am new file mode 100755 index 00000000..080a35fd --- /dev/null +++ b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/Makefile.am @@ -0,0 +1,3 @@ +installdir = $(LIBDIR)/enigma2/python/Plugins/meta/ + +install_DATA = plugin_crashlogautosubmit.xml diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/plugin_crashlogautosubmit.xml b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/plugin_crashlogautosubmit.xml new file mode 100755 index 00000000..261eb497 --- /dev/null +++ b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/plugin_crashlogautosubmit.xml @@ -0,0 +1,26 @@ + + + + + + Dream Multimedia + CrashlogAutoSubmit + enigma2-plugin-systemplugins-crashlogautosubmit + Automatically send crashlogs to Dream Multimedia + With the CrashlogAutoSubmit extension it is possible to automatically send crashlogs + found on your Harddrive to Dream Multimedia + + + + Dream Multimedia + CrashlogAutoSubmit + enigma2-plugin-systemplugins-crashlogautosubmit + Automatisches versenden von Crashlogs an Dream Multimedia + Mit dem CrashlogAutoSubmit Plugin ist es möglich auf Ihrer Festplatte + gefundene Crashlogs automatisch an Dream Multimedia zu versenden. + + + + + + diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py new file mode 100755 index 00000000..aa632222 --- /dev/null +++ b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py @@ -0,0 +1,215 @@ +from Plugins.Plugin import PluginDescriptor +from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigText, ConfigSelection +from Components.ConfigList import ConfigListScreen +from Components.ActionMap import ActionMap +from Components.Label import Label +from Screens.ChoiceBox import ChoiceBox +from Screens.Screen import Screen +import os +from twisted.mail import smtp, relaymanager + +config.plugins.crashlogautosubmit = ConfigSubsection() +config.plugins.crashlogautosubmit.sendmail = ConfigSelection(default = "send", choices = [ + ("send", _("Always ask before sending")), ("send_always", _("Don't ask, just send")), ("send_never", _("Disable crashlog reporting"))]) +config.plugins.crashlogautosubmit.sendlog = ConfigSelection(default = "rename", choices = [ + ("delete", _("Delete crashlogs")), ("rename", _("Rename crashlogs"))]) + + +class CrashlogAutoSubmitConfiguration(Screen, ConfigListScreen): + skin = """ + + + + + + + """ + + def __init__(self, session): + Screen.__init__(self, session) + self.session = session + self.MailEntry = None + self.LogEntry = None + + self["shortcuts"] = ActionMap(["ShortcutActions", "WizardActions" ], + { + "ok": self.keySave, + "back": self.keyCancel, + "red": self.keyCancel, + "green": self.keySave, + }, -1) + + self.list = [] + ConfigListScreen.__init__(self, self.list,session = self.session) + self.createSetup() + + self["closetext"] = Label(_("Close")) + self["installtext"] = Label(_("Save")) + self.onShown.append(self.setWindowTitle) + + def setWindowTitle(self): + self.setTitle(_("CrashlogAutoSubmitConfiguration")) + + def exit(self): + self.close(False, self.session) + + def keyLeft(self): + ConfigListScreen.keyLeft(self) + self.newConfig() + + def keyRight(self): + ConfigListScreen.keyRight(self) + self.newConfig() + + def createSetup(self): + self.list = [] + self.MailEntry = getConfigListEntry(_("How to handle found crashlogs:"), config.plugins.crashlogautosubmit.sendmail) + self.LogEntry = getConfigListEntry(_("What to do with sent crashlogs:"), config.plugins.crashlogautosubmit.sendlog) + self.list.append(self.MailEntry) + if config.plugins.crashlogautosubmit.sendmail.value is not "send_never": + self.list.append(self.LogEntry ) + self["config"].list = self.list + self["config"].l.setList(self.list) + + def newConfig(self): + if self["config"].getCurrent() == self.MailEntry: + self.createSetup() + + def keyCancel(self): + print "cancel" + for x in self["config"].list: + x[1].cancel() + self.close(False, self.session) + + def keySave(self): + print "saving" + config.plugins.crashlogautosubmit.sendmail.save() + config.plugins.crashlogautosubmit.sendlog.save() + for x in self["config"].list: + x[1].save() + config.plugins.crashlogautosubmit.save() + config.plugins.save() + self.close(True, self.session) + + +def mxServerFound(mxServer,session): + print "[CrashlogAutoSubmit] - mxServerFound -->", mxServer + 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\n" + mailfooter = "This is an automatically generated email. You cant answer!!!" + headers = { 'from': 'CrashlogAutoSubmitter ', 'to': 'dream-multimedia-crashlogs ', 'subject' : str(subject) } + mailData = mailtext + mailfooter + attachments = [] #(filename, mimetype, attachment as string) + crashLogFilelist = [] + + list = ( + (_("Yes"), "send"), + (_("Yes, and don't ask again."), "send_always"), + (_("No, send them never."), "send_never") + ) + + def handleError(error): + print "[CrashlogAutoSubmit] - Message send Error -->", error.getErrorMessage() + + def handleSuccess(result): + print "[CrashlogAutoSubmit] - Message sent successfully -->",result + if len(crashLogFilelist): + for crashlog in crashLogFilelist: + if config.plugins.crashlogautosubmit.sendlog.value == "delete": + os.remove(crashlog) + elif config.plugins.crashlogautosubmit.sendlog.value == "rename": + currfilename = str(os.path.basename(crashlog)) + newfilename = "/media/hdd/" + currfilename + ".sent" + os.rename(crashlog,newfilename) + + 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) + sending.addCallback(handleSuccess).addErrback(handleError) + + def handleAnswer(answer): + answer = answer and answer[1] + print "[CrashlogAutoSubmit] - handleAnswer --> ",answer + if answer == "send": + send_mail() + elif answer == "send_always": + config.plugins.crashlogautosubmit.sendmail.value = "send_always" + config.plugins.crashlogautosubmit.sendmail.save() + config.plugins.crashlogautosubmit.save() + config.plugins.save() + config.save() + send_mail() + elif answer in ( None, "send_never"): + config.plugins.crashlogautosubmit.sendmail.value = "send_never" + config.plugins.crashlogautosubmit.sendmail.save() + config.plugins.crashlogautosubmit.save() + config.plugins.save() + config.save() + + for crashlog in os.listdir('/media/hdd'): + if crashlog.startswith("enigma2_crash_") and crashlog.endswith(".log"): + print "[CrashlogAutoSubmit] - found crashlog: ",os.path.basename(crashlog) + crashLogFilelist.append('/media/hdd/' + crashlog) + + if len(crashLogFilelist): + if config.plugins.crashlogautosubmit.sendmail.value == "send": + session.openWithCallback(handleAnswer, ChoiceBox, title=_("Crashlogs found!\nSend them to Dream Multimedia ?"), list = list) + elif config.plugins.crashlogautosubmit.sendmail.value == "send_always": + send_mail() + + +def getMailExchange(host): + print "[CrashlogAutoSubmit] - getMailExchange" + + 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 startMailer(session): + if config.plugins.crashlogautosubmit.sendmail.value == "send_never": + print "[CrashlogAutoSubmit] - not starting CrashlogAutoSubmit" + return False + + getMailExchange('crashlog.dream-multimedia-tv.de').addCallback(mxServerFound,session) + + +def autostart(reason, **kwargs): + print "[CrashlogAutoSubmit] - autostart" + if "session" in kwargs: + try: + startMailer(kwargs["session"]) + except ImportError, e: + print "[CrashlogAutoSubmit] Twisted-mail not available, not starting CrashlogAutoSubmitter", e + +def openconfig(session, **kwargs): + session.openWithCallback(configCB, CrashlogAutoSubmitConfiguration) + +def configCB(result, session): + if result is True: + print "[CrashlogAutoSubmit] - config changed" + startMailer(session) + else: + print "[CrashlogAutoSubmit] - config not changed" + + +def Plugins(**kwargs): + return [PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], fnc = autostart), + PluginDescriptor(name=_("CrashlogAutoSubmit"), description=_("Configuration for the CrashlogAutoSubmitter"), + where=[PluginDescriptor.WHERE_PLUGINMENU], fnc=openconfig)] + diff --git a/lib/python/Plugins/SystemPlugins/Makefile.am b/lib/python/Plugins/SystemPlugins/Makefile.am index 634c7f42..8d256445 100755 --- a/lib/python/Plugins/SystemPlugins/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/Makefile.am @@ -1,3 +1,4 @@ SUBDIRS = SoftwareManager FrontprocessorUpgrade PositionerSetup Satfinder \ SkinSelector SatelliteEquipmentControl Videomode VideoTune Hotplug \ - DefaultServicesScanner NFIFlash DiseqcTester CommonInterfaceAssignment + DefaultServicesScanner NFIFlash DiseqcTester CommonInterfaceAssignment \ + CrashlogAutoSubmit