1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-07 06:36:55 +02:00

Remove SoundCloud and add ScriptResolvers to DropJob

This commit is contained in:
Uwe L. Korn
2013-07-07 21:46:55 +02:00
parent 4fec697d83
commit b718116ae9
2 changed files with 87 additions and 41 deletions

View File

@@ -25,13 +25,13 @@
#include "jobview/JobStatusView.h"
#include "jobview/JobStatusModel.h"
#include "jobview/ErrorStatusMessage.h"
#include "resolvers/ExternalResolver.h"
#include "utils/SpotifyParser.h"
#include "utils/ItunesParser.h"
#include "utils/ItunesLoader.h"
#include "utils/RdioParser.h"
#include "utils/M3uLoader.h"
#include "utils/ShortenedLinkParser.h"
#include "utils/SoundcloudParser.h"
#include "utils/ExfmParser.h"
#include "utils/Logger.h"
#include "utils/TomahawkUtils.h"
@@ -141,14 +141,18 @@ DropJob::acceptsMimeData( const QMimeData* data, DropJob::DropTypes acceptedType
if ( url.contains( "spotify" ) && url.contains( "playlist" ) && s_canParseSpotifyPlaylists )
return true;
if( url.contains( "soundcloud" ) && url.contains( "sets" ) )
return true;
if( url.contains( "ex.fm" ) && !url.contains( "/song/" ) ) // We treat everything but song as playlist
return true;
if ( url.contains( "grooveshark.com" ) && url.contains( "playlist" ) )
return true;
// Check Scriptresolvers
foreach ( QPointer<ExternalResolver> resolver, Pipeline::instance()->scriptResolvers() )
{
if ( resolver->canParseUrl( url, ExternalResolver::Playlist ) )
return true;
}
}
if ( acceptedType.testFlag( Track ) )
@@ -168,12 +172,17 @@ DropJob::acceptsMimeData( const QMimeData* data, DropJob::DropTypes acceptedType
if ( url.contains( "ex.fm" ) && url.contains( "/song/" ) )
return true;
if( url.contains( "soundcloud" ) )
return true;
if ( url.contains( "rdio.com" ) && ( ( ( url.contains( "track" ) && url.contains( "artist" ) && url.contains( "album" ) )
|| url.contains( "playlists" ) ) ) )
return true;
// Check Scriptresolvers
foreach ( QPointer<ExternalResolver> resolver, Pipeline::instance()->scriptResolvers() )
{
if ( resolver->canParseUrl( url, ExternalResolver::Track ) )
return true;
}
}
if ( acceptedType.testFlag( Album ) )
@@ -186,6 +195,14 @@ DropJob::acceptsMimeData( const QMimeData* data, DropJob::DropTypes acceptedType
return true;
if ( url.contains( "ex.fm" ) && url.contains( "site" ) && url.contains( "album" ) )
return true;
// Check Scriptresolvers
foreach ( QPointer<ExternalResolver> resolver, Pipeline::instance()->scriptResolvers() )
{
if ( resolver->canParseUrl( url, ExternalResolver::Album ) )
return true;
}
}
if ( acceptedType.testFlag( Artist ) )
@@ -196,8 +213,14 @@ DropJob::acceptsMimeData( const QMimeData* data, DropJob::DropTypes acceptedType
return true;
if ( url.contains( "rdio.com" ) && ( url.contains( "artist" ) && !url.contains( "album" ) && !url.contains( "track" ) ) )
return true;
if( url.contains( "soundcloud" ) )
return true;
// Check Scriptresolvers
foreach ( QPointer<ExternalResolver> resolver, Pipeline::instance()->scriptResolvers() )
{
if ( resolver->canParseUrl( url, ExternalResolver::Artist ) )
return true;
}
}
// We whitelist certain url-shorteners since they do some link checking. Often playable (e.g. spotify) links hide behind them,
@@ -254,9 +277,6 @@ DropJob::isDropType( DropJob::DropType desired, const QMimeData* data )
if ( url.contains( "spotify" ) && url.contains( "playlist" ) && s_canParseSpotifyPlaylists )
return true;
if( url.contains( "soundcloud" ) && url.contains( "sets" ) )
return true;
if( url.contains( "ex.fm" ) && !url.contains( "/song/" ) ) // We treat all but song as playlist
return true;
@@ -268,6 +288,14 @@ DropJob::isDropType( DropJob::DropType desired, const QMimeData* data )
#endif //QCA2_FOUND
if ( ShortenedLinkParser::handlesUrl( url ) )
return true;
// Check Scriptresolvers
foreach ( QPointer<ExternalResolver> resolver, Pipeline::instance()->scriptResolvers() )
{
if ( resolver->canParseUrl( url, ExternalResolver::Playlist ) )
return true;
}
}
return false;
@@ -632,24 +660,6 @@ DropJob::handleRdioUrls( const QString& urlsRaw )
}
void
DropJob::handleSoundcloudUrls( const QString& urlsRaw )
{
QStringList urls = urlsRaw.split( QRegExp( "\\s+" ), QString::SkipEmptyParts );
qDebug() << "Got Soundcloud urls!" << urls;
if ( dropAction() == Default )
setDropAction( Create );
SoundcloudParser* sc = new SoundcloudParser( urls, dropAction() == Create, this );
connect( sc, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SLOT( onTracksAdded( QList< Tomahawk::query_ptr > ) ) );
m_queryCount++;
}
void
DropJob::handleExfmUrls( const QString& urlsRaw )
{
@@ -705,8 +715,6 @@ DropJob::handleAllUrls( const QString& urls )
handleSpotifyUrls( urls );
else if ( urls.contains( "rdio.com" ) )
handleRdioUrls( urls );
else if( urls.contains( "soundcloud" ) )
handleSoundcloudUrls( urls );
else if( urls.contains( "ex.fm" ) )
handleExfmUrls( urls );
#ifdef QCA2_FOUND
@@ -745,15 +753,6 @@ DropJob::handleTrackUrls( const QString& urls )
connect( spot, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SLOT( onTracksAdded( QList< Tomahawk::query_ptr > ) ) );
m_queryCount++;
}
else if ( urls.contains( "soundcloud" ) )
{
QStringList tracks = urls.split( QRegExp( "\\s+" ), QString::SkipEmptyParts );
tDebug() << "Got a list of Soundcloud tracks!" << tracks;
SoundcloudParser* sc = new SoundcloudParser( tracks, false, this );
connect( sc, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SLOT( onTracksAdded( QList< Tomahawk::query_ptr > ) ) );
m_queryCount++;
}
else if ( urls.contains( "ex.fm" ) )
{
QStringList tracks = urls.split( QRegExp( "\\s+" ), QString::SkipEmptyParts );
@@ -783,6 +782,26 @@ DropJob::handleTrackUrls( const QString& urls )
connect( parser, SIGNAL( urls( QStringList ) ), this, SLOT( expandedUrls( QStringList ) ) );
m_queryCount++;
}
else
{
// Try Scriptresolvers
QStringList tracks = urls.split( QRegExp( "\\s+" ), QString::SkipEmptyParts );
foreach ( QString track, tracks )
{
foreach ( QPointer<ExternalResolver> resolver, Pipeline::instance()->scriptResolvers() )
{
if ( resolver->canParseUrl( track, ExternalResolver::Any ) )
{
ScriptCommand_LookupUrl* cmd = new ScriptCommand_LookupUrl( resolver, track );
connect( cmd, SIGNAL( information( QString, QSharedPointer<QObject> ) ), this, SLOT( informationForUrl( QString, QSharedPointer<QObject> ) ) );
cmd->enqueue();
m_queryCount++;
break;
}
}
}
}
}
@@ -794,6 +813,32 @@ DropJob::expandedUrls( QStringList urls )
}
void
DropJob::informationForUrl( const QString&, const QSharedPointer<QObject>& information )
{
if ( information.isNull() )
{
// No information was transmitted, nothing to do.
tLog( LOGVERBOSE ) << Q_FUNC_INFO << "Empty information received.";
return;
}
// Try to interpret as Track/Query
Tomahawk::query_ptr query = information.objectCast<Tomahawk::Query>();
if ( !query.isNull() )
{
QList<Tomahawk::query_ptr> tracks;
// The Url describes a track
tracks.append( query );
onTracksAdded( tracks );
return;
}
// Nothing relevant for this url, but still finalize this query.
onTracksAdded( QList<Tomahawk::query_ptr>() );
}
void
DropJob::onTracksAdded( const QList<Tomahawk::query_ptr>& tracksList )
{

View File

@@ -120,6 +120,7 @@ signals:
private slots:
void expandedUrls( QStringList );
void informationForUrl( const QString& url, const QSharedPointer<QObject>& information );
void onTracksAdded( const QList<Tomahawk::query_ptr>& );
private: