[Amarok] 366dbe7 Fix SqlTrack playcount semantics towards LastFM/FM
Jeff Mitchell
mitchell at kde.org
Wed Mar 24 16:24:19 CET 2010
commit 366dbe78ea69d0dd194222b02ad336b8d7e38428
Author: Jeff Mitchell <mitchell at kde.org>
Date: Wed Mar 24 11:30:43 2010 -0400
Fix SqlTrack playcount semantics towards LastFM/FMPS rules.
Max, you said that this would have to be implemented in at least two places, but unless you mean in StatisticsProvider classes (which don't know the length of a track) I didn't find another place.
CCMAIL:amarok-devel at kde.org
diff --git a/src/collection/sqlcollection/SqlMeta.cpp b/src/collection/sqlcollection/SqlMeta.cpp
index 7167291..06114cf 100644
--- a/src/collection/sqlcollection/SqlMeta.cpp
+++ b/src/collection/sqlcollection/SqlMeta.cpp
@@ -836,10 +836,22 @@ SqlTrack::finishedPlaying( double playedFraction )
beginMetaDataUpdate(); // Batch updates, so we only bother our observers once.
- setPlayCount( newPlayCount );
- if( firstPlayed() == 0 )
- setFirstPlayed( QDateTime::currentDateTime().toTime_t() );
- setLastPlayed( QDateTime::currentDateTime().toTime_t() );
+ bool doUpdate = false;
+
+ if( m_length < 30000 && playedFraction == 1.0 )
+ doUpdate = true;
+ if( playedFraction >= 0.5 && m_length >= 30000 ) //song >= 30 seconds and at least half played
+ doUpdate = true;
+ if( playedFraction * m_length > 240000 )
+ doUpdate = true;
+
+ if( doUpdate )
+ {
+ setPlayCount( newPlayCount );
+ if( firstPlayed() == 0 )
+ setFirstPlayed( QDateTime::currentDateTime().toTime_t() );
+ setLastPlayed( QDateTime::currentDateTime().toTime_t() );
+ }
setScore( Amarok::computeScore( score(), newPlayCount, playedFraction ) );
diff --git a/src/collection/sqlcollection/SqlMeta.h b/src/collection/sqlcollection/SqlMeta.h
index 2a9c6ce..41035e2 100644
--- a/src/collection/sqlcollection/SqlMeta.h
+++ b/src/collection/sqlcollection/SqlMeta.h
@@ -183,7 +183,7 @@ class SqlTrack : public Meta::Track
QString m_rpath;
int m_trackId;
- int m_length;
+ qint64 m_length;
qint64 m_filesize;
int m_trackNumber;
int m_discNumber;
More information about the Amarok-devel
mailing list