[pitivi] Fix .pls/.m3u formatters. Fixes #584899.
- From: Edward Hervey <edwardrv src gnome org>
- To: svn-commits-list gnome org
- Subject: [pitivi] Fix .pls/.m3u formatters. Fixes #584899.
- Date: Wed, 1 Jul 2009 06:47:22 +0000 (UTC)
commit 10904eb340d9ad410992cb75bb514e4ed4a095b2
Author: Jan Gerber <j bootlab org>
Date: Mon Jun 29 17:05:20 2009 +0200
Fix .pls/.m3u formatters. Fixes #584899.
pitivi/formatters/format.py | 2 +-
pitivi/formatters/playlist.py | 42 ++++++++++++++++++++++++++++++----------
2 files changed, 32 insertions(+), 12 deletions(-)
---
diff --git a/pitivi/formatters/format.py b/pitivi/formatters/format.py
index ba25f3d..fc63ed5 100644
--- a/pitivi/formatters/format.py
+++ b/pitivi/formatters/format.py
@@ -75,4 +75,4 @@ from pitivi.formatters.etree import ElementTreeFormatter
from pitivi.formatters.playlist import PlaylistFormatter
register_formatter(ElementTreeFormatter, _("PiTiVi Native (XML)"), ('xptv',))
-register_formatter(PlaylistFormatter, _("Playlist format"), ('pls', ))
+register_formatter(PlaylistFormatter, _("Playlist format"), ('pls', 'm3u'))
diff --git a/pitivi/formatters/playlist.py b/pitivi/formatters/playlist.py
index 0f9fde2..52778d4 100644
--- a/pitivi/formatters/playlist.py
+++ b/pitivi/formatters/playlist.py
@@ -20,6 +20,7 @@
# Boston, MA 02111-1307, USA.
import os.path
+import ConfigParser
import gst
from pitivi.stream import AudioStream, VideoStream
from pitivi.formatters.base import LoadOnlyFormatter
@@ -35,26 +36,45 @@ class PlaylistFormatter(LoadOnlyFormatter):
self._uris = []
self._basedir = None
+ def _loadProject(self, location, project):
+ path = location.split('file://', 1)[1]
+ self._basedir = os.path.dirname(path)
+ if path.endswith('.pls'):
+ self._parsePLS(path)
+ else:
+ self._parseM3U(path)
+ self._finishLoadingProject(project)
+
def _parseLine(self, ln):
- if ln.startswith('/'):
+ if ln.startswith('#'):
+ return
+ elif ln.startswith('/'):
# absolute path
return 'file://' + ln.strip()
return 'file://' + os.path.join(self._basedir, ln.strip())
- def _loadProject(self, location, project):
- path = location.split('file://', 1)[1]
- self._basedir = os.path.dirname(path)
+ def _parseM3U(self, path):
res = []
# simple list of location/uri
f = file(path)
for ln in f.readlines():
val = self.validateSourceURI(self._parseLine(ln))
# FIXME : if the loading failed, we should insert a blank source
- if val:
- res.append(val)
+ res.append(val)
self._uris = res
- self._finishLoadingProject(project)
+ def _parsePLS(self, filename):
+ # load and parse pls format
+ # http://en.wikipedia.org/wiki/PLS_%28file_format%29
+ config = ConfigParser.ConfigParser()
+ config.read((filename, ))
+ res = []
+ for i in range(config.getint('playlist', 'NumberOfEntries')):
+ ln = config.get('playlist', 'File%d' % (i+1))
+ val = self.validateSourceURI(self._parseLine(ln))
+ # FIXME : if the loading failed, we should insert a blank source
+ res.append(val)
+ self._uris = res
def _getSources(self):
return self._uris
@@ -67,10 +87,10 @@ class PlaylistFormatter(LoadOnlyFormatter):
audio = AudioStream(gst.Caps('audio/x-raw-int; audio/x-raw-float'))
track = Track(audio)
self.project.timeline.addTrack(track)
- for u in self._uris:
- if u in self.project.sources:
- self.project.timeline.addSourceFactory(self.project.sources[u])
+ for uri in self._uris:
+ factory = self.project.sources.getUri(uri)
+ self.project.timeline.addSourceFactory(factory)
@classmethod
def canHandle(cls, uri):
- return uri.endswith('.pls')
+ return os.path.splitext(uri)[-1] in ('.pls', '.m3u')
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]