parent
ae48008803
commit
1431916183
|
@ -480,6 +480,21 @@ QString Song::TextForSource(Source source) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Song::Source Song::SourceFromText(const QString &source) {
|
||||||
|
|
||||||
|
if (source == "file") return Source_LocalFile;
|
||||||
|
if (source == "collection") return Source_Collection;
|
||||||
|
if (source == "cd") return Source_CDDA;
|
||||||
|
if (source == "device") return Source_Device;
|
||||||
|
if (source == "stream") return Source_Stream;
|
||||||
|
if (source == "tidal") return Source_Tidal;
|
||||||
|
if (source == "subsonic") return Source_Subsonic;
|
||||||
|
if (source == "qobuz") return Source_Qobuz;
|
||||||
|
|
||||||
|
return Source_Unknown;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
QIcon Song::IconForSource(Source source) {
|
QIcon Song::IconForSource(Source source) {
|
||||||
|
|
||||||
switch (source) {
|
switch (source) {
|
||||||
|
|
|
@ -132,6 +132,7 @@ class Song {
|
||||||
|
|
||||||
static Source SourceFromURL(const QUrl &url);
|
static Source SourceFromURL(const QUrl &url);
|
||||||
static QString TextForSource(Source source);
|
static QString TextForSource(Source source);
|
||||||
|
static Song::Source SourceFromText(const QString &source);
|
||||||
static QIcon IconForSource(Source source);
|
static QIcon IconForSource(Source source);
|
||||||
static QString TextForFiletype(FileType filetype);
|
static QString TextForFiletype(FileType filetype);
|
||||||
static QString ExtensionForFiletype(FileType filetype);
|
static QString ExtensionForFiletype(FileType filetype);
|
||||||
|
|
|
@ -74,8 +74,28 @@ void AudioScrobbler::ReloadSettings() {
|
||||||
submit_delay_ = s.value("submit", 0).toInt();
|
submit_delay_ = s.value("submit", 0).toInt();
|
||||||
prefer_albumartist_ = s.value("albumartist", false).toBool();
|
prefer_albumartist_ = s.value("albumartist", false).toBool();
|
||||||
show_error_dialog_ = s.value("show_error_dialog", true).toBool();
|
show_error_dialog_ = s.value("show_error_dialog", true).toBool();
|
||||||
|
QStringList sources = s.value("sources").toStringList();
|
||||||
s.endGroup();
|
s.endGroup();
|
||||||
|
|
||||||
|
sources_.clear();
|
||||||
|
|
||||||
|
if (sources.isEmpty()) {
|
||||||
|
sources_ << Song::Source_Unknown
|
||||||
|
<< Song::Source_LocalFile
|
||||||
|
<< Song::Source_Collection
|
||||||
|
<< Song::Source_CDDA
|
||||||
|
<< Song::Source_Device
|
||||||
|
<< Song::Source_Stream
|
||||||
|
<< Song::Source_Tidal
|
||||||
|
<< Song::Source_Subsonic
|
||||||
|
<< Song::Source_Qobuz;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (const QString &source : sources) {
|
||||||
|
sources_ << Song::SourceFromText(source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
emit ScrobblingEnabledChanged(enabled_);
|
emit ScrobblingEnabledChanged(enabled_);
|
||||||
emit ScrobbleButtonVisibilityChanged(scrobble_button_);
|
emit ScrobbleButtonVisibilityChanged(scrobble_button_);
|
||||||
emit LoveButtonVisibilityChanged(love_button_);
|
emit LoveButtonVisibilityChanged(love_button_);
|
||||||
|
@ -122,6 +142,8 @@ void AudioScrobbler::ShowConfig() {
|
||||||
|
|
||||||
void AudioScrobbler::UpdateNowPlaying(const Song &song) {
|
void AudioScrobbler::UpdateNowPlaying(const Song &song) {
|
||||||
|
|
||||||
|
if (!sources_.contains(song.source())) return;
|
||||||
|
|
||||||
qLog(Debug) << "Sending now playing for song" << song.artist() << song.album() << song.title();
|
qLog(Debug) << "Sending now playing for song" << song.artist() << song.album() << song.title();
|
||||||
|
|
||||||
for (ScrobblerService *service : scrobbler_services_->List()) {
|
for (ScrobblerService *service : scrobbler_services_->List()) {
|
||||||
|
@ -142,6 +164,8 @@ void AudioScrobbler::ClearPlaying() {
|
||||||
|
|
||||||
void AudioScrobbler::Scrobble(const Song &song, const int scrobble_point) {
|
void AudioScrobbler::Scrobble(const Song &song, const int scrobble_point) {
|
||||||
|
|
||||||
|
if (!sources_.contains(song.source())) return;
|
||||||
|
|
||||||
qLog(Debug) << "Scrobbling song" << song.artist() << song.album() << song.title() << "at" << scrobble_point;
|
qLog(Debug) << "Scrobbling song" << song.artist() << song.album() << song.title() << "at" << scrobble_point;
|
||||||
|
|
||||||
for (ScrobblerService *service : scrobbler_services_->List()) {
|
for (ScrobblerService *service : scrobbler_services_->List()) {
|
||||||
|
|
|
@ -23,8 +23,10 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QList>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
|
#include "core/song.h"
|
||||||
#include "scrobblerservices.h"
|
#include "scrobblerservices.h"
|
||||||
|
|
||||||
class Application;
|
class Application;
|
||||||
|
@ -46,6 +48,7 @@ class AudioScrobbler : public QObject {
|
||||||
int SubmitDelay() const { return submit_delay_; }
|
int SubmitDelay() const { return submit_delay_; }
|
||||||
bool PreferAlbumArtist() const { return prefer_albumartist_; }
|
bool PreferAlbumArtist() const { return prefer_albumartist_; }
|
||||||
bool ShowErrorDialog() const { return show_error_dialog_; }
|
bool ShowErrorDialog() const { return show_error_dialog_; }
|
||||||
|
QList<Song::Source> sources() const { return sources_; }
|
||||||
|
|
||||||
void UpdateNowPlaying(const Song &song);
|
void UpdateNowPlaying(const Song &song);
|
||||||
void ClearPlaying();
|
void ClearPlaying();
|
||||||
|
@ -86,6 +89,7 @@ class AudioScrobbler : public QObject {
|
||||||
int submit_delay_;
|
int submit_delay_;
|
||||||
bool prefer_albumartist_;
|
bool prefer_albumartist_;
|
||||||
bool show_error_dialog_;
|
bool show_error_dialog_;
|
||||||
|
QList<Song::Source> sources_;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "settingspage.h"
|
#include "settingspage.h"
|
||||||
#include "core/application.h"
|
#include "core/application.h"
|
||||||
#include "core/iconloader.h"
|
#include "core/iconloader.h"
|
||||||
|
#include "core/song.h"
|
||||||
#include "widgets/loginstatewidget.h"
|
#include "widgets/loginstatewidget.h"
|
||||||
|
|
||||||
#include "scrobbler/audioscrobbler.h"
|
#include "scrobbler/audioscrobbler.h"
|
||||||
|
@ -96,6 +97,15 @@ void ScrobblerSettingsPage::Load() {
|
||||||
ui_->checkbox_albumartist->setChecked(scrobbler_->PreferAlbumArtist());
|
ui_->checkbox_albumartist->setChecked(scrobbler_->PreferAlbumArtist());
|
||||||
ui_->checkbox_show_error_dialog->setChecked(scrobbler_->ShowErrorDialog());
|
ui_->checkbox_show_error_dialog->setChecked(scrobbler_->ShowErrorDialog());
|
||||||
|
|
||||||
|
ui_->checkbox_source_collection->setChecked(scrobbler_->sources().contains(Song::Source_Collection));
|
||||||
|
ui_->checkbox_source_local->setChecked(scrobbler_->sources().contains(Song::Source_LocalFile));
|
||||||
|
ui_->checkbox_source_cdda->setChecked(scrobbler_->sources().contains(Song::Source_CDDA));
|
||||||
|
ui_->checkbox_source_device->setChecked(scrobbler_->sources().contains(Song::Source_Device));
|
||||||
|
ui_->checkbox_source_tidal->setChecked(scrobbler_->sources().contains(Song::Source_Tidal));
|
||||||
|
ui_->checkbox_source_subsonic->setChecked(scrobbler_->sources().contains(Song::Source_Subsonic));
|
||||||
|
ui_->checkbox_source_stream->setChecked(scrobbler_->sources().contains(Song::Source_Stream));
|
||||||
|
ui_->checkbox_source_unknown->setChecked(scrobbler_->sources().contains(Song::Source_Unknown));
|
||||||
|
|
||||||
ui_->checkbox_lastfm_enable->setChecked(lastfmscrobbler_->IsEnabled());
|
ui_->checkbox_lastfm_enable->setChecked(lastfmscrobbler_->IsEnabled());
|
||||||
ui_->checkbox_lastfm_https->setChecked(lastfmscrobbler_->IsUseHTTPS());
|
ui_->checkbox_lastfm_https->setChecked(lastfmscrobbler_->IsUseHTTPS());
|
||||||
LastFM_RefreshControls(lastfmscrobbler_->IsAuthenticated());
|
LastFM_RefreshControls(lastfmscrobbler_->IsAuthenticated());
|
||||||
|
@ -123,6 +133,19 @@ void ScrobblerSettingsPage::Save() {
|
||||||
s.setValue("submit", ui_->spinbox_submit->value());
|
s.setValue("submit", ui_->spinbox_submit->value());
|
||||||
s.setValue("albumartist", ui_->checkbox_albumartist->isChecked());
|
s.setValue("albumartist", ui_->checkbox_albumartist->isChecked());
|
||||||
s.setValue("show_error_dialog", ui_->checkbox_show_error_dialog->isChecked());
|
s.setValue("show_error_dialog", ui_->checkbox_show_error_dialog->isChecked());
|
||||||
|
|
||||||
|
QStringList sources;
|
||||||
|
if (ui_->checkbox_source_collection->isChecked()) sources << Song::TextForSource(Song::Source_Collection);
|
||||||
|
if (ui_->checkbox_source_local->isChecked()) sources << Song::TextForSource(Song::Source_LocalFile);
|
||||||
|
if (ui_->checkbox_source_cdda->isChecked()) sources << Song::TextForSource(Song::Source_CDDA);
|
||||||
|
if (ui_->checkbox_source_device->isChecked()) sources << Song::TextForSource(Song::Source_Device);
|
||||||
|
if (ui_->checkbox_source_tidal->isChecked()) sources << Song::TextForSource(Song::Source_Tidal);
|
||||||
|
if (ui_->checkbox_source_subsonic->isChecked()) sources << Song::TextForSource(Song::Source_Subsonic);
|
||||||
|
if (ui_->checkbox_source_stream->isChecked()) sources << Song::TextForSource(Song::Source_Stream);
|
||||||
|
if (ui_->checkbox_source_unknown->isChecked()) sources << Song::TextForSource(Song::Source_Unknown);
|
||||||
|
|
||||||
|
s.setValue("sources", sources);
|
||||||
|
|
||||||
s.endGroup();
|
s.endGroup();
|
||||||
|
|
||||||
s.beginGroup(LastFMScrobbler::kSettingsGroup);
|
s.beginGroup(LastFMScrobbler::kSettingsGroup);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>460</width>
|
<width>460</width>
|
||||||
<height>960</height>
|
<height>1009</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -116,6 +116,131 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Enable scrobbling for the following sources:</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<property name="horizontalSpacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="verticalSpacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkbox_source_collection">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Collection</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QCheckBox" name="checkbox_source_tidal">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Tidal</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkbox_source_cdda">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>CDDA</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QCheckBox" name="checkbox_source_stream">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Stream</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="1">
|
||||||
|
<widget class="QCheckBox" name="checkbox_source_unknown">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Unknown</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QCheckBox" name="checkbox_source_subsonic">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Subsonic</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkbox_source_local">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Local file</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkbox_source_device">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Device</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupbox_lastfm">
|
<widget class="QGroupBox" name="groupbox_lastfm">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
|
|
Loading…
Reference in New Issue