mirror of
https://github.com/HenkKalkwater/harbour-sailfin.git
synced 2025-09-04 01:42:44 +00:00
Big C++ refractor
- Removed "jellyfin" prefix from files, as they are already in a directory named Jellyfin - Split the former "jellyfinitem.{h,cpp}" into multiple files in the DTO directory, one for each class. The jellyfinitem files started to become enormous. - Use forward declarations in headers instead of including files wherever possible. - Updated copyright headers
This commit is contained in:
parent
b345a1c650
commit
895731ae38
34 changed files with 914 additions and 463 deletions
97
core/include/JellyfinQt/websocket.h
Normal file
97
core/include/JellyfinQt/websocket.h
Normal file
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
Sailfin: a Jellyfin client written using Qt
|
||||
Copyright (C) 2021 Chris Josten
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#ifndef JELLYFIN_WEBSOCKET_H
|
||||
#define JELLYFIN_WEBSOCKET_H
|
||||
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonArray>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonValue>
|
||||
#include <QDebug>
|
||||
#include <QObject>
|
||||
#include <QtGlobal>
|
||||
#include <QTimer>
|
||||
#include <QUuid>
|
||||
|
||||
#include <QtWebSockets/QWebSocket>
|
||||
|
||||
#include "apiclient.h"
|
||||
|
||||
namespace Jellyfin {
|
||||
class ApiClient;
|
||||
|
||||
namespace DTO {
|
||||
class UserData;
|
||||
}
|
||||
/**
|
||||
* @brief Keeps a connection with the Jellyfin server to receive real time updates.
|
||||
*
|
||||
* This class will parse these messages and send them to ApiClient, which will emit signals for
|
||||
* the interested classes.
|
||||
*/
|
||||
class WebSocket : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
/**
|
||||
* @brief WebSocket creates a webSocket for a Jellyfin server to handle real time updates.
|
||||
* @param client The client to create the socket for.
|
||||
*
|
||||
* The socket will automatically set the ApiClient to its parent.
|
||||
*/
|
||||
explicit WebSocket(ApiClient *client);
|
||||
enum MessageType {
|
||||
ForceKeepAlive,
|
||||
KeepAlive,
|
||||
UserDataChanged
|
||||
};
|
||||
Q_PROPERTY(QAbstractSocket::SocketState state READ state NOTIFY stateChanged)
|
||||
Q_ENUM(MessageType)
|
||||
|
||||
QAbstractSocket::SocketState state() const {
|
||||
return m_webSocket.state();
|
||||
}
|
||||
public slots:
|
||||
void open();
|
||||
private slots:
|
||||
void textMessageReceived(const QString &message);
|
||||
void onConnected();
|
||||
void onDisconnected();
|
||||
|
||||
void sendKeepAlive();
|
||||
void onWebsocketStateChanged(QAbstractSocket::SocketState newState) { emit stateChanged(newState); }
|
||||
signals:
|
||||
void commandReceived(QString arts, QVariantMap args);
|
||||
void stateChanged(QAbstractSocket::SocketState newState);
|
||||
|
||||
protected:
|
||||
ApiClient *m_apiClient;
|
||||
QWebSocket m_webSocket;
|
||||
|
||||
QTimer m_keepAliveTimer;
|
||||
QTimer m_retryTimer;
|
||||
int m_reconnectAttempt = 0;
|
||||
|
||||
|
||||
void setupKeepAlive(int data);
|
||||
void sendMessage(MessageType type, QJsonValue data = QJsonValue());
|
||||
QString generateMessageId();
|
||||
};
|
||||
}
|
||||
|
||||
#endif // JELLYFIN_WEBSOCKET_H
|
Loading…
Add table
Add a link
Reference in a new issue