10
+ − 1 #include "core/anime.h"
+ − 2 #include "core/session.h"
+ − 3 #include "gui/dialog/settings.h"
+ − 4 #include "services/anilist.h"
+ − 5 #include <QComboBox>
+ − 6 #include <QGroupBox>
+ − 7 #include <QPushButton>
+ − 8 #include <QSizePolicy>
+ − 9
+ − 10 QWidget* SettingsPageServices::CreateMainPage() {
+ − 11 QWidget* result = new QWidget(this);
+ − 12 result->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
+ − 13
+ − 14 QGroupBox* sync_group_box = new QGroupBox(tr("Synchronization"), result);
+ − 15 sync_group_box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
+ − 16
+ − 17 QLabel* sync_combo_box_label = new QLabel(tr("Active service and metadata provider:"), sync_group_box);
+ − 18
+ − 19 QComboBox* sync_combo_box = new QComboBox(sync_group_box);
+ − 20 sync_combo_box->addItem(tr("AniList"));
+ − 21 connect(sync_combo_box, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
15
+ − 22 [this](int index) { service = static_cast<Anime::Services>(index + 1); });
10
+ − 23 sync_combo_box->setCurrentIndex(static_cast<int>(service) - 1);
+ − 24
+ − 25 QLabel* sync_note_label =
15
+ − 26 new QLabel(tr("Note: Minori is unable to synchronize multiple services at the same time."), sync_group_box);
10
+ − 27
+ − 28 QVBoxLayout* sync_layout = new QVBoxLayout;
+ − 29 sync_layout->addWidget(sync_combo_box_label);
+ − 30 sync_layout->addWidget(sync_combo_box);
+ − 31 sync_layout->addWidget(sync_note_label);
+ − 32 sync_group_box->setLayout(sync_layout);
+ − 33
+ − 34 QVBoxLayout* full_layout = new QVBoxLayout;
+ − 35 full_layout->addWidget(sync_group_box);
+ − 36 full_layout->setSpacing(10);
+ − 37 full_layout->addStretch();
+ − 38 result->setLayout(full_layout);
+ − 39 return result;
+ − 40 }
+ − 41
+ − 42 QWidget* SettingsPageServices::CreateAniListPage() {
+ − 43 QWidget* result = new QWidget(this);
+ − 44 result->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
+ − 45
+ − 46 QGroupBox* group_box = new QGroupBox(tr("Account"), result);
+ − 47 group_box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
+ − 48
+ − 49 QLabel* username_entry_label = new QLabel(tr("Username: (not your email address)"), group_box);
+ − 50
+ − 51 QWidget* auth_widget = new QWidget(group_box);
+ − 52 QLineEdit* username_entry = new QLineEdit(username, auth_widget);
+ − 53 connect(username_entry, &QLineEdit::editingFinished, this,
15
+ − 54 [this, username_entry] { username = username_entry->text(); });
10
+ − 55
+ − 56 QPushButton* auth_button = new QPushButton(auth_widget);
+ − 57 connect(auth_button, &QPushButton::clicked, this, [] { Services::AniList::AuthorizeUser(); });
+ − 58 auth_button->setText(session.config.anilist.auth_token.empty() ? tr("Authorize...") : tr("Re-authorize..."));
+ − 59
+ − 60 QHBoxLayout* auth_layout = new QHBoxLayout;
+ − 61 auth_layout->addWidget(username_entry);
+ − 62 auth_layout->addWidget(auth_button);
+ − 63 auth_widget->setLayout(auth_layout);
+ − 64
+ − 65 QLabel* note_label = new QLabel(tr("<a href=\"http://anilist.co/\">Create a new AniList account</a>"), group_box);
+ − 66 note_label->setTextFormat(Qt::RichText);
+ − 67 note_label->setTextInteractionFlags(Qt::TextBrowserInteraction);
+ − 68 note_label->setOpenExternalLinks(true);
+ − 69
+ − 70 QVBoxLayout* layout = new QVBoxLayout;
+ − 71 layout->addWidget(username_entry_label);
+ − 72 layout->addWidget(auth_widget);
+ − 73 layout->addWidget(note_label);
+ − 74 group_box->setLayout(layout);
+ − 75
+ − 76 QVBoxLayout* full_layout = new QVBoxLayout;
+ − 77 full_layout->addWidget(group_box);
+ − 78 full_layout->setSpacing(10);
+ − 79 full_layout->addStretch();
+ − 80 result->setLayout(full_layout);
+ − 81 return result;
+ − 82 }
+ − 83
+ − 84 void SettingsPageServices::SaveInfo() {
+ − 85 session.config.anilist.username = username.toStdString();
+ − 86 session.config.service = service;
+ − 87 }
+ − 88
+ − 89 SettingsPageServices::SettingsPageServices(QWidget* parent) : SettingsPage(parent, tr("Services")) {
+ − 90 username = QString::fromUtf8(session.config.anilist.username.c_str());
+ − 91 service = session.config.service;
+ − 92 AddTab(CreateMainPage(), tr("Main"));
+ − 93 AddTab(CreateAniListPage(), tr("AniList"));
+ − 94 }