|
@@ -1,37 +1,20 @@
|
|
|
#include "PrefWindow.hpp"
|
|
|
+#include "core.hpp"
|
|
|
#include <array>
|
|
|
#include <fstream>
|
|
|
#include <iostream>
|
|
|
#include <gtkmm/stringlist.h>
|
|
|
#include <assert.h>
|
|
|
#include <nlohmann/json.hpp>
|
|
|
+#include "app.hpp"
|
|
|
+#include <YoutubeApi/youtubeapi.hpp>
|
|
|
|
|
|
using json = nlohmann::json;
|
|
|
|
|
|
-namespace
|
|
|
-{
|
|
|
- struct QualityTypeStruct
|
|
|
- {
|
|
|
- // Значение ключа в Gio::Settings (240,360,480...)
|
|
|
- int value;
|
|
|
- // Текст для надписи
|
|
|
- Glib::ustring text;
|
|
|
- };
|
|
|
-
|
|
|
- const std::array<QualityTypeStruct, 4> quality_types =
|
|
|
- {
|
|
|
- QualityTypeStruct{240, "240p"},
|
|
|
- QualityTypeStruct{360, "360p"},
|
|
|
- QualityTypeStruct{480, "480p"},
|
|
|
- QualityTypeStruct{720, "720p"}
|
|
|
- };
|
|
|
-} // anonymous namespace
|
|
|
-
|
|
|
namespace components {
|
|
|
PrefWindow::PrefWindow(
|
|
|
BaseObjectType* cobject,
|
|
|
- const Glib::RefPtr<Gtk::Builder>& refBuilder
|
|
|
- )
|
|
|
+ const Glib::RefPtr<Gtk::Builder>& refBuilder)
|
|
|
: Gtk::Window(cobject)
|
|
|
, m_builder(refBuilder)
|
|
|
{
|
|
@@ -41,7 +24,8 @@ namespace components {
|
|
|
"240p",
|
|
|
"360p",
|
|
|
"480p",
|
|
|
- "720p"
|
|
|
+ "720p",
|
|
|
+ "1080p"
|
|
|
};
|
|
|
|
|
|
m_quality_dropdown = m_builder->get_widget<Gtk::DropDown>("quality_entry");
|
|
@@ -58,25 +42,39 @@ namespace components {
|
|
|
m_quality_dropdown->set_model(string_list);
|
|
|
|
|
|
m_save_btn->signal_clicked().connect(sigc::mem_fun(
|
|
|
- *this, &PrefWindow::on_save_clicked));
|
|
|
+ *this, &PrefWindow::onSaveClicked));
|
|
|
m_cancel_btn->signal_clicked().connect(sigc::mem_fun(
|
|
|
- *this, &PrefWindow::on_cancel_clicked));
|
|
|
- }
|
|
|
+ *this, &PrefWindow::onCancelClicked));
|
|
|
|
|
|
- void PrefWindow::init(
|
|
|
- std::string config_path,
|
|
|
- Glib::ustring api_key,
|
|
|
- int quality
|
|
|
- )
|
|
|
- {
|
|
|
- m_config_path = config_path;
|
|
|
- m_apikey_entry->set_text(api_key);
|
|
|
+ m_apikey_entry->set_text(core::Settings::getApiKey());
|
|
|
+
|
|
|
+ int selected_quality_index;
|
|
|
+ switch(core::Settings::getQuality())
|
|
|
+ {
|
|
|
+ case 240:
|
|
|
+ selected_quality_index = 0;
|
|
|
+ break;
|
|
|
+ case 360:
|
|
|
+ selected_quality_index = 1;
|
|
|
+ break;
|
|
|
+ case 480:
|
|
|
+ selected_quality_index = 2;
|
|
|
+ break;
|
|
|
+ case 720:
|
|
|
+ selected_quality_index = 3;
|
|
|
+ break;
|
|
|
+ case 1080:
|
|
|
+ selected_quality_index = 4;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ selected_quality_index = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ m_quality_dropdown->set_selected(selected_quality_index);
|
|
|
}
|
|
|
|
|
|
PrefWindow* PrefWindow::create(
|
|
|
- Gtk::Window& parent,
|
|
|
- std::string config_path,
|
|
|
- std::string api_key
|
|
|
+ Gtk::Window& parent
|
|
|
)
|
|
|
{
|
|
|
auto builder = Gtk::Builder::create_from_resource("/src/YTMPV/res/PrefsWindow.ui");
|
|
@@ -84,33 +82,63 @@ namespace components {
|
|
|
assert(win != nullptr);
|
|
|
|
|
|
win->set_transient_for(parent);
|
|
|
- win->init(config_path, api_key, 720);
|
|
|
return win;
|
|
|
}
|
|
|
|
|
|
- void PrefWindow::on_cancel_clicked()
|
|
|
+ void PrefWindow::onCancelClicked()
|
|
|
{
|
|
|
this->close();
|
|
|
}
|
|
|
|
|
|
- void PrefWindow::on_save_clicked()
|
|
|
+ void PrefWindow::onSaveClicked()
|
|
|
{
|
|
|
- this->save_config();
|
|
|
+ this->saveConfig();
|
|
|
this->close();
|
|
|
}
|
|
|
|
|
|
- void PrefWindow::save_config()
|
|
|
+ void PrefWindow::saveConfig()
|
|
|
{
|
|
|
- // Получение данных
|
|
|
+ // -- Получение данных --
|
|
|
+ // Ключ API
|
|
|
Glib::ustring api_key = m_apikey_entry->get_text();
|
|
|
+
|
|
|
+ // Качество
|
|
|
+ int quality;
|
|
|
+ int sel_index = m_quality_dropdown->get_selected();
|
|
|
+ switch(sel_index)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ quality = 240;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ quality = 360;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ quality = 480;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ quality = 720;
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ quality = 1080;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ quality = 240;
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
// Сериализация
|
|
|
- json j_object = { {"apikey", api_key}, {"quality", 480} };
|
|
|
+ json j_object = { {"apikey", api_key}, {"quality", quality} };
|
|
|
std::string dump = j_object.dump(1, '\t');
|
|
|
|
|
|
// Запись в файл
|
|
|
- std::ofstream config(m_config_path);
|
|
|
+ std::ofstream config(core::Settings::getConfigPath());
|
|
|
config << dump;
|
|
|
config.close();
|
|
|
+
|
|
|
+ // Пере-инициализация библиотек
|
|
|
+ ytapi::youtubeInit(api_key);
|
|
|
+ core::Settings::setApiKey(api_key);
|
|
|
+ core::Settings::setQuality(quality);
|
|
|
}
|
|
|
-}
|
|
|
+}
|