1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-06 14:16:32 +02:00

Properly handle online state for database and scriptcollections

This commit is contained in:
Dominik Schmidt
2015-01-12 01:01:28 +01:00
parent 3b06ff7781
commit bf3c5d4952
21 changed files with 95 additions and 43 deletions

View File

@@ -975,8 +975,7 @@ DropJob::removeRemoteSources()
foreach ( const Tomahawk::result_ptr& result, item->results() ) foreach ( const Tomahawk::result_ptr& result, item->results() )
{ {
if ( !result->resolvedByCollection().isNull() && !result->resolvedByCollection()->source().isNull() if ( !result->resolvedByCollection().isNull() && !result->resolvedByCollection()->isLocal() )
&& result->resolvedByCollection()->source()->isLocal() )
{ {
list.append( item ); list.append( item );
break; break;

View File

@@ -409,11 +409,11 @@ Query::resultSorter( const result_ptr& left, const result_ptr& right )
if ( ls == rs ) if ( ls == rs )
{ {
/* if ( left->collection() && left->collection()->source()->isLocal() ) /* if ( left->collection() && left->collection()->isLocal() )
{ {
return true; return true;
}*/ }*/
if ( right->resolvedByCollection() && right->resolvedByCollection()->source()->isLocal() ) if ( right->resolvedByCollection() && right->resolvedByCollection()->isLocal() )
{ {
return false; return false;
} }

View File

@@ -191,7 +191,7 @@ Result::isOnline() const
{ {
if ( !resolvedByCollection().isNull() ) if ( !resolvedByCollection().isNull() )
{ {
return resolvedByCollection()->source()->isOnline(); return resolvedByCollection()->isOnline();
} }
else else
{ {
@@ -205,7 +205,7 @@ Result::playable() const
{ {
if ( resolvedByCollection() ) if ( resolvedByCollection() )
{ {
return resolvedByCollection()->source()->isOnline(); return resolvedByCollection()->isOnline();
} }
else else
{ {
@@ -305,8 +305,8 @@ Result::setResolvedByCollection( const Tomahawk::collection_ptr& collection , bo
{ {
Q_ASSERT( !collection.isNull() ); Q_ASSERT( !collection.isNull() );
connect( collection.data(), SIGNAL( destroyed( QObject * ) ), SLOT( onOffline() ), Qt::QueuedConnection ); connect( collection.data(), SIGNAL( destroyed( QObject * ) ), SLOT( onOffline() ), Qt::QueuedConnection );
connect( collection->source().data(), SIGNAL( online() ), SLOT( onOnline() ), Qt::QueuedConnection ); connect( collection.data(), SIGNAL( online() ), SLOT( onOnline() ), Qt::QueuedConnection );
connect( collection->source().data(), SIGNAL( offline() ), SLOT( onOffline() ), Qt::QueuedConnection ); connect( collection.data(), SIGNAL( offline() ), SLOT( onOffline() ), Qt::QueuedConnection );
} }
} }
@@ -391,7 +391,7 @@ Result::friendlySource() const
return m_friendlySource; return m_friendlySource;
} }
else else
return resolvedByCollection()->source()->friendlyName(); return resolvedByCollection()->prettyName();
} }

View File

@@ -119,8 +119,15 @@ Collection::bigIcon() const
} }
const bool
source_ptr& Collection::source() const Collection::isLocal() const
{
return false;
}
const source_ptr
Collection::source() const
{ {
return m_source; return m_source;
} }

View File

@@ -82,6 +82,9 @@ public:
virtual const QPixmap icon( const QSize& size ) const override; virtual const QPixmap icon( const QSize& size ) const override;
virtual QPixmap bigIcon() const; //for the ViewPage header virtual QPixmap bigIcon() const; //for the ViewPage header
virtual bool isOnline() const = 0;
virtual bool isLocal() const;
virtual void loadPlaylists(); virtual void loadPlaylists();
virtual void loadAutoPlaylists(); virtual void loadAutoPlaylists();
virtual void loadStations(); virtual void loadStations();
@@ -108,7 +111,6 @@ public:
virtual Tomahawk::AlbumsRequest* requestAlbums( const Tomahawk::artist_ptr& artist ) = 0; virtual Tomahawk::AlbumsRequest* requestAlbums( const Tomahawk::artist_ptr& artist ) = 0;
virtual Tomahawk::TracksRequest* requestTracks( const Tomahawk::album_ptr& album ) = 0; virtual Tomahawk::TracksRequest* requestTracks( const Tomahawk::album_ptr& album ) = 0;
const source_ptr& source() const;
unsigned int lastmodified() const { return m_lastmodified; } unsigned int lastmodified() const { return m_lastmodified; }
virtual int trackCount() const; virtual int trackCount() const;
@@ -128,6 +130,9 @@ signals:
void changed(); void changed();
void online();
void offline();
public slots: public slots:
void setPlaylists( const QList<Tomahawk::playlist_ptr>& plists ); void setPlaylists( const QList<Tomahawk::playlist_ptr>& plists );
void setAutoPlaylists( const QList< Tomahawk::dynplaylist_ptr >& autoplists ); void setAutoPlaylists( const QList< Tomahawk::dynplaylist_ptr >& autoplists );
@@ -137,14 +142,18 @@ public slots:
void delTracks( const QList<unsigned int>& fileids ); void delTracks( const QList<unsigned int>& fileids );
protected: protected:
QString m_name; const source_ptr source() const;
unsigned int m_lastmodified; // unix time of last change to collection
QSet< BrowseCapability > m_browseCapabilities;
private slots: private slots:
void onSynced(); void onSynced();
void doLoadPlaylistUpdater( const playlist_ptr& p ); void doLoadPlaylistUpdater( const playlist_ptr& p );
protected:
QString m_name;
unsigned int m_lastmodified; // unix time of last change to collection
QSet< BrowseCapability > m_browseCapabilities;
private: private:
bool m_changed; bool m_changed;

View File

@@ -43,6 +43,17 @@ DatabaseCollection::DatabaseCollection( const source_ptr& src, QObject* parent )
<< CapabilityBrowseArtists << CapabilityBrowseArtists
<< CapabilityBrowseAlbums << CapabilityBrowseAlbums
<< CapabilityBrowseTracks; << CapabilityBrowseTracks;
connect( source().data(), SIGNAL( online() ), SIGNAL( online() ) );
connect( source().data(), SIGNAL( offline() ), SIGNAL( offline() ) );
}
bool
DatabaseCollection::isOnline() const
{
return source()->isOnline();
} }

View File

@@ -45,6 +45,11 @@ public:
BackendType backendType() const override { return DatabaseCollectionType; } BackendType backendType() const override { return DatabaseCollectionType; }
bool isOnline() const override;
bool isLocal() const override { return source()->isLocal(); }
using Collection::source;
void loadPlaylists() override; void loadPlaylists() override;
void loadAutoPlaylists() override; void loadAutoPlaylists() override;
void loadStations() override; void loadStations() override;

View File

@@ -35,7 +35,7 @@ namespace Tomahawk
DatabaseCommand_AllAlbums::DatabaseCommand_AllAlbums( const Tomahawk::collection_ptr& collection, const Tomahawk::artist_ptr& artist, QObject* parent ) DatabaseCommand_AllAlbums::DatabaseCommand_AllAlbums( const Tomahawk::collection_ptr& collection, const Tomahawk::artist_ptr& artist, QObject* parent )
: DatabaseCommand( parent ) : DatabaseCommand( parent )
, m_collection( collection ) , m_collection( collection.objectCast< DatabaseCollection >() )
, m_artist( artist ) , m_artist( artist )
, m_amount( 0 ) , m_amount( 0 )
, m_sortOrder( DatabaseCommand_AllAlbums::None ) , m_sortOrder( DatabaseCommand_AllAlbums::None )
@@ -74,7 +74,7 @@ DatabaseCommand_AllAlbums::execForArtist( DatabaseImpl* dbi )
} }
if ( !m_collection.isNull() ) if ( !m_collection.isNull() )
sourceToken = QString( "AND file.source %1" ).arg( m_collection->source()->isLocal() ? "IS NULL" : QString( "= %1" ).arg( m_collection->source()->id() ) ); sourceToken = QString( "AND file.source %1" ).arg( m_collection->isLocal() ? "IS NULL" : QString( "= %1" ).arg( m_collection->source()->id() ) );
if ( !m_filter.isEmpty() ) if ( !m_filter.isEmpty() )
{ {

View File

@@ -30,6 +30,7 @@
#include "Typedefs.h" #include "Typedefs.h"
#include "DatabaseCommand.h" #include "DatabaseCommand.h"
#include "Database.h" #include "Database.h"
#include "DatabaseCollection.h"
#include "DllMacro.h" #include "DllMacro.h"
@@ -74,7 +75,7 @@ signals:
void done(); void done();
private: private:
Tomahawk::collection_ptr m_collection; QSharedPointer< DatabaseCollection > m_collection;
Tomahawk::artist_ptr m_artist; Tomahawk::artist_ptr m_artist;
unsigned int m_amount; unsigned int m_amount;

View File

@@ -33,7 +33,7 @@ namespace Tomahawk
DatabaseCommand_AllArtists::DatabaseCommand_AllArtists( const Tomahawk::collection_ptr& collection, QObject* parent ) DatabaseCommand_AllArtists::DatabaseCommand_AllArtists( const Tomahawk::collection_ptr& collection, QObject* parent )
: DatabaseCommand( parent ) : DatabaseCommand( parent )
, m_collection( collection ) , m_collection( collection.objectCast< DatabaseCollection >() )
, m_amount( 0 ) , m_amount( 0 )
, m_sortOrder( DatabaseCommand_AllArtists::None ) , m_sortOrder( DatabaseCommand_AllArtists::None )
, m_sortDescending( false ) , m_sortDescending( false )

View File

@@ -29,6 +29,7 @@
#include "Typedefs.h" #include "Typedefs.h"
#include "DatabaseCommand.h" #include "DatabaseCommand.h"
#include "Database.h" #include "Database.h"
#include "DatabaseCollection.h"
#include "DllMacro.h" #include "DllMacro.h"
@@ -65,7 +66,7 @@ signals:
void done(); void done();
private: private:
Tomahawk::collection_ptr m_collection; QSharedPointer< DatabaseCollection > m_collection;
unsigned int m_amount; unsigned int m_amount;
DatabaseCommand_AllArtists::SortOrder m_sortOrder; DatabaseCommand_AllArtists::SortOrder m_sortOrder;
bool m_sortDescending; bool m_sortDescending;

View File

@@ -24,6 +24,7 @@
#include "DatabaseCommand.h" #include "DatabaseCommand.h"
#include "Database.h" #include "Database.h"
#include "DatabaseCollection.h"
#include "collection/Collection.h" #include "collection/Collection.h"
#include "collection/TracksRequest.h" #include "collection/TracksRequest.h"
#include "Typedefs.h" #include "Typedefs.h"
@@ -49,7 +50,7 @@ public:
explicit DatabaseCommand_AllTracks( const Tomahawk::collection_ptr& collection = Tomahawk::collection_ptr(), QObject* parent = nullptr ) explicit DatabaseCommand_AllTracks( const Tomahawk::collection_ptr& collection = Tomahawk::collection_ptr(), QObject* parent = nullptr )
: DatabaseCommand( parent ) : DatabaseCommand( parent )
, m_collection( collection ) , m_collection( collection.objectCast< DatabaseCollection >() )
, m_artist( nullptr ) , m_artist( nullptr )
, m_album( nullptr ) , m_album( nullptr )
, m_amount( 0 ) , m_amount( 0 )
@@ -77,7 +78,7 @@ signals:
void done( const Tomahawk::collection_ptr& ); void done( const Tomahawk::collection_ptr& );
private: private:
Tomahawk::collection_ptr m_collection; QSharedPointer< DatabaseCollection > m_collection;
Tomahawk::artist_ptr m_artist; Tomahawk::artist_ptr m_artist;
Tomahawk::album_ptr m_album; Tomahawk::album_ptr m_album;

View File

@@ -59,7 +59,7 @@ DatabaseCommand_Resolve::exec( DatabaseImpl* lib )
tDebug() << "Using result-hint to speed up resolving:" << m_query->resultHint(); tDebug() << "Using result-hint to speed up resolving:" << m_query->resultHint();
Tomahawk::result_ptr result = lib->resultFromHint( m_query ); Tomahawk::result_ptr result = lib->resultFromHint( m_query );
if ( result && ( !result->resolvedByCollection() || result->resolvedByCollection()->source()->isOnline() ) ) if ( result && ( !result->resolvedByCollection() || result->resolvedByCollection()->isOnline() ) )
{ {
QList<Tomahawk::result_ptr> res; QList<Tomahawk::result_ptr> res;
res << result; res << result;

View File

@@ -240,7 +240,7 @@ MetadataEditor::loadResult( const Tomahawk::result_ptr& result )
return; return;
m_result = result; m_result = result;
setEditable( result->resolvedByCollection() && result->resolvedByCollection()->source()->isLocal() ); setEditable( result->resolvedByCollection() && result->resolvedByCollection()->isLocal() );
setTitle( result->track()->track() ); setTitle( result->track()->track() );
setArtist( result->track()->artist() ); setArtist( result->track()->artist() );
@@ -250,7 +250,7 @@ MetadataEditor::loadResult( const Tomahawk::result_ptr& result )
setYear( result->track()->year() ); setYear( result->track()->year() );
setBitrate( result->bitrate() ); setBitrate( result->bitrate() );
if ( result->resolvedByCollection() && result->resolvedByCollection()->source()->isLocal() ) if ( result->resolvedByCollection() && result->resolvedByCollection()->isLocal() )
{ {
QString furl = m_result->url(); QString furl = m_result->url();
if ( furl.startsWith( "file://" ) ) if ( furl.startsWith( "file://" ) )

View File

@@ -49,10 +49,6 @@ AlbumModel::~AlbumModel()
void void
AlbumModel::addCollection( const collection_ptr& collection, bool overwrite ) AlbumModel::addCollection( const collection_ptr& collection, bool overwrite )
{ {
qDebug() << Q_FUNC_INFO << collection->name()
<< collection->source()->id()
<< collection->source()->nodeId();
DatabaseCommand_AllAlbums* cmd = new DatabaseCommand_AllAlbums( collection ); DatabaseCommand_AllAlbums* cmd = new DatabaseCommand_AllAlbums( collection );
m_overwriteOnAdd = overwrite; m_overwriteOnAdd = overwrite;
m_collection = collection; m_collection = collection;
@@ -62,7 +58,7 @@ AlbumModel::addCollection( const collection_ptr& collection, bool overwrite )
Database::instance()->enqueue( Tomahawk::dbcmd_ptr( cmd ) ); Database::instance()->enqueue( Tomahawk::dbcmd_ptr( cmd ) );
setTitle( tr( "All albums from %1" ).arg( collection->source()->friendlyName() ) ); setTitle( tr( "All albums from %1" ).arg( collection->prettyName() ) );
if ( collection.isNull() ) if ( collection.isNull() )
{ {
@@ -86,11 +82,6 @@ AlbumModel::addCollection( const collection_ptr& collection, bool overwrite )
void void
AlbumModel::addFilteredCollection( const collection_ptr& collection, unsigned int amount, DatabaseCommand_AllAlbums::SortOrder order, bool overwrite ) AlbumModel::addFilteredCollection( const collection_ptr& collection, unsigned int amount, DatabaseCommand_AllAlbums::SortOrder order, bool overwrite )
{ {
/* qDebug() << Q_FUNC_INFO << collection->name()
<< collection->source()->id()
<< collection->source()->nodeId()
<< amount << order;*/
DatabaseCommand_AllAlbums* cmd = new DatabaseCommand_AllAlbums( collection ); DatabaseCommand_AllAlbums* cmd = new DatabaseCommand_AllAlbums( collection );
cmd->setLimit( amount ); cmd->setLimit( amount );
cmd->setSortOrder( order ); cmd->setSortOrder( order );
@@ -104,7 +95,7 @@ AlbumModel::addFilteredCollection( const collection_ptr& collection, unsigned in
Database::instance()->enqueue( Tomahawk::dbcmd_ptr( cmd ) ); Database::instance()->enqueue( Tomahawk::dbcmd_ptr( cmd ) );
if ( !collection.isNull() ) if ( !collection.isNull() )
setTitle( tr( "All albums from %1" ).arg( collection->source()->friendlyName() ) ); setTitle( tr( "All albums from %1" ).arg( collection->prettyName() ) );
else else
setTitle( tr( "All albums" ) ); setTitle( tr( "All albums" ) );

View File

@@ -221,10 +221,6 @@ TreeModel::addTracks( const album_ptr& album, const QModelIndex& parent )
void void
TreeModel::addCollection( const collection_ptr& collection ) TreeModel::addCollection( const collection_ptr& collection )
{ {
qDebug() << Q_FUNC_INFO << collection->name()
<< collection->source()->id()
<< collection->source()->nodeId();
startLoading(); startLoading();
m_collection = collection; m_collection = collection;

View File

@@ -238,8 +238,8 @@ TreeProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent
if ( !item->result()->isOnline() && ti->result()->isOnline() ) if ( !item->result()->isOnline() && ti->result()->isOnline() )
return false; return false;
if ( ( item->result()->resolvedByCollection().isNull() || !item->result()->resolvedByCollection()->source()->isLocal() ) && if ( ( item->result()->resolvedByCollection().isNull() || !item->result()->resolvedByCollection()->isLocal() ) &&
!ti->result()->resolvedByCollection().isNull() && ti->result()->resolvedByCollection()->source()->isLocal() ) !ti->result()->resolvedByCollection().isNull() && ti->result()->resolvedByCollection()->isLocal() )
{ {
return false; return false;
} }

View File

@@ -44,6 +44,7 @@ ScriptCollection::ScriptCollection( const scriptobject_ptr& scriptObject,
, ScriptPlugin( scriptObject ) , ScriptPlugin( scriptObject )
, m_scriptAccount( scriptAccount ) , m_scriptAccount( scriptAccount )
, m_trackCount( -1 ) //null value , m_trackCount( -1 ) //null value
, m_isOnline( true )
{ {
Q_ASSERT( scriptAccount ); Q_ASSERT( scriptAccount );
qDebug() << Q_FUNC_INFO << scriptAccount->name() << Collection::name(); qDebug() << Q_FUNC_INFO << scriptAccount->name() << Collection::name();
@@ -87,6 +88,31 @@ ScriptCollection::itemName() const
} }
bool ScriptCollection::isOnline() const
{
return m_isOnline;
}
void
ScriptCollection::setOnline( bool isOnline )
{
m_isOnline = isOnline;
if ( isOnline )
{
emit online();
}
else
{
emit offline();
}
emit changed();
}
void void
ScriptCollection::setIcon( const QPixmap& icon ) ScriptCollection::setIcon( const QPixmap& icon )
{ {

View File

@@ -55,6 +55,8 @@ public:
virtual ~ScriptCollection(); virtual ~ScriptCollection();
ScriptAccount* scriptAccount() const; ScriptAccount* scriptAccount() const;
bool isOnline() const override;
void setOnline( bool isOnline );
/** /**
* @brief setServiceName sets the name of the service that provides the ScriptCollection. * @brief setServiceName sets the name of the service that provides the ScriptCollection.
@@ -98,6 +100,7 @@ private:
QString m_description; QString m_description;
int m_trackCount; int m_trackCount;
QPixmap m_icon; QPixmap m_icon;
bool m_isOnline;
}; };
} //ns } //ns

View File

@@ -27,11 +27,13 @@ void ScriptCollectionFactory::addPlugin( const QSharedPointer<ScriptCollection>&
// FIXME: no need for the same javascript call, already done in createPlugin // FIXME: no need for the same javascript call, already done in createPlugin
collection->parseMetaData(); collection->parseMetaData();
collection->setOnline( true );
SourceList::instance()->addScriptCollection( collection ); SourceList::instance()->addScriptCollection( collection );
} }
void ScriptCollectionFactory::removePlugin( const QSharedPointer<ScriptCollection>& collection ) const void ScriptCollectionFactory::removePlugin( const QSharedPointer<ScriptCollection>& collection ) const
{ {
collection->setOnline( false );
SourceList::instance()->removeScriptCollection( collection ); SourceList::instance()->removeScriptCollection( collection );
} }

View File

@@ -409,7 +409,7 @@ CollectionViewPage::onCollectionChanged()
flatModel->appendTracks( m_collection ); flatModel->appendTracks( m_collection );
albumModel->appendAlbums( m_collection ); albumModel->appendAlbums( m_collection );
if ( m_collection && m_collection->source() && m_collection->source()->isLocal() ) if ( m_collection && m_collection->isLocal() )
{ {
setEmptyTip( tr( "After you have scanned your music collection you will find your tracks right here." ) ); setEmptyTip( tr( "After you have scanned your music collection you will find your tracks right here." ) );
} }