Mercurial > minori
annotate src/gui/dialog/settings/services.cc @ 393:963047512d34
*: clang-format
| author | Paper <paper@tflc.us> |
|---|---|
| date | Fri, 07 Nov 2025 07:16:15 -0500 |
| parents | d928ec7b6a0d |
| children |
| rev | line source |
|---|---|
| 10 | 1 #include "core/anime.h" |
| 2 #include "core/session.h" | |
|
65
26721c28bf22
*: avoid usage of (to|from)StdString
Paper <mrpapersonic@gmail.com>
parents:
63
diff
changeset
|
3 #include "core/strings.h" |
| 10 | 4 #include "gui/dialog/settings.h" |
| 279 | 5 #include "gui/translate/anime.h" |
| 10 | 6 #include "services/anilist.h" |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
7 #include "services/kitsu.h" |
| 10 | 8 #include <QComboBox> |
| 9 #include <QGroupBox> | |
| 76 | 10 #include <QLabel> |
| 11 #include <QLineEdit> | |
| 10 | 12 #include <QPushButton> |
| 13 #include <QSizePolicy> | |
|
68
2417121d894e
*: normalize usage of layouts
Paper <mrpapersonic@gmail.com>
parents:
65
diff
changeset
|
14 #include <QVBoxLayout> |
| 10 | 15 |
| 393 | 16 QWidget *SettingsPageServices::CreateMainPage() |
| 17 { | |
| 18 QWidget *result = new QWidget(this); | |
| 10 | 19 result->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); |
| 20 | |
| 393 | 21 QVBoxLayout *full_layout = new QVBoxLayout(result); |
| 10 | 22 |
| 108 | 23 { |
| 393 | 24 QGroupBox *sync_group_box = new QGroupBox(tr("Synchronization"), result); |
| 108 | 25 sync_group_box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); |
| 10 | 26 |
| 393 | 27 QVBoxLayout *sync_layout = new QVBoxLayout(sync_group_box); |
| 108 | 28 |
| 29 { | |
| 393 | 30 QLabel *sync_combo_box_label = new QLabel(tr("Active service and metadata provider:"), sync_group_box); |
| 108 | 31 sync_layout->addWidget(sync_combo_box_label); |
| 32 } | |
| 10 | 33 |
| 108 | 34 { |
| 393 | 35 QComboBox *sync_combo_box = new QComboBox(sync_group_box); |
| 36 for (const auto &service : Anime::Services) | |
| 37 sync_combo_box->addItem(Strings::ToQString(Translate::ToLocalString(service)), | |
| 38 static_cast<int>(service)); | |
| 279 | 39 |
| 108 | 40 connect(sync_combo_box, QOverload<int>::of(&QComboBox::currentIndexChanged), this, |
| 279 | 41 [this, sync_combo_box](int index) { |
| 393 | 42 service = static_cast<Anime::Service>(sync_combo_box->itemData(index).toInt()); |
| 43 }); | |
| 279 | 44 |
| 45 /* this is evil */ | |
| 108 | 46 sync_combo_box->setCurrentIndex(static_cast<int>(service) - 1); |
| 47 sync_layout->addWidget(sync_combo_box); | |
| 48 } | |
| 10 | 49 |
| 108 | 50 { |
| 393 | 51 QLabel *sync_note_label = new QLabel( |
| 258 | 52 tr("Note: Minori is unable to synchronize multiple services at the same time."), sync_group_box); |
| 108 | 53 sync_layout->addWidget(sync_note_label); |
| 54 } | |
| 10 | 55 |
| 108 | 56 full_layout->addWidget(sync_group_box); |
| 57 } | |
| 258 | 58 |
| 10 | 59 full_layout->setSpacing(10); |
| 60 full_layout->addStretch(); | |
|
68
2417121d894e
*: normalize usage of layouts
Paper <mrpapersonic@gmail.com>
parents:
65
diff
changeset
|
61 |
| 10 | 62 return result; |
| 63 } | |
| 64 | |
| 393 | 65 QWidget *SettingsPageServices::CreateKitsuPage() |
| 66 { | |
| 67 QWidget *result = new QWidget(this); | |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
68 result->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
69 |
| 393 | 70 QVBoxLayout *full_layout = new QVBoxLayout(result); |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
71 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
72 { |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
73 /* Account */ |
| 393 | 74 QGroupBox *group_box = new QGroupBox(tr("Account"), result); |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
75 group_box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
76 |
| 393 | 77 QVBoxLayout *group_box_layout = new QVBoxLayout(group_box); |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
78 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
79 { |
| 393 | 80 QWidget *credentials_grid = new QWidget(group_box); |
| 81 QGridLayout *credentials_grid_layout = new QGridLayout(credentials_grid); | |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
82 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
83 /* E-mail */ |
| 393 | 84 QLabel *email_label = new QLabel(tr("&E-mail"), credentials_grid); |
| 85 QLineEdit *email = new QLineEdit(credentials_grid); | |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
86 email_label->setBuddy(email); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
87 credentials_grid_layout->addWidget(email_label, 0, 0); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
88 credentials_grid_layout->addWidget(email, 1, 0); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
89 |
| 393 | 90 QLabel *password_label = new QLabel(tr("&Password:"), credentials_grid); |
| 91 QLineEdit *password = new QLineEdit(credentials_grid); | |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
92 password->setEchoMode(QLineEdit::Password); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
93 password_label->setBuddy(password); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
94 credentials_grid_layout->addWidget(password_label, 0, 1); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
95 credentials_grid_layout->addWidget(password, 1, 1); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
96 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
97 { |
| 393 | 98 QPushButton *auth_button = new QPushButton(credentials_grid); |
|
319
d928ec7b6a0d
services/kitsu: implement GetAnimeList()
Paper <paper@paper.us.eu.org>
parents:
317
diff
changeset
|
99 connect(auth_button, &QPushButton::clicked, this, [auth_button, email, password] { |
| 393 | 100 if (Services::Kitsu::AuthorizeUser(Strings::ToUtf8String(email->text()), |
| 101 Strings::ToUtf8String(password->text()))) | |
|
319
d928ec7b6a0d
services/kitsu: implement GetAnimeList()
Paper <paper@paper.us.eu.org>
parents:
317
diff
changeset
|
102 auth_button->setText(tr("Re-authorize...")); |
|
d928ec7b6a0d
services/kitsu: implement GetAnimeList()
Paper <paper@paper.us.eu.org>
parents:
317
diff
changeset
|
103 else |
|
d928ec7b6a0d
services/kitsu: implement GetAnimeList()
Paper <paper@paper.us.eu.org>
parents:
317
diff
changeset
|
104 auth_button->setText(tr("Authorize...")); |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
105 }); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
106 auth_button->setText(session.config.auth.kitsu.access_token.empty() ? tr("Authorize...") |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
107 : tr("Re-authorize...")); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
108 credentials_grid_layout->addWidget(auth_button, 1, 2); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
109 } |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
110 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
111 credentials_grid_layout->setContentsMargins(0, 0, 0, 0); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
112 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
113 group_box_layout->addWidget(credentials_grid); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
114 } |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
115 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
116 { |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
117 /* Note on password storing */ |
| 393 | 118 QLabel *note_label = new QLabel( |
| 119 tr("Your e-mail and password are never stored by Minori and will only be used to authorize with " | |
| 120 "Kitsu.\nFor more information, see <a " | |
| 121 "href=\"https://kitsu.docs.apiary.io/#introduction/authentication\">Kitsu's API documentation</a>"), | |
| 122 group_box); | |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
123 note_label->setTextFormat(Qt::RichText); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
124 note_label->setWordWrap(true); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
125 note_label->setTextInteractionFlags(Qt::TextBrowserInteraction); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
126 note_label->setOpenExternalLinks(true); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
127 group_box_layout->addWidget(note_label); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
128 } |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
129 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
130 full_layout->addWidget(group_box); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
131 } |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
132 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
133 full_layout->setSpacing(10); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
134 full_layout->addStretch(); |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
135 |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
136 return result; |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
137 } |
|
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
138 |
| 393 | 139 QWidget *SettingsPageServices::CreateAniListPage() |
| 140 { | |
| 141 QWidget *result = new QWidget(this); | |
| 10 | 142 result->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); |
| 143 | |
| 393 | 144 QVBoxLayout *full_layout = new QVBoxLayout(result); |
| 10 | 145 |
| 108 | 146 { |
| 147 /* Account */ | |
| 393 | 148 QGroupBox *group_box = new QGroupBox(tr("Account"), result); |
| 108 | 149 group_box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); |
| 150 | |
| 393 | 151 QVBoxLayout *layout = new QVBoxLayout(group_box); |
| 10 | 152 |
| 108 | 153 { |
| 154 /* Authorization */ | |
| 393 | 155 QWidget *auth_widget = new QWidget(group_box); |
| 156 QHBoxLayout *auth_layout = new QHBoxLayout(auth_widget); | |
| 10 | 157 |
| 108 | 158 { |
| 393 | 159 QPushButton *auth_button = new QPushButton(auth_widget); |
| 108 | 160 connect(auth_button, &QPushButton::clicked, this, [] { Services::AniList::AuthorizeUser(); }); |
| 258 | 161 auth_button->setText(session.config.auth.anilist.auth_token.empty() ? tr("Authorize...") |
| 162 : tr("Re-authorize...")); | |
| 108 | 163 auth_layout->addWidget(auth_button); |
| 164 } | |
| 10 | 165 |
| 108 | 166 layout->addWidget(auth_widget); |
| 167 } | |
| 10 | 168 |
| 108 | 169 { |
| 170 /* Note on creating new accounts... */ | |
| 393 | 171 QLabel *note_label = |
| 258 | 172 new QLabel(tr("<a href=\"http://anilist.co/\">Create a new AniList account</a>"), group_box); |
| 108 | 173 note_label->setTextFormat(Qt::RichText); |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
174 note_label->setWordWrap(true); |
| 108 | 175 note_label->setTextInteractionFlags(Qt::TextBrowserInteraction); |
| 176 note_label->setOpenExternalLinks(true); | |
| 177 layout->addWidget(note_label); | |
| 178 } | |
| 258 | 179 |
| 108 | 180 full_layout->addWidget(group_box); |
| 181 } | |
| 10 | 182 |
| 183 full_layout->setSpacing(10); | |
| 184 full_layout->addStretch(); | |
| 185 return result; | |
| 186 } | |
| 187 | |
| 393 | 188 void SettingsPageServices::SaveInfo() |
| 189 { | |
| 108 | 190 // see services/anilist.cc for why this is commented out |
| 10 | 191 session.config.service = service; |
| 192 } | |
| 193 | |
| 393 | 194 SettingsPageServices::SettingsPageServices(QWidget *parent) : SettingsPage(parent, tr("Services")) |
| 195 { | |
| 10 | 196 service = session.config.service; |
| 197 AddTab(CreateMainPage(), tr("Main")); | |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
198 AddTab(CreateKitsuPage(), tr("Kitsu")); |
| 10 | 199 AddTab(CreateAniListPage(), tr("AniList")); |
| 200 } |
