1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-20 07:49:42 +01:00

* These DBCmds don't need or want to use queries.

This commit is contained in:
Christian Muehlhaeuser 2013-04-22 09:21:35 +02:00
parent 18f44f4e47
commit 9be6dfaad5
14 changed files with 90 additions and 154 deletions

View File

@ -39,12 +39,13 @@ DatabaseCommand_LoadSocialActions::exec( DatabaseImpl* dbi )
if ( m_actionOnly.isNull() )
{
//FIXME!
// Load for just specified track
int artid = dbi->artistId( m_artist, false );
int artid = dbi->artistId( m_track->artist(), false );
if( artid < 1 )
return;
int trkid = dbi->trackId( artid, m_track, false );
int trkid = dbi->trackId( artid, m_track->track(), false );
if( trkid < 1 )
return;
@ -72,7 +73,7 @@ DatabaseCommand_LoadSocialActions::exec( DatabaseImpl* dbi )
allSocialActions.append( action );
}
m_query->setAllSocialActions( allSocialActions );
m_track->setAllSocialActions( allSocialActions );
}
else
{
@ -92,8 +93,7 @@ DatabaseCommand_LoadSocialActions::exec( DatabaseImpl* dbi )
continue;
const QVariantMap artist = dbi->artist( track.value( "artist" ).toInt() );
const query_ptr trackQuery = Query::get( artist.value( "name" ).toString(), track.value( "name" ).toString(), QString(), QString(), false );
const track_ptr t = Track::get( artist.value( "name" ).toString(), track.value( "name" ).toString(), QString() );
Tomahawk::SocialAction action;
action.action = m_actionOnly; // action
@ -101,7 +101,7 @@ DatabaseCommand_LoadSocialActions::exec( DatabaseImpl* dbi )
action.timestamp = query.value( 2 ); // timestamp
action.source = source(); // source
trackActions[ trackQuery ] = action;
trackActions[ t ] = action;
}
emit done( trackActions );

View File

@ -46,7 +46,7 @@ class DLLEXPORT DatabaseCommand_LoadSocialActions : public DatabaseCommand
Q_OBJECT
public:
typedef QMap<Tomahawk::query_ptr,Tomahawk::SocialAction> TrackActions;
typedef QMap<Tomahawk::track_ptr,Tomahawk::SocialAction> TrackActions;
/**
* \brief Default constructor for DatabaseCommand_LoadSocialActions.
*
@ -63,12 +63,10 @@ public:
*
* Constructor which creates a new database command for loading all social actions.
*/
explicit DatabaseCommand_LoadSocialActions( const Tomahawk::query_ptr& query, QObject* parent = 0 )
: DatabaseCommand( parent ), m_query( query )
explicit DatabaseCommand_LoadSocialActions( const Tomahawk::track_ptr& track, QObject* parent = 0 )
: DatabaseCommand( parent ), m_track( track )
{
setSource( SourceList::instance()->getLocal() );
setArtist( query->artist() );
setTrack( query->track() );
}
/**
@ -98,35 +96,8 @@ public:
*/
virtual void exec( DatabaseImpl* );
/**
* \brief Returns the artist associated with this database command.
* \return Name of the artist.
* \see setArtist()
*/
QString artist() const { return m_artist; }
/**
* \brief Sets the artist name for this database command.
* \param s QString containing the artist name.
* \see artist()
*/
void setArtist( const QString& s ) { m_artist = s; }
/**
* \brief Returns the track name associated with this social action.
* \return QString containing the track name.
* \see setTrack()
*/
QString track() const { return m_track; }
/**
* \brief Sets the track name associated with this database command.
* \param track QString containing the track name.
* \see track()
*/
void setTrack( const QString& s ) { m_track = s; }
virtual bool doesMutates() const { return false; }
signals:
/**
* All loaded social actions for each track found, for queries that generate all tracks
@ -135,9 +106,7 @@ signals:
void done( DatabaseCommand_LoadSocialActions::TrackActions actionsForTracks );
private:
Tomahawk::query_ptr m_query;
QString m_artist;
QString m_track;
Tomahawk::track_ptr m_track;
QString m_actionOnly;
};

View File

@ -37,37 +37,23 @@ using namespace Tomahawk;
void
DatabaseCommand_LogPlayback::postCommitHook()
{
if ( !m_query.isNull() )
return;
connect( this, SIGNAL( trackPlaying( Tomahawk::track_ptr, unsigned int ) ),
source().data(), SLOT( onPlaybackStarted( Tomahawk::track_ptr, unsigned int ) ), Qt::QueuedConnection );
connect( this, SIGNAL( trackPlayed( Tomahawk::track_ptr, unsigned int, unsigned int ) ),
source().data(), SLOT( onPlaybackFinished( Tomahawk::track_ptr, unsigned int, unsigned int ) ), Qt::QueuedConnection );
connect( this, SIGNAL( trackPlaying( Tomahawk::query_ptr, unsigned int ) ),
source().data(), SLOT( onPlaybackStarted( Tomahawk::query_ptr, unsigned int ) ), Qt::QueuedConnection );
connect( this, SIGNAL( trackPlayed( Tomahawk::query_ptr ) ),
source().data(), SLOT( onPlaybackFinished( Tomahawk::query_ptr ) ), Qt::QueuedConnection );
if ( !m_result.isNull() && m_query.isNull() )
{
m_query = m_result->toQuery();
}
else
{
// do not auto resolve this track
m_query = Tomahawk::Query::get( m_artist, m_track, QString() );
}
if ( m_query.isNull() )
track_ptr track = Track::get( m_artist, m_track, QString() );
if ( !track )
return;
m_query->setPlayedBy( source(), m_playtime );
if ( m_action == Finished )
{
emit trackPlayed( m_query );
emit trackPlayed( track, m_playtime, m_secsPlayed );
}
// if the play time is more than 10 minutes in the past, ignore
else if ( m_action == Started && QDateTime::fromTime_t( playtime() ).secsTo( QDateTime::currentDateTime() ) < STARTED_THRESHOLD )
{
emit trackPlaying( m_query, m_trackDuration );
emit trackPlaying( track, m_trackDuration );
}
if ( source()->isLocal() )
@ -91,8 +77,8 @@ DatabaseCommand_LogPlayback::exec( DatabaseImpl* dbi )
QVariant srcid = source()->isLocal() ? QVariant( QVariant::Int ) : source()->id();
TomahawkSqlQuery query = dbi->newquery();
if ( !m_query.isNull() )
if ( m_playtime > 0 )
{
query.prepare( QString( "SELECT * FROM playback_log WHERE source %1 AND playtime = %2" ).arg( srcid.isNull() ? "IS NULL" : srcid.toString() ).arg( m_playtime ) );
query.exec();
@ -102,6 +88,8 @@ DatabaseCommand_LogPlayback::exec( DatabaseImpl* dbi )
return;
}
}
else
m_playtime = QDateTime::currentDateTimeUtc().toTime_t();
// tDebug() << "Logging playback of" << m_artist << "-" << m_track << "for source" << srcid << "- timestamp:" << m_playtime;

View File

@ -26,7 +26,7 @@
#include "SourceList.h"
#include "Typedefs.h"
#include "Artist.h"
#include "Query.h"
#include "Track.h"
#include "DllMacro.h"
@ -48,29 +48,17 @@ public:
};
explicit DatabaseCommand_LogPlayback( QObject* parent = 0 )
: DatabaseCommandLoggable( parent ), m_playtime( 0 ), m_secsPlayed( 0 ), m_trackDuration( 0 )
: DatabaseCommandLoggable( parent ), m_secsPlayed( 0 ), m_playtime( 0 ), m_trackDuration( 0 )
{}
explicit DatabaseCommand_LogPlayback( const Tomahawk::query_ptr& query, Action action, uint timeStamp, QObject* parent = 0 )
: DatabaseCommandLoggable( parent ), m_query( query ), m_secsPlayed( 0 ), m_action( action )
explicit DatabaseCommand_LogPlayback( const Tomahawk::track_ptr& track, Action action, unsigned int secsPlayed = 0, unsigned int timeStamp = 0, QObject* parent = 0 )
: DatabaseCommandLoggable( parent ), m_secsPlayed( secsPlayed ), m_playtime( timeStamp ), m_action( action )
{
m_playtime = timeStamp;
m_trackDuration = 0;
m_trackDuration = track->duration();
setSource( SourceList::instance()->getLocal() );
setArtist( query->artist() );
setTrack( query->track() );
}
explicit DatabaseCommand_LogPlayback( const Tomahawk::result_ptr& result, Action action, unsigned int secsPlayed = 0, QObject* parent = 0 )
: DatabaseCommandLoggable( parent ), m_result( result ), m_secsPlayed( secsPlayed ), m_action( action )
{
m_playtime = QDateTime::currentDateTimeUtc().toTime_t();
m_trackDuration = result->duration();
setSource( SourceList::instance()->getLocal() );
setArtist( result->artist()->name() );
setTrack( result->track() );
setArtist( track->artist() );
setTrack( track->track() );
}
virtual QString commandname() const { return "logplayback"; }
@ -102,17 +90,14 @@ public:
void setAction( int a ) { m_action = (Action)a; }
signals:
void trackPlaying( const Tomahawk::query_ptr& query, unsigned int duration );
void trackPlayed( const Tomahawk::query_ptr& query );
void trackPlaying( const Tomahawk::track_ptr& track, unsigned int duration );
void trackPlayed( const Tomahawk::track_ptr& track, unsigned int playtime, unsigned int secsPlayed );
private:
Tomahawk::result_ptr m_result;
Tomahawk::query_ptr m_query;
QString m_artist;
QString m_track;
unsigned int m_playtime;
unsigned int m_secsPlayed;
unsigned int m_playtime;
unsigned int m_trackDuration;
Action m_action;
};

View File

@ -48,7 +48,8 @@ DatabaseCommand_PlaybackHistory::exec( DatabaseImpl* dbi )
query.prepare( sql );
query.exec();
QList<Tomahawk::query_ptr> ql;
QList<Tomahawk::track_ptr> tl;
QList<Tomahawk::PlaybackLog> logs;
while ( query.next() )
{
TomahawkSqlQuery query_track = dbi->newquery();
@ -65,22 +66,27 @@ DatabaseCommand_PlaybackHistory::exec( DatabaseImpl* dbi )
if ( query_track.next() )
{
Tomahawk::query_ptr q = Tomahawk::Query::get( query_track.value( 1 ).toString(), query_track.value( 0 ).toString(), QString() );
if ( q.isNull() )
Tomahawk::track_ptr track = Tomahawk::Track::get( query_track.value( 1 ).toString(), query_track.value( 0 ).toString(), QString() );
if ( !track )
continue;
Tomahawk::PlaybackLog log;
log.timestamp = query.value( 1 ).toUInt();
log.secsPlayed = query.value( 2 ).toUInt();
if ( query.value( 3 ).toUInt() == 0 )
{
q->setPlayedBy( SourceList::instance()->getLocal(), query.value( 1 ).toUInt() );
log.source = SourceList::instance()->getLocal();
}
else
{
q->setPlayedBy( SourceList::instance()->get( query.value( 3 ).toUInt() ), query.value( 1 ).toUInt() );
log.source = SourceList::instance()->get( query.value( 3 ).toUInt() );
}
ql << q;
logs << log;
tl << track;
}
}
emit tracks( ql );
emit tracks( tl, logs );
}

View File

@ -23,8 +23,8 @@
#include <QVariantMap>
#include "DatabaseCommand.h"
#include "Track.h"
#include "Typedefs.h"
#include "DllMacro.h"
class DLLEXPORT DatabaseCommand_PlaybackHistory : public DatabaseCommand
@ -46,7 +46,7 @@ public:
void setLimit( unsigned int amount ) { m_amount = amount; }
signals:
void tracks( const QList<Tomahawk::query_ptr>& queries );
void tracks( const QList<Tomahawk::track_ptr>& tracks, QList<Tomahawk::PlaybackLog> logs );
private:
unsigned int m_amount;

View File

@ -33,18 +33,10 @@ DatabaseCommand_ShareTrack::DatabaseCommand_ShareTrack( QObject* parent )
{}
DatabaseCommand_ShareTrack::DatabaseCommand_ShareTrack( const Tomahawk::query_ptr& query,
DatabaseCommand_ShareTrack::DatabaseCommand_ShareTrack( const Tomahawk::track_ptr& track,
const QString& recipientDbid,
QObject* parent )
: DatabaseCommand_SocialAction( query, "Inbox", "", parent )
, m_recipient( recipientDbid )
{}
DatabaseCommand_ShareTrack::DatabaseCommand_ShareTrack( const Tomahawk::result_ptr& result,
const QString& recipientDbid,
QObject* parent )
: DatabaseCommand_SocialAction( result->toQuery(), "Inbox", "", parent )
: DatabaseCommand_SocialAction( track, "Inbox", "", parent )
, m_recipient( recipientDbid )
{}
@ -55,6 +47,7 @@ DatabaseCommand_ShareTrack::commandname() const
return "sharetrack";
}
void
DatabaseCommand_ShareTrack::exec( DatabaseImpl* dbi )
{
@ -70,13 +63,14 @@ DatabaseCommand_ShareTrack::exec( DatabaseImpl* dbi )
DatabaseCommand_SocialAction::exec( dbi );
}
void
DatabaseCommand_ShareTrack::postCommitHook()
{
if ( source()->isLocal() )
Servent::instance()->triggerDBSync();
if ( !m_query.isNull() )
if ( !m_track.isNull() )
return;
QString myDbid = SourceList::instance()->getLocal()->nodeId();
@ -85,9 +79,9 @@ DatabaseCommand_ShareTrack::postCommitHook()
return;
//From here on, everything happens only on the recipient, and only if recipient!=source
m_query = Tomahawk::Query::get( artist(), track(), QString() );
m_track = Tomahawk::Track::get( artist(), track(), QString() );
if ( m_query.isNull() )
if ( m_track.isNull() )
return;
Tomahawk::SocialAction action;
@ -98,17 +92,17 @@ DatabaseCommand_ShareTrack::postCommitHook()
QList< Tomahawk::SocialAction > actions;
actions << action;
m_query->setAllSocialActions( actions );
m_track->setAllSocialActions( actions );
QMetaObject::invokeMethod( ViewManager::instance()->inboxModel(),
"insertQuery",
Qt::QueuedConnection,
Q_ARG( const Tomahawk::query_ptr&, m_query ),
Q_ARG( const Tomahawk::query_ptr&, m_track->toQuery() ),
Q_ARG( int, 0 ) /*row*/ );
QString friendlyName = source()->friendlyName();
if( ViewManager::instance()->currentPage() != ViewManager::instance()->inboxWidget() )
JobStatusView::instance()->model()->addJob( new InboxJobItem( friendlyName, m_query ) );
JobStatusView::instance()->model()->addJob( new InboxJobItem( friendlyName, m_track ) );
}

View File

@ -36,16 +36,10 @@ class DLLEXPORT DatabaseCommand_ShareTrack : public DatabaseCommand_SocialAction
public:
explicit DatabaseCommand_ShareTrack( QObject* parent = 0 );
explicit DatabaseCommand_ShareTrack( const Tomahawk::query_ptr& query,
explicit DatabaseCommand_ShareTrack( const Tomahawk::track_ptr& track,
const QString& recipientDbid,
QObject* parent = 0 );
explicit DatabaseCommand_ShareTrack( const Tomahawk::result_ptr& result,
const QString& recipientDbid,
QObject* parent = 0 );
//TODO: construct from result instead?
virtual QString commandname() const;
virtual void exec( DatabaseImpl* );

View File

@ -51,13 +51,13 @@ DatabaseCommand_SocialAction::exec( DatabaseImpl* dbi )
QVariant srcid = source()->isLocal() ? QVariant( QVariant::Int ) : source()->id();
if ( m_artist.isNull() || m_track.isEmpty() || m_action.isEmpty() )
if ( m_artist.isNull() || m_title.isEmpty() || m_action.isEmpty() )
return;
int artid = dbi->artistId( m_artist, true );
if ( artid < 1 )
return;
int trkid = dbi->trackId( artid, m_track, true );
int trkid = dbi->trackId( artid, m_title, true );
if ( trkid < 1 )
return;

View File

@ -25,6 +25,7 @@
#include "SourceList.h"
#include "Typedefs.h"
#include "Artist.h"
#include "Track.h"
#include "DllMacro.h"
@ -61,20 +62,20 @@ public:
/**
* \brief Overloaded constructor for DatabaseCommand_SocialAction.
* \param query A Tomahawk Query object.
* \param track A Tomahawk Track object.
* \param action Name of the social action to be written to the database.
* \param comment Comment associated with this social action.
* \param parent Parent class.
*
* Constructor which creates a new database command for the specified social action.
*/
explicit DatabaseCommand_SocialAction( const Tomahawk::query_ptr& query, QString action, QString comment = "", QObject* parent = 0 )
: DatabaseCommandLoggable( parent ), m_query( query ), m_action( action )
explicit DatabaseCommand_SocialAction( const Tomahawk::track_ptr& track, QString action, QString comment = "", QObject* parent = 0 )
: DatabaseCommandLoggable( parent ), m_track( track ), m_action( action )
{
setSource( SourceList::instance()->getLocal() );
setArtist( query->artist() );
setTrack( query->track() );
setArtist( track->artist() );
setTrack( track->track() );
setComment( comment );
setTimestamp( QDateTime::currentDateTime().toTime_t() );
}
@ -118,14 +119,14 @@ public:
* \return QString containing the track name.
* \see setTrack()
*/
virtual QString track() const { return m_track; }
virtual QString track() const { return m_title; }
/**
* \brief Sets the track name associated with this database command.
* \param track QString containing the track name.
* \see track()
*/
virtual void setTrack( const QString& track ) { m_track = track; }
virtual void setTrack( const QString& title ) { m_title = title; }
/**
* \brief Returns the social action for this database command instance.
@ -173,11 +174,11 @@ public:
virtual bool groupable() const { return true; }
protected:
Tomahawk::query_ptr m_query;
Tomahawk::track_ptr m_track;
private:
QString m_artist;
QString m_track;
QString m_title;
int m_timestamp;
QString m_comment;
QString m_action; //! currently used values: Love, Inbox

View File

@ -18,6 +18,7 @@
#include "DatabaseCommand_TrackStats.h"
#include "Artist.h"
#include "DatabaseImpl.h"
#include "SourceList.h"
#include "utils/Logger.h"
@ -25,9 +26,9 @@
using namespace Tomahawk;
DatabaseCommand_TrackStats::DatabaseCommand_TrackStats( const query_ptr& query, QObject* parent )
DatabaseCommand_TrackStats::DatabaseCommand_TrackStats( const track_ptr& track, QObject* parent )
: DatabaseCommand( parent )
, m_query( query )
, m_track( track )
{
}
@ -44,13 +45,13 @@ DatabaseCommand_TrackStats::exec( DatabaseImpl* dbi )
{
TomahawkSqlQuery query = dbi->newquery();
if ( !m_query.isNull() )
if ( !m_track.isNull() )
{
int artid = dbi->artistId( m_query->artist(), false );
int artid = dbi->artistId( m_track->artist(), false );
if( artid < 1 )
return;
int trkid = dbi->trackId( artid, m_query->track(), false );
int trkid = dbi->trackId( artid, m_track->track(), false );
if( trkid < 1 )
return;
@ -81,8 +82,8 @@ DatabaseCommand_TrackStats::exec( DatabaseImpl* dbi )
playbackData.append( log );
}
if ( !m_query.isNull() )
m_query->setPlaybackHistory( playbackData );
if ( !m_track.isNull() )
m_track->setPlaybackHistory( playbackData );
else
m_artist->setPlaybackHistory( playbackData );

View File

@ -23,9 +23,7 @@
#include "DatabaseCommand.h"
#include "Typedefs.h"
#include "Query.h"
#include "Artist.h"
#include "Track.h"
#include "DllMacro.h"
class DLLEXPORT DatabaseCommand_TrackStats : public DatabaseCommand
@ -33,7 +31,7 @@ class DLLEXPORT DatabaseCommand_TrackStats : public DatabaseCommand
Q_OBJECT
public:
explicit DatabaseCommand_TrackStats( const Tomahawk::query_ptr& query, QObject* parent = 0 );
explicit DatabaseCommand_TrackStats( const Tomahawk::track_ptr& track, QObject* parent = 0 );
explicit DatabaseCommand_TrackStats( const Tomahawk::artist_ptr& artist, QObject* parent = 0 );
virtual void exec( DatabaseImpl* lib );
@ -41,10 +39,10 @@ public:
virtual QString commandname() const { return "trackstats"; }
signals:
void done( QList< Tomahawk::PlaybackLog >& playbackData );
void done( const QList< Tomahawk::PlaybackLog >& playbackData );
private:
Tomahawk::query_ptr m_query;
Tomahawk::track_ptr m_track;
Tomahawk::artist_ptr m_artist;
};

View File

@ -29,10 +29,10 @@
InboxJobItem::InboxJobItem( const QString& sender,
const Tomahawk::query_ptr& query,
const Tomahawk::track_ptr& track,
QObject* parent )
: JobStatusItem()
, m_query( query )
, m_track( track )
, m_sender( sender )
{
m_timer = new QTimer( this );
@ -53,8 +53,8 @@ InboxJobItem::mainText() const
{
return tr( "%1 sent you %2 by %3." )
.arg( m_sender )
.arg( m_query->track() )
.arg( m_query->artist() );
.arg( m_track->track() )
.arg( m_track->artist() );
}

View File

@ -30,7 +30,7 @@ class DLLEXPORT InboxJobItem : public JobStatusItem
{
Q_OBJECT
public:
explicit InboxJobItem( const QString& sender, const Tomahawk::query_ptr& query, QObject* parent = 0 );
explicit InboxJobItem( const QString& sender, const Tomahawk::track_ptr& track, QObject* parent = 0 );
virtual ~InboxJobItem();
virtual QString rightColumnText() const { return QString(); }
@ -41,7 +41,7 @@ public:
bool allowMultiLine() const { return true; }
private:
Tomahawk::query_ptr m_query;
Tomahawk::track_ptr m_track;
QString m_sender;
QTimer* m_timer;