Skip to content

Commit

Permalink
V2022.11.0-beta1
Browse files Browse the repository at this point in the history
  • Loading branch information
nlogozzo committed Nov 6, 2022
1 parent a03a762 commit e078200
Show file tree
Hide file tree
Showing 20 changed files with 142 additions and 63 deletions.
3 changes: 2 additions & 1 deletion meson.build
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
project('org.nickvision.tubeconverter', ['cpp', 'c'], version: '2022.10.3', meson_version: '>= 0.63.0', default_options: ['warning_level=3', 'werror=false', 'cpp_std=c++20'])
project('org.nickvision.tubeconverter', ['cpp', 'c'], version: '2022.11.0', meson_version: '>= 0.63.0', default_options: ['warning_level=3', 'werror=false', 'cpp_std=c++20'])

gnome = import('gnome')

Expand All @@ -8,6 +8,7 @@ adwaita = dependency('libadwaita-1', version: '>= 1.2.0')
jsoncpp = dependency('jsoncpp')

subdir('src')
subdir('po')

executable('org.nickvision.tubeconverter', sources, dependencies: [threads, adwaita, jsoncpp], install: true)
install_data('yt-dlp', install_dir: 'bin', install_mode: 'rwxrwxrwx')
Expand Down
2 changes: 1 addition & 1 deletion org.nickvision.tubeconverter.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
{
"type": "git",
"url": "https://github.com/nlogozzo/NickvisionTubeConverter.git",
"tag": "2022.10.3"
"tag": "2022.11.0-beta1"
}
]
}
Expand Down
5 changes: 2 additions & 3 deletions org.nickvision.tubeconverter.metainfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,9 @@
<binary>org.nickvision.tubeconverter</binary>
</provides>
<releases>
<release version="2022.10.3" date="2022-10-17">
<release version="2022.11.0-beta1" date="2022-11-06">
<description>
<p>- Added a preference to embed metadata in a download</p>
<p>- Added the ability to download subtitles for a video</p>
<p>- Added translation support</p>
</description>
</release>
</releases>
Expand Down
Empty file added po/LINGUAS
Empty file.
9 changes: 9 additions & 0 deletions po/POTFILES
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
src/models/download.cpp
src/ui/application.cpp
src/ui/controls/comboboxdialog.cpp
src/ui/controls/downloadrow.cpp
src/ui/controls/entrydialog.cpp
src/ui/views/adddownloaddialog.cpp
src/ui/views/mainwindow.cpp
src/ui/views/preferencesdialog.cpp
src/ui/views/shortcutsdialog.cpp
5 changes: 5 additions & 0 deletions po/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
i18n = import('i18n')
# define GETTEXT_PACKAGE and LOCALE_DIR
add_project_arguments('-DGETTEXT_PACKAGE="' + meson.project_name() + '"', language:'cpp')
add_project_arguments('-DLOCALE_DIR="' + join_paths(get_option('prefix'), get_option('localedir')) + '"', language:'cpp')
i18n.gettext(meson.project_name())
3 changes: 3 additions & 0 deletions src/helpers/stringhelpers.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include "stringhelpers.hpp"

using namespace NickvisionTubeConverter::Helpers;
29 changes: 29 additions & 0 deletions src/helpers/stringhelpers.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#pragma once

#include <memory>
#include <stdexcept>
#include <string>

namespace NickvisionTubeConverter::Helpers::StringHelpers
{
/**
* Formats a string similarly to sprintf in C
*
* @param format The source string
* @param args The arguments to be added
* @returns The formatted string
*/
template <typename... Args>
std::string format(const std::string& format, Args... args)
{
int size_s{ std::snprintf(nullptr, 0, format.c_str(), args...) + 1 }; // Extra space for '\0'
if (size_s <= 0)
{
throw std::runtime_error("Error during formatting.");
}
size_t size{ static_cast<size_t>(size_s) };
std::unique_ptr<char[]> buf{ new char[size] };
std::snprintf(buf.get(), size, format.c_str(), args...);
return { buf.get(), buf.get() + size - 1 }; // We don't want the '\0' inside
}
}
5 changes: 5 additions & 0 deletions src/helpers/translation.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

#include <libintl.h>

#define _(String) gettext(String)
7 changes: 7 additions & 0 deletions src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#include <libintl.h>
#include "ui/application.hpp"

using namespace NickvisionTubeConverter::UI;
Expand All @@ -12,6 +13,12 @@ using namespace NickvisionTubeConverter::UI;
*/
int main(int argc, char* argv[])
{
//Translations
setlocale(LC_ALL, "");
bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR);
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
textdomain(GETTEXT_PACKAGE);
//Start App
Application app("org.nickvision.tubeconverter");
return app.run(argc, argv);
}
Expand Down
7 changes: 5 additions & 2 deletions src/meson.build
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
sources = files('main.cpp',
'helpers/translation.hpp',
'helpers/stringhelpers.hpp',
'helpers/stringhelpers.cpp',
'helpers/cmdhelpers.hpp',
'helpers/cmdhelpers.cpp',
'models/appinfo.hpp',
'models/appinfo.cpp',
'models/configuration.hpp',
Expand All @@ -7,8 +12,6 @@ sources = files('main.cpp',
'models/mediafiletype.cpp',
'models/download.hpp',
'models/download.cpp',
'helpers/cmdhelpers.hpp',
'helpers/cmdhelpers.cpp',
'controllers/mainwindowcontroller.hpp',
'controllers/mainwindowcontroller.cpp',
'controllers/preferencesdialogcontroller.hpp',
Expand Down
3 changes: 2 additions & 1 deletion src/models/download.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <utility>
#include <signal.h>
#include "../helpers/cmdhelpers.hpp"
#include "../helpers/translation.hpp"

using namespace NickvisionTubeConverter::Helpers;
using namespace NickvisionTubeConverter::Models;
Expand Down Expand Up @@ -120,7 +121,7 @@ bool Download::download(bool embedMetadata)
if (result.first != 0)
{
std::lock_guard<std::mutex> lock{ m_mutex };
m_log += "\n[Error] Unable to download video";
m_log += _("\n[Error] Unable to download video");
return false;
}
return true;
Expand Down
7 changes: 4 additions & 3 deletions src/ui/application.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "application.hpp"
#include "../controllers/mainwindowcontroller.hpp"
#include "../helpers/translation.hpp"

using namespace NickvisionTubeConverter::Controllers;
using namespace NickvisionTubeConverter::Models;
Expand All @@ -12,9 +13,9 @@ Application::Application(const std::string& id, GApplicationFlags flags) : m_adw
m_appInfo.setId(id);
m_appInfo.setName("Nickvision Tube Converter");
m_appInfo.setShortName("Tube Converter");
m_appInfo.setDescription("An easy-to-use YouTube video downloader.");
m_appInfo.setVersion("2022.10.3");
m_appInfo.setChangelog("<ul><li>Added a preference to embed metadata in a download</li><li>Added the ability to download subtitles for a video</li></ul>");
m_appInfo.setDescription(_("An easy-to-use YouTube video downloader."));
m_appInfo.setVersion("2022.11.0-beta1");
m_appInfo.setChangelog("<ul><li>Added translation support</li></ul>");
m_appInfo.setGitHubRepo("https://github.com/nlogozzo/NickvisionTubeConverter");
m_appInfo.setIssueTracker("https://github.com/nlogozzo/NickvisionTubeConverter/issues/new");
m_appInfo.setSupportUrl("https://github.com/nlogozzo/NickvisionTubeConverter/discussions");
Expand Down
3 changes: 2 additions & 1 deletion src/ui/controls/comboboxdialog.cpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#include "comboboxdialog.hpp"
#include "../../helpers/translation.hpp"

using namespace NickvisionTubeConverter::UI::Controls;

ComboBoxDialog::ComboBoxDialog(GtkWindow* parent, const std::string& title, const std::string& description, const std::string& rowTitle, const std::vector<std::string>& choices) : m_choices{ choices }, m_response{ "cancel" }, m_gobj{ adw_message_dialog_new(parent, title.c_str(), description.c_str()) }
{
//Dialog Settings
gtk_window_set_hide_on_close(GTK_WINDOW(m_gobj), true);
adw_message_dialog_add_responses(ADW_MESSAGE_DIALOG(m_gobj), "cancel", "Cancel", "ok", "OK", nullptr);
adw_message_dialog_add_responses(ADW_MESSAGE_DIALOG(m_gobj), "cancel", _("Cancel"), "ok", _("OK"), nullptr);
adw_message_dialog_set_response_appearance(ADW_MESSAGE_DIALOG(m_gobj), "ok", ADW_RESPONSE_SUGGESTED);
adw_message_dialog_set_default_response(ADW_MESSAGE_DIALOG(m_gobj), "cancel");
adw_message_dialog_set_close_response(ADW_MESSAGE_DIALOG(m_gobj), "cancel");
Expand Down
7 changes: 4 additions & 3 deletions src/ui/controls/downloadrow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#include <future>
#include <regex>
#include "longmessagedialog.hpp"
#include "../../helpers/translation.hpp"

using namespace NickvisionTubeConverter::Models;
using namespace NickvisionTubeConverter::UI::Controls;
Expand All @@ -27,7 +28,7 @@ DownloadRow::DownloadRow(GtkWindow* parent, const std::shared_ptr<Download>& dow
gtk_widget_set_valign(m_btnStop, GTK_ALIGN_CENTER);
gtk_style_context_add_class(gtk_widget_get_style_context(m_btnStop), "flat");
gtk_button_set_icon_name(GTK_BUTTON(m_btnStop), "media-playback-stop-symbolic");
gtk_widget_set_tooltip_text(m_btnStop, "Stop Download");
gtk_widget_set_tooltip_text(m_btnStop, _("Stop Download"));
g_signal_connect(m_btnStop, "clicked", G_CALLBACK((void (*)(GtkButton*, gpointer))[](GtkButton*, gpointer data) { reinterpret_cast<DownloadRow*>(data)->onStop(); }), this);
gtk_box_append(GTK_BOX(m_boxDownloading), m_btnStop);
//Box Done
Expand All @@ -43,7 +44,7 @@ DownloadRow::DownloadRow(GtkWindow* parent, const std::shared_ptr<Download>& dow
gtk_widget_set_valign(m_btnViewLogs, GTK_ALIGN_CENTER);
gtk_style_context_add_class(gtk_widget_get_style_context(m_btnViewLogs), "flat");
gtk_button_set_icon_name(GTK_BUTTON(m_btnViewLogs), "dialog-information-symbolic");
gtk_widget_set_tooltip_text(m_btnViewLogs, "View Logs");
gtk_widget_set_tooltip_text(m_btnViewLogs, _("View Logs"));
g_signal_connect(m_btnViewLogs, "clicked", G_CALLBACK((void (*)(GtkButton*, gpointer))[](GtkButton*, gpointer data) { reinterpret_cast<DownloadRow*>(data)->onViewLogs(); }), this);
gtk_box_append(GTK_BOX(m_boxDone), m_btnViewLogs);
//View Stack
Expand Down Expand Up @@ -83,6 +84,6 @@ void DownloadRow::onStop()

void DownloadRow::onViewLogs()
{
LongMessageDialog messageDialog{ m_parent, "Logs", m_download->getLog(), "OK" };
LongMessageDialog messageDialog{ m_parent, _("Logs"), m_download->getLog(), _("OK") };
messageDialog.run();
}
3 changes: 2 additions & 1 deletion src/ui/controls/entrydialog.cpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#include "entrydialog.hpp"
#include "../../helpers/translation.hpp"

using namespace NickvisionTubeConverter::UI::Controls;

EntryDialog::EntryDialog(GtkWindow* parent, const std::string& title, const std::string& description, const std::string& entryTitle) : m_response{ "cancel" }, m_gobj{ adw_message_dialog_new(parent, title.c_str(), description.c_str()) }
{
//Dialog Settings
gtk_window_set_hide_on_close(GTK_WINDOW(m_gobj), true);
adw_message_dialog_add_responses(ADW_MESSAGE_DIALOG(m_gobj), "cancel", "Cancel", "ok", "OK", nullptr);
adw_message_dialog_add_responses(ADW_MESSAGE_DIALOG(m_gobj), "cancel", _("Cancel"), "ok", _("OK"), nullptr);
adw_message_dialog_set_response_appearance(ADW_MESSAGE_DIALOG(m_gobj), "ok", ADW_RESPONSE_SUGGESTED);
adw_message_dialog_set_default_response(ADW_MESSAGE_DIALOG(m_gobj), "cancel");
adw_message_dialog_set_close_response(ADW_MESSAGE_DIALOG(m_gobj), "cancel");
Expand Down
39 changes: 20 additions & 19 deletions src/ui/views/adddownloaddialog.cpp
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
#include "adddownloaddialog.hpp"
#include "../controls/progressdialog.hpp"
#include "../../helpers/translation.hpp"

using namespace NickvisionTubeConverter::Controllers;
using namespace NickvisionTubeConverter::Models;
using namespace NickvisionTubeConverter::UI::Controls;
using namespace NickvisionTubeConverter::UI::Views;

AddDownloadDialog::AddDownloadDialog(GtkWindow* parent, AddDownloadDialogController& controller) : m_controller{ controller }, m_parent{ parent }, m_gobj{ adw_message_dialog_new(m_parent, "Add Download", nullptr) }
AddDownloadDialog::AddDownloadDialog(GtkWindow* parent, AddDownloadDialogController& controller) : m_controller{ controller }, m_parent{ parent }, m_gobj{ adw_message_dialog_new(m_parent, _("Add Download"), nullptr) }
{
//Dialog Settings
gtk_window_set_hide_on_close(GTK_WINDOW(m_gobj), true);
adw_message_dialog_add_responses(ADW_MESSAGE_DIALOG(m_gobj), "cancel", "Cancel", "ok", "OK", nullptr);
adw_message_dialog_add_responses(ADW_MESSAGE_DIALOG(m_gobj), "cancel", _("Cancel"), "ok", _("OK"), nullptr);
adw_message_dialog_set_response_appearance(ADW_MESSAGE_DIALOG(m_gobj), "ok", ADW_RESPONSE_SUGGESTED);
adw_message_dialog_set_default_response(ADW_MESSAGE_DIALOG(m_gobj), "cancel");
adw_message_dialog_set_close_response(ADW_MESSAGE_DIALOG(m_gobj), "cancel");
Expand All @@ -20,41 +21,41 @@ AddDownloadDialog::AddDownloadDialog(GtkWindow* parent, AddDownloadDialogControl
//Video Url
m_rowVideoUrl = adw_entry_row_new();
gtk_widget_set_size_request(m_rowVideoUrl, 420, -1);
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowVideoUrl), "Video Url");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowVideoUrl), _("Video Url"));
adw_preferences_group_add(ADW_PREFERENCES_GROUP(m_preferencesGroup), m_rowVideoUrl);
//File Type
m_rowFileType = adw_combo_row_new();
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowFileType), "File Type");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowFileType), _("File Type"));
adw_combo_row_set_model(ADW_COMBO_ROW(m_rowFileType), G_LIST_MODEL(gtk_string_list_new(new const char*[7]{ "MP4", "WEBM", "MP3", "OPUS", "FLAC", "WAV", nullptr })));
adw_preferences_group_add(ADW_PREFERENCES_GROUP(m_preferencesGroup), m_rowFileType);
g_signal_connect(m_rowFileType, "notify::selected-item", G_CALLBACK((void (*)(GObject*, GParamSpec*, gpointer))[](GObject*, GParamSpec*, gpointer data) { reinterpret_cast<AddDownloadDialog*>(data)->onFileTypeChanged(); }), this);
//Quality
m_rowQuality = adw_combo_row_new();
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowQuality), "Quality");
adw_combo_row_set_model(ADW_COMBO_ROW(m_rowQuality), G_LIST_MODEL(gtk_string_list_new(new const char*[4]{ "Best", "Good", "Worst", nullptr })));
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowQuality), _("Quality"));
adw_combo_row_set_model(ADW_COMBO_ROW(m_rowQuality), G_LIST_MODEL(gtk_string_list_new(new const char*[4]{ _("Best"), _("Good"), _("Worst"), nullptr })));
adw_preferences_group_add(ADW_PREFERENCES_GROUP(m_preferencesGroup), m_rowQuality);
//Subtitles
m_rowSubtitles = adw_combo_row_new();
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowSubtitles), "Subtitles");
adw_combo_row_set_model(ADW_COMBO_ROW(m_rowSubtitles), G_LIST_MODEL(gtk_string_list_new(new const char*[4]{ "None", "VTT", "SRT", nullptr })));
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowSubtitles), _("Subtitles"));
adw_combo_row_set_model(ADW_COMBO_ROW(m_rowSubtitles), G_LIST_MODEL(gtk_string_list_new(new const char*[4]{ _("None"), "VTT", "SRT", nullptr })));
adw_preferences_group_add(ADW_PREFERENCES_GROUP(m_preferencesGroup), m_rowSubtitles);
//Save Folder
m_btnSelectSaveFolder = gtk_button_new();
gtk_widget_set_valign(m_btnSelectSaveFolder, GTK_ALIGN_CENTER);
gtk_style_context_add_class(gtk_widget_get_style_context(m_btnSelectSaveFolder), "flat");
gtk_button_set_icon_name(GTK_BUTTON(m_btnSelectSaveFolder), "folder-open-symbolic");
gtk_widget_set_tooltip_text(m_btnSelectSaveFolder, "Select Save Folder");
gtk_widget_set_tooltip_text(m_btnSelectSaveFolder, _("Select Save Folder"));
g_signal_connect(m_btnSelectSaveFolder, "clicked", G_CALLBACK((void (*)(GtkButton*, gpointer))[](GtkButton*, gpointer data) { reinterpret_cast<AddDownloadDialog*>(data)->onSelectSaveFolder(); }), this);
m_rowSaveFolder = adw_entry_row_new();
gtk_widget_set_size_request(m_rowSaveFolder, 420, -1);
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowSaveFolder), "Save Folder");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowSaveFolder), _("Save Folder"));
adw_entry_row_add_suffix(ADW_ENTRY_ROW(m_rowSaveFolder), m_btnSelectSaveFolder);
gtk_editable_set_editable(GTK_EDITABLE(m_rowSaveFolder), false);
adw_preferences_group_add(ADW_PREFERENCES_GROUP(m_preferencesGroup), m_rowSaveFolder);
//New Filename
m_rowNewFilename = adw_entry_row_new();
gtk_widget_set_size_request(m_rowNewFilename, 420, -1);
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowNewFilename), "New Filename");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowNewFilename), _("New Filename"));
adw_preferences_group_add(ADW_PREFERENCES_GROUP(m_preferencesGroup), m_rowNewFilename);
//Layout
adw_message_dialog_set_extra_child(ADW_MESSAGE_DIALOG(m_gobj), m_preferencesGroup);
Expand All @@ -79,36 +80,36 @@ bool AddDownloadDialog::run()
{
gtk_widget_hide(m_gobj);
DownloadCheckStatus downloadCheckStatus{ DownloadCheckStatus::InvalidVideoUrl };
ProgressDialog progressDialog{ GTK_WINDOW(m_parent), "Preparing download...", [&]() { downloadCheckStatus = m_controller.setDownload(gtk_editable_get_text(GTK_EDITABLE(m_rowVideoUrl)), adw_combo_row_get_selected(ADW_COMBO_ROW(m_rowFileType)), gtk_editable_get_text(GTK_EDITABLE(m_rowSaveFolder)), gtk_editable_get_text(GTK_EDITABLE(m_rowNewFilename)), adw_combo_row_get_selected(ADW_COMBO_ROW(m_rowQuality)), adw_combo_row_get_selected(ADW_COMBO_ROW(m_rowSubtitles))); } };
ProgressDialog progressDialog{ GTK_WINDOW(m_parent), _("Preparing download..."), [&]() { downloadCheckStatus = m_controller.setDownload(gtk_editable_get_text(GTK_EDITABLE(m_rowVideoUrl)), adw_combo_row_get_selected(ADW_COMBO_ROW(m_rowFileType)), gtk_editable_get_text(GTK_EDITABLE(m_rowSaveFolder)), gtk_editable_get_text(GTK_EDITABLE(m_rowNewFilename)), adw_combo_row_get_selected(ADW_COMBO_ROW(m_rowQuality)), adw_combo_row_get_selected(ADW_COMBO_ROW(m_rowSubtitles))); } };
progressDialog.run();
//Invalid Download
if(downloadCheckStatus != DownloadCheckStatus::Valid)
{
//Reset UI
gtk_style_context_remove_class(gtk_widget_get_style_context(m_rowVideoUrl), "error");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowVideoUrl), "Video Url");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowVideoUrl), _("Video Url"));
gtk_style_context_remove_class(gtk_widget_get_style_context(m_rowSaveFolder), "error");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowSaveFolder), "Save Folder");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowSaveFolder), _("Save Folder"));
//Mark Error
if(downloadCheckStatus == DownloadCheckStatus::EmptyVideoUrl)
{
gtk_style_context_add_class(gtk_widget_get_style_context(m_rowVideoUrl), "error");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowVideoUrl), "Video Url (Empty)");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowVideoUrl), _("Video Url (Empty)"));
}
else if(downloadCheckStatus == DownloadCheckStatus::InvalidVideoUrl)
{
gtk_style_context_add_class(gtk_widget_get_style_context(m_rowVideoUrl), "error");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowVideoUrl), "Video Url (Invalid)");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowVideoUrl), _("Video Url (Invalid)"));
}
else if(downloadCheckStatus == DownloadCheckStatus::EmptySaveFolder)
{
gtk_style_context_add_class(gtk_widget_get_style_context(m_rowSaveFolder), "error");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowSaveFolder), "Save Folder (Empty)");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowSaveFolder), _("Save Folder (Empty)"));
}
else if(downloadCheckStatus == DownloadCheckStatus::InvalidSaveFolder)
{
gtk_style_context_add_class(gtk_widget_get_style_context(m_rowSaveFolder), "error");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowSaveFolder), "Save Folder (Invalid)");
adw_preferences_row_set_title(ADW_PREFERENCES_ROW(m_rowSaveFolder), _("Save Folder (Invalid)"));
}
//Prompt User to Fix
return run();
Expand All @@ -131,7 +132,7 @@ void AddDownloadDialog::onFileTypeChanged()

void AddDownloadDialog::onSelectSaveFolder()
{
GtkFileChooserNative* openFolderDialog{ gtk_file_chooser_native_new("Select Save Folder", GTK_WINDOW(m_gobj), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, "_Open", "_Cancel") };
GtkFileChooserNative* openFolderDialog{ gtk_file_chooser_native_new(_("Select Save Folder"), GTK_WINDOW(m_gobj), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, _("_Open"), _("_Cancel")) };
gtk_native_dialog_set_modal(GTK_NATIVE_DIALOG(openFolderDialog), true);
g_signal_connect(openFolderDialog, "response", G_CALLBACK((void (*)(GtkNativeDialog*, gint, gpointer))([](GtkNativeDialog* dialog, gint response_id, gpointer data)
{
Expand Down
Loading

0 comments on commit e078200

Please sign in to comment.