From 02096b86b343dda0ab7301dba4db5fce45c5af3e Mon Sep 17 00:00:00 2001 From: Nabil Hanna Date: Thu, 21 Jan 2010 16:18:25 +0000 Subject: [PATCH] added movielist preview plugin --- Makefile.am | 1 + configure.ac | 4 + movielistpreview/CONTROL/control | 10 + movielistpreview/Makefile.am | 1 + movielistpreview/po/Makefile.am | 57 +++ movielistpreview/po/MovielistPreview.pot | 69 ++++ movielistpreview/po/de.po | 69 ++++ movielistpreview/po/it.po | 62 ++++ movielistpreview/src/Makefile.am | 3 + movielistpreview/src/__init__.py | 0 movielistpreview/src/maintainer.info | 2 + movielistpreview/src/plugin.py | 580 +++++++++++++++++++++++++++++++ 12 files changed, 858 insertions(+) create mode 100644 movielistpreview/CONTROL/control create mode 100644 movielistpreview/Makefile.am create mode 100644 movielistpreview/po/Makefile.am create mode 100644 movielistpreview/po/MovielistPreview.pot create mode 100644 movielistpreview/po/de.po create mode 100755 movielistpreview/po/it.po create mode 100644 movielistpreview/src/Makefile.am create mode 100644 movielistpreview/src/__init__.py create mode 100644 movielistpreview/src/maintainer.info create mode 100644 movielistpreview/src/plugin.py diff --git a/Makefile.am b/Makefile.am index 2e98c70..7dcbc16 100644 --- a/Makefile.am +++ b/Makefile.am @@ -26,6 +26,7 @@ SUBDIRS = \ meteoitalia \ mosaic \ moviecut \ + movielistpreview \ movieretitle \ movieselectionquickbutton \ movietagger \ diff --git a/configure.ac b/configure.ac index bdaaf7c..f71636f 100644 --- a/configure.ac +++ b/configure.ac @@ -323,4 +323,8 @@ multirc/src/Makefile ardmediathek/Makefile ardmediathek/src/Makefile +movielistpreview/Makefile +movielistpreview/po/Makefile +movielistpreview/src/Makefile + ]) diff --git a/movielistpreview/CONTROL/control b/movielistpreview/CONTROL/control new file mode 100644 index 0000000..ba6252e --- /dev/null +++ b/movielistpreview/CONTROL/control @@ -0,0 +1,10 @@ +Package: enigma2-plugin-extensions-movielistpreview +Version: 1.0 +Description: Create previews for movies and show them in the movielist +Architecture: all +Section: extra +Priority: optional +Maintainer: Nabil Hanna +Homepage: http://www.lt-forums.org/ali +Depends: aio-grab(>=0.8cvs20081209) enigma2(>=2.6git20090725) +Source: http://enigma2-plugins.schwerkraft.elitedvb.net/ diff --git a/movielistpreview/Makefile.am b/movielistpreview/Makefile.am new file mode 100644 index 0000000..cc366b1 --- /dev/null +++ b/movielistpreview/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = po src diff --git a/movielistpreview/po/Makefile.am b/movielistpreview/po/Makefile.am new file mode 100644 index 0000000..d9e993a --- /dev/null +++ b/movielistpreview/po/Makefile.am @@ -0,0 +1,57 @@ +# +# to use this for the localisation of other plugins, +# just change the DOMAIN to the name of the Plugin. +# It is assumed, that the domain ist the same as +# the directory name of the plugin. +# + +DOMAIN=MovielistPreview +installdir = /usr/lib/enigma2/python/Plugins/Extensions/$(DOMAIN) +#GETTEXT=./pygettext.py +GETTEXT=xgettext + +#MSGFMT = ./msgfmt.py +MSGFMT = msgfmt + +LANGS := de it +LANGPO := $(foreach LANG, $(LANGS),$(LANG).po) +LANGMO := $(foreach LANG, $(LANGS),$(LANG).mo) + +default: $(DOMAIN).pot $(LANGPO) merge $(LANGMO) + for lang in $(LANGS); do \ + mkdir -p $$lang/LC_MESSAGES; \ + cp $$lang.mo $$lang/LC_MESSAGES/$(DOMAIN).mo; \ + done + +merge: + for lang in $(LANGS); do \ + msgmerge --no-location -s -N -U $$lang.po $(DOMAIN).pot; \ + done + + +# the TRANSLATORS: allows putting translation comments before the to-be-translated line. +$(DOMAIN).pot: + $(GETTEXT) -L python --add-comments="TRANSLATORS:" -d $(DOMAIN) -s -o $(DOMAIN).pot ../src/*.py + msguniq -o $(DOMAIN)uniq.pot $(DOMAIN).pot + $(RM) $(DOMAIN).pot + mv $(DOMAIN)uniq.pot $(DOMAIN).pot + +.PHONY: $(DOMAIN).pot + + +%.mo: %.po + $(MSGFMT) -o $@ $< + +%.po: + msginit -l $@ -o $@ -i $(DOMAIN).pot --no-translator + +CLEANFILES = $(foreach LANG, $(LANGS),$(LANG).mo) + +clean-local: + $(RM) -r $(LANGS) + +install-data-am: default + for lang in $(LANGS); do \ + mkdir -p $(DESTDIR)$(installdir)/locale/$$lang/LC_MESSAGES; \ + cp $$lang.mo $(DESTDIR)$(installdir)/locale/$$lang/LC_MESSAGES/$(DOMAIN).mo; \ + done diff --git a/movielistpreview/po/MovielistPreview.pot b/movielistpreview/po/MovielistPreview.pot new file mode 100644 index 0000000..15910ce --- /dev/null +++ b/movielistpreview/po/MovielistPreview.pot @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Project-Id-Version: MovielistPreview\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-14 18:16+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: AliAbdul \n" +"Language-Team: Nabil Hanna \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: German\n" +"X-Poedit-Country: GERMANY\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-SearchPath-0: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src\n" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:140 +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:301 +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:356 +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:460 +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:538 +msgid "Movielist Preview" +msgstr "" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:145 +msgid "OK" +msgstr "" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:343 +msgid "Preview created." +msgstr "" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:406 +msgid "Could not find any movie!" +msgstr "" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:419 +#, python-format +msgid "%s - creating preview for movie %s" +msgstr "" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:428 +msgid "Everything done ;)" +msgstr "" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:449 +msgid "Autocreate of previews aborted due user!" +msgstr "" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:473 +msgid "Deactivate Movielist Preview" +msgstr "" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:475 +msgid "Activate Movielist Preview" +msgstr "" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:476 +msgid "Create preview" +msgstr "" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:477 +msgid "Autocreate of missing previews" +msgstr "" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:478 +msgid "Change Movielist Preview position" +msgstr "" + diff --git a/movielistpreview/po/de.po b/movielistpreview/po/de.po new file mode 100644 index 0000000..63d62c6 --- /dev/null +++ b/movielistpreview/po/de.po @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Project-Id-Version: MovielistPreview\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-14 18:16+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: AliAbdul \n" +"Language-Team: Nabil Hanna \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: German\n" +"X-Poedit-Country: GERMANY\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-SearchPath-0: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src\n" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:140 +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:301 +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:356 +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:460 +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:538 +msgid "Movielist Preview" +msgstr "Filmlistenvorschau" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:145 +msgid "OK" +msgstr "OK" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:343 +msgid "Preview created." +msgstr "Vorschaubild erstellt." + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:406 +msgid "Could not find any movie!" +msgstr "Konnte keinen Film finden!" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:419 +#, python-format +msgid "%s - creating preview for movie %s" +msgstr "%s - erstelle Vorschaubild für Film %s" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:428 +msgid "Everything done ;)" +msgstr "Alles erledigt ;)" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:449 +msgid "Autocreate of previews aborted due user!" +msgstr "Autoerstellung fehlender Vorschaubilder wurde abgebrochen!" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:473 +msgid "Deactivate Movielist Preview" +msgstr "Deaktiviere Filmlistenvorschau" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:475 +msgid "Activate Movielist Preview" +msgstr "Aktiviere Filmlistenvorschau" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:476 +msgid "Create preview" +msgstr "Erstelle Vorschaubild" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:477 +msgid "Autocreate of missing previews" +msgstr "Autoerstellung fehlender Vorschaubilder" + +#: /home/aliabdul/dream/ltteam/trunk/additions/plugins/movielistpreview/src/plugin.py:478 +msgid "Change Movielist Preview position" +msgstr "Ändere Position der Filmlistenvorschau" + diff --git a/movielistpreview/po/it.po b/movielistpreview/po/it.po new file mode 100755 index 0000000..42a8626 --- /dev/null +++ b/movielistpreview/po/it.po @@ -0,0 +1,62 @@ +msgid "" +msgstr "" +"Project-Id-Version: enigma2 - movielistpreview\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-10 22:20+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: Spaeleus \n" +"Language-Team: www.linsat.net \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Italian\n" +"X-Poedit-Country: ITALY\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-Basepath: /home/dario/Plugins/MovielistPreview\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SearchPath-0: /home/dario/Plugins/MovielistPreview\n" + +#: /home/dario/Plugins/MovielistPreview/plugin.py:219 +#: /home/dario/Plugins/MovielistPreview/plugin.py:274 +#: /home/dario/Plugins/MovielistPreview/plugin.py:368 +#: /home/dario/Plugins/MovielistPreview/plugin.py:446 +msgid "Movielist Preview" +msgstr "Movielist Preview" + +#: /home/dario/Plugins/MovielistPreview/plugin.py:261 +msgid "Preview created." +msgstr "Anteprima creata." + +#: /home/dario/Plugins/MovielistPreview/plugin.py:321 +msgid "Could not find any movie!" +msgstr "Impossibile trovare registrazioni!" + +#: /home/dario/Plugins/MovielistPreview/plugin.py:334 +#, python-format +msgid "%s - creating preview for movie %s" +msgstr "%s - creazione anteprima per %s in corso " + +#: /home/dario/Plugins/MovielistPreview/plugin.py:343 +msgid "Everything done ;)" +msgstr "Tutto fatto ;-)" + +#: /home/dario/Plugins/MovielistPreview/plugin.py:381 +msgid "Deactivate Movielist Preview" +msgstr "Disattivare Movielist Preview" + +#: /home/dario/Plugins/MovielistPreview/plugin.py:383 +msgid "Activate Movielist Preview" +msgstr "Attivare Movielist Preview" + +#: /home/dario/Plugins/MovielistPreview/plugin.py:384 +msgid "Create preview" +msgstr "Creare anteprima" + +#: /home/dario/Plugins/MovielistPreview/plugin.py:385 +msgid "Autocreate of missing previews" +msgstr "Creare automaticamente anteprime mancanti" + +#: /home/dario/Plugins/MovielistPreview/plugin.py:386 +msgid "Change Movielist Preview position" +msgstr "Cambiare posizione a Movielist Preview" + diff --git a/movielistpreview/src/Makefile.am b/movielistpreview/src/Makefile.am new file mode 100644 index 0000000..5bf131d --- /dev/null +++ b/movielistpreview/src/Makefile.am @@ -0,0 +1,3 @@ +installdir = /usr/lib/enigma2/python/Plugins/Extensions/MovielistPreview +install_PYTHON = *.py +install_DATA = maintainer.info diff --git a/movielistpreview/src/__init__.py b/movielistpreview/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/movielistpreview/src/maintainer.info b/movielistpreview/src/maintainer.info new file mode 100644 index 0000000..0a03428 --- /dev/null +++ b/movielistpreview/src/maintainer.info @@ -0,0 +1,2 @@ +nabil1978@web.de +Movielist Preview diff --git a/movielistpreview/src/plugin.py b/movielistpreview/src/plugin.py new file mode 100644 index 0000000..5c37bf1 --- /dev/null +++ b/movielistpreview/src/plugin.py @@ -0,0 +1,580 @@ +## +## Movielist Preview +## by AliAbdul +## +from Components.ActionMap import ActionMap +from Components.AVSwitch import AVSwitch +from Components.config import config, ConfigInteger, ConfigSelection, ConfigSubsection, ConfigYesNo, getConfigListEntry +from Components.ConfigList import ConfigListScreen +from Components.Console import Console +from Components.Label import Label +from Components.Language import language +from Components.MenuList import MenuList +from Components.MovieList import MovieList +from Components.Pixmap import Pixmap +from Components.ServiceEventTracker import InfoBarBase +from Components.VideoWindow import VideoWindow +from enigma import ePicLoad, ePoint, eServiceReference, eSize, eTimer, getDesktop +from os import environ, listdir +from Plugins.Plugin import PluginDescriptor +from Screens.InfoBarGenerics import InfoBarSeek, InfoBarCueSheetSupport +from Screens.MessageBox import MessageBox +from Screens.MovieSelection import MovieSelection +from Screens.Screen import Screen +from Tools.Directories import fileExists, resolveFilename, SCOPE_LANGUAGE, SCOPE_PLUGINS +import gettext, random + +############################################################################## + +config.plugins.MovielistPreview = ConfigSubsection() +config.plugins.MovielistPreview.enabled = ConfigYesNo(default=True) +config.plugins.MovielistPreview.position_x = ConfigInteger(default=100) +config.plugins.MovielistPreview.position_y = ConfigInteger(default=100) +config.plugins.MovielistPreview.size = ConfigSelection(choices=["250x200", "200x160", "150x120", "100x80"], default="250x200") + +############################################################################## + +def localeInit(): + lang = language.getLanguage() + environ["LANGUAGE"] = lang[:2] + gettext.bindtextdomain("enigma2", resolveFilename(SCOPE_LANGUAGE)) + gettext.textdomain("enigma2") + gettext.bindtextdomain("MovielistPreview", "%s%s" % (resolveFilename(SCOPE_PLUGINS), "Extensions/MovielistPreview/locale/")) + +def _(txt): + t = gettext.dgettext("MovielistPreview", txt) + if t == txt: + t = gettext.gettext(txt) + return t + +localeInit() +language.addCallback(localeInit) + +############################################################################## + +SKIN = """ + + + + """ + +############################################################################## + +class MovielistPreviewScreen(Screen): + def __init__(self, session): + Screen.__init__(self, session) + self.skin = SKIN + self["background"] = Label("") + self["preview"] = Pixmap() + self.onShow.append(self.movePosition) + + def movePosition(self): + if self.instance: + self.instance.move(ePoint(config.plugins.MovielistPreview.position_x.value, config.plugins.MovielistPreview.position_y.value)) + size = config.plugins.MovielistPreview.size.value.split("x") + self.instance.resize(eSize(int(size[0]), int(size[1]))) + self["background"].instance.resize(eSize(int(size[0]), int(size[1]))) + self["preview"].instance.resize(eSize(int(size[0]), int(size[1]))) + +############################################################################## + +class MovielistPreview(): + def __init__(self): + self.dialog = None + self.mayShow = True + self.working = False + + def gotSession(self, session): + if not self.dialog: + self.dialog = session.instantiateDialog(MovielistPreviewScreen) + + def changeVisibility(self): + if config.plugins.MovielistPreview.enabled.value: + config.plugins.MovielistPreview.enabled.value = False + else: + config.plugins.MovielistPreview.enabled.value = True + config.plugins.MovielistPreview.enabled.save() + + def showPreview(self, movie): + if self.working == False: + self.dialog.hide() + if movie and self.mayShow and config.plugins.MovielistPreview.enabled.value: + png = movie + "_mp.jpg" + if fileExists(png): + self.working = True + sc = AVSwitch().getFramebufferScale() + self.picload = ePicLoad() + self.picload.PictureData.get().append(self.showPreviewCallback) + size = config.plugins.MovielistPreview.size.value.split("x") + self.picload.setPara((int(size[0]), int(size[1]), sc[0], sc[1], False, 1, "#00000000")) + self.picload.startDecode(png) + + def showPreviewCallback(self, picInfo=None): + if picInfo: + ptr = self.picload.getData() + if ptr != None: + self.dialog["preview"].instance.setPixmap(ptr) + self.dialog.show() + self.working = False + + def hideDialog(self): + self.mayShow = False + self.dialog.hide() + + def showDialog(self): + self.mayShow = True + self.dialog.show() +movielistpreview = MovielistPreview() + +############################################################################## + +class MovielistPreviewPositionerCoordinateEdit(ConfigListScreen, Screen): + skin = """ + + + + + + + + """ % _("Movielist Preview") + + def __init__(self, session, x, y, w, h): + Screen.__init__(self, session) + + self["key_green"] = Label(_("OK")) + + self.xEntry = ConfigInteger(default=x, limits=(0, w)) + self.yEntry = ConfigInteger(default=y, limits=(0, h)) + ConfigListScreen.__init__(self, [ + getConfigListEntry("x position:", self.xEntry), + getConfigListEntry("y position:", self.yEntry)]) + + self["actions"] = ActionMap(["OkCancelActions", "ColorActions"], + { + "green": self.ok, + "cancel": self.close + }, -1) + + def ok(self): + self.close([self.xEntry.value, self.yEntry.value]) + +############################################################################## + +class MovielistPreviewPositioner(Screen): + def __init__(self, session): + Screen.__init__(self, session) + self.skin = SKIN + self["background"] = Label("") + self["preview"] = Pixmap() + + self["actions"] = ActionMap(["EPGSelectActions", "MenuActions", "WizardActions"], + { + "left": self.left, + "up": self.up, + "right": self.right, + "down": self.down, + "ok": self.ok, + "back": self.exit, + "menu": self.editCoordinates, + "nextBouquet": self.bigger, + "prevBouquet": self.smaller + }, -1) + + desktop = getDesktop(0) + self.desktopWidth = desktop.size().width() + self.desktopHeight = desktop.size().height() + + self.moveTimer = eTimer() + self.moveTimer.callback.append(self.movePosition) + self.moveTimer.start(50, 1) + + self.onShow.append(self.__onShow) + + def __onShow(self): + if self.instance: + size = config.plugins.MovielistPreview.size.value.split("x") + self.instance.resize(eSize(int(size[0]), int(size[1]))) + self["background"].instance.resize(eSize(int(size[0]), int(size[1]))) + self["preview"].instance.resize(eSize(int(size[0]), int(size[1]))) + + def movePosition(self): + self.instance.move(ePoint(config.plugins.MovielistPreview.position_x.value, config.plugins.MovielistPreview.position_y.value)) + self.moveTimer.start(50, 1) + + def left(self): + value = config.plugins.MovielistPreview.position_x.value + value -= 1 + if value < 0: + value = 0 + config.plugins.MovielistPreview.position_x.value = value + + def up(self): + value = config.plugins.MovielistPreview.position_y.value + value -= 1 + if value < 0: + value = 0 + config.plugins.MovielistPreview.position_y.value = value + + def right(self): + value = config.plugins.MovielistPreview.position_x.value + value += 1 + if value > self.desktopWidth: + value = self.desktopWidth + config.plugins.MovielistPreview.position_x.value = value + + def down(self): + value = config.plugins.MovielistPreview.position_y.value + value += 1 + if value > self.desktopHeight: + value = self.desktopHeight + config.plugins.MovielistPreview.position_y.value = value + + def ok(self): + config.plugins.MovielistPreview.position_x.save() + config.plugins.MovielistPreview.position_y.save() + self.close() + + def exit(self): + config.plugins.MovielistPreview.position_x.cancel() + config.plugins.MovielistPreview.position_y.cancel() + self.close() + + def editCoordinates(self): + self.session.openWithCallback(self.editCoordinatesCallback, MovielistPreviewPositionerCoordinateEdit, config.plugins.MovielistPreview.position_x.value, config.plugins.MovielistPreview.position_y.value, self.desktopWidth, self.desktopHeight) + + def editCoordinatesCallback(self, callback=None): + if callback: + config.plugins.MovielistPreview.position_x.value = callback[0] + config.plugins.MovielistPreview.position_y.value = callback[1] + + def bigger(self): + if config.plugins.MovielistPreview.size.value == "200x160": + config.plugins.MovielistPreview.size.value = "250x200" + elif config.plugins.MovielistPreview.size.value == "150x120": + config.plugins.MovielistPreview.size.value = "200x160" + elif config.plugins.MovielistPreview.size.value == "100x80": + config.plugins.MovielistPreview.size.value = "150x120" + config.plugins.MovielistPreview.size.save() + self.__onShow() + + def smaller(self): + if config.plugins.MovielistPreview.size.value == "150x120": + config.plugins.MovielistPreview.size.value = "100x80" + elif config.plugins.MovielistPreview.size.value == "200x160": + config.plugins.MovielistPreview.size.value = "150x120" + elif config.plugins.MovielistPreview.size.value == "250x200": + config.plugins.MovielistPreview.size.value = "200x160" + config.plugins.MovielistPreview.size.save() + self.__onShow() + +############################################################################## + +class PreviewCreator: + def __init__(self): + self.callback = None + self.Console = Console() + + def grab(self, file): + if not self.Console: + self.Console = Console() + self.Console.ePopen('/usr/bin/grab -v -r 250 -l -j 100 "%s"'%file, self.grabDone) + + def grabDone(self, result, retval, extra_args): + if retval != 0: + print result + if self.callback: + self.callback() +previewcreator = PreviewCreator() + +############################################################################## + +class MovielistPreviewManualCreator(Screen, InfoBarBase, InfoBarSeek, InfoBarCueSheetSupport): + skin = """ + + + + Gauge + + + + """ % _("Movielist Preview") + + def __init__(self, session, service): + Screen.__init__(self, session) + InfoBarSeek.__init__(self) + InfoBarCueSheetSupport.__init__(self) + InfoBarBase.__init__(self, steal_current_service=True) + + self.session = session + self.service = service + self.working = False + self.oldService = self.session.nav.getCurrentlyPlayingServiceReference() + self.session.nav.playService(service) + previewcreator.callback = self.grabDone + + desktopSize = getDesktop(0).size() + self["video"] = VideoWindow(decoder=0, fb_width=desktopSize.width(), fb_height=desktopSize.height()) + self["seekState"] = Label() + + self.onPlayStateChanged.append(self.updateStateLabel) + self.updateStateLabel(self.seekstate) + + self["actions"] = ActionMap(["OkCancelActions"], + { + "ok": self.grab, + "cancel": self.exit + }, -2) + + def checkSkipShowHideLock(self): + pass + + def updateStateLabel(self, state): + self["seekState"].setText(state[3].strip()) + + def grab(self): + if not self.working: + self.working = True + png = self.service.getPath() + "_mp.jpg" + previewcreator.grab(png) + + def grabDone(self): + self.working = False + self.session.open(MessageBox,_("Preview created."), MessageBox.TYPE_INFO, timeout=5) + + def exit(self): + if not self.working: + self.session.nav.playService(self.oldService) + self.close() + +############################################################################## + +class MovielistPreviewAutoCreator(Screen): + skin = """ + + + """ % _("Movielist Preview") + + def __init__(self, session): + Screen.__init__(self, session) + + self.session = session + self.files = [] + self.filescount = 0 + self.current = 1 + self.working = True + self.abort = False + self.dir = config.movielist.last_videodir.value + previewcreator.callback = self.grabDone + self.playable = ["avi", "dat", "divx", "m2ts", "m4a", "mkv", "mp4", "mov", "mpg", "ts", "vob"] + self.oldService = self.session.nav.getCurrentlyPlayingServiceReference() + + self["label"] = Label() + + self.timer = eTimer() + self.timer.callback.append(self.seekAndCreatePreview) + + self["actions"] = ActionMap(["OkCancelActions"], {"cancel": self.exit}, -1) + + self.onLayoutFinish.append(self.createPreviews) + + def exit(self): + if self.working == False: + self.session.nav.playService(self.oldService) + self.close() + else: + self.abort = True + + def getExtension(self, name): + ext = None + if name.__contains__("."): + tmp = name.split(".") + ext = tmp[-1] + return ext + + def createPreviews(self): + try: + files = listdir(self.dir) + except: + files = [] + for file in files: + ext = self.getExtension(file) + if ext and (ext.lower() in self.playable): + self.files.append(file) + self.filescount = len(self.files) + if self.filescount == 0: + self["label"].setText(_("Could not find any movie!")) + else: + self.createNextPreview() + + def createNextPreview(self): + if len(self.files): + file = self.files[0] + movie = ("%s/%s" % (self.dir, file)).replace("//", "/") + png = movie + "_mp.jpg" + if fileExists(png): + self.grabDone() + else: + counter = "%d / %d" % (self.current, self.filescount) + self["label"].setText(_("%s - creating preview for movie %s") % (counter, movie)) + if movie.endswith(".ts"): + ref = eServiceReference(1, 0, movie) + else: + ref = eServiceReference(4097, 0, movie) + self.session.nav.playService(ref) + self.png = png + self.timer.start(5000, 1) + else: + self["label"].setText(_("Everything done ;)")) + self.working = False + + def seekAndCreatePreview(self): + service = self.session.nav.getCurrentService() + if service: + cue = service and service.cueSheet() + if cue is not None: + cue.setCutListEnable(0) + seek = service.seek() + if seek: + length = int(seek.getLength()[1]) + seek.seekTo(random.randint(0, length)) + previewcreator.grab(self.png) + else: + self.grabDone() + + def grabDone(self): + del self.files[0] + self.current += 1 + if self.abort: + self["label"].setText(_("Autocreate of previews aborted due user!")) + self.working = False + else: + self.createNextPreview() + +############################################################################## + +class MovielistPreviewMenu(Screen): + skin = """ + + + """ % _("Movielist Preview") + + def __init__(self, session, service): + Screen.__init__(self, session) + self.session = session + self.service = service + self["list"] = MenuList([]) + self["actions"] = ActionMap(["OkCancelActions"], {"ok": self.okClicked, "cancel": self.close}, -1) + self.onLayoutFinish.append(self.showMenu) + + def showMenu(self): + list = [] + if config.plugins.MovielistPreview.enabled.value: + list.append(_("Deactivate Movielist Preview")) + else: + list.append(_("Activate Movielist Preview")) + list.append(_("Create preview")) + list.append(_("Autocreate of missing previews")) + list.append(_("Change Movielist Preview position")) + self["list"].setList(list) + + def okClicked(self): + idx = self["list"].getSelectionIndex() + if movielistpreview.dialog is None: + movielistpreview.gotSession(self.session) + if idx == 0: + movielistpreview.changeVisibility() + self.showMenu() + elif idx == 1: + movielistpreview.dialog.hide() + self.session.open(MovielistPreviewManualCreator, self.service) + elif idx == 2: + movielistpreview.dialog.hide() + self.session.open(MovielistPreviewAutoCreator) + else: + movielistpreview.dialog.hide() + self.session.open(MovielistPreviewPositioner) + +############################################################################## + +class InstanceCache: + def __init__(self): + self.movieListInstance = None + self.movieList2Instance = None +instancecache = InstanceCache() + +############################################################################## + +SelectionChanged = MovieList.selectionChanged +def selectionChanged(instance): + if not instancecache.movieListInstance: + instancecache.movieListInstance = instance + SelectionChanged(instance) + curr = instance.getCurrent() + if curr: + if isinstance(curr, eServiceReference): + movielistpreview.showPreview(curr.getPath()) +MovieList.selectionChanged = selectionChanged + +Hide = MovieSelection.hide +def hideMovieSelection(instance): + Hide(instance) + movielistpreview.hideDialog() +MovieSelection.hide = hideMovieSelection + +Show = MovieSelection.show +def showMovieSelection(instance): + Show(instance) + movielistpreview.showDialog() + if instancecache.movieListInstance: + selectionChanged(instancecache.movieListInstance) +MovieSelection.show = showMovieSelection + +############################################################################## + +def selectionChanged2(instance): + if not instancecache.movieList2Instance: + instancecache.movieList2Instance = instance + SelectionChanged2(instance) + curr = instance.getCurrent() + if curr: + if isinstance(curr, eServiceReference): + movielistpreview.showPreview(curr.getPath()) + +def hideMovieSelection2(instance): + Hide2(instance) + movielistpreview.hideDialog() + +def showMovieSelection2(instance): + Show2(instance) + movielistpreview.showDialog() + if instancecache.movieList2Instance: + selectionChanged2(instancecache.movieList2Instance) + +try: + from Plugins.Extensions.Suomipoeka.MovieList import MovieList as MovieList2 + from Plugins.Extensions.Suomipoeka.MovieSelection import MovieSelectionSP + SelectionChanged2 = MovieList2.selectionChanged + MovieList2.selectionChanged = selectionChanged2 + Hide2 = MovieSelectionSP.hide + MovieSelectionSP.hide = hideMovieSelection2 + Show2 = MovieSelectionSP.show + MovieSelectionSP.show = showMovieSelection2 +except ImportError: + print "[Movielist Preview] Could not import Suomipoeka Plugin, maybe not installed or too old version?" + +############################################################################## + +def sessionstart(reason, **kwargs): + if reason == 0: + movielistpreview.gotSession(kwargs["session"]) + +def main(session, service): + session.open(MovielistPreviewMenu, service) + +############################################################################## + +def Plugins(**kwargs): + return [ + PluginDescriptor(where=[PluginDescriptor.WHERE_SESSIONSTART], fnc=sessionstart), + PluginDescriptor(name=_("Movielist Preview"), description=_("Movielist Preview"), where=PluginDescriptor.WHERE_MOVIELIST, fnc=main)] -- 2.7.4