aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-07-01 21:23:53 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-07-01 21:23:53 +0000
commit7e2066ba76299dbb8e51493740b6507fe949958a (patch)
treee304bc9403e38a60e5f22824efea74158a94fd01
parent17cadbfb95e9211e8685aed3466d4c22df732e92 (diff)
downloadqmmp-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
-rw-r--r--src/plugins/General/scrobbler/scrobbler.cpp56
-rw-r--r--src/plugins/General/scrobbler/scrobbler.h10
-rw-r--r--src/plugins/General/scrobbler/scrobblercache.cpp105
-rw-r--r--src/plugins/General/scrobbler/scrobblercache.h21
-rw-r--r--src/plugins/General/scrobbler/scrobblerfactory.cpp2
-rw-r--r--src/plugins/General/scrobbler/scrobblerhandler.cpp2
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 *