bool DropJob::acceptsMimeData( const QMimeData* data, DropJob::DropTypes acceptedType, DropJob::DropAction acceptedAction ) { Q_UNUSED( acceptedAction ); if ( data->hasFormat( "application/tomahawk.query.list" ) || data->hasFormat( "application/tomahawk.plentry.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.artist" ) ) { return true; } // check plain text url types if ( !data->hasFormat( "text/plain" ) ) return false; const QString url = data->data( "text/plain" ); if ( acceptedType.testFlag( Playlist ) ) { if( url.contains( "xspf" ) ) return true; // Not the most elegant if ( url.contains( "spotify" ) && url.contains( "playlist" ) && s_canParseSpotifyPlaylists ) return true; } if ( acceptedType.testFlag( Track ) ) { if ( url.contains( "itunes" ) && url.contains( "album" ) ) // YES itunes is f****d up and song links have album/ in the url. return true; if ( url.contains( "spotify" ) && url.contains( "track" ) ) return true; if ( url.contains( "rdio.com" ) && ( ( ( url.contains( "track" ) && url.contains( "artist" ) && url.contains( "album" ) ) || url.contains( "playlists" ) ) ) ) return true; } if ( acceptedType.testFlag( Album ) ) { if ( url.contains( "itunes" ) && url.contains( "album" ) ) // YES itunes is f****d up and song links have album/ in the url. return true; if ( url.contains( "spotify" ) && url.contains( "album" ) ) return true; if ( url.contains( "rdio.com" ) && ( url.contains( "artist" ) && url.contains( "album" ) && !url.contains( "track" ) ) ) return true; } if ( acceptedType.testFlag( Artist ) ) { if ( url.contains( "itunes" ) && url.contains( "artist" ) ) // YES itunes is f****d up and song links have album/ in the url. return true; if ( url.contains( "spotify" ) && url.contains( "artist" ) ) return true; if ( url.contains( "rdio.com" ) && ( url.contains( "artist" ) && !url.contains( "album" ) && !url.contains( "track" ) ) ) return true; } // We whitelist t.co and bit.ly (and j.mp) since they do some link checking. Often playable (e.g. spotify..) links hide behind them, // so we do an extra level of lookup if ( url.contains( "bit.ly" ) || url.contains( "j.mp" ) || url.contains( "t.co" ) || url.contains( "rd.io" ) ) return true; return false; }
bool DropJob::acceptsMimeData( const QMimeData* data, DropJob::DropTypes acceptedType, DropJob::DropAction acceptedAction ) { Q_UNUSED( acceptedAction ); if ( data->hasFormat( "application/tomahawk.query.list" ) || data->hasFormat( "application/tomahawk.plentry.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.artist" ) ) { return true; } // check plain text url types if ( !data->hasFormat( "text/plain" ) ) if ( !data->hasFormat( "text/uri-list" ) ) return false; const QString url = data->data( "text/plain" ); const QString urlList = data->data( "text/uri-list" ).trimmed(); if ( acceptedType.testFlag( Playlist ) ) { if ( url.contains( "xml" ) && url.contains( "iTunes" ) ) return validateLocalFile( url, "xml" ); if ( urlList.contains( "xml" ) && urlList.contains( "iTunes" ) ) return validateLocalFiles( urlList, "xml" ); if ( url.contains( "xspf" ) ) return true; if ( url.contains( "m3u" ) ) return true; if ( urlList.contains( "m3u" ) ) return true; if ( urlList.contains( "xspf" ) ) return true; // Not the most elegant if ( url.contains( "spotify" ) && url.contains( "playlist" ) && s_canParseSpotifyPlaylists ) 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 ) ) { if ( url.contains( "m3u" ) ) return true; if ( urlList.contains( "m3u" ) ) return true; if ( url.contains( "itunes" ) && url.contains( "album" ) ) // YES itunes is f****d up and song links have album/ in the url. return true; if ( url.contains( "spotify" ) && url.contains( "track" ) ) 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 ) ) { if ( url.contains( "itunes" ) && url.contains( "album" ) ) // YES itunes is f****d up and song links have album/ in the url. return true; if ( url.contains( "spotify" ) && url.contains( "album" ) ) return true; if ( url.contains( "rdio.com" ) && ( url.contains( "artist" ) && url.contains( "album" ) && !url.contains( "track" ) ) ) return true; // Check Scriptresolvers foreach ( QPointer<ExternalResolver> resolver, Pipeline::instance()->scriptResolvers() ) { if ( resolver->canParseUrl( url, ExternalResolver::Album ) ) return true; } } if ( acceptedType.testFlag( Artist ) ) { if ( url.contains( "itunes" ) && url.contains( "artist" ) ) // YES itunes is f****d up and song links have album/ in the url. return true; if ( url.contains( "spotify" ) && url.contains( "artist" ) ) return true; if ( url.contains( "rdio.com" ) && ( url.contains( "artist" ) && !url.contains( "album" ) && !url.contains( "track" ) ) ) 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, // so we do an extra level of lookup if ( ShortenedLinkParser::handlesUrl( url ) ) return true; return false; }
bool DropJob::acceptsMimeData( const QMimeData* data, DropJob::DropTypes acceptedType, DropJob::DropAction acceptedAction ) { Q_UNUSED( acceptedAction ); if ( data->hasFormat( "application/tomahawk.query.list" ) || data->hasFormat( "application/tomahawk.plentry.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.artist" ) ) { return true; } // check plain text url types if ( !data->hasFormat( "text/plain" ) ) if ( !data->hasFormat( "text/uri-list" ) ) return false; const QString url = data->data( "text/plain" ); if ( acceptedType.testFlag( Playlist ) ) { if ( url.contains( "xspf" ) ) return true; if ( url.contains( "m3u" ) ) return true; if ( data->data( "text/uri-list" ).contains( "xspf" ) ) return true; if ( data->data( "text/uri-list" ).contains( "m3u" ) ) return true; // Not the most elegant 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; } if ( acceptedType.testFlag( Track ) ) { if ( url.contains( "m3u" ) ) return true; if ( data->data( "text/uri-list" ).contains( "m3u" ) ) return true; if ( url.contains( "itunes" ) && url.contains( "album" ) ) // YES itunes is f****d up and song links have album/ in the url. return true; if ( url.contains( "spotify" ) && url.contains( "track" ) ) return true; 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; } if ( acceptedType.testFlag( Album ) ) { if ( url.contains( "itunes" ) && url.contains( "album" ) ) // YES itunes is f****d up and song links have album/ in the url. return true; if ( url.contains( "spotify" ) && url.contains( "album" ) ) return true; if ( url.contains( "rdio.com" ) && ( url.contains( "artist" ) && url.contains( "album" ) && !url.contains( "track" ) ) ) return true; if ( url.contains( "ex.fm" ) && url.contains( "site" ) && url.contains( "album" ) ) return true; } if ( acceptedType.testFlag( Artist ) ) { if ( url.contains( "itunes" ) && url.contains( "artist" ) ) // YES itunes is f****d up and song links have album/ in the url. return true; if ( url.contains( "spotify" ) && url.contains( "artist" ) ) return true; if ( url.contains( "rdio.com" ) && ( url.contains( "artist" ) && !url.contains( "album" ) && !url.contains( "track" ) ) ) return true; if( url.contains( "soundcloud" ) ) return true; } // We whitelist certain url-shorteners since they do some link checking. Often playable (e.g. spotify) links hide behind them, // so we do an extra level of lookup if ( ShortenedLinkParser::handlesUrl( url ) ) return true; return false; }