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 }