diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-07-01 21:23:53 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-07-01 21:23:53 +0000 |
| commit | 7e2066ba76299dbb8e51493740b6507fe949958a (patch) | |
| tree | e304bc9403e38a60e5f22824efea74158a94fd01 /src | |
| parent | 17cadbfb95e9211e8685aed3466d4c22df732e92 (diff) | |
| download | qmmp-7e2066ba76299dbb8e51493740b6507fe949958a.tar.gz qmmp-7e2066ba76299dbb8e51493740b6507fe949958a.tar.bz2 qmmp-7e2066ba76299dbb8e51493740b6507fe949958a.zip | |
scrobbler: using TrackInfo for cached song
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8979 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/General/scrobbler/scrobbler.cpp | 56 | ||||
| -rw-r--r-- | src/plugins/General/scrobbler/scrobbler.h | 10 | ||||
| -rw-r--r-- | src/plugins/General/scrobbler/scrobblercache.cpp | 105 | ||||
| -rw-r--r-- | src/plugins/General/scrobbler/scrobblercache.h | 21 | ||||
| -rw-r--r-- | src/plugins/General/scrobbler/scrobblerfactory.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/General/scrobbler/scrobblerhandler.cpp | 2 |
6 files changed, 67 insertions, 129 deletions
diff --git a/src/plugins/General/scrobbler/scrobbler.cpp b/src/plugins/General/scrobbler/scrobbler.cpp index 635561d92..f8f367e45 100644 --- a/src/plugins/General/scrobbler/scrobbler.cpp +++ b/src/plugins/General/scrobbler/scrobbler.cpp @@ -82,11 +82,6 @@ void ScrobblerResponse::parse(QIODevice *device) Scrobbler::Scrobbler(const QString &scrobblerUrl, const QString &name, QObject *parent) : QObject(parent) { - m_notificationReply = nullptr; - m_submitedSongs = 0; - m_submitReply = nullptr; - m_previousState = Qmmp::Stopped; - m_elapsed = 0; m_scrobblerUrl = scrobblerUrl; m_name = name; m_time = new QElapsedTimer(); @@ -128,22 +123,21 @@ void Scrobbler::setState(Qmmp::State state) { if(state == Qmmp::Playing && m_previousState == Qmmp::Paused) { - qDebug("Scrobbler[%s]: resuming from %d seconds played", qPrintable(m_name), m_elapsed / 1000); + qDebug("Scrobbler[%s]: resuming from %d seconds played", qPrintable(m_name), int(m_elapsed / 1000)); m_time->restart(); } else if(state == Qmmp::Paused) { m_elapsed += m_time->elapsed(); - qDebug("Scrobbler[%s]: pausing after %d seconds played", qPrintable(m_name), m_elapsed / 1000); + qDebug("Scrobbler[%s]: pausing after %d seconds played", qPrintable(m_name), int(m_elapsed / 1000)); } else if(state == Qmmp::Stopped && !m_song.metaData().isEmpty()) { if(m_previousState == Qmmp::Playing) m_elapsed += m_time->elapsed(); - m_elapsed /= 1000; //convert to seconds - if((m_elapsed > 240) || (m_elapsed > MIN_SONG_LENGTH && m_song.length() == 0) || - (m_elapsed > int(m_song.length()/2) && m_song.length() > MIN_SONG_LENGTH)) + if((m_elapsed > 240000) || (m_elapsed > MIN_SONG_LENGTH && m_song.duration() == 0) || + (m_elapsed > int(m_song.duration() / 2) && m_song.duration() > MIN_SONG_LENGTH)) { m_cachedSongs << m_song; m_cache->save(m_cachedSongs); @@ -158,15 +152,15 @@ void Scrobbler::setState(Qmmp::State state) void Scrobbler::updateMetaData() { - QMap <Qmmp::MetaData, QString> metadata = m_core->metaData(); + TrackInfo info = m_core->trackInfo(); if(m_core->state() != Qmmp::Playing) return; - if(!m_song.metaData().isEmpty() && m_song.metaData() != metadata) + if(!m_song.metaData().isEmpty() && m_song.metaData() != info.metaData()) { - int elapsed = (m_elapsed + m_time->elapsed()) / 1000; - if((elapsed > 240) || (elapsed > MIN_SONG_LENGTH && m_song.length() == 0) || - (elapsed > int(m_song.length()/2) && m_song.length() > MIN_SONG_LENGTH)) + int elapsed = (m_elapsed + m_time->elapsed()); + if((elapsed > 240000) || (elapsed > MIN_SONG_LENGTH && m_song.duration() == 0) || + (elapsed > int(m_song.duration() / 2) && m_song.duration() > MIN_SONG_LENGTH)) { m_cachedSongs << m_song; m_cache->save(m_cachedSongs); @@ -176,9 +170,9 @@ void Scrobbler::updateMetaData() m_song.clear(); } - if(!metadata.value(Qmmp::TITLE).isEmpty() && !metadata.value(Qmmp::ARTIST).isEmpty()) + if(!info.value(Qmmp::TITLE).isEmpty() && !info.value(Qmmp::ARTIST).isEmpty()) { - m_song = SongInfo(metadata, m_core->duration()/1000); + m_song = SongInfo(info); m_song.setTimeStamp(QDateTime::currentDateTime().toTime_t()); sendNotification(m_song); } @@ -293,13 +287,13 @@ void Scrobbler::submit() for (int i = 0; i < m_submitedSongs; ++i) { SongInfo info = m_cachedSongs[i]; - params.insert(QString("track[%1]").arg(i),info.metaData(Qmmp::TITLE)); + params.insert(QString("track[%1]").arg(i),info.value(Qmmp::TITLE)); params.insert(QString("timestamp[%1]").arg(i),QString("%1").arg(info.timeStamp())); - params.insert(QString("artist[%1]").arg(i),info.metaData(Qmmp::ARTIST)); - params.insert(QString("album[%1]").arg(i),info.metaData(Qmmp::ALBUM)); - params.insert(QString("trackNumber[%1]").arg(i),info.metaData(Qmmp::TRACK)); - if(info.length() > 0) - params.insert(QString("duration[%1]").arg(i),QString("%1").arg(info.length())); + params.insert(QString("artist[%1]").arg(i),info.value(Qmmp::ARTIST)); + params.insert(QString("album[%1]").arg(i),info.value(Qmmp::ALBUM)); + params.insert(QString("trackNumber[%1]").arg(i),info.value(Qmmp::TRACK)); + if(info.duration() > 0) + params.insert(QString("duration[%1]").arg(i),QString("%1").arg(info.duration() / 1000)); } params.insert("api_key", API_KEY); params.insert("method", "track.scrobble"); @@ -343,14 +337,14 @@ void Scrobbler::sendNotification(const SongInfo &info) qDebug("Scrobbler[%s]: sending notification", qPrintable(m_name)); QMap <QString, QString> params; - params.insert("track", info.metaData(Qmmp::TITLE)); - params.insert("artist", info.metaData(Qmmp::ARTIST)); - if(!info.metaData(Qmmp::ALBUM).isEmpty()) - params.insert("album", info.metaData(Qmmp::ALBUM)); - if(!info.metaData(Qmmp::TRACK).isEmpty()) - params.insert("trackNumber", info.metaData(Qmmp::TRACK)); - if(info.length() > 0) - params.insert("duration", QString("%1").arg(info.length())); + params.insert("track", info.value(Qmmp::TITLE)); + params.insert("artist", info.value(Qmmp::ARTIST)); + if(!info.value(Qmmp::ALBUM).isEmpty()) + params.insert("album", info.value(Qmmp::ALBUM)); + if(!info.value(Qmmp::TRACK).isEmpty()) + params.insert("trackNumber", info.value(Qmmp::TRACK)); + if(info.duration() > 0) + params.insert("duration", QString("%1").arg(info.duration() / 1000)); params.insert("api_key", API_KEY); params.insert("method", "track.updateNowPlaying"); params.insert("sk", m_session); diff --git a/src/plugins/General/scrobbler/scrobbler.h b/src/plugins/General/scrobbler/scrobbler.h index caab70bf6..ad3e1d56e 100644 --- a/src/plugins/General/scrobbler/scrobbler.h +++ b/src/plugins/General/scrobbler/scrobbler.h @@ -67,22 +67,22 @@ private slots: void submit(); private: - enum { MIN_SONG_LENGTH = 30 }; + enum { MIN_SONG_LENGTH = 30000 }; void sendNotification(const SongInfo &info); SongInfo m_song; QList <SongInfo> m_cachedSongs; QByteArray m_ua; - int m_submitedSongs; + int m_submitedSongs = 0; QString m_session; QNetworkAccessManager *m_http; SoundCore *m_core; - QNetworkReply *m_submitReply, *m_notificationReply; + QNetworkReply *m_submitReply = nullptr, *m_notificationReply = nullptr; QElapsedTimer *m_time; ScrobblerCache *m_cache; QString m_scrobblerUrl, m_name; - Qmmp::State m_previousState; - int m_elapsed; + Qmmp::State m_previousState = Qmmp::Stopped; + qint64 m_elapsed = 0; }; /** diff --git a/src/plugins/General/scrobbler/scrobblercache.cpp b/src/plugins/General/scrobbler/scrobblercache.cpp index 77a22b0cd..841c8c48f 100644 --- a/src/plugins/General/scrobbler/scrobblercache.cpp +++ b/src/plugins/General/scrobbler/scrobblercache.cpp @@ -22,39 +22,28 @@ #include "scrobblercache.h" SongInfo::SongInfo() -{ - m_length = 0; - m_start_ts = 0; -} +{} -SongInfo::SongInfo(const QMap <Qmmp::MetaData, QString> metadata, qint64 length) -{ - m_metadata = metadata; - m_length = length; - m_start_ts = 0; -} +SongInfo::SongInfo(const TrackInfo &info) : TrackInfo(info) +{} -SongInfo::SongInfo(const SongInfo &other) -{ - m_metadata = other.metaData(); - m_length = other.length(); - m_start_ts = other.timeStamp(); -} +SongInfo::SongInfo(const SongInfo &other) : TrackInfo(other), + m_start_ts(other.timeStamp()) +{} SongInfo::~SongInfo() {} SongInfo & SongInfo::operator=(const SongInfo &info) { - m_metadata = info.metaData(); - m_length = info.length(); + TrackInfo::operator=(info); m_start_ts = info.timeStamp(); return *this; } bool SongInfo::operator==(const SongInfo &info) { - return (m_metadata == info.metaData()) && (m_length == info.length()) && (m_start_ts == info.timeStamp()); + return (TrackInfo::operator==(info)) && (m_start_ts == info.timeStamp()); } bool SongInfo::operator!=(const SongInfo &info) @@ -62,42 +51,6 @@ bool SongInfo::operator!=(const SongInfo &info) return !operator==(info); } -void SongInfo::setMetaData(const QMap <Qmmp::MetaData, QString> metadata) -{ - m_metadata = metadata; -} - -void SongInfo::setMetaData(Qmmp::MetaData key, const QString &value) -{ - m_metadata.insert(key, value); -} - -void SongInfo::setLength(qint64 l) -{ - m_length = l; -} - -const QMap <Qmmp::MetaData, QString> SongInfo::metaData() const -{ - return m_metadata; -} - -const QString SongInfo::metaData(Qmmp::MetaData key) const -{ - return m_metadata.value(key); -} - -qint64 SongInfo::length () const -{ - return m_length; -} - -void SongInfo::clear() -{ - m_metadata.clear(); - m_length = 0; -} - void SongInfo::setTimeStamp(uint ts) { m_start_ts = ts; @@ -135,24 +88,26 @@ QList<SongInfo> ScrobblerCache::load() if (param == "title") { songs << SongInfo(); - songs.last().setMetaData(Qmmp::TITLE, value); + songs.last().setValue(Qmmp::TITLE, value); } else if (songs.isEmpty()) continue; else if (param == "artist") - songs.last().setMetaData(Qmmp::ARTIST, value); + songs.last().setValue(Qmmp::ARTIST, value); else if (param == "album") - songs.last().setMetaData(Qmmp::ALBUM, value); + songs.last().setValue(Qmmp::ALBUM, value); else if (param == "comment") - songs.last().setMetaData(Qmmp::COMMENT, value); + songs.last().setValue(Qmmp::COMMENT, value); else if (param == "genre") - songs.last().setMetaData(Qmmp::GENRE, value); + songs.last().setValue(Qmmp::GENRE, value); else if (param == "year") - songs.last().setMetaData(Qmmp::YEAR, value); + songs.last().setValue(Qmmp::YEAR, value); else if (param == "track") - songs.last().setMetaData(Qmmp::TRACK, value); - else if (param == "length") - songs.last().setLength(value.toInt()); + songs.last().setValue(Qmmp::TRACK, value); + else if (param == "length") //1.3.x config support + songs.last().setDuration(value.toInt() * 1000); + else if (param == "duration") + songs.last().setDuration(value.toLongLong()); else if (param == "time") songs.last().setTimeStamp(value.toUInt()); } @@ -170,21 +125,21 @@ void ScrobblerCache::save(const QList<SongInfo> &songs) } if(!file.open(QIODevice::WriteOnly)) { - qWarning("ScrobblerCach: unable to save file %s", qPrintable(m_filePath)); - qWarning("ScrobblerCach: error %d: %s", file.error(), qPrintable(file.errorString())); + qWarning("ScrobblerCache: unable to save file %s", qPrintable(m_filePath)); + qWarning("ScrobblerCache: error %d: %s", file.error(), qPrintable(file.errorString())); return; } foreach(SongInfo m, songs) { - file.write(QString("title=%1").arg(m.metaData(Qmmp::TITLE)).toUtf8() +"\n"); - file.write(QString("artist=%1").arg(m.metaData(Qmmp::ARTIST)).toUtf8() +"\n"); - file.write(QString("album=%1").arg(m.metaData(Qmmp::ALBUM)).toUtf8() +"\n"); - file.write(QString("comment=%1").arg(m.metaData(Qmmp::COMMENT)).toUtf8() +"\n"); - file.write(QString("genre=%1").arg(m.metaData(Qmmp::GENRE)).toUtf8() +"\n"); - file.write(QString("year=%1").arg(m.metaData(Qmmp::YEAR)).toUtf8() +"\n"); - file.write(QString("track=%1").arg(m.metaData(Qmmp::TRACK)).toUtf8() +"\n"); - file.write(QString("length=%1").arg(m.length()).toUtf8() +"\n"); - file.write(QString("time=%1").arg(m.timeStamp()).toUtf8() +"\n"); + file.write(QString("title=%1").arg(m.value(Qmmp::TITLE)).toUtf8() +"\n"); + file.write(QString("artist=%1").arg(m.value(Qmmp::ARTIST)).toUtf8() +"\n"); + file.write(QString("album=%1").arg(m.value(Qmmp::ALBUM)).toUtf8() +"\n"); + file.write(QString("comment=%1").arg(m.value(Qmmp::COMMENT)).toUtf8() +"\n"); + file.write(QString("genre=%1").arg(m.value(Qmmp::GENRE)).toUtf8() +"\n"); + file.write(QString("year=%1").arg(m.value(Qmmp::YEAR)).toUtf8() +"\n"); + file.write(QString("track=%1").arg(m.value(Qmmp::TRACK)).toUtf8() +"\n"); + file.write(QString("duration=%1").arg(m.duration()).toLatin1() +"\n"); + file.write(QString("time=%1").arg(m.timeStamp()).toLatin1() +"\n"); } file.close(); } diff --git a/src/plugins/General/scrobbler/scrobblercache.h b/src/plugins/General/scrobbler/scrobblercache.h index f46939e43..819d1fa96 100644 --- a/src/plugins/General/scrobbler/scrobblercache.h +++ b/src/plugins/General/scrobbler/scrobblercache.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2013-2016 by Ilya Kotov * + * Copyright (C) 2013-2019 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -24,16 +24,16 @@ #include <QMap> #include <QList> #include <qmmp/qmmp.h> - +#include <qmmp/trackinfo.h> /** @author Ilya Kotov <forkotov02@ya.ru> */ -class SongInfo +class SongInfo : public TrackInfo { public: SongInfo(); - SongInfo(const QMap <Qmmp::MetaData, QString> metadata, qint64 length = 0); + SongInfo(const TrackInfo &info); SongInfo(const SongInfo &other); ~SongInfo(); @@ -41,22 +41,11 @@ public: SongInfo & operator=(const SongInfo &info); bool operator==(const SongInfo &info); bool operator!=(const SongInfo &info); - - void setMetaData(const QMap <Qmmp::MetaData, QString> metadata); - void setMetaData(Qmmp::MetaData key, const QString &value); - void setLength(qint64 l); - const QMap <Qmmp::MetaData, QString> metaData() const; - const QString metaData(Qmmp::MetaData) const; - qint64 length () const; - void clear(); void setTimeStamp(uint ts); uint timeStamp() const; private: - QMap <Qmmp::MetaData, QString> m_metadata; - qint64 m_length; - uint m_start_ts; - + uint m_start_ts = 0; }; /** diff --git a/src/plugins/General/scrobbler/scrobblerfactory.cpp b/src/plugins/General/scrobbler/scrobblerfactory.cpp index 5d8ebe3d7..8e24bc164 100644 --- a/src/plugins/General/scrobbler/scrobblerfactory.cpp +++ b/src/plugins/General/scrobbler/scrobblerfactory.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2012 by Ilya Kotov * + * Copyright (C) 2008-2019 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * diff --git a/src/plugins/General/scrobbler/scrobblerhandler.cpp b/src/plugins/General/scrobbler/scrobblerhandler.cpp index 921cbf9c9..2ef15f668 100644 --- a/src/plugins/General/scrobbler/scrobblerhandler.cpp +++ b/src/plugins/General/scrobbler/scrobblerhandler.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2013 by Ilya Kotov * + * Copyright (C) 2009-2019 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * |
