Add Subsonic support (#180)

This commit is contained in:
Jonas Kvinge
2019-06-17 23:54:24 +02:00
committed by GitHub
parent a9da8811fc
commit 7b54cef23b
44 changed files with 2656 additions and 43 deletions

View File

@@ -24,11 +24,11 @@
#include <QString>
#include <QUrl>
#include <QIcon>
#include <QSortFilterProxyModel>
#include "core/song.h"
#include "internetsearch.h"
class QSortFilterProxyModel;
class Application;
class CollectionBackend;
class CollectionModel;
@@ -38,6 +38,7 @@ class InternetService : public QObject {
public:
InternetService(Song::Source source, const QString &name, const QString &url_scheme, Application *app, QObject *parent = nullptr);
virtual ~InternetService() {}
virtual Song::Source source() const { return source_; }
@@ -47,40 +48,45 @@ class InternetService : public QObject {
virtual void InitialLoadSettings() {}
virtual void ReloadSettings() {}
virtual QIcon Icon() { return Song::IconForSource(source_); }
virtual const bool oauth() = 0;
virtual const bool authenticated() = 0;
virtual int Search(const QString &query, InternetSearch::SearchType type) = 0;
virtual void CancelSearch() = 0;
virtual const bool oauth() { return false; }
virtual const bool authenticated() { return false; }
virtual int Search(const QString &query, InternetSearch::SearchType type) { return 0; }
virtual void CancelSearch() {}
virtual CollectionBackend *artists_collection_backend() = 0;
virtual CollectionBackend *albums_collection_backend() = 0;
virtual CollectionBackend *songs_collection_backend() = 0;
virtual CollectionBackend *artists_collection_backend() { return nullptr; }
virtual CollectionBackend *albums_collection_backend() { return nullptr; }
virtual CollectionBackend *songs_collection_backend() { return nullptr; }
virtual CollectionModel *artists_collection_model() = 0;
virtual CollectionModel *albums_collection_model() = 0;
virtual CollectionModel *songs_collection_model() = 0;
virtual CollectionModel *artists_collection_model() { return nullptr; }
virtual CollectionModel *albums_collection_model() { return nullptr; }
virtual CollectionModel *songs_collection_model() { return nullptr; }
virtual QSortFilterProxyModel *artists_collection_sort_model() = 0;
virtual QSortFilterProxyModel *albums_collection_sort_model() = 0;
virtual QSortFilterProxyModel *songs_collection_sort_model() = 0;
virtual QSortFilterProxyModel *artists_collection_sort_model() { return nullptr; }
virtual QSortFilterProxyModel *albums_collection_sort_model() { return nullptr; }
virtual QSortFilterProxyModel *songs_collection_sort_model() { return nullptr; }
public slots:
virtual void ShowConfig() {}
virtual void GetArtists() = 0;
virtual void GetAlbums() = 0;
virtual void GetSongs() = 0;
virtual void ResetArtistsRequest() = 0;
virtual void ResetAlbumsRequest() = 0;
virtual void ResetSongsRequest() = 0;
virtual void GetArtists() {}
virtual void GetAlbums() {}
virtual void GetSongs() {}
virtual void ResetArtistsRequest() {}
virtual void ResetAlbumsRequest() {}
virtual void ResetSongsRequest() {}
signals:
void Login();
void Logout();
void Login(const QString &username, const QString &password, const QString &token);
void Login(const QString &hostname, const int, const QString &username, const QString &password);
void LoginSuccess();
void LoginFailure(QString failure_reason);
void LoginComplete(bool success, QString error = QString());
void TestSuccess();
void TestFailure(QString failure_reason);
void TestComplete(bool success, QString error = QString());
void Error(QString message);
void Results(SongList songs);
void UpdateStatus(QString text);