add (incomplete) media scan support
[enigma2.git] / lib / python / Plugins / Extensions / PicturePlayer / plugin.py
index c4d36d6bfbebaf598d6a94b1502d300dbaddd12b..8db85cedabce8091115f15cdf45f367a83429333 100644 (file)
@@ -9,13 +9,12 @@ from Components.Label import Label
 from Components.ConfigList import ConfigList
 from Components.config import *
 
-from Tools.Directories import resolveFilename, SCOPE_MEDIA
+from Tools.Directories import resolveFilename, pathExists, createDir, SCOPE_MEDIA
 from Components.FileList import FileEntryComponent, FileList
 from Components.AVSwitch import AVSwitch
 
 from Plugins.Plugin import PluginDescriptor
 
-import os
 
 config.pic = ConfigSubsection()
 config.pic.slidetime = ConfigInteger(default=10, limits=(5, 60))
@@ -93,6 +92,9 @@ class ThumbView(Screen):
                                count += 1
                self.maxentry = len(self.list)-1
                
+               if self.maxentry < 0:
+                       self["label0"].setText(_("no Picture found"))
+               
                self.ThumbTimer = eTimer()
                self.ThumbTimer.timeout.get().append(self.showThumb)
 
@@ -123,6 +125,9 @@ class ThumbView(Screen):
                self.fillPage()
                
        def fillPage(self):
+               if self.maxentry < 0:
+                       return
+
                self["frame"].moveTo(self.poslist[self.list[self.index][3]][0], self.poslist[self.list[self.index][3]][1], 1)
                self["frame"].startMoving()
                
@@ -147,9 +152,10 @@ class ThumbView(Screen):
                        cachefile = ""
                        if config.pic.cache.value:
                                cachedir = self.path + ".Thumbnails/"
-                               if not os.path.exists(cachedir):
-                                       os.mkdir(cachedir)
                                cachefile = cachedir + self.thumblist[self.thumbindex] + str(180) + str(160) + str(self.aspect)
+                               if not pathExists(cachedir):
+                                       if not createDir(cachedir):
+                                               cachefile = ""
 
                        ptr = loadPic(self.path + self.thumblist[self.thumbindex], 180, 160, self.aspect, int(config.pic.resize.value), int(config.pic.rotate.value),1, cachefile)
                        if ptr != None:
@@ -165,9 +171,15 @@ class ThumbView(Screen):
                        self.thumbindex = 0
                
        def StartExif(self):
+               if self.maxentry < 0:
+                       return
+
                self.session.open(ExifView, self.list[self.index][1], self.list[self.index][0])
 
        def KeyOk(self):
+               if self.maxentry < 0:
+                       return
+
                self.old_index = self.index
                self.session.openWithCallback(self.returnView ,PicView, self.filelist, self.list[self.index][0], self.path)
                
@@ -215,6 +227,7 @@ class PicView(Screen):
                self.slideOn = False
                self.pauseOn = False
                self.index = 0
+               self.old = 0
                self.list = []
                
                count=0
@@ -437,11 +450,11 @@ class picmain(Screen):
                }, -1)
                
                self.aspect = getAspect()
-               self.currDir = config.pic.lastDir.value
-               if not os.path.exists(self.currDir):
-                       self.currDir = "/"
-               
-               self.filelist = FileList(self.currDir, matchingPattern = "(?i)^.*\.(jpeg|jpg|png|bmp)")
+               currDir = config.pic.lastDir.value
+               if not pathExists(currDir):
+                       currDir = "/"
+
+               self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(jpeg|jpg|png|bmp)")
                self["filelist"] = self.filelist
                self["thumbnail"] = Pixmap()
                
@@ -469,12 +482,13 @@ class picmain(Screen):
                if not self.filelist.canDescent():
                        cachefile = ""
                        if config.pic.cache.value:
-                               cachedir = self.currDir + ".Thumbnails/"
-                               if not os.path.exists(cachedir):
-                                       os.mkdir(cachedir)
-                               cachefile = cachedir + self.filelist.getSelection()[0] + str(180) + str(160) + str(self.aspect)
+                               cachedir = self.filelist.getCurrentDirectory() + ".Thumbnails/"
+                               cachefile = cachedir + self.filelist.getFilename() + str(180) + str(160) + str(self.aspect)
+                               if not pathExists(cachedir):
+                                       if not createDir(cachedir):
+                                               cachefile = ""
 
-                       ptr = loadPic(self.currDir + self.filelist.getSelection()[0], 180, 160, self.aspect, int(config.pic.resize.value), 0, 0, cachefile)
+                       ptr = loadPic(self.filelist.getCurrentDirectory() + self.filelist.getFilename(), 180, 160, self.aspect, int(config.pic.resize.value), 0, 0, cachefile)
                        if ptr != None:
                                self["thumbnail"].show()
                                self["thumbnail"].instance.setPixmap(ptr.__deref__())
@@ -483,26 +497,33 @@ class picmain(Screen):
 
        def KeyOk(self):
                if self.filelist.canDescent():
-                       self.currDir = self.filelist.getSelection()[0]
                        self.filelist.descent()
                else:
-                       self.session.openWithCallback(self.returnVal, PicView, self.filelist.getFileList(), self.filelist.getSelection()[0], self.currDir)
+                       self.session.openWithCallback(self.returnVal, PicView, self.filelist.getFileList(), self.filelist.getFilename(), self.filelist.getCurrentDirectory())
                        
        def StartThumb(self):
-               self.session.openWithCallback(self.returnVal, ThumbView, self.filelist.getFileList(), self.filelist.getSelection()[0], self.currDir)
+               self.session.openWithCallback(self.returnVal, ThumbView, self.filelist.getFileList(), self.filelist.getFilename(), self.filelist.getCurrentDirectory())
 
        def returnVal(self, val=0):
-               print val
+               if val > 0:
+                       for x in self.filelist.getFileList():
+                               if x[0][1] == True:
+                                       val += 1
+                       self.filelist.moveToIndex(val)
 
        def StartExif(self):
                if not self.filelist.canDescent():
-                       self.session.open(ExifView, self.currDir + self.filelist.getSelection()[0], self.filelist.getSelection()[0])
+                       self.session.open(ExifView, self.filelist.getCurrentDirectory() + self.filelist.getFilename(), self.filelist.getFilename())
 
        def Settings(self):
                self.session.open(PicSetup)
        
        def Exit(self):
-               config.pic.lastDir.value = self.currDir
+               if self.filelist.getCurrentDirectory() is None:
+                       config.pic.lastDir.value = "/"
+               else:
+                       config.pic.lastDir.value = self.filelist.getCurrentDirectory()
+
                config.pic.save()
                self.close()
 
@@ -511,5 +532,26 @@ class picmain(Screen):
 def main(session, **kwargs):
        session.open(picmain)
 
+def filescan_open(list, session, **kwargs):
+       session.open(picmain) # list
+
+def filescan():
+       # we expect not to be called if the MediaScanner plugin is not available,
+       # thus we don't catch an ImportError exception here
+       from Plugins.Extensions.MediaScanner.plugin import Scanner, ScanPath
+       return \
+               Scanner(extensions = ["jpg", "jpe", "jpeg"], 
+                       paths_to_scan = 
+                               [
+                                       ScanPath(path = "DCIM", with_subdirs = True),
+                                       ScanPath(path = "", with_subdirs = False),
+                               ],
+                       name = "Pictures", 
+                       description = "View Photos...",
+                       openfnc = filescan_open,
+               )
+
 def Plugins(**kwargs):
-       return PluginDescriptor(name="PicturePlayer", description="Picture Viewer (BMP, PNG, JPG)", icon="pictureplayer.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main)
+       return \
+               [PluginDescriptor(name="PicturePlayer", description="Picture Viewer (BMP, PNG, JPG)", icon="pictureplayer.png", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),
+                PluginDescriptor(name="PicturePlayer", where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan)]