mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-02-24 20:03:07 +01:00
Initial database generators
This commit is contained in:
parent
5fca433805
commit
4a8b851ba5
101
src/libtomahawk/database/databasecommand_genericselect.cpp
Normal file
101
src/libtomahawk/database/databasecommand_genericselect.cpp
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||||
|
*
|
||||||
|
* Copyright 2010-2011, Leo Franchi <lfranchi@kde.org>
|
||||||
|
*
|
||||||
|
* Tomahawk 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Tomahawk is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "databasecommand_genericselect.h"
|
||||||
|
|
||||||
|
#include "databaseimpl.h"
|
||||||
|
#include "utils/logger.h"
|
||||||
|
#include <sourcelist.h>
|
||||||
|
#include <artist.h>
|
||||||
|
#include <album.h>
|
||||||
|
|
||||||
|
using namespace Tomahawk;
|
||||||
|
|
||||||
|
|
||||||
|
DatabaseCommand_GenericSelect::DatabaseCommand_GenericSelect( const QString& sqlSelect, QObject* parent )
|
||||||
|
: DatabaseCommand( parent )
|
||||||
|
, m_sqlSelect( sqlSelect )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DatabaseCommand_GenericSelect::exec( DatabaseImpl* dbi )
|
||||||
|
{
|
||||||
|
Q_ASSERT( source()->isLocal() || source()->id() >= 1 );
|
||||||
|
TomahawkSqlQuery query = dbi->newquery();
|
||||||
|
|
||||||
|
query.exec( m_sqlSelect );
|
||||||
|
|
||||||
|
QList< query_ptr > queries;
|
||||||
|
|
||||||
|
|
||||||
|
// Expecting
|
||||||
|
while ( query.next() )
|
||||||
|
{
|
||||||
|
Tomahawk::result_ptr result = Tomahawk::result_ptr( new Tomahawk::Result() );
|
||||||
|
Tomahawk::source_ptr s;
|
||||||
|
|
||||||
|
QString artist, track, album;
|
||||||
|
artist = query.value( 0 ).toString();
|
||||||
|
album = query.value( 1 ).toString();
|
||||||
|
track = query.value( 2 ).toString();
|
||||||
|
|
||||||
|
Tomahawk::query_ptr qry = Tomahawk::Query::get( artist, track, album, uuid(), (query.value( 7 ).toUInt() != 0) ); // Only auto-resolve non-local results
|
||||||
|
Tomahawk::artist_ptr artistptr = Tomahawk::Artist::get( query.value( 12 ).toUInt(), artist );
|
||||||
|
Tomahawk::album_ptr albumptr = Tomahawk::Album::get( query.value( 13 ).toUInt(), album, artistptr );
|
||||||
|
|
||||||
|
// If it's a local track, set to the local source and url in the result and we're done. otherwise, we get resolved
|
||||||
|
if( query.value( 7 ).toUInt() == 0 )
|
||||||
|
{
|
||||||
|
s = SourceList::instance()->getLocal();
|
||||||
|
result->setUrl( query.value( 7 ).toString() );
|
||||||
|
|
||||||
|
result->setId( query.value( 9 ).toUInt() );
|
||||||
|
result->setArtist( artistptr );
|
||||||
|
result->setAlbum( albumptr );
|
||||||
|
result->setTrack( query.value( 2 ).toString() );
|
||||||
|
result->setSize( query.value( 3 ).toUInt() );
|
||||||
|
result->setDuration( query.value( 4 ).toUInt() );
|
||||||
|
result->setBitrate( query.value( 5 ).toUInt() );
|
||||||
|
result->setMimetype( query.value( 8 ).toString() );
|
||||||
|
result->setScore( 1.0 );
|
||||||
|
result->setCollection( s->collection() );
|
||||||
|
|
||||||
|
TomahawkSqlQuery attrQuery = dbi->newquery();
|
||||||
|
QVariantMap attr;
|
||||||
|
|
||||||
|
attrQuery.prepare( "SELECT k, v FROM track_attributes WHERE id = ?" );
|
||||||
|
attrQuery.bindValue( 0, result->dbid() );
|
||||||
|
attrQuery.exec();
|
||||||
|
while ( attrQuery.next() )
|
||||||
|
{
|
||||||
|
attr[ attrQuery.value( 0 ).toString() ] = attrQuery.value( 1 ).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
result->setAttributes( attr );
|
||||||
|
|
||||||
|
qry->addResults( QList<Tomahawk::result_ptr>() << result );
|
||||||
|
qry->setResolveFinished( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
queries << qry;
|
||||||
|
}
|
||||||
|
|
||||||
|
emit tracks( queries );
|
||||||
|
}
|
56
src/libtomahawk/database/databasecommand_genericselect.h
Normal file
56
src/libtomahawk/database/databasecommand_genericselect.h
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||||
|
*
|
||||||
|
* Copyright 2010-2011, Leo Franchi <lfranchi@kde.org>
|
||||||
|
*
|
||||||
|
* Tomahawk 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Tomahawk is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DATABASECOMMAND_GENERICSELECT_H
|
||||||
|
#define DATABASECOMMAND_GENERICSELECT_H
|
||||||
|
|
||||||
|
#include <QVariantMap>
|
||||||
|
|
||||||
|
#include "databasecommand.h"
|
||||||
|
#include "source.h"
|
||||||
|
#include "typedefs.h"
|
||||||
|
|
||||||
|
#include "dllmacro.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This dbcmd takes a generic SELECT command that operates on the database and returns a list of query_ptrs
|
||||||
|
* that match.
|
||||||
|
*
|
||||||
|
* In order for the conversion to query_ptr to work, the SELECT command should select the following items:
|
||||||
|
* artist.name, album.name, track.name, file.size, file.duration, file.bitrate, file.url, file.source, file.mimetype, track.id
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class DLLEXPORT DatabaseCommand_GenericSelect : public DatabaseCommand
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit DatabaseCommand_GenericSelect( const QString& sqlSelect, QObject* parent = 0 );
|
||||||
|
virtual void exec( DatabaseImpl* lib );
|
||||||
|
virtual bool doesMutates() const { return false; }
|
||||||
|
|
||||||
|
virtual QString commandname() const { return "genericselect"; }
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void tracks( const QList< Tomahawk::query_ptr >& tracks );
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString m_sqlSelect;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DATABASECOMMAND_GENERICSELECT_H
|
147
src/libtomahawk/playlist/dynamic/database/DatabaseControl.cpp
Normal file
147
src/libtomahawk/playlist/dynamic/database/DatabaseControl.cpp
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||||
|
*
|
||||||
|
* Copyright 2010-2011, Leo Franchi <lfranchi@kde.org>
|
||||||
|
*
|
||||||
|
* Tomahawk 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Tomahawk is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "DatabaseControl.h"
|
||||||
|
|
||||||
|
using namespace Tomahawk;
|
||||||
|
|
||||||
|
DatabaseControl::DatabaseControl( const QString& selectedType, const QStringList& typeSelectors, QObject* parent )
|
||||||
|
: DynamicControl ( selectedType.isEmpty() ? "Artist" : selectedType, typeSelectors, parent )
|
||||||
|
{
|
||||||
|
setType( "database" );
|
||||||
|
|
||||||
|
m_editingTimer.setInterval( 500 ); //timeout to edits
|
||||||
|
m_editingTimer.setSingleShot( true );
|
||||||
|
connect( &m_editingTimer, SIGNAL( timeout() ), this, SLOT( editTimerFired() ) );
|
||||||
|
|
||||||
|
m_delayedEditTimer.setInterval( 250 ); // additional timer for "just typing" without enter or focus change
|
||||||
|
m_delayedEditTimer.setSingleShot( true );
|
||||||
|
connect( &m_delayedEditTimer, SIGNAL( timeout() ), &m_editingTimer, SLOT( start() ) );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
DatabaseControl::DatabaseControl( const QString& sql, const QString& summary, const QStringList& typeSelectors, QObject* parent )
|
||||||
|
: DynamicControl ( typeSelectors )
|
||||||
|
, m_sql( sql )
|
||||||
|
, m_sqlSummary( summary )
|
||||||
|
{
|
||||||
|
setType( "database" );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString DatabaseControl::input() const
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget* DatabaseControl::inputField()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DatabaseControl::match() const
|
||||||
|
{
|
||||||
|
return m_matchData;
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget* DatabaseControl::matchSelector()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DatabaseControl::matchString() const
|
||||||
|
{
|
||||||
|
return m_matchString;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseControl::setInput ( const QString& input )
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
updateWidgets();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseControl::setMatch ( const QString& match )
|
||||||
|
{
|
||||||
|
m_matchData = match;
|
||||||
|
|
||||||
|
updateWidgets();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseControl::setSelectedType ( const QString& type )
|
||||||
|
{
|
||||||
|
if ( type != selectedType() ) {
|
||||||
|
if ( !m_input.isNull() )
|
||||||
|
delete m_input.data();
|
||||||
|
if ( !m_match.isNull() )
|
||||||
|
delete m_match.data();
|
||||||
|
|
||||||
|
Tomahawk::DynamicControl::setSelectedType ( type );
|
||||||
|
updateWidgets();
|
||||||
|
updateData();
|
||||||
|
// qDebug() << "Setting new type, set data to:" << m_data.first << m_data.second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseControl::editingFinished()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseControl::editTimerFired()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseControl::updateData()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseControl::updateWidgets()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseControl::updateWidgetsFromData()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseControl::calculateSummary()
|
||||||
|
{
|
||||||
|
if( !m_sqlSummary.isEmpty() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QString
|
||||||
|
DatabaseControl::sql() const
|
||||||
|
{
|
||||||
|
return m_sql;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString
|
||||||
|
DatabaseControl::summary() const
|
||||||
|
{
|
||||||
|
if( !m_sqlSummary.isEmpty() )
|
||||||
|
return m_sqlSummary;
|
||||||
|
|
||||||
|
return m_summary;
|
||||||
|
}
|
81
src/libtomahawk/playlist/dynamic/database/DatabaseControl.h
Normal file
81
src/libtomahawk/playlist/dynamic/database/DatabaseControl.h
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||||
|
*
|
||||||
|
* Copyright 2010-2011, Leo Franchi <lfranchi@kde.org>
|
||||||
|
*
|
||||||
|
* Tomahawk 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Tomahawk is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DATABASE_CONTROL_H
|
||||||
|
#define DATABASE_CONTROL_H
|
||||||
|
|
||||||
|
#include "dynamic/DynamicControl.h"
|
||||||
|
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
|
namespace Tomahawk
|
||||||
|
{
|
||||||
|
|
||||||
|
class DatabaseControl : public DynamicControl
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
virtual QWidget* inputField();
|
||||||
|
virtual QWidget* matchSelector();
|
||||||
|
|
||||||
|
virtual QString input() const;
|
||||||
|
virtual QString match() const;
|
||||||
|
virtual QString matchString() const;
|
||||||
|
virtual QString summary() const;
|
||||||
|
|
||||||
|
virtual void setInput(const QString& input);
|
||||||
|
virtual void setMatch(const QString& match);
|
||||||
|
|
||||||
|
/// DO NOT USE IF YOU ARE NOT A DBCMD
|
||||||
|
DatabaseControl( const QString& type, const QStringList& typeSelectors, QObject* parent = 0 );
|
||||||
|
DatabaseControl( const QString& sql, const QString& summary, const QStringList& typeSelectors, QObject* parent = 0 );
|
||||||
|
|
||||||
|
QString sql() const;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void setSelectedType ( const QString& type );
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void updateData();
|
||||||
|
void editingFinished();
|
||||||
|
void editTimerFired();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void updateWidgets();
|
||||||
|
void updateWidgetsFromData();
|
||||||
|
|
||||||
|
// utility
|
||||||
|
void calculateSummary();
|
||||||
|
|
||||||
|
QWeakPointer< QWidget > m_input;
|
||||||
|
QWeakPointer< QWidget > m_match;
|
||||||
|
QString m_matchData;
|
||||||
|
QString m_matchString;
|
||||||
|
QString m_summary;
|
||||||
|
|
||||||
|
QTimer m_editingTimer;
|
||||||
|
QTimer m_delayedEditTimer;
|
||||||
|
|
||||||
|
// SQL control
|
||||||
|
QString m_sql;
|
||||||
|
QString m_sqlSummary;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
160
src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.cpp
Normal file
160
src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.cpp
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||||
|
*
|
||||||
|
* Copyright 2010-2011, Leo Franchi <lfranchi@kde.org>
|
||||||
|
*
|
||||||
|
* Tomahawk 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Tomahawk is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "DatabaseGenerator.h"
|
||||||
|
|
||||||
|
#include "DatabaseControl.h"
|
||||||
|
#include "utils/logger.h"
|
||||||
|
#include <database/databasecommand_genericselect.h>
|
||||||
|
#include <database/database.h>
|
||||||
|
|
||||||
|
using namespace Tomahawk;
|
||||||
|
|
||||||
|
GeneratorInterface*
|
||||||
|
DatabaseFactory::create()
|
||||||
|
{
|
||||||
|
return new DatabaseGenerator();
|
||||||
|
}
|
||||||
|
|
||||||
|
dyncontrol_ptr
|
||||||
|
DatabaseFactory::createControl ( const QString& controlType )
|
||||||
|
{
|
||||||
|
return dyncontrol_ptr( new DatabaseControl( controlType, typeSelectors() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
dyncontrol_ptr
|
||||||
|
DatabaseFactory::createControl ( const QString& sql, const QString& summary )
|
||||||
|
{
|
||||||
|
return dyncontrol_ptr( new DatabaseControl( sql, summary, typeSelectors() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QStringList
|
||||||
|
DatabaseFactory::typeSelectors() const
|
||||||
|
{
|
||||||
|
return QStringList() << "SQL" << "Artist" << "Album" << "Title";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DatabaseGenerator::DatabaseGenerator ( QObject* parent )
|
||||||
|
: GeneratorInterface ( parent )
|
||||||
|
{
|
||||||
|
// m_logo.load( RESPATH "images )
|
||||||
|
}
|
||||||
|
|
||||||
|
DatabaseGenerator::~DatabaseGenerator()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QPixmap
|
||||||
|
DatabaseGenerator::logo()
|
||||||
|
{
|
||||||
|
return m_logo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DatabaseGenerator::dynamicFetched()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DatabaseGenerator::dynamicStarted()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DatabaseGenerator::generate( int number )
|
||||||
|
{
|
||||||
|
tLog() << "Generating" << number << "tracks for this database dynamic playlist with" << m_controls.size() << "controls:";
|
||||||
|
foreach ( const dyncontrol_ptr& ctrl, m_controls )
|
||||||
|
qDebug() << ctrl->selectedType() << ctrl->match() << ctrl->input();
|
||||||
|
|
||||||
|
// TODO for now, we just support the special "SQL" control, not meant to be shown to the user. Just does a raw query.
|
||||||
|
bool isSql = false;
|
||||||
|
foreach ( const dyncontrol_ptr& ctrl, m_controls )
|
||||||
|
{
|
||||||
|
if( ctrl->selectedType() == "SQL" )
|
||||||
|
isSql = true;
|
||||||
|
else if( !isSql )
|
||||||
|
{
|
||||||
|
qWarning() << "Cannot mix sql and non-sql controls!";
|
||||||
|
emit error( "Failed to generate tracks", "Cannot mix sql and non-sql controls" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO for now we just support 1 sql query if we're a sql type
|
||||||
|
if ( isSql )
|
||||||
|
{
|
||||||
|
dyncontrol_ptr control = m_controls.first();
|
||||||
|
|
||||||
|
DatabaseCommand_GenericSelect* cmd = new DatabaseCommand_GenericSelect( control.dynamicCast< DatabaseControl >()->sql(), this );
|
||||||
|
connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SIGNAL( tracksGenerated( QList<Tomahawk::query_ptr> ) ) );
|
||||||
|
Database::instance()->enqueue( QSharedPointer< DatabaseCommand >( cmd ) );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DatabaseGenerator::tracksGenerated ( const QList< query_ptr >& tracks )
|
||||||
|
{
|
||||||
|
emit generated( tracks );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dyncontrol_ptr
|
||||||
|
DatabaseGenerator::createControl( const QString& type )
|
||||||
|
{
|
||||||
|
m_controls << dyncontrol_ptr( new DatabaseControl( type, GeneratorFactory::typeSelectors( m_type ) ) );
|
||||||
|
return m_controls.last();
|
||||||
|
}
|
||||||
|
|
||||||
|
dyncontrol_ptr
|
||||||
|
DatabaseGenerator::createControl ( const QString& sql, const QString& summary )
|
||||||
|
{
|
||||||
|
m_controls << dyncontrol_ptr( new DatabaseControl( sql, summary, GeneratorFactory::typeSelectors( m_type ) ) );
|
||||||
|
return m_controls.last();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DatabaseGenerator::fetchNext( int rating )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QString
|
||||||
|
DatabaseGenerator::sentenceSummary()
|
||||||
|
{
|
||||||
|
if( m_controls.count() && m_controls.first()->type() == "SQL" )
|
||||||
|
return m_controls.first()->summary();
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DatabaseGenerator::startOnDemand()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,80 @@
|
|||||||
|
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||||
|
*
|
||||||
|
* Copyright 2010-2011, Leo Franchi <lfranchi@kde.org>
|
||||||
|
*
|
||||||
|
* Tomahawk 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Tomahawk is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DATABASE_GENERATOR_H
|
||||||
|
#define DATABASE_GENERATOR_H
|
||||||
|
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
#include "playlist/dynamic/GeneratorInterface.h"
|
||||||
|
#include "playlist/dynamic/GeneratorFactory.h"
|
||||||
|
#include "playlist/dynamic/DynamicControl.h"
|
||||||
|
|
||||||
|
#include "dllmacro.h"
|
||||||
|
|
||||||
|
namespace Tomahawk
|
||||||
|
{
|
||||||
|
|
||||||
|
class DLLEXPORT DatabaseFactory : public GeneratorFactoryInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DatabaseFactory() {}
|
||||||
|
|
||||||
|
virtual GeneratorInterface* create();
|
||||||
|
virtual dyncontrol_ptr createControl( const QString& controlType = QString() );
|
||||||
|
|
||||||
|
// TO create a special SQL resolver that consists of a pre-baked SQL query and a description of it
|
||||||
|
virtual dyncontrol_ptr createControl( const QString& sql, const QString& summary );
|
||||||
|
|
||||||
|
virtual QStringList typeSelectors() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generator based on the database. Can filter the database based on some user-controllable options,
|
||||||
|
* or just be the front-facing part of any given SQL query to fake an interesting read-only playlist.
|
||||||
|
*/
|
||||||
|
class DatabaseGenerator : public GeneratorInterface
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit DatabaseGenerator( QObject* parent = 0 );
|
||||||
|
virtual ~DatabaseGenerator();
|
||||||
|
|
||||||
|
virtual dyncontrol_ptr createControl( const QString& type = QString() );
|
||||||
|
virtual dyncontrol_ptr createControl( const QString& sql, const QString& summary );
|
||||||
|
|
||||||
|
virtual QPixmap logo();
|
||||||
|
virtual void generate ( int number = -1 );
|
||||||
|
virtual void startOnDemand();
|
||||||
|
virtual void fetchNext( int rating = -1 );
|
||||||
|
virtual QString sentenceSummary();
|
||||||
|
virtual bool onDemandSteerable() const { return false; }
|
||||||
|
virtual QWidget* steeringWidget() { return 0; }
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void tracksGenerated( const QList< Tomahawk::query_ptr >& tracks );
|
||||||
|
void dynamicStarted();
|
||||||
|
void dynamicFetched();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QPixmap m_logo;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user