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 #include "preferences.h"
0005 
0006 #include "utils.h"
0007 
0008 Preferences::Preferences(AbstractAccount *account)
0009     : QObject(account)
0010     , m_account(account)
0011 {
0012     connect(account, &AbstractAccount::authenticated, this, [this, account]() {
0013         account->get(account->apiUrl(QStringLiteral("/api/v1/preferences")), true, this, [this](QNetworkReply *reply) {
0014             const auto obj = QJsonDocument::fromJson(reply->readAll()).object();
0015 
0016             if (auto defaultLanguage = obj[QStringLiteral("posting:default:language")]; !defaultLanguage.isNull()) {
0017                 m_defaultLanguage = defaultLanguage.toString();
0018             }
0019 
0020             m_defaultSensitive = obj[QStringLiteral("posting:default:sensitive")].toBool();
0021             m_defaultVisibility = stringToVisibility(obj[QStringLiteral("posting:default:visibility")].toString());
0022             m_extendSpoiler = obj[QStringLiteral("reading:expand:spoilers")].toBool();
0023             m_extendMedia = obj[QStringLiteral("reading:expand:media")].toString();
0024             Q_EMIT defaultVisibilityChanged();
0025             Q_EMIT defaultSensitiveChanged();
0026             Q_EMIT defaultLanguageChanged();
0027             Q_EMIT extendMediaChanged();
0028             Q_EMIT extendSpoilerChanged();
0029         });
0030     });
0031 }
0032 
0033 Post::Visibility Preferences::defaultVisibility() const
0034 {
0035     return m_defaultVisibility;
0036 }
0037 
0038 void Preferences::setDefaultVisibility(Post::Visibility visibility)
0039 {
0040     if (visibility == m_defaultVisibility) {
0041         return;
0042     }
0043 
0044     m_defaultVisibility = visibility;
0045     Q_EMIT defaultVisibilityChanged();
0046 
0047     setPreferencesField(QStringLiteral("source[privacy]"), visibilityToString(visibility));
0048 }
0049 
0050 bool Preferences::defaultSensitive() const
0051 {
0052     return m_defaultSensitive;
0053 }
0054 
0055 void Preferences::setDefaultSensitive(bool sensitive)
0056 {
0057     if (sensitive == m_defaultSensitive) {
0058         return;
0059     }
0060 
0061     m_defaultSensitive = sensitive;
0062     Q_EMIT defaultSensitiveChanged();
0063 
0064     setPreferencesField(QStringLiteral("source[sensitive]"), sensitive ? QStringLiteral("true") : QStringLiteral("false"));
0065 }
0066 
0067 QString Preferences::defaultLanguage() const
0068 {
0069     if (!m_defaultLanguage.isEmpty()) {
0070         return m_defaultLanguage;
0071     } else {
0072         return QStringLiteral("en");
0073     }
0074 }
0075 
0076 void Preferences::setDefaultLanguage(QString language)
0077 {
0078     if (language == m_defaultLanguage) {
0079         return;
0080     }
0081 
0082     m_defaultLanguage = language;
0083     Q_EMIT defaultLanguageChanged();
0084 
0085     setPreferencesField(QStringLiteral("source[language]"), language);
0086 }
0087 
0088 QString Preferences::extendMedia() const
0089 {
0090     return m_extendMedia;
0091 }
0092 
0093 bool Preferences::extendSpoiler() const
0094 {
0095     return m_extendSpoiler;
0096 }
0097 
0098 void Preferences::setPreferencesField(QString name, QString value)
0099 {
0100     auto multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
0101 
0102     QHttpPart preferencesPart;
0103     preferencesPart.setHeader(QNetworkRequest::ContentDispositionHeader, QStringLiteral("form-data; name=\"%1\"").arg(name));
0104     preferencesPart.setBody(value.toUtf8());
0105     multiPart->append(preferencesPart);
0106 
0107     m_account->patch(m_account->apiUrl(QStringLiteral("/api/v1/accounts/update_credentials")), multiPart, true, this, [=](QNetworkReply *) {});
0108 }
0109 
0110 #include "moc_preferences.cpp"