File indexing completed on 2024-09-29 10:14:50

0001 // SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003 
0004 #pragma once
0005 
0006 #include "timeline/poll.h"
0007 #include "polleditorbackend.h"
0008 #include "timeline/post.h"
0009 #include <QObject>
0010 #include <memory>
0011 
0012 class AttachmentEditorModel;
0013 
0014 class PostEditorBackend : public QObject
0015 {
0016     Q_OBJECT
0017 
0018     Q_PROPERTY(QString status READ status WRITE setStatus NOTIFY statusChanged)
0019     Q_PROPERTY(QString inReplyTo READ inReplyTo WRITE setInReplyTo NOTIFY inReplyToChanged)
0020     Q_PROPERTY(QString spoilerText READ spoilerText WRITE setSpoilerText NOTIFY spoilerTextChanged)
0021     Q_PROPERTY(Post::Visibility visibility READ visibility WRITE setVisibility NOTIFY visibilityChanged)
0022     Q_PROPERTY(QString language READ language WRITE setLanguage NOTIFY languageChanged)
0023     Q_PROPERTY(QDateTime scheduledAt READ scheduledAt WRITE setScheduledAt NOTIFY scheduledAtChanged)
0024     Q_PROPERTY(QStringList mentions READ mentions WRITE setMentions NOTIFY mentionsChanged)
0025     Q_PROPERTY(AttachmentEditorModel *attachmentEditorModel READ attachmentEditorModel CONSTANT)
0026     Q_PROPERTY(bool sensitive READ sensitive WRITE setSensitive NOTIFY sensitiveChanged)
0027     Q_PROPERTY(PollEditorBackend *poll MEMBER m_poll CONSTANT)
0028     Q_PROPERTY(bool pollEnabled MEMBER m_pollEnabled NOTIFY pollEnabledChanged)
0029     Q_PROPERTY(int charactersLeft READ charactersLeft NOTIFY statusChanged)
0030 
0031     Q_PROPERTY(AbstractAccount *account READ account WRITE setAccount NOTIFY accountChanged)
0032 
0033 public:
0034     explicit PostEditorBackend(QObject *parent = nullptr);
0035     ~PostEditorBackend() override;
0036 
0037     QString id() const;
0038     void setId(const QString &id);
0039 
0040     QString status() const;
0041     void setStatus(const QString &status);
0042 
0043     QString spoilerText() const;
0044     void setSpoilerText(const QString &spoilerText);
0045 
0046     QString inReplyTo() const;
0047     void setInReplyTo(const QString &inReplyTo);
0048 
0049     Post::Visibility visibility() const;
0050     void setVisibility(Post::Visibility visibility);
0051 
0052     QString language() const;
0053     void setLanguage(const QString &language);
0054 
0055     QDateTime scheduledAt() const;
0056     void setScheduledAt(const QDateTime &scheduledAt);
0057 
0058     QStringList mentions() const;
0059     void setMentions(const QStringList &mentions);
0060 
0061     AttachmentEditorModel *attachmentEditorModel() const;
0062 
0063     bool sensitive() const;
0064     void setSensitive(bool sensitive);
0065 
0066     AbstractAccount *account() const;
0067     void setAccount(AbstractAccount *account);
0068 
0069     int charactersLeft() const;
0070 
0071 public Q_SLOTS:
0072     void save();
0073     void edit();
0074 
0075 Q_SIGNALS:
0076 
0077     void statusChanged();
0078 
0079     void spoilerTextChanged();
0080 
0081     void inReplyToChanged();
0082 
0083     void visibilityChanged();
0084 
0085     void languageChanged();
0086 
0087     void scheduledAtChanged();
0088 
0089     void mentionsChanged();
0090 
0091     void accountChanged();
0092 
0093     void sensitiveChanged();
0094     void editComplete(QJsonObject object);
0095 
0096     void posted(QString error);
0097 
0098     void pollEnabledChanged();
0099 
0100 private:
0101     QJsonDocument toJsonDocument() const;
0102 
0103     QString m_id;
0104     QString m_status;
0105     QString m_idenpotencyKey;
0106     QString m_spoilerText;
0107     QString m_inReplyTo;
0108     QString m_language;
0109     QDateTime m_scheduledAt;
0110     QStringList m_mentions;
0111     bool m_sensitive = false;
0112     PollEditorBackend *m_poll = nullptr;
0113     bool m_pollEnabled = false;
0114     Post::Visibility m_visibility = Post::Visibility::Public;
0115     AbstractAccount *m_account = nullptr;
0116     AttachmentEditorModel *m_attachmentEditorModel = nullptr;
0117 };