msmith - in flumotion/trunk: .
flumotion/component/producers/playlist
flumotion-commit at lists.fluendo.com
flumotion-commit at lists.fluendo.com
Tue May 22 15:28:27 CEST 2007
Author: msmith
Date: Tue May 22 15:28:24 2007
New Revision: 4991
Modified:
flumotion/trunk/ChangeLog
flumotion/trunk/flumotion/component/producers/playlist/playlist.py
flumotion/trunk/flumotion/component/producers/playlist/playlist.xml
flumotion/trunk/flumotion/component/producers/playlist/playlistparser.py
Log:
* flumotion/component/producers/playlist/playlist.xml:
Add playlist-directory, base-directory properties. Make playlist
optional.
* flumotion/component/producers/playlist/playlist.py:
Watch playlist-directory (if any) for changes. Currently only
supports adding new files. Read base directory and pass to parser.
* flumotion/component/producers/playlist/playlistparser.py:
Use base directory to resolve relative paths.
Modified: flumotion/trunk/ChangeLog
==============================================================================
--- flumotion/trunk/ChangeLog (original)
+++ flumotion/trunk/ChangeLog Tue May 22 15:28:24 2007
@@ -1,3 +1,16 @@
+2007-05-22 Michael Smith <msmith at fluendo.com>
+
+ * flumotion/component/producers/playlist/playlist.xml:
+ Add playlist-directory, base-directory properties. Make playlist
+ optional.
+
+ * flumotion/component/producers/playlist/playlist.py:
+ Watch playlist-directory (if any) for changes. Currently only
+ supports adding new files. Read base directory and pass to parser.
+
+ * flumotion/component/producers/playlist/playlistparser.py:
+ Use base directory to resolve relative paths.
+
2007-05-21 Andy Wingo <wingo at pobox.com>
* flumotion/common/fxml.py (Parser.checkAttributes): Treat an
Modified: flumotion/trunk/flumotion/component/producers/playlist/playlist.py
==============================================================================
--- flumotion/trunk/flumotion/component/producers/playlist/playlist.py (original)
+++ flumotion/trunk/flumotion/component/producers/playlist/playlist.py Tue May 22 15:28:24 2007
@@ -27,6 +27,7 @@
from flumotion.common import errors, messages, log, fxml
from flumotion.component import feedcomponent
+from flumotion.component.base import watcher
from flumotion.common.messages import N_
@@ -298,6 +299,8 @@
props = self.config['properties'];
self._playlistfile = props.get('playlist', None)
+ self._playlistdirectory = props.get('playlist-directory', None)
+ self._baseDirectory = props.get('base-directory', None)
self._width = props.get('width', 320)
self._height = props.get('height', 240)
@@ -316,19 +319,42 @@
self.connect_feeders(pipeline)
return pipeline
+ def _watchDirectory(self, dir):
+ self.debug("Watching directory %s", dir)
+ self._filesAdded = {}
+
+ self._directoryWatcher = watcher.DirectoryWatcher(dir)
+ self._directoryWatcher.subscribe(fileChanged=self._watchFileChanged)
+ self._directoryWatcher.start()
+
+ def _watchFileChanged(self, file):
+ self.debug("File changed: %s", file)
+ if file not in self._filesAdded:
+ self._filesAdded[file] = None
+ try:
+ self.debug("Parsing file: %s", file)
+ self.playlistparser.parseFile(file)
+ except fxml.ParserError, e:
+ self.warning("Failed to parse playlist file: %r", e)
+ else:
+ self.warning("Can't yet change existing files")
+
def do_start(self, clocking):
self.link()
playlist = playlistparser.Playlist(self)
self.playlistparser = playlistparser.PlaylistXMLParser(playlist)
- try:
- if self._playlistfile:
+ if self._baseDirectory:
+ self.playlistparser.setBaseDirectory(self._baseDirectory)
+
+ if self._playlistfile:
+ try:
self.playlistparser.parseFile(self._playlistfile)
- except fxml.ParserError, e:
- self.warning("Failed to parse playlist file: %r", e)
+ except fxml.ParserError, e:
+ self.warning("Failed to parse playlist file: %r", e)
- #if self._playlistdirectory:
- # watchdirectory(playlistdirectory, newplaylistfile, playlistfiledelted)
+ if self._playlistdirectory:
+ self._watchDirectory(self._playlistdirectory)
return defer.succeed(None)
Modified: flumotion/trunk/flumotion/component/producers/playlist/playlist.xml
==============================================================================
--- flumotion/trunk/flumotion/component/producers/playlist/playlist.xml (original)
+++ flumotion/trunk/flumotion/component/producers/playlist/playlist.xml Tue May 22 15:28:24 2007
@@ -30,8 +30,13 @@
<property name="channels" type="int"
description="Audio channels to output" />
- <property name="playlist" type="string" required="yes"
- description="Location of the initial playlist file" />
+ <property name="playlist" type="string"
+ description="Location of the initial playlist file if any" />
+ <property name="playlist-directory" type="string"
+ description="Location of a directory to monitor for playlist files to add" />
+
+ <property name="base-directory" type="string"
+ description="Base directory for relative paths in playlist files" />
</properties>
</component>
</components>
Modified: flumotion/trunk/flumotion/component/producers/playlist/playlistparser.py
==============================================================================
--- flumotion/trunk/flumotion/component/producers/playlist/playlistparser.py (original)
+++ flumotion/trunk/flumotion/component/producers/playlist/playlistparser.py Tue May 22 15:28:24 2007
@@ -189,6 +189,13 @@
self._pending_items = []
self._discovering = False
+ self._baseDirectory = None
+
+ def setBaseDirectory(self, baseDir):
+ if not baseDir.endswith('/'):
+ baseDir = baseDir + '/'
+ self._baseDirectory = baseDir
+
def _discoverPending(self):
def _discovered(disc, is_media):
self.debug("Discovered!")
@@ -197,7 +204,11 @@
def _discoverer_done(disc, is_media):
if is_media:
self.debug("Discovery complete, media found")
- uri = "file://" + item[0]
+ filename = item[0]
+ if filename[0] != '/' and self._baseDirectory:
+ filename = self._baseDirectory + filename
+
+ uri = "file://" + filename
timestamp = item[1]
duration = item[2]
offset = item[3]
More information about the flumotion-commit
mailing list