Skip to content

Commit 6512380

Browse files
committed
UI: Refactor integration and browser docks
Use the QAction provided by QDockWidget with new Qt connection rather than creating a new one for each dock. Separate extra browser docks from extra docks, the latter is meant for plugin/integration docks.
1 parent b6d0dca commit 6512380

File tree

9 files changed

+222
-108
lines changed

9 files changed

+222
-108
lines changed

UI/auth-restream.cpp

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,28 @@ using namespace json11;
2424
#define RESTREAM_STREAMKEY_URL "https://api.restream.io/v2/user/streamKey"
2525
#define RESTREAM_SCOPE_VERSION 1
2626

27+
#define RESTREAM_CHAT_DOCK_NAME "restreamChat"
28+
#define RESTREAM_INFO_DOCK_NAME "restreamInfo"
29+
#define RESTREAM_CHANNELS_DOCK_NAME "restreamChannel"
30+
2731
static Auth::Def restreamDef = {"Restream", Auth::Type::OAuth_StreamKey};
2832

2933
/* ------------------------------------------------------------------------- */
3034

3135
RestreamAuth::RestreamAuth(const Def &d) : OAuthStreamKey(d) {}
3236

37+
RestreamAuth::~RestreamAuth()
38+
{
39+
if (!uiLoaded)
40+
return;
41+
42+
OBSBasic *main = OBSBasic::Get();
43+
44+
main->RemoveDockWidget(RESTREAM_CHAT_DOCK_NAME);
45+
main->RemoveDockWidget(RESTREAM_INFO_DOCK_NAME);
46+
main->RemoveDockWidget(RESTREAM_CHANNELS_DOCK_NAME);
47+
}
48+
3349
bool RestreamAuth::GetChannelInfo()
3450
try {
3551
std::string client_id = RESTREAM_CLIENTID;
@@ -134,52 +150,49 @@ void RestreamAuth::LoadUI()
134150
QSize size = main->frameSize();
135151
QPoint pos = main->pos();
136152

137-
chat.reset(new BrowserDock());
138-
chat->setObjectName("restreamChat");
153+
BrowserDock *chat = new BrowserDock();
154+
chat->setObjectName(RESTREAM_CHAT_DOCK_NAME);
139155
chat->resize(420, 600);
140156
chat->setMinimumSize(200, 300);
141157
chat->setWindowTitle(QTStr("Auth.Chat"));
142158
chat->setAllowedAreas(Qt::AllDockWidgetAreas);
143159

144-
browser = cef->create_widget(chat.data(), url, panel_cookies);
160+
browser = cef->create_widget(chat, url, panel_cookies);
145161
chat->SetWidget(browser);
146162

147-
main->addDockWidget(Qt::RightDockWidgetArea, chat.data());
148-
chatMenu.reset(main->AddDockWidget(chat.data()));
163+
main->AddDockWidget(chat, Qt::RightDockWidgetArea);
149164

150165
/* ----------------------------------- */
151166

152167
url = "https://restream.io/titles/embed";
153168

154-
info.reset(new BrowserDock());
155-
info->setObjectName("restreamInfo");
169+
BrowserDock *info = new BrowserDock();
170+
info->setObjectName(RESTREAM_INFO_DOCK_NAME);
156171
info->resize(410, 600);
157172
info->setMinimumSize(200, 150);
158173
info->setWindowTitle(QTStr("Auth.StreamInfo"));
159174
info->setAllowedAreas(Qt::AllDockWidgetAreas);
160175

161-
browser = cef->create_widget(info.data(), url, panel_cookies);
176+
browser = cef->create_widget(info, url, panel_cookies);
162177
info->SetWidget(browser);
163178

164-
main->addDockWidget(Qt::LeftDockWidgetArea, info.data());
165-
infoMenu.reset(main->AddDockWidget(info.data()));
179+
main->AddDockWidget(info, Qt::LeftDockWidgetArea);
166180

167181
/* ----------------------------------- */
168182

169183
url = "https://restream.io/channel/embed";
170184

171-
channels.reset(new BrowserDock());
172-
channels->setObjectName("restreamChannel");
185+
BrowserDock *channels = new BrowserDock();
186+
channels->setObjectName(RESTREAM_CHANNELS_DOCK_NAME);
173187
channels->resize(410, 600);
174188
channels->setMinimumSize(410, 300);
175189
channels->setWindowTitle(QTStr("RestreamAuth.Channels"));
176190
channels->setAllowedAreas(Qt::AllDockWidgetAreas);
177191

178-
browser = cef->create_widget(channels.data(), url, panel_cookies);
192+
browser = cef->create_widget(channels, url, panel_cookies);
179193
channels->SetWidget(browser);
180194

181-
main->addDockWidget(Qt::LeftDockWidgetArea, channels.data());
182-
channelMenu.reset(main->AddDockWidget(channels.data()));
195+
main->AddDockWidget(channels, Qt::LeftDockWidgetArea);
183196

184197
/* ----------------------------------- */
185198

UI/auth-restream.hpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,6 @@ class BrowserDock;
77
class RestreamAuth : public OAuthStreamKey {
88
Q_OBJECT
99

10-
QSharedPointer<BrowserDock> chat;
11-
QSharedPointer<BrowserDock> info;
12-
QSharedPointer<BrowserDock> channels;
13-
14-
QSharedPointer<QAction> chatMenu;
15-
QSharedPointer<QAction> infoMenu;
16-
QSharedPointer<QAction> channelMenu;
17-
1810
bool uiLoaded = false;
1911

2012
virtual bool RetryLogin() override;
@@ -28,6 +20,7 @@ class RestreamAuth : public OAuthStreamKey {
2820

2921
public:
3022
RestreamAuth(const Def &d);
23+
~RestreamAuth();
3124

3225
static std::shared_ptr<Auth> Login(QWidget *parent,
3326
const std::string &service_name);

UI/auth-twitch.cpp

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ using namespace json11;
2727

2828
#define TWITCH_SCOPE_VERSION 1
2929

30+
#define TWITCH_CHAT_DOCK_NAME "twitchChat"
31+
#define TWITCH_INFO_DOCK_NAME "twitchInfo"
32+
#define TWITCH_STATS_DOCK_NAME "twitchStats"
33+
#define TWITCH_FEED_DOCK_NAME "twitchFeed"
34+
3035
static Auth::Def twitchDef = {"Twitch", Auth::Type::OAuth_StreamKey};
3136

3237
/* ------------------------------------------------------------------------- */
@@ -49,6 +54,19 @@ TwitchAuth::TwitchAuth(const Def &d) : OAuthStreamKey(d)
4954
&TwitchAuth::TryLoadSecondaryUIPanes);
5055
}
5156

57+
TwitchAuth::~TwitchAuth()
58+
{
59+
if (!uiLoaded)
60+
return;
61+
62+
OBSBasic *main = OBSBasic::Get();
63+
64+
main->RemoveDockWidget(TWITCH_CHAT_DOCK_NAME);
65+
main->RemoveDockWidget(TWITCH_INFO_DOCK_NAME);
66+
main->RemoveDockWidget(TWITCH_STATS_DOCK_NAME);
67+
main->RemoveDockWidget(TWITCH_FEED_DOCK_NAME);
68+
}
69+
5270
bool TwitchAuth::MakeApiRequest(const char *path, Json &json_out)
5371
{
5472
std::string client_id = TWITCH_CLIENTID;
@@ -233,16 +251,16 @@ void TwitchAuth::LoadUI()
233251
QSize size = main->frameSize();
234252
QPoint pos = main->pos();
235253

236-
chat.reset(new BrowserDock());
237-
chat->setObjectName("twitchChat");
254+
BrowserDock *chat = new BrowserDock();
255+
chat->setObjectName(TWITCH_CHAT_DOCK_NAME);
238256
chat->resize(300, 600);
239257
chat->setMinimumSize(200, 300);
240258
chat->setWindowTitle(QTStr("Auth.Chat"));
241259
chat->setAllowedAreas(Qt::AllDockWidgetAreas);
242260

243-
browser = cef->create_widget(chat.data(), url, panel_cookies);
261+
browser = cef->create_widget(chat, url, panel_cookies);
244262
chat->SetWidget(browser);
245-
cef->add_force_popup_url(moderation_tools_url, chat.data());
263+
cef->add_force_popup_url(moderation_tools_url, chat);
246264

247265
if (App()->IsThemeDark()) {
248266
script = "localStorage.setItem('twilight.theme', 1);";
@@ -261,8 +279,7 @@ void TwitchAuth::LoadUI()
261279

262280
browser->setStartupScript(script);
263281

264-
main->addDockWidget(Qt::RightDockWidgetArea, chat.data());
265-
chatMenu.reset(main->AddDockWidget(chat.data()));
282+
main->AddDockWidget(chat, Qt::RightDockWidgetArea);
266283

267284
/* ----------------------------------- */
268285

@@ -323,39 +340,37 @@ void TwitchAuth::LoadSecondaryUIPanes()
323340
url += name;
324341
url += "/stream-manager/edit-stream-info";
325342

326-
info.reset(new BrowserDock());
327-
info->setObjectName("twitchInfo");
343+
BrowserDock *info = new BrowserDock();
344+
info->setObjectName(TWITCH_INFO_DOCK_NAME);
328345
info->resize(300, 650);
329346
info->setMinimumSize(200, 300);
330347
info->setWindowTitle(QTStr("Auth.StreamInfo"));
331348
info->setAllowedAreas(Qt::AllDockWidgetAreas);
332349

333-
browser = cef->create_widget(info.data(), url, panel_cookies);
350+
browser = cef->create_widget(info, url, panel_cookies);
334351
info->SetWidget(browser);
335352
browser->setStartupScript(script);
336353

337-
main->addDockWidget(Qt::RightDockWidgetArea, info.data());
338-
infoMenu.reset(main->AddDockWidget(info.data()));
354+
main->AddDockWidget(info, Qt::RightDockWidgetArea);
339355

340356
/* ----------------------------------- */
341357

342358
url = "https://www.twitch.tv/popout/";
343359
url += name;
344360
url += "/dashboard/live/stats";
345361

346-
stat.reset(new BrowserDock());
347-
stat->setObjectName("twitchStats");
348-
stat->resize(200, 250);
349-
stat->setMinimumSize(200, 150);
350-
stat->setWindowTitle(QTStr("TwitchAuth.Stats"));
351-
stat->setAllowedAreas(Qt::AllDockWidgetAreas);
362+
BrowserDock *stats = new BrowserDock();
363+
stats->setObjectName(TWITCH_STATS_DOCK_NAME);
364+
stats->resize(200, 250);
365+
stats->setMinimumSize(200, 150);
366+
stats->setWindowTitle(QTStr("TwitchAuth.Stats"));
367+
stats->setAllowedAreas(Qt::AllDockWidgetAreas);
352368

353-
browser = cef->create_widget(stat.data(), url, panel_cookies);
354-
stat->SetWidget(browser);
369+
browser = cef->create_widget(stats, url, panel_cookies);
370+
stats->SetWidget(browser);
355371
browser->setStartupScript(script);
356372

357-
main->addDockWidget(Qt::RightDockWidgetArea, stat.data());
358-
statMenu.reset(main->AddDockWidget(stat.data()));
373+
main->AddDockWidget(stats, Qt::RightDockWidgetArea);
359374

360375
/* ----------------------------------- */
361376

@@ -364,36 +379,35 @@ void TwitchAuth::LoadSecondaryUIPanes()
364379
url += "/stream-manager/activity-feed";
365380
url += "?uuid=" + uuid;
366381

367-
feed.reset(new BrowserDock());
368-
feed->setObjectName("twitchFeed");
382+
BrowserDock *feed = new BrowserDock();
383+
feed->setObjectName(TWITCH_FEED_DOCK_NAME);
369384
feed->resize(300, 650);
370385
feed->setMinimumSize(200, 300);
371386
feed->setWindowTitle(QTStr("TwitchAuth.Feed"));
372387
feed->setAllowedAreas(Qt::AllDockWidgetAreas);
373388

374-
browser = cef->create_widget(feed.data(), url, panel_cookies);
389+
browser = cef->create_widget(feed, url, panel_cookies);
375390
feed->SetWidget(browser);
376391
browser->setStartupScript(script);
377392

378-
main->addDockWidget(Qt::RightDockWidgetArea, feed.data());
379-
feedMenu.reset(main->AddDockWidget(feed.data()));
393+
main->AddDockWidget(feed, Qt::RightDockWidgetArea);
380394

381395
/* ----------------------------------- */
382396

383397
info->setFloating(true);
384-
stat->setFloating(true);
398+
stats->setFloating(true);
385399
feed->setFloating(true);
386400

387-
QSize statSize = stat->frameSize();
401+
QSize statSize = stats->frameSize();
388402

389403
info->move(pos.x() + 50, pos.y() + 50);
390-
stat->move(pos.x() + size.width() / 2 - statSize.width() / 2,
391-
pos.y() + size.height() / 2 - statSize.height() / 2);
404+
stats->move(pos.x() + size.width() / 2 - statSize.width() / 2,
405+
pos.y() + size.height() / 2 - statSize.height() / 2);
392406
feed->move(pos.x() + 100, pos.y() + 100);
393407

394408
if (firstLoad) {
395409
info->setVisible(true);
396-
stat->setVisible(false);
410+
stats->setVisible(false);
397411
feed->setVisible(false);
398412
} else {
399413
uint32_t lastVersion = config_get_int(App()->GlobalConfig(),

UI/auth-twitch.hpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,6 @@ class TwitchAuth : public OAuthStreamKey {
1515

1616
friend class TwitchLogin;
1717

18-
QSharedPointer<BrowserDock> chat;
19-
QSharedPointer<BrowserDock> info;
20-
QSharedPointer<BrowserDock> stat;
21-
QSharedPointer<BrowserDock> feed;
22-
QSharedPointer<QAction> chatMenu;
23-
QSharedPointer<QAction> infoMenu;
24-
QSharedPointer<QAction> statMenu;
25-
QSharedPointer<QAction> feedMenu;
2618
bool uiLoaded = false;
2719

2820
std::string name;
@@ -40,6 +32,7 @@ class TwitchAuth : public OAuthStreamKey {
4032

4133
public:
4234
TwitchAuth(const Def &d);
35+
~TwitchAuth();
4336

4437
static std::shared_ptr<Auth> Login(QWidget *parent,
4538
const std::string &service_name);

UI/auth-youtube.cpp

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ using namespace json11;
4242
#define YOUTUBE_CHAT_POPOUT_URL \
4343
"https://www.youtube.com/live_chat?is_popout=1&dark_theme=1&v=%1"
4444

45+
#define YOUTUBE_CHAT_DOCK_NAME "ytChat"
46+
4547
static const char allowedChars[] =
4648
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
4749
static const int allowedCount = static_cast<int>(sizeof(allowedChars) - 1);
@@ -71,6 +73,19 @@ YoutubeAuth::YoutubeAuth(const Def &d)
7173
{
7274
}
7375

76+
YoutubeAuth::~YoutubeAuth()
77+
{
78+
if (!uiLoaded)
79+
return;
80+
81+
#ifdef BROWSER_AVAILABLE
82+
OBSBasic *main = OBSBasic::Get();
83+
84+
main->RemoveDockWidget(YOUTUBE_CHAT_DOCK_NAME);
85+
chat = nullptr;
86+
#endif
87+
}
88+
7489
bool YoutubeAuth::RetryLogin()
7590
{
7691
return true;
@@ -139,20 +154,19 @@ void YoutubeAuth::LoadUI()
139154
QSize size = main->frameSize();
140155
QPoint pos = main->pos();
141156

142-
chat.reset(new YoutubeChatDock());
143-
chat->setObjectName("ytChat");
157+
chat = new YoutubeChatDock();
158+
chat->setObjectName(YOUTUBE_CHAT_DOCK_NAME);
144159
chat->resize(300, 600);
145160
chat->setMinimumSize(200, 300);
146161
chat->setWindowTitle(QTStr("Auth.Chat"));
147162
chat->setAllowedAreas(Qt::AllDockWidgetAreas);
148163

149-
browser = cef->create_widget(chat.data(), YOUTUBE_CHAT_PLACEHOLDER_URL,
164+
browser = cef->create_widget(chat, YOUTUBE_CHAT_PLACEHOLDER_URL,
150165
panel_cookies);
151166
browser->setStartupScript(ytchat_script);
152167

153168
chat->SetWidget(browser);
154-
main->addDockWidget(Qt::RightDockWidgetArea, chat.data());
155-
chatMenu.reset(main->AddDockWidget(chat.data()));
169+
main->AddDockWidget(chat, Qt::RightDockWidgetArea);
156170

157171
chat->setFloating(true);
158172
chat->move(pos.x() + size.width() - chat->width() - 50, pos.y() + 50);

UI/auth-youtube.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ class YoutubeAuth : public OAuthStreamKey {
4343
std::string section;
4444

4545
#ifdef BROWSER_AVAILABLE
46-
QSharedPointer<YoutubeChatDock> chat;
47-
QSharedPointer<QAction> chatMenu;
46+
YoutubeChatDock *chat;
4847
#endif
4948

5049
virtual bool RetryLogin() override;
@@ -56,6 +55,7 @@ class YoutubeAuth : public OAuthStreamKey {
5655

5756
public:
5857
YoutubeAuth(const Def &d);
58+
~YoutubeAuth();
5959

6060
void SetChatId(const QString &chat_id, const std::string &api_chat_id);
6161
void ResetChat();

0 commit comments

Comments
 (0)