File indexing completed on 2024-05-12 16:28:05

0001 // SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003 
0004 #pragma once
0005 
0006 #include "abstractaccount.h"
0007 #include "timeline/post.h"
0008 
0009 /// Account-specific preferences which are stored server-side
0010 class Preferences : public QObject
0011 {
0012     Q_OBJECT
0013 
0014     Q_PROPERTY(Post::Visibility defaultVisibility READ defaultVisibility WRITE setDefaultVisibility NOTIFY defaultVisibilityChanged)
0015     Q_PROPERTY(bool defaultSensitive READ defaultSensitive WRITE setDefaultSensitive NOTIFY defaultSensitiveChanged)
0016     Q_PROPERTY(QString defaultLanguage READ defaultLanguage WRITE setDefaultLanguage NOTIFY defaultLanguageChanged)
0017     Q_PROPERTY(QString extendMedia READ extendMedia NOTIFY extendMediaChanged)
0018     Q_PROPERTY(bool extendSpoiler READ extendSpoiler NOTIFY extendSpoilerChanged)
0019 
0020 public:
0021     explicit Preferences(AbstractAccount *account);
0022 
0023     /// The default visibility when composing new statuses
0024     /// \see setDefaultVisibility
0025     Post::Visibility defaultVisibility() const;
0026 
0027     /// Sets the default visibility when composing new statuses
0028     /// \see defaultVisibility
0029     void setDefaultVisibility(Post::Visibility visibility);
0030 
0031     /// Whether newly uploaded media attachments are sensitive by default
0032     /// \see setDefaultSensitive
0033     bool defaultSensitive() const;
0034 
0035     // Set whether newly uploaded media attachments are sensitive by default
0036     /// \see setDefaultSensitive
0037     void setDefaultSensitive(bool sensitive);
0038 
0039     /// The default language code (ISO 6391) when composing new statuses
0040     /// \see setDefaultLanguage
0041     QString defaultLanguage() const;
0042 
0043     /// Set the default language code (ISO 6391) when composing new statuses
0044     /// \see defaultLanguage
0045     void setDefaultLanguage(QString language);
0046 
0047     /// Returns true if media should not be cropped to 16:9
0048     /// Currently read-only, see https://github.com/mastodon/mastodon/issues/7021
0049     QString extendMedia() const;
0050 
0051     /// Returns true if spoilers on statuses should be ignored, and always shown
0052     /// Currently read-only, see https://github.com/mastodon/mastodon/issues/7021
0053     bool extendSpoiler() const;
0054 
0055 Q_SIGNALS:
0056     /// Emitted when the default status visibility preference has been changed
0057     /// \see setDefaultVisibility
0058     void defaultVisibilityChanged();
0059 
0060     /// Emitted when the default media attachment sensitivity preference has been changed
0061     /// \see setDefaultSensitive
0062     void defaultSensitiveChanged();
0063 
0064     /// Emitted when the default status language preference has been changed
0065     /// \see setDefaultLanguage
0066     void defaultLanguageChanged();
0067 
0068     /// Emitted when the extend media preference has been changed
0069     void extendMediaChanged();
0070 
0071     /// Emitted when the extend spoiler preference has been changed
0072     void extendSpoilerChanged();
0073 
0074 private:
0075     void setPreferencesField(QString name, QString value);
0076 
0077     AbstractAccount *m_account;
0078 
0079     Post::Visibility m_defaultVisibility;
0080     bool m_defaultSensitive;
0081     QString m_defaultLanguage;
0082     QString m_extendMedia;
0083     bool m_extendSpoiler;
0084 };