Skip to content

Commit 74c1a2c

Browse files
committed
GUI: Add captions display options
Signed-off-by: Maxime Gervais <[email protected]>
1 parent f7c5044 commit 74c1a2c

15 files changed

+234
-26
lines changed

Source/GUI/Qt/DatabaseUi.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -230,4 +230,12 @@ void DatabaseUi::get_sql_query_for_update_ui_table_v14(std::string& q)
230230
q = create.str();
231231
}
232232

233+
//---------------------------------------------------------------------------
234+
void DatabaseUi::get_sql_query_for_update_ui_settings_table_v15(std::string& q)
235+
{
236+
std::stringstream create;
237+
create << "ALTER TABLE UI_SETTINGS"; // Table name
238+
create << " ADD DISPLAYCAPTIONS_OPTION TEXT DEFAULT NULL;";
239+
q = create.str();
240+
}
233241
}

Source/GUI/Qt/DatabaseUi.h

+4
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ class DatabaseUi : public Database
105105
virtual int ui_settings_save_last_save_display_path(const std::string&, int user_id = -1) = 0;
106106
virtual int ui_settings_get_last_save_display_path(std::string&, int user_id = -1) = 0;
107107

108+
virtual int ui_settings_save_displaycaptions_option(const std::string&, int user_id = -1) = 0;
109+
virtual int ui_settings_get_displaycaptions_option(std::string&, int user_id = -1) = 0;
110+
108111
virtual int ui_settings_save_mco_token(const std::string&, int user_id = -1) = 0;
109112
virtual int ui_settings_get_mco_token(std::string&, int user_id = -1) = 0;
110113

@@ -127,6 +130,7 @@ class DatabaseUi : public Database
127130
void get_sql_query_for_update_ui_table_v12(std::string& q);
128131
void get_sql_query_for_update_ui_settings_table_v13(std::string& q);
129132
void get_sql_query_for_update_ui_table_v14(std::string& q);
133+
void get_sql_query_for_update_ui_settings_table_v15(std::string& q);
130134

131135
private:
132136
DatabaseUi (const DatabaseUi&);

Source/GUI/Qt/NoDatabaseUi.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,18 @@ int NoDatabaseUi::ui_settings_get_last_save_display_path(std::string&, int)
354354
return 0;
355355
}
356356

357+
//---------------------------------------------------------------------------
358+
int NoDatabaseUi::ui_settings_save_displaycaptions_option(const std::string&, int)
359+
{
360+
return 0;
361+
}
362+
363+
//---------------------------------------------------------------------------
364+
int NoDatabaseUi::ui_settings_get_displaycaptions_option(std::string&, int)
365+
{
366+
return 0;
367+
}
368+
357369
//---------------------------------------------------------------------------
358370
int NoDatabaseUi::ui_settings_save_mco_token(const std::string&, int)
359371
{

Source/GUI/Qt/NoDatabaseUi.h

+3
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ class NoDatabaseUi : public DatabaseUi
8888
virtual int ui_settings_save_last_save_display_path(const std::string&, int user_id = -1);
8989
virtual int ui_settings_get_last_save_display_path(std::string&, int user_id = -1);
9090

91+
virtual int ui_settings_save_displaycaptions_option(const std::string&, int user_id = -1);
92+
virtual int ui_settings_get_displaycaptions_option(std::string&, int user_id = -1);
93+
9194
virtual int ui_settings_save_mco_token(const std::string&, int user_id=-1);
9295
virtual int ui_settings_get_mco_token(std::string&, int user_id = -1);
9396

Source/GUI/Qt/SQLLiteUi.cpp

+60-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace MediaConch {
2828
// SQLLiteUi
2929
//***************************************************************************
3030

31-
int SQLLiteUi::ui_current_version = 15;
31+
int SQLLiteUi::ui_current_version = 16;
3232

3333
//***************************************************************************
3434
// Constructor/Destructor
@@ -115,6 +115,7 @@ int SQLLiteUi::ui_update_table()
115115
UPDATE_UI_TABLE_FOR_VERSION(12);
116116
// UPDATE_UI_TABLE_FOR_VERSION(13); nothing to do
117117
UPDATE_UI_TABLE_FOR_VERSION(14);
118+
// UPDATE_UI_TABLE_FOR_VERSION(15); nothing to do
118119

119120
#undef UPDATE_UI_TABLE_FOR_VERSION
120121

@@ -911,6 +912,7 @@ int SQLLiteUi::ui_settings_update_table()
911912
// UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(12); nothing to do
912913
UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(13);
913914
// UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(14); nothing to do
915+
UPDATE_UI_SETTINGS_TABLE_FOR_VERSION(15);
914916
#undef UPDATE_UI_SETTINGS_TABLE_FOR_VERSION
915917

916918
return 0;
@@ -2120,6 +2122,63 @@ int SQLLiteUi::ui_settings_get_last_save_display_path(std::string& save_path, in
21202122
return 0;
21212123
}
21222124

2125+
//---------------------------------------------------------------------------
2126+
int SQLLiteUi::ui_settings_save_displaycaptions_option(const std::string& option, int user_id)
2127+
{
2128+
if (ui_settings_check_user_id(user_id))
2129+
return -1;
2130+
2131+
std::stringstream create;
2132+
2133+
reports.clear();
2134+
create << "UPDATE UI_SETTINGS ";
2135+
create << "SET DISPLAYCAPTIONS_OPTION = ? ";
2136+
create << "WHERE USER_ID = ?;";
2137+
2138+
query = create.str();
2139+
2140+
const char* end = NULL;
2141+
int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end);
2142+
if (ret != SQLITE_OK || !stmt || (end && *end))
2143+
return -1;
2144+
2145+
ret = sqlite3_bind_blob(stmt, 1, option.c_str(), option.length(), SQLITE_STATIC);
2146+
if (ret != SQLITE_OK)
2147+
return -1;
2148+
2149+
ret = sqlite3_bind_int(stmt, 2, user_id);
2150+
if (ret != SQLITE_OK)
2151+
return -1;
2152+
2153+
return execute();
2154+
}
2155+
2156+
//---------------------------------------------------------------------------
2157+
int SQLLiteUi::ui_settings_get_displaycaptions_option(std::string& option, int user_id)
2158+
{
2159+
if (ui_settings_check_user_id(user_id))
2160+
return -1;
2161+
2162+
reports.clear();
2163+
query = "SELECT DISPLAYCAPTIONS_OPTION FROM UI_SETTINGS WHERE USER_ID = ?;";
2164+
2165+
const char* end = NULL;
2166+
int ret = sqlite3_prepare_v2(db, query.c_str(), query.length() + 1, &stmt, &end);
2167+
if (ret != SQLITE_OK || !stmt || (end && *end))
2168+
return -1;
2169+
2170+
ret = sqlite3_bind_int(stmt, 1, user_id);
2171+
if (ret != SQLITE_OK)
2172+
return -1;
2173+
2174+
if (execute() || reports.size() != 1)
2175+
return -1;
2176+
2177+
if (reports[0].find("DISPLAYCAPTIONS_OPTION") != reports[0].end())
2178+
option = reports[0]["DISPLAYCAPTIONS_OPTION"];
2179+
return 0;
2180+
}
2181+
21232182
//---------------------------------------------------------------------------
21242183
int SQLLiteUi::ui_settings_save_mco_token(const std::string& token, int user_id)
21252184
{

Source/GUI/Qt/SQLLiteUi.h

+3
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ class SQLLiteUi : public DatabaseUi, public SQLLite
9898
virtual int ui_settings_save_last_save_display_path(const std::string&, int user_id = -1);
9999
virtual int ui_settings_get_last_save_display_path(std::string&, int user_id = -1);
100100

101+
virtual int ui_settings_save_displaycaptions_option(const std::string&, int user_id = -1);
102+
virtual int ui_settings_get_displaycaptions_option(std::string&, int user_id = -1);
103+
101104
virtual int ui_settings_save_mco_token(const std::string&, int user_id=-1);
102105
virtual int ui_settings_get_mco_token(std::string&, int user_id = -1);
103106

Source/GUI/Qt/WebCommonPage.cpp

+17-7
Original file line numberDiff line numberDiff line change
@@ -448,16 +448,22 @@ namespace MediaConch
448448
return ret;
449449
}
450450

451-
void WebCommonPage::on_save_settings_selected(const QString& policy,
452-
const QString& display,
453-
const QString& verbosity,
454-
const QString& parsespeed,
455-
const QString& save_report_path, const QString& load_files_path,
456-
const QString& save_policy_path, const QString& load_policy_path,
457-
const QString& save_display_path, const QString& load_display_path)
451+
void WebCommonPage::on_save_settings_selected(const QJsonObject& values)
458452
{
459453
UiSettings& settings = mainwindow->get_settings();
460454

455+
const QString policy = values.value("policy").toString();
456+
const QString display = values.value("display").toString();
457+
const QString verbosity = values.value("verbosity").toString();
458+
const QString parsespeed = values.value("parsespeed").toString();
459+
const QString displaycaptions = values.value("displaycaptions").toString();
460+
const QString save_report_path = values.value("save_report_path").toString();
461+
const QString load_files_path = values.value("load_files_path").toString();
462+
const QString save_policy_path = values.value("save_policy_path").toString();
463+
const QString load_policy_path = values.value("load_policy_path").toString();
464+
const QString save_display_path = values.value("save_display_path").toString();
465+
const QString load_display_path = values.value("load_display_path").toString();
466+
461467
//policy
462468
if (policy == "-2")
463469
settings.change_default_policy("last");
@@ -488,6 +494,10 @@ namespace MediaConch
488494
else
489495
settings.change_default_parsespeed(parsespeed.toStdString());
490496

497+
//displaycaptions
498+
if (!displaycaptions.isEmpty())
499+
settings.change_displaycaptions_option(displaycaptions.toStdString());
500+
491501
//Save report path
492502
std::string r_s_path;
493503
if (save_report_path == "last")

Source/GUI/Qt/WebCommonPage.h

+1-4
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,7 @@ public Q_SLOTS:
7878
const QString& verbosity, bool fixer, const QStringList&);
7979
QString on_file_from_db_selected();
8080
QString status_reports_multi(const QStringList& ids, const QStringList& policy_ids);
81-
void on_save_settings_selected(const QString& policy, const QString& display, const QString& verbosity, const QString& parsespeed,
82-
const QString& save_report, const QString& load_files,
83-
const QString& save_policy, const QString& load_policy,
84-
const QString& save_display, const QString& load_display);
81+
void on_save_settings_selected(const QJsonObject& values);
8582

8683
void menu_link_checker(const QString& name);
8784
void on_input_changed(const QString& inputName);

Source/GUI/Qt/mainwindow.cpp

+28-1
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,14 @@ int MainWindow::add_file_to_list(const QString& file, const QString& path,
267267
std::vector<std::string> opt_vec;
268268
for (int i = 0; i < options.size(); ++i)
269269
opt_vec.push_back(options[i].toUtf8().data());
270+
271+
std::string displaycaptions_option = uisettings.get_displaycaptions_option();
272+
if (!displaycaptions_option.empty())
273+
{
274+
opt_vec.push_back("file_displaycaptions");
275+
opt_vec.push_back(displaycaptions_option);
276+
};
277+
270278
if (workerfiles.add_file_to_list(filename, filepath, policy.toInt(), display_i, verbosity_i, fixer, force, create_policy, opt_vec, err) < 0)
271279
return -1;
272280
return 0;
@@ -291,6 +299,13 @@ int MainWindow::add_attachment_to_list(const QString& file, int policy, int disp
291299
for (int i = 0; i < options.size(); ++i)
292300
opt_vec.push_back(options[i].toUtf8().data());
293301

302+
std::string displaycaptions_option = uisettings.get_displaycaptions_option();
303+
if (!displaycaptions_option.empty())
304+
{
305+
opt_vec.push_back("file_displaycaptions");
306+
opt_vec.push_back(displaycaptions_option);
307+
};
308+
294309
std::string filename = std::string(file.toUtf8().data(), file.toUtf8().length());
295310
if (workerfiles.add_attachment_to_list(filename, policy, display, verbosity, opt_vec, err) < 0)
296311
return -1;
@@ -331,7 +346,19 @@ int MainWindow::analyze_force_file_to_list(long id, std::string& err)
331346
if (db)
332347
db->ui_reset_file_for_reload(fr);
333348

334-
if (workerfiles.add_file_to_list(fr->filename, fr->filepath, fr->policy, fr->display, fr->verbosity, false, true, false, fr->options, err) < 0)
349+
std::vector<std::string> options = fr->options;
350+
std::vector<std::string>::iterator it = std::find(options.begin(), options.end(), "file_displaycaptions");
351+
if (it != options.end() && it + 1 != options.end())
352+
options.erase(it, it + 2);
353+
354+
std::string displaycaptions_option = uisettings.get_displaycaptions_option();
355+
if (!displaycaptions_option.empty())
356+
{
357+
options.push_back("file_displaycaptions");
358+
options.push_back(displaycaptions_option);
359+
};
360+
361+
if (workerfiles.add_file_to_list(fr->filename, fr->filepath, fr->policy, fr->display, fr->verbosity, false, true, false, options, err) < 0)
335362
return -1;
336363

337364
return 0;

Source/GUI/Qt/settingswindow.cpp

+43
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ void SettingsWindow::fill_settings_html(QString& html)
9999
QString parsespeed;
100100
create_parsespeed_options(parsespeed);
101101
add_parsespeed_to_html_selection(parsespeed, html, "settings_parsespeed_selector");
102+
103+
QString displaycaptions;
104+
create_displaycaptions_options(displaycaptions);
105+
add_displaycaptions_to_html_selection(displaycaptions, html, "settings_displaycaptions_selector");
102106
}
103107

104108
//---------------------------------------------------------------------------
@@ -269,6 +273,45 @@ void SettingsWindow::create_parsespeed_options(QString& parsespeed)
269273
parsespeed += QString("value=\"1\">Full (1)</option>");
270274
}
271275

276+
//---------------------------------------------------------------------------
277+
void SettingsWindow::add_displaycaptions_to_html_selection(QString& displaycaptions, QString& html, const QString& selector)
278+
{
279+
QRegExp reg("class=\"displaycaptionsList form-control\">");
280+
int pos = html.indexOf(selector);
281+
282+
reg.setMinimal(true);
283+
284+
if (pos == -1)
285+
return;
286+
287+
if ((pos = reg.indexIn(html, pos)) != -1)
288+
{
289+
pos += reg.matchedLength();
290+
html.insert(pos, displaycaptions);
291+
}
292+
}
293+
294+
//---------------------------------------------------------------------------
295+
void SettingsWindow::create_displaycaptions_options(QString& displaycaptions)
296+
{
297+
std::string selected_displaycaptions_option = main_window->get_settings().get_displaycaptions_option();
298+
299+
displaycaptions += QString("<option ");
300+
if ("Content" == selected_displaycaptions_option)
301+
displaycaptions += QString("selected=\"selected\" ");
302+
displaycaptions += QString("value=\"Content\">When content is detected</option>");
303+
304+
displaycaptions += QString("<option ");
305+
if ("" == selected_displaycaptions_option || "Command" == selected_displaycaptions_option)
306+
displaycaptions += QString("selected=\"selected\" ");
307+
displaycaptions += QString("value=\"Command\">When content or a command is detected</option>");
308+
309+
displaycaptions += QString("<option ");
310+
if ("Stream" == selected_displaycaptions_option)
311+
displaycaptions += QString("selected=\"selected\" ");
312+
displaycaptions += QString("value=\"Stream\">Even when no content or command is detected</option>");
313+
}
314+
272315
//---------------------------------------------------------------------------
273316
void SettingsWindow::add_policy_to_html_selection(QString& policies, QString& html, const QString& selector)
274317
{

Source/GUI/Qt/settingswindow.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ class SettingsWindow : public CommonWebWindow
3535
void create_verbosity_options(QString& verbosity);
3636
void add_parsespeed_to_html_selection(QString& parsespeed, QString& html, const QString& selector);
3737
void create_parsespeed_options(QString& parsespeed);
38-
38+
void add_displaycaptions_to_html_selection(QString& displaycaptions, QString& html, const QString& selector);
39+
void create_displaycaptions_options(QString& displaycaptions);
3940
void create_html_base(QString& base, const QString& settings);
4041
void change_qt_scripts_in_template(QString& html);
4142
void set_webmachine_script_in_template(QString& html);

Source/GUI/Qt/uisettings.cpp

+20
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ int UiSettings::init()
7878
return -1;
7979
if (database->ui_settings_get_last_load_display_path(last_load_display_path))
8080
return -1;
81+
if (database->ui_settings_get_displaycaptions_option(displaycaptions_option))
82+
return -1;
8183

8284
if (database->ui_settings_get_mco_token(mco_token))
8385
return -1;
@@ -399,6 +401,24 @@ void UiSettings::change_last_save_display_path(const std::string& path)
399401
last_save_display_path = path;
400402
}
401403

404+
//---------------------------------------------------------------------------
405+
std::string UiSettings::get_displaycaptions_option() const
406+
{
407+
return displaycaptions_option;
408+
}
409+
410+
//---------------------------------------------------------------------------
411+
void UiSettings::change_displaycaptions_option(const std::string& option)
412+
{
413+
if (!database || displaycaptions_option == option)
414+
return;
415+
416+
if (database->ui_settings_save_displaycaptions_option(option) < 0)
417+
return;
418+
419+
displaycaptions_option = option;
420+
}
421+
402422
//---------------------------------------------------------------------------
403423
std::string UiSettings::get_last_load_files_path() const
404424
{

Source/GUI/Qt/uisettings.h

+7
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ class UiSettings
7171
std::string get_last_save_display_path() const;
7272
void change_last_save_display_path(const std::string& path);
7373

74+
// Options
75+
std::string get_displaycaptions_option() const;
76+
void change_displaycaptions_option(const std::string& option);
77+
7478
// MCO Token
7579
std::string get_mco_token() const;
7680
void change_mco_token(const std::string& token);
@@ -100,6 +104,9 @@ class UiSettings
100104
std::string last_save_policy_path;
101105
std::string last_save_display_path;
102106

107+
//Options
108+
std::string displaycaptions_option;
109+
103110
//MCO Token
104111
std::string mco_token;
105112

0 commit comments

Comments
 (0)