mirror of
https://github.com/HenkKalkwater/harbour-sailfin.git
synced 2025-09-05 18:22:46 +00:00
Moved playback logic to C++-side (and refractoring)
This commit is contained in:
parent
895731ae38
commit
f7bca333c8
35 changed files with 1063 additions and 449 deletions
|
@ -46,6 +46,7 @@ class JsonSerializable : public QObject {
|
|||
Q_OBJECT
|
||||
public:
|
||||
Q_INVOKABLE JsonSerializable(QObject *parent);
|
||||
virtual ~JsonSerializable();
|
||||
|
||||
/**
|
||||
* @brief Sets this objects properties based on obj.
|
||||
|
@ -56,7 +57,7 @@ public:
|
|||
private:
|
||||
QVariant jsonToVariant(QMetaProperty prop, const QJsonValue &val, const QJsonObject &root);
|
||||
QJsonValue variantToJson(const QVariant var) const;
|
||||
QVariant deserializeQobject(const QJsonObject &obj, const QMetaProperty &prop);
|
||||
QVariant deserializeQObject(const QJsonObject &obj, const QMetaProperty &prop);
|
||||
|
||||
/**
|
||||
* @brief Sets the first letter of the string to lower case (to make it camelCase).
|
||||
|
@ -72,6 +73,8 @@ private:
|
|||
static QString toPascalCase(QString st);
|
||||
|
||||
static const QRegularExpression m_listExpression;
|
||||
static const QRegularExpression m_hashExpression;
|
||||
static int findTypeIdForProperty(QString type);
|
||||
/**
|
||||
* @brief Qt is doing weird. I'll keep track of the metatypes myself.
|
||||
*/
|
||||
|
@ -107,17 +110,20 @@ public:
|
|||
Q_PROPERTY(Status status READ status NOTIFY statusChanged STORED false)
|
||||
Q_PROPERTY(QNetworkReply::NetworkError error READ error NOTIFY errorChanged STORED false)
|
||||
Q_PROPERTY(QString errorString READ errorString NOTIFY errorStringChanged STORED false)
|
||||
Q_PROPERTY(QStringList extraFields MEMBER m_extraFields WRITE setExtraFields NOTIFY extraFieldsChanged STORED false)
|
||||
|
||||
Status status() const { return m_status; }
|
||||
QNetworkReply::NetworkError error() const { return m_error; }
|
||||
QString errorString() const { return m_errorString; }
|
||||
|
||||
void setApiClient(ApiClient *newApiClient);
|
||||
void setExtraFields(const QStringList &extraFields);
|
||||
signals:
|
||||
void statusChanged(Status newStatus);
|
||||
void apiClientChanged(ApiClient *newApiClient);
|
||||
void errorChanged(QNetworkReply::NetworkError newError);
|
||||
void errorStringChanged(QString newErrorString);
|
||||
void extraFieldsChanged(const QStringList &newExtraFields);
|
||||
/**
|
||||
* @brief Convenience signal for status == RemoteData.Ready.
|
||||
*/
|
||||
|
@ -159,6 +165,7 @@ private:
|
|||
Status m_status = Uninitialised;
|
||||
QNetworkReply::NetworkError m_error = QNetworkReply::NoError;
|
||||
QString m_errorString;
|
||||
QStringList m_extraFields;
|
||||
};
|
||||
|
||||
} // NS DTO
|
||||
|
|
|
@ -93,11 +93,13 @@ public:
|
|||
Q_PROPERTY(int productionYear READ productionYear WRITE setProductionYear NOTIFY productionYearChanged)
|
||||
Q_PROPERTY(int indexNumber READ indexNumber WRITE setIndexNumber NOTIFY indexNumberChanged)
|
||||
Q_PROPERTY(int indexNumberEnd READ indexNumberEnd WRITE setIndexNumberEnd NOTIFY indexNumberEndChanged)
|
||||
Q_PROPERTY(int parentIndexNumber READ parentIndexNumber WRITE setParentIndexNumber NOTIFY parentIndexNumberChanged)
|
||||
Q_PROPERTY(bool isFolder READ isFolder WRITE setIsFolder NOTIFY isFolderChanged)
|
||||
Q_PROPERTY(QString parentID MEMBER m_parentId READ parentId NOTIFY parentIdChanged)
|
||||
Q_PROPERTY(QString type MEMBER m_type NOTIFY typeChanged)
|
||||
Q_PROPERTY(QString parentBackdropItemId MEMBER m_parentBackdropItemId NOTIFY parentBackdropItemIdChanged)
|
||||
Q_PROPERTY(QStringList parentBackdropImageTags MEMBER m_parentBackdropImageTags NOTIFY parentBackdropImageTagsChanged)
|
||||
Q_PROPERTY(UserData *userData MEMBER m_userData NOTIFY userDataChanged)
|
||||
Q_PROPERTY(UserData *userData READ userData WRITE setUserData NOTIFY userDataChanged)
|
||||
Q_PROPERTY(int recursiveItemCount READ recursiveItemCount WRITE setRecursiveItemCount NOTIFY recursiveItemCountChanged)
|
||||
Q_PROPERTY(int childCount READ childCount WRITE setChildCount NOTIFY childCountChanged)
|
||||
Q_PROPERTY(QString albumArtist MEMBER m_albumArtist NOTIFY albumArtistChanged)
|
||||
|
@ -147,8 +149,19 @@ public:
|
|||
void setIndexNumber(int newIndexNumber) { m_indexNumber = std::optional<int>(newIndexNumber); emit indexNumberChanged(newIndexNumber); }
|
||||
int indexNumberEnd() const { return m_indexNumberEnd.value_or(-1); }
|
||||
void setIndexNumberEnd(int newIndexNumberEnd) { m_indexNumberEnd = std::optional<int>(newIndexNumberEnd); emit indexNumberEndChanged(newIndexNumberEnd); }
|
||||
int parentIndexNumber() const { return m_parentIndexNumber.value_or(-1); }
|
||||
void setParentIndexNumber(int newParentIndexNumber) { m_parentIndexNumber= std::optional<int>(newParentIndexNumber); emit parentIndexNumberChanged(newParentIndexNumber); }
|
||||
bool isFolder() const { return m_isFolder.value_or(false); }
|
||||
void setIsFolder(bool newIsFolder) { m_isFolder = newIsFolder; emit isFolderChanged(newIsFolder); }
|
||||
QString parentId() const { return m_parentId; }
|
||||
UserData *userData() const { return m_userData; }
|
||||
void setUserData(UserData *newUserData) {
|
||||
if (m_userData != nullptr) {
|
||||
m_userData->deleteLater();
|
||||
}
|
||||
m_userData = newUserData;
|
||||
emit userDataChanged(newUserData);
|
||||
}
|
||||
int recursiveItemCount() const { return m_recursiveItemCount.value_or(-1); }
|
||||
void setRecursiveItemCount(int newRecursiveItemCount) { m_recursiveItemCount = newRecursiveItemCount; emit recursiveItemCountChanged(newRecursiveItemCount); }
|
||||
int childCount() const { return m_childCount.value_or(-1); }
|
||||
|
@ -193,6 +206,7 @@ signals:
|
|||
void indexNumberChanged(int newIndexNumber);
|
||||
void indexNumberEndChanged(int newIndexNumberEnd);
|
||||
void isFolderChanged(bool newIsFolder);
|
||||
void parentIdChanged(const QString &newParentId);
|
||||
void typeChanged(const QString &newType);
|
||||
void parentBackdropItemIdChanged();
|
||||
void parentBackdropImageTagsChanged();
|
||||
|
@ -213,7 +227,7 @@ signals:
|
|||
void heightChanged(int newHeight);
|
||||
|
||||
public slots:
|
||||
void onUserDataChanged(const QString &itemId, QSharedPointer<UserData> userData);
|
||||
void onUserDataChanged(const QString &itemId, UserData *userData);
|
||||
protected:
|
||||
// Overrides
|
||||
QString getDataUrl() const override;
|
||||
|
@ -251,7 +265,9 @@ protected:
|
|||
std::optional<int> m_productionYear = std::nullopt;
|
||||
std::optional<int> m_indexNumber = std::nullopt;
|
||||
std::optional<int> m_indexNumberEnd = std::nullopt;
|
||||
std::optional<int> m_parentIndexNumber = std::nullopt;
|
||||
std::optional<bool> m_isFolder = std::nullopt;
|
||||
QString m_parentId;
|
||||
QString m_type;
|
||||
QString m_parentBackdropItemId;
|
||||
QStringList m_parentBackdropImageTags;
|
||||
|
|
|
@ -35,7 +35,6 @@ public:
|
|||
Q_INVOKABLE explicit MediaStream(QObject *parent = nullptr);
|
||||
MediaStream(const MediaStream &other);
|
||||
bool operator==(const MediaStream &other);
|
||||
virtual ~MediaStream() { qDebug() << "MediaStream destroyed"; }
|
||||
|
||||
enum MediaStreamType {
|
||||
Undefined,
|
||||
|
|
|
@ -33,26 +33,38 @@ class User : public RemoteData {
|
|||
public:
|
||||
Q_INVOKABLE User(QObject *parent = nullptr);
|
||||
|
||||
Q_PROPERTY(QString userId MEMBER m_userId WRITE setUserId NOTIFY userIdChanged)
|
||||
Q_PROPERTY(QString jellyfinId MEMBER m_jellyfinId WRITE setJellyfinId NOTIFY jellyfinIdChanged)
|
||||
Q_PROPERTY(QString name MEMBER m_name NOTIFY nameChanged)
|
||||
Q_PROPERTY(QString primaryImageTag MEMBER m_primaryImageTag NOTIFY primaryImageTagChanged)
|
||||
Q_PROPERTY(bool hasPassword MEMBER m_hasPassword NOTIFY hasPasswordChanged)
|
||||
Q_PROPERTY(bool hasConfiguredPassword MEMBER m_hasConfiguredPassword NOTIFY hasConfiguredPasswordChanged)
|
||||
Q_PROPERTY(bool hasConfiguredEasyPassword MEMBER m_hasConfiguredEasyPassword NOTIFY hasConfiguredEasyPasswordChanged)
|
||||
|
||||
void setUserId(const QString &newUserId) {
|
||||
this->m_userId = newUserId;
|
||||
emit userIdChanged(newUserId);
|
||||
reload();
|
||||
void setJellyfinId(const QString &newJellyfinId) {
|
||||
if (m_jellyfinId != newJellyfinId) {
|
||||
this->m_jellyfinId = newJellyfinId;
|
||||
emit jellyfinIdChanged(newJellyfinId);
|
||||
reload();
|
||||
}
|
||||
}
|
||||
signals:
|
||||
void userIdChanged(const QString &newUserId);
|
||||
void nameChanged(const QString &newName);
|
||||
void jellyfinIdChanged(const QString &newJellyfinId);
|
||||
void primaryImageTagChanged(const QString &newPrimaryImageTag);
|
||||
void hasPasswordChanged(bool newHasPasswordChanged);
|
||||
void hasConfiguredPasswordChanged(bool newHasConfiguredPasswordChanged);
|
||||
void hasConfiguredEasyPasswordChanged(bool newHasConfiguredEasyPasswordChanged);
|
||||
|
||||
protected:
|
||||
QString getDataUrl() const override;
|
||||
bool canReload() const override;
|
||||
private:
|
||||
QString m_userId;
|
||||
QString m_name;
|
||||
QString m_jellyfinId;
|
||||
QString m_primaryImageTag;
|
||||
bool m_hasPassword;
|
||||
bool m_hasConfiguredPassword;
|
||||
bool m_hasConfiguredEasyPassword;
|
||||
};
|
||||
|
||||
} // NS DTO
|
||||
|
|
|
@ -67,7 +67,7 @@ signals:
|
|||
void playedChanged(bool newPlayed);
|
||||
public slots:
|
||||
void updateOnServer();
|
||||
void onUpdated(QSharedPointer<UserData> other);
|
||||
void onUpdated(UserData *other);
|
||||
private:
|
||||
std::optional<double> m_playedPercentage = std::nullopt;
|
||||
qint64 m_playbackPositionTicks = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue