2013-01-03 21:40:47 +01:00
|
|
|
#ifndef OUTGOINGDATACREATOR_H
|
|
|
|
#define OUTGOINGDATACREATOR_H
|
2012-12-31 23:37:39 +01:00
|
|
|
|
2014-02-06 14:48:00 +01:00
|
|
|
#include <memory>
|
|
|
|
|
2012-12-31 23:37:39 +01:00
|
|
|
#include <QTcpSocket>
|
|
|
|
#include <QImage>
|
|
|
|
#include <QList>
|
|
|
|
#include <QTimer>
|
2013-07-18 11:28:53 +02:00
|
|
|
#include <QMap>
|
|
|
|
#include <QQueue>
|
2012-12-31 23:37:39 +01:00
|
|
|
|
|
|
|
#include "core/player.h"
|
|
|
|
#include "core/application.h"
|
|
|
|
#include "engines/enginebase.h"
|
|
|
|
#include "engines/engine_fwd.h"
|
2014-10-21 17:59:02 +02:00
|
|
|
#include "globalsearch/globalsearch.h"
|
2012-12-31 23:37:39 +01:00
|
|
|
#include "playlist/playlist.h"
|
|
|
|
#include "playlist/playlistmanager.h"
|
2013-04-16 13:57:04 +02:00
|
|
|
#include "playlist/playlistbackend.h"
|
2013-07-10 13:24:23 +02:00
|
|
|
#include "songinfo/collapsibleinfopane.h"
|
|
|
|
#include "songinfo/songinfofetcher.h"
|
|
|
|
#include "songinfo/songinfoprovider.h"
|
2013-07-10 13:51:18 +02:00
|
|
|
#include "songinfo/songinfoview.h"
|
2013-10-09 19:33:59 +02:00
|
|
|
#include "songinfo/ultimatelyricslyric.h"
|
2013-07-10 13:24:23 +02:00
|
|
|
#include "songinfo/ultimatelyricsprovider.h"
|
|
|
|
#include "songinfo/ultimatelyricsreader.h"
|
2013-01-03 21:40:47 +01:00
|
|
|
#include "remotecontrolmessages.pb.h"
|
2013-01-10 21:21:55 +01:00
|
|
|
#include "remoteclient.h"
|
2013-07-10 13:24:23 +02:00
|
|
|
|
|
|
|
typedef QList<SongInfoProvider*> ProviderList;
|
2012-12-31 23:37:39 +01:00
|
|
|
|
2014-10-21 17:59:02 +02:00
|
|
|
struct GlobalSearchRequest {
|
|
|
|
int id_;
|
|
|
|
QString query_;
|
|
|
|
RemoteClient* client_;
|
|
|
|
GlobalSearchRequest()
|
2014-10-23 18:07:39 +02:00
|
|
|
: id_(-1), client_(nullptr) {}
|
|
|
|
GlobalSearchRequest(int i, const QString& q, RemoteClient* c)
|
2014-10-21 17:59:02 +02:00
|
|
|
: id_(i), query_(q), client_(c) {}
|
|
|
|
};
|
|
|
|
|
2013-01-03 21:40:47 +01:00
|
|
|
class OutgoingDataCreator : public QObject {
|
2014-02-07 16:34:20 +01:00
|
|
|
Q_OBJECT
|
|
|
|
public:
|
2013-01-03 21:40:47 +01:00
|
|
|
OutgoingDataCreator(Application* app);
|
|
|
|
~OutgoingDataCreator();
|
2012-12-31 23:37:39 +01:00
|
|
|
|
2013-07-12 12:31:27 +02:00
|
|
|
static const quint32 kFileChunkSize;
|
|
|
|
|
2013-01-10 21:21:55 +01:00
|
|
|
void SetClients(QList<RemoteClient*>* clients);
|
2012-12-31 23:37:39 +01:00
|
|
|
|
2014-11-13 22:31:49 +01:00
|
|
|
static void CreateSong(const Song& song, const QImage& art, const int index,
|
|
|
|
pb::remote::SongMetadata* song_metadata);
|
|
|
|
|
2014-02-07 16:34:20 +01:00
|
|
|
public slots:
|
2013-01-15 13:05:43 +01:00
|
|
|
void SendClementineInfo();
|
2012-12-31 23:37:39 +01:00
|
|
|
void SendAllPlaylists();
|
2013-04-16 13:57:04 +02:00
|
|
|
void SendAllActivePlaylists();
|
2013-03-27 16:54:02 +01:00
|
|
|
void SendFirstData(bool send_playlist_songs);
|
2012-12-31 23:37:39 +01:00
|
|
|
void SendPlaylistSongs(int id);
|
2013-01-03 21:40:47 +01:00
|
|
|
void PlaylistChanged(Playlist*);
|
2012-12-31 23:37:39 +01:00
|
|
|
void VolumeChanged(int volume);
|
2013-05-11 23:59:51 +02:00
|
|
|
void PlaylistAdded(int id, const QString& name, bool favorite);
|
2013-02-07 21:34:04 +01:00
|
|
|
void PlaylistDeleted(int id);
|
|
|
|
void PlaylistClosed(int id);
|
|
|
|
void PlaylistRenamed(int id, const QString& new_name);
|
2012-12-31 23:37:39 +01:00
|
|
|
void ActiveChanged(Playlist*);
|
2014-02-07 16:34:20 +01:00
|
|
|
void CurrentSongChanged(const Song& song, const QString& uri,
|
|
|
|
const QImage& img);
|
2013-12-22 15:16:42 +01:00
|
|
|
void SendSongMetadata();
|
2012-12-31 23:37:39 +01:00
|
|
|
void StateChanged(Engine::State);
|
|
|
|
void SendKeepAlive();
|
2013-01-15 14:43:02 +01:00
|
|
|
void SendRepeatMode(PlaylistSequence::RepeatMode mode);
|
|
|
|
void SendShuffleMode(PlaylistSequence::ShuffleMode mode);
|
2013-01-22 22:02:16 +01:00
|
|
|
void UpdateTrackPosition();
|
2013-01-23 20:02:12 +01:00
|
|
|
void DisconnectAllClients();
|
2013-07-10 13:24:23 +02:00
|
|
|
void GetLyrics();
|
|
|
|
void SendLyrics(int id, const SongInfoFetcher::Result& result);
|
2013-08-01 18:13:14 +02:00
|
|
|
void SendLibrary(RemoteClient* client);
|
2013-12-22 15:16:42 +01:00
|
|
|
void EnableKittens(bool aww);
|
|
|
|
void SendKitten(const QImage& kitten);
|
2012-12-31 23:37:39 +01:00
|
|
|
|
2014-10-23 18:07:39 +02:00
|
|
|
void DoGlobalSearch(const QString& query, RemoteClient* client);
|
|
|
|
void ResultsAvailable(int id, const SearchProvider::ResultList& results);
|
2014-10-21 17:59:02 +02:00
|
|
|
void SearchFinished(int id);
|
|
|
|
|
2014-02-07 16:34:20 +01:00
|
|
|
private:
|
2012-12-31 23:37:39 +01:00
|
|
|
Application* app_;
|
2013-01-10 21:21:55 +01:00
|
|
|
QList<RemoteClient*>* clients_;
|
2012-12-31 23:37:39 +01:00
|
|
|
Song current_song_;
|
|
|
|
QString current_uri_;
|
|
|
|
QImage current_image_;
|
|
|
|
Engine::State last_state_;
|
|
|
|
QTimer* keep_alive_timer_;
|
2013-01-22 22:02:16 +01:00
|
|
|
QTimer* track_position_timer_;
|
2012-12-31 23:37:39 +01:00
|
|
|
int keep_alive_timeout_;
|
2013-12-08 20:19:25 +01:00
|
|
|
int last_track_position_;
|
2013-12-22 15:16:42 +01:00
|
|
|
bool aww_;
|
2012-12-31 23:37:39 +01:00
|
|
|
|
2014-02-06 14:48:00 +01:00
|
|
|
std::unique_ptr<UltimateLyricsReader> ultimate_reader_;
|
2013-07-10 13:24:23 +02:00
|
|
|
ProviderList provider_list_;
|
|
|
|
QMap<int, SongInfoFetcher::Result> results_;
|
|
|
|
SongInfoFetcher* fetcher_;
|
|
|
|
|
2014-10-21 17:59:02 +02:00
|
|
|
QMap<int, GlobalSearchRequest> global_search_result_map_;
|
|
|
|
|
2013-01-03 21:40:47 +01:00
|
|
|
void SendDataToClients(pb::remote::Message* msg);
|
2013-01-15 13:05:43 +01:00
|
|
|
void SetEngineState(pb::remote::ResponseClementineInfo* msg);
|
2013-07-10 13:51:18 +02:00
|
|
|
void CheckEnabledProviders();
|
|
|
|
SongInfoProvider* ProviderByName(const QString& name) const;
|
2012-12-31 23:37:39 +01:00
|
|
|
};
|
|
|
|
|
2014-02-07 16:34:20 +01:00
|
|
|
#endif // OUTGOINGDATACREATOR_H
|