diff data/fileio/PlaylistFileReader.cpp @ 297:c022976d18e8

* Merge from sv-match-alignment branch (excluding alignment-specific document). - add aggregate wave model (not yet complete enough to be added as a true model in a layer, but there's potential) - add play solo mode - add alignment model -- unused in plain SV - fix two plugin leaks - add m3u playlist support (opens all files at once, potentially hazardous) - fix retrieval of pre-encoded URLs - add ability to resample audio files on import, so as to match rates with other files previously loaded; add preference for same - add preliminary support in transform code for range and rate of transform input - reorganise preferences dialog, move dark-background option to preferences, add option for temporary directory location
author Chris Cannam
date Fri, 28 Sep 2007 13:56:38 +0000
parents
children d030801113b6
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/fileio/PlaylistFileReader.cpp	Fri Sep 28 13:56:38 2007 +0000
@@ -0,0 +1,94 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    Sonic Visualiser
+    An audio file viewer and annotation editor.
+    Centre for Digital Music, Queen Mary, University of London.
+    This file copyright 2007 QMUL.
+    
+    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.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#include "PlaylistFileReader.h"
+
+#include <QFile>
+#include <QTextStream>
+#include <QStringList>
+
+PlaylistFileReader::PlaylistFileReader(QString path)
+{
+    m_file = new QFile(path);
+    bool good = false;
+
+    if (!m_file->exists()) {
+	m_error = QFile::tr("File \"%1\" does not exist").arg(path);
+    } else if (!m_file->open(QIODevice::ReadOnly | QIODevice::Text)) {
+	m_error = QFile::tr("Failed to open file \"%1\"").arg(path);
+    } else {
+	good = true;
+    }
+
+    if (!good) {
+	delete m_file;
+	m_file = 0;
+    }
+}
+
+PlaylistFileReader::~PlaylistFileReader()
+{
+    if (m_file) m_file->close();
+    delete m_file;
+}
+
+bool
+PlaylistFileReader::isOK() const
+{
+    return (m_file != 0);
+}
+
+QString
+PlaylistFileReader::getError() const
+{
+    return m_error;
+}
+
+PlaylistFileReader::Playlist
+PlaylistFileReader::load() const
+{
+    if (!m_file) return Playlist();
+
+    QTextStream in(m_file);
+    in.seek(0);
+
+    Playlist playlist;
+
+    while (!in.atEnd()) {
+
+        // cope with old-style Mac line endings (c.f. CSVFileReader)
+        // as well as DOS/Unix style
+
+        QString chunk = in.readLine();
+        QStringList lines = chunk.split('\r', QString::SkipEmptyParts);
+        
+        for (size_t li = 0; li < lines.size(); ++li) {
+
+            QString line = lines[li];
+
+            if (line.startsWith("#")) continue;
+
+            playlist.push_back(line);
+        }
+    }
+
+    return playlist;
+}
+
+void
+PlaylistFileReader::getSupportedExtensions(std::set<QString> &extensions)
+{
+    extensions.insert("m3u");
+}