[Sv1-commits] SF.net SVN: sv1:[1617] sonic-visualiser/trunk/transform
Brought to you by:
cannam
From: <ca...@us...> - 2009-09-08 16:52:54
|
Revision: 1617 http://sv1.svn.sourceforge.net/sv1/?rev=1617&view=rev Author: cannam Date: 2009-09-08 16:52:36 +0000 (Tue, 08 Sep 2009) Log Message: ----------- * Better handling of failed-to-open-output-stream situations; ensure CSV writer closes files when they're finished rather than when it's finished Modified Paths: -------------- sonic-visualiser/trunk/transform/CSVFeatureWriter.cpp sonic-visualiser/trunk/transform/CSVFeatureWriter.h sonic-visualiser/trunk/transform/FeatureWriter.h sonic-visualiser/trunk/transform/FileFeatureWriter.cpp Modified: sonic-visualiser/trunk/transform/CSVFeatureWriter.cpp =================================================================== --- sonic-visualiser/trunk/transform/CSVFeatureWriter.cpp 2009-09-08 16:51:24 UTC (rev 1616) +++ sonic-visualiser/trunk/transform/CSVFeatureWriter.cpp 2009-09-08 16:52:36 UTC (rev 1617) @@ -79,7 +79,9 @@ // combination QTextStream *sptr = getOutputStream(trackId, transform.getIdentifier()); - if (!sptr) return; //!!! this is probably better handled with an exception + if (!sptr) { + throw FailedToOpenOutputStream(trackId, transform.getIdentifier()); + } QTextStream &stream = *sptr; Modified: sonic-visualiser/trunk/transform/CSVFeatureWriter.h =================================================================== --- sonic-visualiser/trunk/transform/CSVFeatureWriter.h 2009-09-08 16:51:24 UTC (rev 1616) +++ sonic-visualiser/trunk/transform/CSVFeatureWriter.h 2009-09-08 16:52:36 UTC (rev 1617) @@ -49,7 +49,7 @@ const Vamp::Plugin::FeatureList &features, std::string summaryType = ""); - virtual void finish() { } + virtual QString getWriterTag() const { return "csv"; } private: QString m_separator; Modified: sonic-visualiser/trunk/transform/FeatureWriter.h =================================================================== --- sonic-visualiser/trunk/transform/FeatureWriter.h 2009-09-08 16:51:24 UTC (rev 1616) +++ sonic-visualiser/trunk/transform/FeatureWriter.h 2009-09-08 16:52:36 UTC (rev 1617) @@ -59,6 +59,24 @@ }; virtual void setTrackMetadata(QString trackid, TrackMetadata metadata) { } + class FailedToOpenOutputStream : virtual public std::exception + { + public: + FailedToOpenOutputStream(QString trackId, QString transformId) throw() : + m_trackId(trackId), + m_transformId(transformId) + { } + virtual ~FailedToOpenOutputStream() throw() { } + virtual const char *what() const throw() { + return QString("Failed to open output stream for track id \"%1\", transform id \"%2\"") + .arg(m_trackId).arg(m_transformId).toLocal8Bit().data(); + } + + protected: + QString m_trackId; + QString m_transformId; + }; + // may throw FailedToOpenFile or other exceptions virtual void write(QString trackid, @@ -70,6 +88,8 @@ virtual void flush() { } // whatever the last stream was virtual void finish() = 0; + + virtual QString getWriterTag() const = 0; }; #endif Modified: sonic-visualiser/trunk/transform/FileFeatureWriter.cpp =================================================================== --- sonic-visualiser/trunk/transform/FileFeatureWriter.cpp 2009-09-08 16:51:24 UTC (rev 1616) +++ sonic-visualiser/trunk/transform/FileFeatureWriter.cpp 2009-09-08 16:52:36 UTC (rev 1617) @@ -59,6 +59,8 @@ m_streams.erase(m_streams.begin()); } while (!m_files.empty()) { + cerr << "FileFeatureWriter::~FileFeatureWriter: NOTE: Closing feature file \"" + << m_files.begin()->second->fileName().toStdString() << "\"" << endl; delete m_files.begin()->second; m_files.erase(m_files.begin()); } @@ -156,7 +158,8 @@ { if (m_singleFileName != "") { if (QFileInfo(m_singleFileName).exists() && !(m_force || m_append)) { - cerr << "FileFeatureWriter: ERROR: Specified output file \"" << m_singleFileName.toStdString() << "\" exists and neither force nor append flag is specified -- not overwriting" << endl; + cerr << endl << "FileFeatureWriter: ERROR: Specified output file \"" << m_singleFileName.toStdString() << "\" exists and neither --" << getWriterTag().toStdString() << "-force nor --" << getWriterTag().toStdString() << "-append flag is specified -- not overwriting" << endl; + cerr << "NOTE: To find out how to fix this problem, read the help for the --" << getWriterTag().toStdString() << "-force" << endl << "and --" << getWriterTag().toStdString() << "-append options" << endl; return ""; } return m_singleFileName; @@ -178,14 +181,15 @@ infilename = scheme + ":" + infilename; // DOS drive! } -// cerr << "trackId = " << trackId.toStdString() << ", url = " << url.toString().toStdString() << ", infilename = " -// << infilename.toStdString() << ", basename = " << basename.toStdString() << endl; + cerr << "trackId = " << trackId.toStdString() << ", url = " << url.toString().toStdString() << ", infilename = " + << infilename.toStdString() << ", basename = " << basename.toStdString() << ", m_baseDir = " << m_baseDir.toStdString() << endl; - if (m_baseDir != "") dirname = QFileInfo(m_baseDir).absoluteFilePath(); else if (local) dirname = QFileInfo(infilename).absolutePath(); else dirname = QDir::currentPath(); + cerr << "dirname = " << dirname.toStdString() << endl; + QString filename; if (m_manyFiles && transformId != "") { @@ -199,7 +203,8 @@ filename = QDir(dirname).filePath(filename); if (QFileInfo(filename).exists() && !(m_force || m_append)) { - cerr << "FileFeatureWriter: ERROR: Output file \"" << filename.toStdString() << "\" exists (for input file or URL \"" << trackId.toStdString() << "\" and transform \"" << transformId.toStdString() << "\") and neither force nor append is specified -- not overwriting" << endl; + cerr << endl << "FileFeatureWriter: ERROR: Output file \"" << filename.toStdString() << "\" exists (for input file or URL \"" << trackId.toStdString() << "\" and transform \"" << transformId.toStdString() << "\") and neither --" << getWriterTag().toStdString() << "-force nor --" << getWriterTag().toStdString() << "-append is specified -- not overwriting" << endl; + cerr << "NOTE: To find out how to fix this problem, read the help for the --" << getWriterTag().toStdString() << "-force" << endl << "and --" << getWriterTag().toStdString() << "-append options" << endl; return ""; } @@ -304,6 +309,8 @@ m_streams.erase(m_streams.begin()); } while (!m_files.empty()) { + cerr << "FileFeatureWriter::finish: NOTE: Closing feature file \"" + << m_files.begin()->second->fileName().toStdString() << "\"" << endl; delete m_files.begin()->second; m_files.erase(m_files.begin()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |