Author: duncan
Date: Mon Nov  5 15:17:15 2007
New Revision: 10082

Log:
[ 1826280 ] Archive FXD files
New plug-in from Christian Lyra applied


Added:
   branches/rel-1-7/freevo/src/video/plugins/fxdarchive.py   (contents, props 
changed)
   branches/rel-1/freevo/src/video/plugins/fxdarchive.py   (contents, props 
changed)
Modified:
   branches/rel-1-7/freevo/ChangeLog
   branches/rel-1/freevo/ChangeLog

Modified: branches/rel-1-7/freevo/ChangeLog
==============================================================================
--- branches/rel-1-7/freevo/ChangeLog   (original)
+++ branches/rel-1-7/freevo/ChangeLog   Mon Nov  5 15:17:15 2007
@@ -23,6 +23,7 @@
  * Updated Spanish translation (F#1821771,F#1824931)
  * New DVB streamer plug-in, allows pausing and recording DVB/ATSC streams 
(F#1720288)
  * New eject CD-ROM plug-in, adding a menu item to the drive menu (F#1773418)
+ * New fxd archive plug-in (F#1826280)
  * New internet TV plug-in (F#1811634)
  * New lastfm menu plug-in (F#1792494)
  * New RSS audio podcast plug-in (F#1807634)

Added: branches/rel-1-7/freevo/src/video/plugins/fxdarchive.py
==============================================================================
--- (empty file)
+++ branches/rel-1-7/freevo/src/video/plugins/fxdarchive.py     Mon Nov  5 
15:17:15 2007
@@ -0,0 +1,169 @@
+# -*- coding: iso-8859-1 -*-
+# -----------------------------------------------------------------------
+# fxdarchive - a plugin to archive fxd movie files from a removable media
+# -----------------------------------------------------------------------
+# activate:
+# plugin.activate('reminders', level=45)
+# REMINDERS = [ ("cmd", "name", <wrap 0|N >, "string") ]
+# -----------------------------------------------------------------------
+# Freevo - A Home Theater PC framework
+# Copyright (C) 2003 Krister Lagerstrom, et al.
+# Please see the file freevo/Docs/CREDITS for a complete list of authors.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MER-
+# CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# -----------------------------------------------------------------------
+
+__author__ = "Christian Lyra"
+__version__ = "0.1"
+__copyright__ = "Copyright (c) 2007 Christian Lyra"
+__license__ = "GPL"
+__doc__ = '''This plugins create a entry in the context menu of cd/dvd
+to let you copy fxd files from cd/dvd to a configured directory on HD. So you 
can see
+what you have on dvd without the need go from dvd to dvd. the plugin modify 
the fxd
+inserting a media-id attribute, so when you select the fxd file freevo will 
ask you to
+insert the right media.
+
+To activate, put the following lines in local_conf.py:
+plugin.activate('fxdarchive')
+ARCHIVES = '/dir/to/archive'
+'''
+
+
+import os  
+import plugin
+import config
+import shutil
+import time
+import util.fileops
+import util.fxdparser
+from gui import PopupBox, AlertBox
+import rc
+import menu
+
+class PluginInterface(plugin.ItemPlugin):
+    """
+    Plugin to archive fxd files
+ 
+    Activate:
+    plugin.activate('video.fxdarchive')
+    ARCHIVES = '/where/files/should/go'
+ 
+    This plugin creates additional entries in the context menu for cd/dvd 
+    for copy all fxd files to a configured directory. 
+    """
+    
+    def __init__(self):
+        plugin.ItemPlugin.__init__(self)
+        self.archives = config.ARCHIVES
+        self.coverimg = None
+        self.mediaid = None
+        self.ismovie = False
+        self.cwd = None
+        self.nfiles = 0
+        
+
+    def config(self):
+        ''' Defines local configuration variable that can be overridden in 
local_conf.py
+        '''
+        return [
+            ('ARCHIVES', os.path.join(config.FREEVO_CACHEDIR, 'fxdarchive'), 
'Path to archived fxd directory'),
+        ]
+
+
+    def actions(self, item):
+        self.item = item 
+        ret = [ ]
+        if hasattr(self.item, 'type') and self.item.type == 'dir' and 
hasattr(self.item.media, 'id'):
+            #for name, to in self.archives:             
+            #   ret.append( (lambda **kwargs: self.copy_fxd(dst=to, **kwargs), 
_('Copy FXD files to %s') % name) )
+            self.mediaid = item.media.id
+            return [ (self.copy_fxd, _('Archive FXD files')) ]
+        return []    
+
+
+    def copy_fxd(self, arg=None, menuw=None):
+        '''
+        Find all fxd files inside a given folder, and copy them to the 
configured
+        destination folder
+        ''' 
+        self.item.media.mount()
+        box = PopupBox(text=_('Finding and copying FXD files...'))
+        box.show()
+        time.sleep(1)
+        fxds = util.fileops.match_files_recursively( self.item.dir , [ 'fxd' ])
+        msg=''
+        for i in fxds:
+            _debug_('file: %r' % i)
+            self.cwd = os.path.dirname(i)
+            parser = util.fxdparser.FXD(i)
+            parser.set_handler('movie', self.fxdparser)
+            parser.set_handler('movie', self.fxdparsew, mode='w')
+            parser.parse()
+            if self.ismovie:
+                parser.tree.filename= '%s/%s' % (self.archives, 
os.path.basename(parser.filename) )
+                try: 
+                    parser.save()
+                    self.nfiles += 1
+                except:
+                    print "Error while trying to write ", parser.tree.filename
+                    msg = _("There was a error while trying to write the fxd 
file")
+                if self.coverimg:
+                    coverfrom = os.path.join(self.cwd, self.coverimg)
+                    coverto = os.path.join(self.archives, self.coverimg)
+                    try:
+                        shutil.copy(coverfrom, coverto)
+                        # is there a better way to do this?
+                        os.chmod(coverto, 0644)
+                    except:
+                        print "Error while trying to copy %s to %s" % 
(coverfrom, coverto)
+                        msg = _("But I couldn't copy a cover image file.")
+            self.ismovie = False
+        box.destroy()
+        box = PopupBox(text=_('%d fxd files archived. %s') % (self.nfiles, 
msg))
+        box.show()
+        time.sleep(3)
+        box.destroy()
+        
+        self.item.media.umount()
+        
+        #reset a few variables
+        self.nfiles = 0
+        msg = ''
+            
+
+    def fxdparser(self, fxd, node):
+        '''
+        Parse the fxd file, and discover the cover image file,
+        also, discover if this is a movie fxd or not
+        '''
+        
+        coverimg = fxd.childcontent(node, 'cover-img')
+        if coverimg:
+            self.coverimg = coverimg
+        else:
+            self.coverimg = None
+        self.ismovie = True
+        
+
+    def fxdparsew(self, fxd, node):
+        '''
+        Change a few things inside the fxd file while writing it.
+        add <cdrom>/path/ information and media-id attribute
+        '''     
+        files = fxd.get_children(node, 'file', 0)
+        for file in files:
+            fxd.setcdata(file, '%s/%s' % (self.cwd, fxd.gettext(file)))
+            fxd.setattr(file, 'media-id', self.mediaid)

Modified: branches/rel-1/freevo/ChangeLog
==============================================================================
--- branches/rel-1/freevo/ChangeLog     (original)
+++ branches/rel-1/freevo/ChangeLog     Mon Nov  5 15:17:15 2007
@@ -29,6 +29,7 @@
  * Updated Spanish translation (F#1821771,F#1824931)
  * New DVB streamer plug-in, allows pausing and recording DVB/ATSC streams 
(F#1720288)
  * New eject CD-ROM plug-in, adding a menu item to the drive menu (F#1773418)
+ * New fxd archive plug-in (F#1826280)
  * New internet TV plug-in (F#1811634)
  * New lastfm menu plug-in (F#1792494)
  * New RSS audio podcast plug-in (F#1807634)

Added: branches/rel-1/freevo/src/video/plugins/fxdarchive.py
==============================================================================
--- (empty file)
+++ branches/rel-1/freevo/src/video/plugins/fxdarchive.py       Mon Nov  5 
15:17:15 2007
@@ -0,0 +1,169 @@
+# -*- coding: iso-8859-1 -*-
+# -----------------------------------------------------------------------
+# fxdarchive - a plugin to archive fxd movie files from a removable media
+# -----------------------------------------------------------------------
+# activate:
+# plugin.activate('reminders', level=45)
+# REMINDERS = [ ("cmd", "name", <wrap 0|N >, "string") ]
+# -----------------------------------------------------------------------
+# Freevo - A Home Theater PC framework
+# Copyright (C) 2003 Krister Lagerstrom, et al.
+# Please see the file freevo/Docs/CREDITS for a complete list of authors.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MER-
+# CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# -----------------------------------------------------------------------
+
+__author__ = "Christian Lyra"
+__version__ = "0.1"
+__copyright__ = "Copyright (c) 2007 Christian Lyra"
+__license__ = "GPL"
+__doc__ = """This plugins create a entry in the context menu of cd/dvd
+to let you copy fxd files from cd/dvd to a configured directory on HD. So you 
can see
+what you have on dvd without the need go from dvd to dvd. the plugin modify 
the fxd
+inserting a media-id attribute, so when you select the fxd file freevo will 
ask you to
+insert the right media.
+
+To activate, put the following lines in local_conf.py:
+plugin.activate('fxdarchive')
+ARCHIVES = '/dir/to/archive'
+"""
+
+
+import os
+import plugin
+import config
+import shutil
+import time
+import util.fileops
+import util.fxdparser
+from gui import PopupBox, AlertBox
+import rc
+import menu
+
+class PluginInterface(plugin.ItemPlugin):
+    """
+    Plugin to archive fxd files
+
+    Activate:
+    plugin.activate('video.fxdarchive')
+    ARCHIVES = '/where/files/should/go'
+
+    This plugin creates additional entries in the context menu for cd/dvd
+    for copy all fxd files to a configured directory.
+    """
+
+    def __init__(self):
+        plugin.ItemPlugin.__init__(self)
+        self.archives = config.ARCHIVES
+        self.coverimg = None
+        self.mediaid = None
+        self.ismovie = False
+        self.cwd = None
+        self.nfiles = 0
+
+
+    def config(self):
+        """ Defines local configuration variable that can be overridden in 
local_conf.py
+        """
+        return [
+            ('ARCHIVES', os.path.join(config.FREEVO_CACHEDIR, 'fxdarchive'), 
'Path to archived fxd directory'),
+        ]
+
+
+    def actions(self, item):
+        self.item = item
+        ret = [ ]
+        if hasattr(self.item, 'type') and self.item.type == 'dir' and 
hasattr(self.item.media, 'id'):
+            #for name, to in self.archives:
+            #   ret.append( (lambda **kwargs: self.copy_fxd(dst=to, **kwargs), 
_('Copy FXD files to %s') % name) )
+            self.mediaid = item.media.id
+            return [ (self.copy_fxd, _('Archive FXD files')) ]
+        return []
+
+
+    def copy_fxd(self, arg=None, menuw=None):
+        """
+        Find all fxd files inside a given folder, and copy them to the 
configured
+        destination folder
+        """
+        self.item.media.mount()
+        box = PopupBox(text=_('Finding and copying FXD files...'))
+        box.show()
+        time.sleep(1)
+        fxds = util.fileops.match_files_recursively( self.item.dir , [ 'fxd' ])
+        msg=''
+        for i in fxds:
+            _debug_('file: %r' % i)
+            self.cwd = os.path.dirname(i)
+            parser = util.fxdparser.FXD(i)
+            parser.set_handler('movie', self.fxdparser)
+            parser.set_handler('movie', self.fxdparsew, mode='w')
+            parser.parse()
+            if self.ismovie:
+                parser.tree.filename= '%s/%s' % (self.archives, 
os.path.basename(parser.filename) )
+                try:
+                    parser.save()
+                    self.nfiles += 1
+                except:
+                    print "Error while trying to write ", parser.tree.filename
+                    msg = _("There was a error while trying to write the fxd 
file")
+                if self.coverimg:
+                    coverfrom = os.path.join(self.cwd, self.coverimg)
+                    coverto = os.path.join(self.archives, self.coverimg)
+                    try:
+                        shutil.copy(coverfrom, coverto)
+                        # is there a better way to do this?
+                        os.chmod(coverto, 0644)
+                    except:
+                        print "Error while trying to copy %s to %s" % 
(coverfrom, coverto)
+                        msg = _("But I couldn't copy a cover image file.")
+            self.ismovie = False
+        box.destroy()
+        box = PopupBox(text=_('%d fxd files archived. %s') % (self.nfiles, 
msg))
+        box.show()
+        time.sleep(3)
+        box.destroy()
+
+        self.item.media.umount()
+
+        #reset a few variables
+        self.nfiles = 0
+        msg = ''
+
+
+    def fxdparser(self, fxd, node):
+        """
+        Parse the fxd file, and discover the cover image file,
+        also, discover if this is a movie fxd or not
+        """
+
+        coverimg = fxd.childcontent(node, 'cover-img')
+        if coverimg:
+            self.coverimg = coverimg
+        else:
+            self.coverimg = None
+        self.ismovie = True
+
+
+    def fxdparsew(self, fxd, node):
+        """
+        Change a few things inside the fxd file while writing it.
+        add <cdrom>/path/ information and media-id attribute
+        """
+        files = fxd.get_children(node, 'file', 0)
+        for file in files:
+            fxd.setcdata(file, '%s/%s' % (self.cwd, fxd.gettext(file)))
+            fxd.setattr(file, 'media-id', self.mediaid)

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to