Add Subsonic scrobble support (#545)

* add SubsonicScrobbler, add Scrobble method in SubsonicService

* new class SubsonicScrobbleRequest, use queue again, clean up

* add checkbox to enable server-side scrobbling to Subsonic settings page

* Check serversidescrobbling in SubsonicScrobbler::ReloadSettings instead of SubsonicService

TODO: SubsonicScrobbler::ReloadSettings needs to be called when
SubsonicSettings change.
This commit is contained in:
Pascal Below
2020-09-23 17:55:12 +02:00
committed by GitHub
parent b2fc41a911
commit 45bc353341
10 changed files with 491 additions and 0 deletions

View File

@@ -27,6 +27,7 @@
#include <QPair>
#include <QList>
#include <QString>
#include <QVariant>
#include <QUrl>
#include <QUrlQuery>
#include <QNetworkAccessManager>
@@ -53,6 +54,7 @@
#include "subsonicservice.h"
#include "subsonicurlhandler.h"
#include "subsonicrequest.h"
#include "subsonicscrobblerequest.h"
#include "settings/settingsdialog.h"
#include "settings/subsonicsettingspage.h"
@@ -379,6 +381,21 @@ void SubsonicService::CheckConfiguration() {
}
void SubsonicService::Scrobble(QString song_id, bool submission, QDateTime time) {
if (!server_url().isValid() || username().isEmpty() || password().isEmpty()) {
return;
}
if (!scrobble_request_.get()) {
// we're doing requests every 30-240s the whole time, so keep reusing this instance
scrobble_request_.reset(new SubsonicScrobbleRequest(this, url_handler_, app_, this));
}
scrobble_request_->CreateScrobbleRequest(song_id, submission, time);
}
void SubsonicService::ResetSongsRequest() {
if (songs_request_.get()) {