Merge branch 'master' of fraxinas@git.opendreambox.org:/git/enigma2
authorFraxinas <andreas.frisch@multimedia-labs.de>
Wed, 29 Jul 2009 08:26:15 +0000 (10:26 +0200)
committerFraxinas <andreas.frisch@multimedia-labs.de>
Wed, 29 Jul 2009 08:26:15 +0000 (10:26 +0200)
configure.ac
lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/LICENSE [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/__init__.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/Makefile.am [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/plugin_crashlogautosubmit.xml [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py [new file with mode: 0755]
lib/python/Plugins/SystemPlugins/Makefile.am

index e15e676..cba4cfa 100755 (executable)
@@ -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 (executable)
index 0000000..f8473e0
--- /dev/null
@@ -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 (executable)
index 0000000..23d14da
--- /dev/null
@@ -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 (executable)
index 0000000..e69de29
diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/meta/Makefile.am
new file mode 100755 (executable)
index 0000000..080a35f
--- /dev/null
@@ -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 (executable)
index 0000000..261eb49
--- /dev/null
@@ -0,0 +1,26 @@
+<default>
+         <prerequisites>
+                    <tag type="System" />
+         </prerequisites>
+          <info language="en">
+                    <author>Dream Multimedia</author>
+                    <name>CrashlogAutoSubmit</name>
+                    <packagename>enigma2-plugin-systemplugins-crashlogautosubmit</packagename>
+                    <shortdescription>Automatically send crashlogs to Dream Multimedia</shortdescription>
+                    <description>With the CrashlogAutoSubmit extension it is possible to automatically send crashlogs
+                   found on your Harddrive to Dream Multimedia
+                    </description>
+          </info>
+          <info language="de">
+                    <author>Dream Multimedia</author>
+                    <name>CrashlogAutoSubmit</name>
+                    <packagename>enigma2-plugin-systemplugins-crashlogautosubmit</packagename>
+                    <shortdescription>Automatisches versenden von Crashlogs an Dream Multimedia</shortdescription>
+                    <description>Mit dem CrashlogAutoSubmit Plugin ist es möglich auf Ihrer Festplatte
+                   gefundene Crashlogs automatisch  an Dream Multimedia zu versenden.
+                    </description>
+          </info>
+         <files type="package"> <!-- without version, without .ipk -->
+               <file type="package" name="enigma2-plugin-systemplugins-crashlogautosubmit" />
+         </files>
+</default>
diff --git a/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py b/lib/python/Plugins/SystemPlugins/CrashlogAutoSubmit/plugin.py
new file mode 100755 (executable)
index 0000000..aa63222
--- /dev/null
@@ -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 = """
+               <screen name="CrashlogAutoSubmitConfiguration" position="80,80" size="560,400" title="CrashlogAutoSubmitConfiguration..." >
+                       <widget name="config" zPosition="2" position="5,5" size="550,360" scrollbarMode="showOnDemand" transparent="1" />
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,370" zPosition="2" size="140,40" transparent="1" alphatest="on" />
+                       <widget name="closetext" position="0,370" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,370" zPosition="2" size="140,40" transparent="1" alphatest="on" />
+                       <widget name="installtext" position="140,370" zPosition="10" size="140,40" halign="center" valign="center" font="Regular;22" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
+               </screen>"""
+
+       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 <enigma2@crashlog.dream-multimedia-tv.de>', 'to': 'dream-multimedia-crashlogs <enigma2@crashlog.dream-multimedia-tv.de>', '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)]
+
index 634c7f4..8d25644 100755 (executable)
@@ -1,3 +1,4 @@
 SUBDIRS = SoftwareManager FrontprocessorUpgrade PositionerSetup Satfinder \
        SkinSelector SatelliteEquipmentControl Videomode VideoTune Hotplug \
-       DefaultServicesScanner NFIFlash DiseqcTester CommonInterfaceAssignment
+       DefaultServicesScanner NFIFlash DiseqcTester CommonInterfaceAssignment \
+       CrashlogAutoSubmit