small patch that enables control over related artists
Martin Aumueller
aumuell at reserv.at
Wed Aug 9 16:22:53 UTC 2006
On Wed August 9 2006 17:56, Ian Monroe wrote:
> Do we never refresh the cache? Does the cache ever get purged? Eg.
> what database version is it part of.
The cache gets thrown away on each collection rescan. If something like this
patch gets integrated, then there should probably be a persistent 'ignore
these relations' table and these should get stripped from the similar artists
result.
>
> I think the current number of suggested artists and songs shown is
> good. Maybe its a good idea to broaden it for the dynamic playlist.
Showing 6 times as many suggestions as now is a bit exaggerated for my taste,
too.
>
> On 8/9/06, Laurent <lorijho at yes.lu> wrote:
> > Hi to all Amarok Fans.
> >
> > This is my first post to the list and it includes a patch.
> >
> > I've written a small patch against amarok-1.4.1. It enables control over
> > related artists. Last.fm artist relations are not always accurate, so
> > with the patch applied the user can exclude related artists by right
> > clicking a related artist name and select "E&xclude from similar artists
> > list". The item is then removed from the related_artists table in the
> > collectionDB. This works, of course, also for recursively related
> > artists (when browsing related artists).
> >
> > Other small changes (which are not absolutely necessary):
> > - fetch up to twice as much (60) related artists from last.fm
> > - display up to twice as much (60) related artists in the ContextBrowser.
> > - display up to 60 suggested songs in the ContextBrowser
> > - consider up to 60 related artists when appending tracks in dynamic
> > playlist mode
> >
> > Some screenshot:
> > http://213.213.211.196/amarok/snapshot1.jpg
> > http://213.213.211.196/amarok/snapshot2.jpg
> > http://213.213.211.196/amarok/snapshot3.jpg
> > http://213.213.211.196/amarok/snapshot4.jpg
> >
> > Give it a try...
> >
> > Greetings Laurent Baum (lorijho)
> >
> >
> >
> >
> >
> > diff -Naur amarok-1.4.1/amarok/src/collectiondb.cpp
> > amarok-1.4.1.new/amarok/src/collectiondb.cpp ---
> > amarok-1.4.1/amarok/src/collectiondb.cpp 2006-07-02 21:37:44.000000000
> > +0200 +++ amarok-1.4.1.new/amarok/src/collectiondb.cpp 2006-08-08
> > 22:26:17.323684750 +0200 @@ -3470,6 +3470,13 @@
> > .arg( escapeString( path ) ) );
> > }
> >
> > +void
> > +CollectionDB::removeRelatedArtist(const QString &artist, const QString
> > &relArtist) +{
> > + query( QString( "DELETE FROM related_artists WHERE artist = '%1' AND
> > suggestion = '%2';" ) + .arg( escapeString( artist ),
> > escapeString( relArtist ) ) ); +
> > +}
> >
> > bool
> > CollectionDB::isDirInCollection( QString path )
> > diff -Naur amarok-1.4.1/amarok/src/collectiondb.h
> > amarok-1.4.1.new/amarok/src/collectiondb.h ---
> > amarok-1.4.1/amarok/src/collectiondb.h 2006-07-02 21:37:44.000000000
> > +0200 +++ amarok-1.4.1.new/amarok/src/collectiondb.h 2006-08-08
> > 22:26:17.355686750 +0200 @@ -270,7 +270,8 @@
> > void removeSongsInDir( QString path );
> > void removeSongs( const KURL::List& urls );
> > void updateDirStats( QString path, const long datetime, const
> > bool temporary = false ); -
> > + /*member function that deletes related Artists from DB*/
> > + void removeRelatedArtist(const QString &artist, const QString
> > &relArtist); //song methods
> > bool addSong( MetaBundle* bundle, const bool incremental = false
> > ); void doATFStuff( MetaBundle *bundle, const bool tempTables = true );
> > diff -Naur amarok-1.4.1/amarok/src/contextbrowser.cpp
> > amarok-1.4.1.new/amarok/src/contextbrowser.cpp ---
> > amarok-1.4.1/amarok/src/contextbrowser.cpp 2006-07-02 21:37:44.000000000
> > +0200 +++ amarok-1.4.1.new/amarok/src/contextbrowser.cpp 2006-08-09
> > 14:10:04.794680500 +0200 @@ -706,7 +706,8 @@
> >
> > void ContextBrowser::slotContextMenu( const QString& urlString, const
> > QPoint& point ) {
> > - enum { APPEND, ASNEXT, MAKE, MEDIA_DEVICE, INFO, TITLE, RELATED,
> > SUGGEST, FAVES, FRESHPODCASTS, NEWALBUMS, FAVALBUMS }; + //enum {
> > APPEND, ASNEXT, MAKE, MEDIA_DEVICE, INFO, TITLE, RELATED, SUGGEST, FAVES,
> > FRESHPODCASTS, NEWALBUMS, FAVALBUMS }; + enum { APPEND, ASNEXT, MAKE,
> > MEDIA_DEVICE, INFO, TITLE, RELATED, SUGGEST, FAVES, FRESHPODCASTS,
> > NEWALBUMS, FAVALBUMS, DEL_REL_ARTIST }; /*added ID for deleting related
> > artist*/ debug() << "url string: " << urlString << endl;
> >
> > if( urlString.startsWith( "musicbrainz" ) ||
> > @@ -788,6 +789,14 @@
> > menu.changeTitle( TITLE, i18n("Artist") );
> > menu.changeItem( INFO, i18n("Edit Artist &Information..."
> > ) ); menu.changeItem( ASNEXT, i18n("&Queue Artist's Songs") ); +
> > /*add menu item for deleting related artist only for the current track
> > artist's related artists or recursively related artists*/ +
> > const MetaBundle ¤tTrack = EngineController::instance()->bundle();
> > + /*this->m_artist is set when browsing (recursively) related
> > artists*/ + if (!currentTrack.artist().isEmpty() ||
> > !this->m_artist.isEmpty()) + {
> > + menu.insertSeparator();
> > + menu.insertItem( SmallIconSet( amaroK::icon(
> > "remove_from_playlist" ) ), i18n( "E&xclude from similar artists list" ),
> > DEL_REL_ARTIST ); + }
> > }
> > if ( url.protocol() == "album" )
> > {
> > @@ -909,6 +918,33 @@
> > MediaBrowser::queue()->addURLs( urls );
> > break;
> >
> > + /*do the deletion here*/
> > + case DEL_REL_ARTIST:
> > + {
> > + /*this->m_artist is set so we have to consider a related artist
> > as primary artist that has related artist*/ + QString curArtist;
> > + if ( !this->m_artist.isEmpty() )
> > + {
> > + curArtist=this->m_artist;
> > + }
> > + else
> > + {
> > + const MetaBundle ¤tTrack =
> > EngineController::instance()->bundle(); + curArtist =
> > currentTrack.artist();
> > + }
> > + QString relArtist=url.fileName();
> > + if ( !curArtist.isEmpty() )
> > + {
> > + CollectionDB::instance()->removeRelatedArtist( curArtist,
> > relArtist ); + }
> > + /*
> > + debug() << "currentTrack.artist(): " << currentTrack.artist() <<
> > endl; + debug() << "this->m_artist: " << this->m_artist << endl; +
> > debug() << "selected curArtist: " << curArtist << endl; +
> > debug() << "url.fileName(): " << url.fileName() << endl; + */
> > + break;
> > + }
> > }
> > }
> >
> > @@ -2159,9 +2195,9 @@
> > {
> > bool isInCollection =
> > !CollectionDB::instance()->albumListOfArtist( relArtists[i] ).isEmpty();
> > m_HTMLSource.append(
> > - ( isInCollection ? "" : "<i>\n" )
> > + ( isInCollection ? "<b>\n" : "<i>\n" ) /*bold name if
> > artist in collection*/ + QString( "<a href='artist:" ) + escapeHTMLAttr(
> > relArtists[i] ) + "'>\n" + escapeHTML( relArtists[i] ).replace( " ",
> > " " ) + "</a>\n" - + ( isInCollection ? "" : "</i>\n"
> > )
> > + + ( isInCollection ? "</b>\n" : "</i>\n" ) /*bold name
> > if artist in collection*/ );
> > if( i != relArtists.count()-1 )
> > m_HTMLSource.append( ", " );
> > @@ -2195,7 +2231,7 @@
> > values = qb.run();
> >
> > // not enough items returned, let's fill the list with score-less
> > tracks - if ( values.count() < 10 * qb.countReturnValues() )
> > + if ( values.count() < 60 * qb.countReturnValues() ) /*10->60related
> > to relArtists QStringList? which new size is 60*/ {
> > qb.clear();
> > qb.exclusiveFilter( QueryBuilder::tabSong,
> > QueryBuilder::tabStats, QueryBuilder::valURL ); @@ -2204,7 +2240,7 @@
> > qb.addReturnValue( QueryBuilder::tabArtist,
> > QueryBuilder::valName ); qb.addMatches( QueryBuilder::tabArtist,
> > relArtists );
> > qb.setOptions( QueryBuilder::optRandomize );
> > - qb.setLimit( 0, 10 - values.count() / 4 );
> > + qb.setLimit( 0, 60 - values.count() / 4 ); /*10->60 see comment
> > above*/
> >
> > QStringList sl;
> > sl = qb.run();
> > @@ -2761,7 +2797,7 @@
> > else
> > showCurrentArtistHeader( currentTrack );
> >
> > - QStringList relArtists = CollectionDB::instance()->similarArtists(
> > artist, 10 ); + QStringList relArtists =
> > CollectionDB::instance()->similarArtists( artist, 60 ); /* 10->60 as many
> > as we asked for from last.fm*/ if ( !relArtists.isEmpty() )
> > {
> > if( ContextBrowser::instance()->m_showRelated )
> > diff -Naur amarok-1.4.1/amarok/src/playlist.cpp
> > amarok-1.4.1.new/amarok/src/playlist.cpp ---
> > amarok-1.4.1/amarok/src/playlist.cpp 2006-07-02 21:37:44.000000000
> > +0200 +++ amarok-1.4.1.new/amarok/src/playlist.cpp 2006-08-08
> > 22:26:17.395689250 +0200 @@ -597,7 +597,7 @@
> > if( type == DynamicMode::SUGGESTION )
> > {
> > if( !m_currentTrack ) return;
> > - QStringList suggestions =
> > CollectionDB::instance()->similarArtists( currentTrack()->artist(), 16 );
> > + QStringList suggestions =
> > CollectionDB::instance()->similarArtists( currentTrack()->artist(), 60 );
> > /*16->60 consider all 60 related artists that we asked for from last.fm*/
> > qb.addMatches( QueryBuilder::tabArtist, suggestions );
> > }
> > else if( type != DynamicMode::RANDOM ) //we have playlists to choose
> > from.
> >
> >
> >
> > _______________________________________________
> > Amarok mailing list
> > Amarok at kde.org
> > https://mail.kde.org/mailman/listinfo/amarok
>
> _______________________________________________
> Amarok mailing list
> Amarok at kde.org
> https://mail.kde.org/mailman/listinfo/amarok
More information about the Amarok
mailing list