Merge pull request #1838 from curlymorphic/xmlChecker

Xml checker
This commit is contained in:
Tres Finocchiaro
2015-03-08 17:34:13 +00:00
6 changed files with 82 additions and 8 deletions

View File

@@ -58,6 +58,12 @@ public:
virtual ~DataFile();
///
/// \brief validate
/// performs basic validation, compared to file extension.
///
bool validate( QString extension );
QString nameWithExtension( const QString& fn ) const;
void write( QTextStream& strm );

View File

@@ -35,7 +35,7 @@ class PreviewTrackContainer;
class EXPORT PresetPreviewPlayHandle : public PlayHandle
{
public:
PresetPreviewPlayHandle( const QString& presetFile, bool loadByPlugin = false );
PresetPreviewPlayHandle( const QString& presetFile, bool loadByPlugin = false, DataFile *dataFile = 0 );
virtual ~PresetPreviewPlayHandle();
virtual void play( sampleFrame* buffer );

View File

@@ -163,6 +163,53 @@ DataFile::~DataFile()
bool DataFile::validate( QString extension )
{
switch( m_type )
{
case Type::SongProject:
if( extension == "mmp" || extension == "mmpz" )
{
return true;
}
break;
case Type::SongProjectTemplate:
if( extension == "mpt" )
{
return true;
}
break;
case Type::InstrumentTrackSettings:
if ( extension == "xpf" || extension == "xml" )
{
return true;
}
break;
case Type::UnknownType:
if (! ( extension == "mmp" || extension == "mpt" || extension == "mmpz" ||
extension == "xpf" || extension == "xml" ||
( extension == "xiz" && Engine::pluginFileHandling().contains( extension ) ) ||
extension == "sf2" || extension == "pat" || extension == "mid" ||
extension == "flp" || extension == "dll"
) )
{
return true;
}
if( extension == "wav" || extension == "ogg" ||
extension == "ds" )
{
return true;
}
break;
default:
return false;
}
return false;
}
QString DataFile::nameWithExtension( const QString & _fn ) const
{
switch( type() )

View File

@@ -111,7 +111,7 @@ PreviewTrackContainer * PresetPreviewPlayHandle::s_previewTC;
PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file, bool _load_by_plugin ) :
PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file, bool _load_by_plugin, DataFile *dataFile ) :
PlayHandle( TypePresetPreviewHandle ),
m_previewNote( NULL )
{
@@ -144,22 +144,32 @@ PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file,
}
else
{
DataFile dataFile( _preset_file );
bool dataFileCreated = false;
if( dataFile == 0 )
{
dataFile = new DataFile( _preset_file );
dataFileCreated = true;
}
// vestige previews are bug prone; fallback on 3xosc with volume of 0
// without an instrument in preview track, it will segfault
if(dataFile.content().elementsByTagName( "vestige" ).length() == 0 )
if(dataFile->content().elementsByTagName( "vestige" ).length() == 0 )
{
s_previewTC->previewInstrumentTrack()->
loadTrackSpecificSettings(
dataFile.content().firstChild().toElement() );
dataFile->content().firstChild().toElement() );
}
else
{
s_previewTC->previewInstrumentTrack()->loadInstrument("tripleoscillator");
s_previewTC->previewInstrumentTrack()->setVolume( 0 );
}
if( dataFileCreated )
{
delete dataFile;
}
}
dataFile = 0;
// make sure, our preset-preview-track does not appear in any MIDI-
// devices list, so just disable receiving/sending MIDI-events at all
s_previewTC->previewInstrumentTrack()->

View File

@@ -942,7 +942,7 @@ void Song::loadProject( const QString & fileName )
DataFile dataFile( m_fileName );
// if file could not be opened, head-node is null and we create
// new project
if( dataFile.head().isNull() )
if( dataFile.validate( fileName.right( fileName.lastIndexOf(".") ) ) )
{
return;
}

View File

@@ -31,6 +31,7 @@
#include <QPushButton>
#include <QMdiArea>
#include <QMdiSubWindow>
#include <QMessageBox>
#include "FileBrowser.h"
#include "BBTrackContainer.h"
@@ -461,7 +462,17 @@ void FileBrowserTreeWidget::mousePressEvent(QMouseEvent * me )
( f->handling() == FileItem::LoadAsPreset ||
f->handling() == FileItem::LoadByPlugin ) )
{
m_previewPlayHandle = new PresetPreviewPlayHandle( f->fullName(), f->handling() == FileItem::LoadByPlugin );
DataFile dataFile( f->fullName() );
if( !dataFile.validate( f->extension() ) )
{
QMessageBox::warning( 0, tr ( "Error" ),
f->fullName() + " " + tr( "does not appear to be a valid" ) + " " + f->extension() +
" " + tr( "file" ),
QMessageBox::Ok, QMessageBox::NoButton );
m_pphMutex.unlock();
return;
}
m_previewPlayHandle = new PresetPreviewPlayHandle( f->fullName(), f->handling() == FileItem::LoadByPlugin, &dataFile );
}
if( m_previewPlayHandle != NULL )
{