Warning, file /graphics/glaxnimate/src/gui/settings/api_credentials.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best> 0003 * 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #include "api_credentials.hpp" 0008 0009 #include <QWidget> 0010 #include <QGroupBox> 0011 #include <QVBoxLayout> 0012 #include <QLabel> 0013 #include <QLineEdit> 0014 #include <QPushButton> 0015 #include <QFormLayout> 0016 #include <QDesktopServices> 0017 0018 #include "api_keys.hpp" 0019 0020 static QString slugify(const QString& str) 0021 { 0022 return str.toLower().replace(" ", "_"); 0023 } 0024 0025 glaxnimate::gui::settings::ApiCredentials::ApiCredentials() 0026 : apis_{ 0027 {"Google Fonts", { 0028 QUrl("https://console.cloud.google.com/apis/credentials"), 0029 { 0030 {"Token", "", API_KEY_GOOGLE_FONTS}, 0031 {"URL", "https://www.googleapis.com/webfonts/v1/webfonts"}, 0032 } 0033 }} 0034 } 0035 {} 0036 0037 void glaxnimate::gui::settings::ApiCredentials::load ( QSettings & settings ) 0038 { 0039 for ( auto& p : apis_ ) 0040 { 0041 QString base = slugify(p.first) + "_"; 0042 for ( auto& cred : p.second.credentials ) 0043 { 0044 QString key = base + slugify(cred.name); 0045 cred.value = settings.value(key, cred.value).toString(); 0046 } 0047 } 0048 } 0049 0050 void glaxnimate::gui::settings::ApiCredentials::save ( QSettings & settings ) 0051 { 0052 for ( const auto& p : apis_ ) 0053 { 0054 QString base = slugify(p.first) + "_"; 0055 for ( const auto& cred : p.second.credentials ) 0056 { 0057 QString key = base + slugify(cred.name); 0058 if ( !cred.value.isEmpty() ) 0059 settings.setValue(key, cred.value); 0060 } 0061 } 0062 } 0063 0064 QWidget * glaxnimate::gui::settings::ApiCredentials::make_widget ( QWidget * parent ) 0065 { 0066 auto widget = new QWidget(parent); 0067 auto lay = new QVBoxLayout(); 0068 widget->setLayout(lay); 0069 for ( auto & api : apis_ ) 0070 { 0071 auto group = new QGroupBox; 0072 group->setTitle(api.first); 0073 auto group_lay = new QFormLayout(); 0074 group->setLayout(group_lay); 0075 lay->addWidget(group); 0076 0077 for ( auto& cred : api.second.credentials ) 0078 { 0079 auto input = new QLineEdit(cred.value); 0080 QObject::connect(input, &QLineEdit::textChanged, input, [&cred](const QString& text){ cred.value = text; }); 0081 group_lay->addRow(cred.name, input); 0082 } 0083 0084 if ( api.second.info_url.isValid() ) 0085 { 0086 auto link_button = new QPushButton(QIcon::fromTheme("internet-web-browser"), i18n("Information")); 0087 QObject::connect(link_button, &QPushButton::clicked, link_button, [&api]{ 0088 QDesktopServices::openUrl(api.second.info_url); 0089 }); 0090 group_lay->addRow(link_button); 0091 } 0092 } 0093 0094 lay->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding)); 0095 0096 return widget; 0097 } 0098 0099 0100 0101 QVariant glaxnimate::gui::settings::ApiCredentials::get_variant(const QString& setting) const 0102 { 0103 auto split = setting.split("/"); 0104 return apis_.at(split[0]).credential(split[1]); 0105 } 0106 0107 QString glaxnimate::gui::settings::ApiCredentials::Api::credential(const QString& name) const 0108 { 0109 for ( const auto& cred : credentials ) 0110 { 0111 if ( cred.name == name ) 0112 { 0113 if ( cred.value.isEmpty() && !cred.hidden_default.isEmpty() ) 0114 return cred.hidden_default; 0115 return cred.value; 0116 } 0117 } 0118 return {}; 0119 }