Intital CVS Version
authorRico Schulte <ricoschulte@users.schwerkraft.elitedvb.net>
Fri, 22 Dec 2006 17:57:15 +0000 (17:57 +0000)
committerRico Schulte <ricoschulte@users.schwerkraft.elitedvb.net>
Fri, 22 Dec 2006 17:57:15 +0000 (17:57 +0000)
movietagger/etc/enigma2/movietags [new file with mode: 0644]
movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/__init__.py [new file with mode: 0644]
movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/blue.png [new file with mode: 0644]
movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/plugin.py [new file with mode: 0644]
movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/red.png [new file with mode: 0644]
movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/yellow.png [new file with mode: 0644]

diff --git a/movietagger/etc/enigma2/movietags b/movietagger/etc/enigma2/movietags
new file mode 100644 (file)
index 0000000..f78ddf4
--- /dev/null
@@ -0,0 +1,20 @@
+Action
+Krimi
+Horror
+Drama
+Komoedie
+Liebe
+Serie
+SciFi
+Familie
+Kinder
+Erotik
+Fussball
+Tennis
+Golf
+Simpsons
+Airwolf
+Hulk
+News
+Doku
+Film
diff --git a/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/__init__.py b/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/blue.png b/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/blue.png
new file mode 100644 (file)
index 0000000..2a78b0e
Binary files /dev/null and b/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/blue.png differ
diff --git a/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/plugin.py b/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/plugin.py
new file mode 100644 (file)
index 0000000..6180108
--- /dev/null
@@ -0,0 +1,297 @@
+# this is free software. use it for whatever you what or modify it. 
+# but dont remove these three lines and dont publish only .pyc-files of these files!
+# 3c5x9, 3c5x9@gmx.de
+
+from enigma import *
+from skin import parseColor
+from Plugins.Plugin import PluginDescriptor
+from ServiceReference import ServiceReference
+from Screens.Screen import Screen
+from Components.Label import Label
+from Components.MenuList import MenuList
+from Components.MovieList import MovieList
+from Screens.InputBox import InputBox
+from Screens.MessageBox import MessageBox
+from Components.ActionMap import ActionMap, NumberActionMap
+from Components.GUIComponent import GUIComponent
+from Components.HTMLComponent import HTMLComponent
+from Components.MultiContent import RT_HALIGN_LEFT, MultiContentEntryText,MultiContentEntryPixmap, MultiContentEntryPixmapAlphaTest
+from enigma import eListboxPythonMultiContent
+
+from Tools.Directories import *
+
+class MovieTagger(Screen):
+       skin = """
+               <screen position="100,100" size="550,400" title="Movie Tagger" >
+                       <widget name="moviename" position="10,10" size="530,50"   font="Regular;25"/>
+                       <widget name="cTaglist" position="10,60" size="220,280"  scrollbarMode="showOnDemand"/>
+                       <widget name="aTaglist" position="240,60" size="300,280"  scrollbarMode="showOnDemand"/>
+                       <widget name="buttonred" position="6,350" size="130,40" backgroundColor="red" valign="center" halign="center" zPosition="2"  foregroundColor="white" font="Regular;18"/> 
+               <widget name="buttongreen" position="142,350" size="130,40" backgroundColor="green" valign="center" halign="center" zPosition="2"  foregroundColor="white" font="Regular;18"/> 
+               <widget name="buttonyellow" position="278,350" size="130,40" backgroundColor="yellow" valign="center" halign="center" zPosition="2"  foregroundColor="white" font="Regular;18"/> 
+               <widget name="buttonblue" position="414,350" size="130,40" backgroundColor="blue" valign="center" halign="center" zPosition="2"  foregroundColor="white" font="Regular;18"/>
+               </screen>"""
+       currList = None
+       pretagfile = "/etc/enigma2/movietags"
+    
+       def __init__(self, session, service):
+               print "dont send this chrashlog to DMM, if you see this text in a chrashlog :-)"
+               self.session = session
+               self.service = service
+               self.serviceHandler = eServiceCenter.getInstance()
+               self.info = self.serviceHandler.info(self.service)
+               
+               self.skin = MovieTagger.skin
+               Screen.__init__(self, session)
+               self["moviename"] = Label(self.info.getName(self.service))
+               self["buttonred"] = Label(_("red"))
+               self["buttongreen"] = Label(_("green"))
+               self["buttonyellow"] = Label(_("yellow"))
+               self["buttonblue"] = Label(_("blue"))
+               self["cTaglist"] = MenuList([])
+               self["aTaglist"] = TagMenuList([])
+               self["actions"] = ActionMap(["WizardActions","MenuActions","ShortcutActions"], 
+            {
+             "back":   self.close,
+             "red":    self.keyRed,
+             "green":  self.keyGreen,
+             "yellow":         self.keyYellow,
+             "blue":   self.keyBlue,
+             "up":             self.up,
+             "down":   self.down,
+             "left":   self.left,
+             "right":  self.right,
+             }, -1)
+               self.loadPreTags()
+               self.updateCurrentTagList()
+               self.updateAllTagList()
+               self.currList =self["aTaglist"]
+               self.onLayoutFinish.append(self.keyBlue)
+               
+       def loadPreTags(self):
+               if pathExists(self.pretagfile):
+                       fp = open(self.pretagfile,"r")
+                       t = fp.read()
+                       fp.close()
+                       self.pretags = t.replace("\n"," ").strip().split(" ")
+                       self.pretags.sort()
+                       print "pretags loaded ", self.pretags
+                       
+       def updateCurrentTagList(self):
+               print "updating cTagList"
+               self.serviceHandler = eServiceCenter.getInstance()
+               self.info = self.serviceHandler.info(self.service)
+               self.tags = self.info.getInfoString(self.service, iServiceInformation.sTags).split(' ')
+               self.tags.sort()
+               self["cTaglist"].l.setList(self.tags)
+
+       def updateAllTagList(self):
+               root = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + resolveFilename(SCOPE_HDD))
+               ml = MovieList(root)
+               ml.load(root,None)
+               xtmp = []
+               xtmp.extend(ml.tags)
+               self.usedTags = xtmp
+               
+               e = []+self.pretags
+               for i in ml.tags:
+                       try:
+                               self.pretags.index(i)
+                       except ValueError:
+                               e.append(i)
+               
+               taglist = []
+               bluePicture = loadPNG(plugin_path+"/blue.png")
+               redPicture = loadPNG(plugin_path+"/red.png")
+               yellowPicture = loadPNG(plugin_path+"/yellow.png")
+               for i in e:
+                               res = [ i ]
+                               res.append(MultiContentEntryText(pos=(5, 5), size=(500, 25), font=0, text=i))
+                               if self.isUsedTag(i):
+                                       res.append(MultiContentEntryPixmap(pos=(160, 5),size=(61, 86), png=  yellowPicture))
+                               if self.isPreTag(i):
+                                       res.append(MultiContentEntryPixmap(pos=(240, 5),size=(61, 86), png=  bluePicture))
+                               if self.isUserTag(i) :
+                                       res.append(MultiContentEntryPixmap(pos=(200, 5),size=(61, 86), png=  redPicture))
+                               taglist.append(res)
+                       
+               taglist.sort()
+               self["aTaglist"].l.setList(taglist)             
+       
+       def addTag(self,tagname):
+               try:
+                       self.tags.index(tagname)
+               except ValueError:
+                       self.tags.append(tagname)
+                       if len(self.tags) >1:
+                               self.setTags(" ".join(self.tags))
+                       else:
+                               self.setTags(tagname)
+               self.updateCurrentTagList()
+               self.updateAllTagList()
+               
+
+       def removeTag(self,tagname):
+               newtags = []
+               for i in self.tags:
+                       if i is not tagname:
+                               newtags.append(i)
+               self.setTags(" ".join(newtags))
+               self.updateCurrentTagList()
+               self.updateAllTagList()
+               
+               
+       def setTags(self,tagstring,service=False,userNotice=True):
+               if service is False:
+                       serviceRef = self.service
+               else:
+                       serviceRef = service
+                       
+               service_name =serviceRef.toString().split(":")[-1]
+               filename = service_name+".meta"
+               metadata = self.readMETAData(filename)
+               if metadata is not False:
+                       metadata.append(tagstring.strip())
+                       return  self.writeMETAData(filename,metadata)
+               else:
+                       if userNotice is True:
+                               self.session.open(MessageBox,_("cant write movietags, because no meta-file found!"), MessageBox.TYPE_ERROR)
+                       return  False
+                
+       
+       def readMETAData(self,filename):
+               if pathExists(filename):
+                       fp = open(filename,"r")
+                       data = []
+                       data.append(fp.readline())
+                       data.append(fp.readline())
+                       data.append(fp.readline())
+                       data.append(fp.readline())
+                       fp.close()
+                       return data 
+               else:
+                       return False
+       def writeMETAData(self,filename,metadata):
+               if pathExists(filename):
+                       fp = open(filename,"w")
+                       fp.write(metadata[0])
+                       fp.write(metadata[1])
+                       fp.write(metadata[2])
+                       fp.write(metadata[3])
+                       fp.write(metadata[4])
+                       fp.close()
+                       return True
+               else:
+                       return False
+       
+       def clearAllTags(self,yesno):
+               if yesno is True:
+                       self.serviceHandler = eServiceCenter.getInstance()
+                       root = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + resolveFilename(SCOPE_HDD))
+                       list = self.serviceHandler.list(root)
+                       tags = set()            
+                       if list is None:
+                               pass
+                       else:
+                               while 1:
+                                       serviceref = list.getNext()
+                                       if not serviceref.valid():
+                                               break
+                                       if serviceref.flags & eServiceReference.mustDescent:
+                                               continue
+                                       self.setTags("",service=serviceref,userNotice=False)
+               self.updateCurrentTagList()
+               self.updateAllTagList()
+                               
+       def isUsedTag(self,tag):
+               try:
+                       self.usedTags.index(tag)
+                       return True
+               except ValueError:
+                       return False
+       
+       def isPreTag(self,tag):
+               try:
+                       self.pretags.index(tag)
+                       return True
+               except ValueError:
+                       return False
+
+       def isUserTag(self,tag):
+               if self.isPreTag(tag) is False and self.isUsedTag(tag) is True:
+                       return True
+               else:
+                       return False
+       
+       def keyRed(self):
+               if self.currList is self["cTaglist"]:
+                       self.removeTag(self["cTaglist"].getCurrent())
+                       
+               elif self.currList is self["aTaglist"]:
+                       print "adding Tag",self["aTaglist"].getCurrent()[0]
+                       self.addTag(self["aTaglist"].getCurrent()[0])
+                       
+       def keyGreen(self):
+               if self.currList is self["cTaglist"]:
+                       self.session.openWithCallback(self.newTagEntered,InputBox, title=_("Whitepace will be replaced by Underscore"),windowTitle = _("enter the new Tag"))
+               
+       def keyYellow(self):
+               if  self.currList is self["aTaglist"]:
+                       self.session.openWithCallback(self.clearAllTags,MessageBox,_("clear all Tags?\n\nThis will delete ALL tags in ALL recodings!\nAre you sure?"), MessageBox.TYPE_YESNO)
+
+       def keyBlue(self):
+               if self.currList is self["aTaglist"] or self.currList is None:
+                       self["aTaglist"].selectionEnabled(0)
+                       self["cTaglist"].selectionEnabled(1)
+                       self["buttonred"].setText(_("remove Tag"))
+                       self["buttongreen"].setText(_("add new Tag"))
+                       self["buttonyellow"].setText("")        
+                       self["buttonblue"].setText(_("toggle List"))
+                       self.currList = self["cTaglist"]
+               else:
+                       self["aTaglist"].selectionEnabled(1)
+                       self["cTaglist"].selectionEnabled(0)
+                       self["buttonred"].setText(_("add Tag"))
+                       self["buttongreen"].setText("")
+                       self["buttonyellow"].setText("clear all Tags")        
+                       self["buttonblue"].setText(_("toggle List"))
+                       self.currList = self["aTaglist"]
+                       
+       def up(self):
+               self.currList.up()
+       
+       def down(self):
+               self.currList.down()
+       
+       def left(self):
+               self.currList.pageUp()
+       
+       def right(self):
+               self.currList.pageDown()
+       
+       def newTagEntered(self,newTag):
+               if newTag >=0:
+                       self.addTag(newTag.strip().replace(" ","_"))
+
+class TagMenuList(MenuList, HTMLComponent, GUIComponent):
+    def __init__(self, list):
+        MenuList.__init__(self,list)
+        GUIComponent.__init__(self)
+        self.l = eListboxPythonMultiContent()
+        self.list = list
+        self.l.setList(list)
+        self.l.setFont(0, gFont("Regular", 20))
+        
+    GUI_WIDGET = eListbox
+
+    def postWidgetCreate(self, instance):
+        instance.setContent(self.l)
+        instance.setItemHeight(25)
+               
+def main(session, service, **kwargs):
+       session.open(MovieTagger, service)
+
+def Plugins(path,**kwargs):
+       global plugin_path
+       plugin_path = path
+       return PluginDescriptor(name="Movie Tagger", description=_("Movie Tagger..."), where = PluginDescriptor.WHERE_MOVIELIST, fnc=main)
diff --git a/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/red.png b/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/red.png
new file mode 100644 (file)
index 0000000..cf5c009
Binary files /dev/null and b/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/red.png differ
diff --git a/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/yellow.png b/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/yellow.png
new file mode 100644 (file)
index 0000000..da2d8e6
Binary files /dev/null and b/movietagger/usr/lib/enigma2/python/Plugins/Extensions/MovieTagger/yellow.png differ