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

more work to be able to drag and drop mixed mimetypes (e.g. an artist and some tracks)

This commit is contained in:
Michael Zanetti
2011-08-15 00:29:33 +02:00
parent 09de8c8387
commit 6cb2677c9b
3 changed files with 80 additions and 28 deletions

View File

@@ -64,7 +64,14 @@ GlobalActionManager::instance()
GlobalActionManager::GlobalActionManager( QObject* parent ) GlobalActionManager::GlobalActionManager( QObject* parent )
: QObject( parent ) : QObject( parent )
{ {
m_mimeTypes << "application/tomahawk.query.list" << "application/tomahawk.plentry.list" << "application/tomahawk.result.list" << "text/plain"; m_mimeTypes << "application/tomahawk.query.list"
<< "application/tomahawk.plentry.list"
<< "application/tomahawk.result.list"
<< "application/tomahawk.result"
<< "application/tomahawk.metadata.artist"
<< "application/tomahawk.metadata.album"
<< "application/tomahawk.mixed"
<< "text/plain";
} }
GlobalActionManager::~GlobalActionManager() GlobalActionManager::~GlobalActionManager()
@@ -794,6 +801,8 @@ GlobalActionManager::acceptsMimeData( const QMimeData* data, bool tracksOnly )
if ( data->hasFormat( "application/tomahawk.query.list" ) if ( data->hasFormat( "application/tomahawk.query.list" )
|| data->hasFormat( "application/tomahawk.plentry.list" ) || data->hasFormat( "application/tomahawk.plentry.list" )
|| data->hasFormat( "application/tomahawk.result.list" ) || data->hasFormat( "application/tomahawk.result.list" )
|| data->hasFormat( "application/tomahawk.result" )
|| data->hasFormat( "application/tomahawk.mixed" )
|| data->hasFormat( "application/tomahawk.metadata.album" ) || data->hasFormat( "application/tomahawk.metadata.album" )
|| data->hasFormat( "application/tomahawk.metadata.artist" ) ) || data->hasFormat( "application/tomahawk.metadata.artist" ) )
{ {
@@ -833,6 +842,8 @@ GlobalActionManager::tracksFromMimeData( const QMimeData* data )
emit tracks( tracksFromAlbumMetaData( data ) ); emit tracks( tracksFromAlbumMetaData( data ) );
else if ( data->hasFormat( "application/tomahawk.metadata.artist" ) ) else if ( data->hasFormat( "application/tomahawk.metadata.artist" ) )
emit tracks( tracksFromArtistMetaData( data ) ); emit tracks( tracksFromArtistMetaData( data ) );
else if ( data->hasFormat( "application/tomahawk.mixed" ) )
tracksFromMixedData( data );
else if ( data->hasFormat( "text/plain" ) ) else if ( data->hasFormat( "text/plain" ) )
{ {
QString plainData = QString::fromUtf8( data->data( "text/plain" ).constData() ); QString plainData = QString::fromUtf8( data->data( "text/plain" ).constData() );
@@ -968,6 +979,54 @@ GlobalActionManager::tracksFromArtistMetaData( const QMimeData *data )
return queries; return queries;
} }
QList< query_ptr >
GlobalActionManager::tracksFromMixedData( const QMimeData *data )
{
QList< query_ptr > queries;
QByteArray itemData = data->data( "application/tomahawk.mixed" );
QDataStream stream( &itemData, QIODevice::ReadOnly );
QString mimeType;
while ( !stream.atEnd() )
{
stream >> mimeType;
qDebug() << "mimetype is" << mimeType;
QByteArray singleData;
QDataStream singleStream( &singleData, QIODevice::WriteOnly );
QMimeData singleMimeData;
if ( mimeType == "application/tomahawk.query.list" || mimeType == "application/tomahawk.result.list" )
{
qlonglong query;
stream >> query;
singleStream << query;
}
else if ( mimeType == "application/tomahawk.metadata.album" )
{
QString artist;
stream >> artist;
singleStream << artist;
QString album;
stream >> album;
singleStream << album;
qDebug() << "got artist" << artist << "and album" << album;
}
else if ( mimeType == "application/tomahawk.metadata.artist" )
{
QString artist;
stream >> artist;
singleStream << artist;
qDebug() << "got artist" << artist;
}
singleMimeData.setData( mimeType, singleData );
tracksFromMimeData( &singleMimeData );
}
return queries;
}
/// SPOTIFY URL HANDLING /// SPOTIFY URL HANDLING
bool bool

View File

@@ -107,6 +107,7 @@ private:
QList< Tomahawk::query_ptr > tracksFromResultList( const QMimeData* d ); QList< Tomahawk::query_ptr > tracksFromResultList( const QMimeData* d );
QList< Tomahawk::query_ptr > tracksFromArtistMetaData( const QMimeData* d ); QList< Tomahawk::query_ptr > tracksFromArtistMetaData( const QMimeData* d );
QList< Tomahawk::query_ptr > tracksFromAlbumMetaData( const QMimeData* d ); QList< Tomahawk::query_ptr > tracksFromAlbumMetaData( const QMimeData* d );
QList< Tomahawk::query_ptr > tracksFromMixedData( const QMimeData* d );
QString hostname() const; QString hostname() const;

View File

@@ -305,7 +305,7 @@ QStringList
TreeModel::mimeTypes() const TreeModel::mimeTypes() const
{ {
QStringList types; QStringList types;
types << "application/tomahawk.result.list"; types << "application/tomahawk.mixed";
return types; return types;
} }
@@ -316,44 +316,36 @@ TreeModel::mimeData( const QModelIndexList &indexes ) const
qDebug() << Q_FUNC_INFO; qDebug() << Q_FUNC_INFO;
QByteArray resultData; QByteArray resultData;
QByteArray albumData;
QByteArray artistData;
QDataStream resultStream( &resultData, QIODevice::WriteOnly ); QDataStream resultStream( &resultData, QIODevice::WriteOnly );
QDataStream albumStream( &albumData, QIODevice::WriteOnly );
QDataStream artistStream( &artistData, QIODevice::WriteOnly );
foreach ( const QModelIndex& i, indexes ) foreach ( const QModelIndex& i, indexes )
{ {
if ( i.column() > 0 ) if ( i.column() > 0 || indexes.contains( i.parent() ) )
continue; continue;
QModelIndex idx = index( i.row(), 0, i.parent() ); TreeModelItem* item = itemFromIndex( i );
TreeModelItem* item = itemFromIndex( idx ); if ( !item )
if ( item && !item->result().isNull() ) continue;
{
const result_ptr& result = item->result(); if ( !item->artist().isNull() )
resultStream << qlonglong( &result );
}
if ( item && !item->album().isNull() )
{
const album_ptr& album = item->album();
albumStream << album->artist()->name() << album->name();
}
if ( item && !item->artist().isNull() )
{ {
const artist_ptr& artist = item->artist(); const artist_ptr& artist = item->artist();
artistStream << artist->name(); resultStream << QString( "application/tomahawk.metadata.artist" ) << artist->name();
}
else if ( !item->album().isNull() )
{
const album_ptr& album = item->album();
resultStream << QString( "application/tomahawk.metadata.album" ) << album->artist()->name() << album->name();
}
else if ( !item->result().isNull() )
{
const result_ptr& result = item->result();
resultStream << QString( "application/tomahawk.result.list" ) << qlonglong( &result );
} }
} }
QMimeData* mimeData = new QMimeData(); QMimeData* mimeData = new QMimeData();
if ( !artistData.isEmpty() ) mimeData->setData( "application/tomahawk.mixed", resultData );
mimeData->setData( "application/tomahawk.metadata.artist", artistData );
else if ( !albumData.isEmpty() )
mimeData->setData( "application/tomahawk.metadata.album", albumData );
else
mimeData->setData( "application/tomahawk.result.list", resultData );
return mimeData; return mimeData;
} }