Skip to content

Commit 9bedbf6

Browse files
committed
Display warning if plugin could not be loaded
1 parent 853150e commit 9bedbf6

File tree

6 files changed

+81
-14
lines changed

6 files changed

+81
-14
lines changed

data/locale/en-US.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Enable verbose loggi
3030
AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Save window position and size"
3131
AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="Show system tray notifications"
3232
AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Disable UI hints"
33+
AdvSceneSwitcher.generalTab.generalBehavior.warnPluginLoadFailure="Display warning if plugins cannot be loaded"
34+
AdvSceneSwitcher.generalTab.generalBehavior.warnPluginLoadFailureMessage="<html><body>Loading of the following plugin libraries was unsuccessful, which could result in some Advanced Scene Switcher functions not being available:%1Check the OBS logs for details.<br>This message can be disabled on the General tab.</body></html>"
3335
AdvSceneSwitcher.generalTab.generalBehavior.hideLegacyTabs="Hide tabs which can be represented via macros"
3436
AdvSceneSwitcher.generalTab.matchBehavior="Match behavior"
3537
AdvSceneSwitcher.generalTab.priority="Priority"

forms/advanced-scene-switcher.ui

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,30 @@
256256
</item>
257257
</layout>
258258
</item>
259+
<item>
260+
<layout class="QHBoxLayout" name="horizontalLayout_26">
261+
<item>
262+
<widget class="QCheckBox" name="warnPluginLoadFailure">
263+
<property name="text">
264+
<string>AdvSceneSwitcher.generalTab.generalBehavior.warnPluginLoadFailure</string>
265+
</property>
266+
</widget>
267+
</item>
268+
<item>
269+
<spacer name="horizontalSpacer_19">
270+
<property name="orientation">
271+
<enum>Qt::Horizontal</enum>
272+
</property>
273+
<property name="sizeHint" stdset="0">
274+
<size>
275+
<width>40</width>
276+
<height>20</height>
277+
</size>
278+
</property>
279+
</spacer>
280+
</item>
281+
</layout>
282+
</item>
259283
<item>
260284
<layout class="QHBoxLayout" name="horizontalLayout_24">
261285
<item>

src/advanced-scene-switcher.cpp

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ AdvSceneSwitcher::AdvSceneSwitcher(QWidget *parent)
4343
{
4444
switcher->settingsWindowOpened = true;
4545
ui->setupUi(this);
46-
4746
std::lock_guard<std::mutex> lock(switcher->m);
48-
4947
switcher->Prune();
5048
loadUI();
5149
}
@@ -58,26 +56,51 @@ AdvSceneSwitcher::~AdvSceneSwitcher()
5856
}
5957
}
6058

61-
bool translationAvailable()
59+
static bool translationAvailable()
6260
{
6361
return !!strcmp(obs_module_text("AdvSceneSwitcher.pluginName"),
6462
"AdvSceneSwitcher.pluginName");
6563
}
6664

67-
void AdvSceneSwitcher::loadUI()
65+
static void DisplayMissingDependencyWarning()
66+
{
67+
if (!switcher->warnPluginLoadFailure ||
68+
switcher->loadFailureLibs.isEmpty()) {
69+
return;
70+
}
71+
72+
QString failedLibsString = "<ul>";
73+
for (const auto &lib : switcher->loadFailureLibs) {
74+
failedLibsString += "<li>" + lib + "</li>";
75+
}
76+
failedLibsString += "</ul>";
77+
QString warning(obs_module_text(
78+
"AdvSceneSwitcher.generalTab.generalBehavior.warnPluginLoadFailureMessage"));
79+
DisplayMessage(warning.arg(failedLibsString));
80+
}
81+
82+
static void DisplayMissingDataDirWarning()
6883
{
69-
if (!translationAvailable()) {
70-
QString msg = "Failed to find plug-in's 'data' directory.\n"
71-
"Please check installation instructions!\n\n"
72-
"Data most likely expected at:\n\n";
84+
if (translationAvailable()) {
85+
return;
86+
}
87+
88+
QString msg = "Failed to find plug-in's 'data' directory.\n"
89+
"Please check installation instructions!\n\n"
90+
"Data most likely expected at:\n\n";
7391
#ifdef _WIN32
74-
msg += QString::fromStdString(
75-
(std::filesystem::current_path().string()));
76-
msg += "/";
92+
msg += QString::fromStdString(
93+
(std::filesystem::current_path().string()));
94+
msg += "/";
7795
#endif
78-
msg += obs_get_module_data_path(obs_current_module());
79-
(void)DisplayMessage(msg);
80-
}
96+
msg += obs_get_module_data_path(obs_current_module());
97+
DisplayMessage(msg);
98+
}
99+
100+
void AdvSceneSwitcher::loadUI()
101+
{
102+
DisplayMissingDataDirWarning();
103+
DisplayMissingDependencyWarning();
81104

82105
setupGeneralTab();
83106
setupTitleTab();
@@ -687,6 +710,7 @@ void LoadPlugins()
687710
blog(LOG_WARNING, "failed to load \"%s\": %s",
688711
file.toStdString().c_str(),
689712
lib->errorString().toStdString().c_str());
713+
switcher->loadFailureLibs << file;
690714
}
691715
}
692716
}

src/advanced-scene-switcher.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ public slots:
202202
void on_saveWindowGeo_stateChanged(int state);
203203
void on_showTrayNotifications_stateChanged(int state);
204204
void on_uiHintsDisable_stateChanged(int state);
205+
void on_warnPluginLoadFailure_stateChanged(int state);
205206
void on_hideLegacyTabs_stateChanged(int state);
206207

207208
void on_exportSettings_clicked();

src/general.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,15 @@ void AdvSceneSwitcher::on_uiHintsDisable_stateChanged(int state)
172172
switcher->disableHints = state;
173173
}
174174

175+
void AdvSceneSwitcher::on_warnPluginLoadFailure_stateChanged(int state)
176+
{
177+
if (loading) {
178+
return;
179+
}
180+
181+
switcher->warnPluginLoadFailure = state;
182+
}
183+
175184
bool isLegacyTab(const QString &name)
176185
{
177186
return name == obs_module_text(
@@ -617,6 +626,7 @@ void SwitcherData::saveGeneralSettings(obs_data_t *obj)
617626
obs_data_set_bool(obj, "showSystemTrayNotifications",
618627
showSystemTrayNotifications);
619628
obs_data_set_bool(obj, "disableHints", disableHints);
629+
obs_data_set_bool(obj, "warnPluginLoadFailure", warnPluginLoadFailure);
620630
obs_data_set_bool(obj, "hideLegacyTabs", hideLegacyTabs);
621631

622632
obs_data_set_int(obj, "priority0", functionNamesByPriority[0]);
@@ -673,6 +683,8 @@ void SwitcherData::loadGeneralSettings(obs_data_t *obj)
673683
showSystemTrayNotifications =
674684
obs_data_get_bool(obj, "showSystemTrayNotifications");
675685
disableHints = obs_data_get_bool(obj, "disableHints");
686+
obs_data_set_default_bool(obj, "warnPluginLoadFailure", true);
687+
warnPluginLoadFailure = obs_data_get_bool(obj, "warnPluginLoadFailure");
676688
obs_data_set_default_bool(obj, "hideLegacyTabs", true);
677689
hideLegacyTabs = obs_data_get_bool(obj, "hideLegacyTabs");
678690

@@ -971,6 +983,7 @@ void AdvSceneSwitcher::setupGeneralTab()
971983
ui->showTrayNotifications->setChecked(
972984
switcher->showSystemTrayNotifications);
973985
ui->uiHintsDisable->setChecked(switcher->disableHints);
986+
ui->warnPluginLoadFailure->setChecked(switcher->warnPluginLoadFailure);
974987
ui->hideLegacyTabs->setChecked(switcher->hideLegacyTabs);
975988

976989
for (int p : switcher->functionNamesByPriority) {

src/switcher-data-structs.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ struct SwitcherData {
106106

107107
int interval = default_interval;
108108

109+
QStringList loadFailureLibs;
110+
bool warnPluginLoadFailure = true;
111+
109112
obs_source_t *waitScene = nullptr;
110113
OBSWeakSource currentScene = nullptr;
111114
OBSWeakSource previousScene = nullptr;

0 commit comments

Comments
 (0)