File indexing completed on 2024-05-12 05:04:09

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 "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     /// \param visibility The new default visibility
0029     /// \see defaultVisibility
0030     void setDefaultVisibility(Post::Visibility visibility);
0031 
0032     /// Whether newly uploaded media attachments are sensitive by default
0033     /// \see setDefaultSensitive
0034     bool defaultSensitive() const;
0035 
0036     /// Set whether newly uploaded media attachments are sensitive by default
0037     /// \param sensitive Whether or not media attachments are sensitive by default
0038     /// \see setDefaultSensitive
0039     void setDefaultSensitive(bool sensitive);
0040 
0041     /// The default language code (ISO 6391) when composing new statuses
0042     /// \see setDefaultLanguage
0043     QString defaultLanguage() const;
0044 
0045     /// Set the default language code (ISO 6391) when composing new statuses
0046     /// \param language The new default language code
0047     /// \see defaultLanguage
0048     void setDefaultLanguage(QString language);
0049 
0050     /// Returns true if media should not be cropped to 16:9
0051     /// Currently read-only, see https://github.com/mastodon/mastodon/issues/7021
0052     QString extendMedia() const;
0053 
0054     /// Returns true if spoilers on statuses should be ignored, and always shown
0055     /// Currently read-only, see https://github.com/mastodon/mastodon/issues/7021
0056     bool extendSpoiler() const;
0057 
0058 Q_SIGNALS:
0059     /// Emitted when the default status visibility preference has been changed
0060     /// \see setDefaultVisibility
0061     void defaultVisibilityChanged();
0062 
0063     /// Emitted when the default media attachment sensitivity preference has been changed
0064     /// \see setDefaultSensitive
0065     void defaultSensitiveChanged();
0066 
0067     /// Emitted when the default status language preference has been changed
0068     /// \see setDefaultLanguage
0069     void defaultLanguageChanged();
0070 
0071     /// Emitted when the extend media preference has been changed
0072     void extendMediaChanged();
0073 
0074     /// Emitted when the extend spoiler preference has been changed
0075     void extendSpoilerChanged();
0076 
0077 private:
0078     void setPreferencesField(QString name, QString value);
0079 
0080     AbstractAccount *m_account;
0081 
0082     Post::Visibility m_defaultVisibility;
0083     bool m_defaultSensitive;
0084     QString m_defaultLanguage;
0085     QString m_extendMedia;
0086     bool m_extendSpoiler;
0087 };