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"