Make GUI work
This commit is contained in:
parent
eb5acd795c
commit
57fc45be61
@ -11,7 +11,7 @@ DatabaseWindow::~DatabaseWindow() {
|
|||||||
std::cout << "Deleting" << std::endl;
|
std::cout << "Deleting" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
DatabaseWindow::DatabaseWindow( bool _linux, Curl &_c ) : c(_c), linux(_linux) {
|
DatabaseWindow::DatabaseWindow( bool _linux ) : linux(_linux) {
|
||||||
set_title( "Database" );
|
set_title( "Database" );
|
||||||
|
|
||||||
set_default_size( 550, 350 );
|
set_default_size( 550, 350 );
|
||||||
@ -48,13 +48,15 @@ DatabaseWindow::DatabaseWindow( bool _linux, Curl &_c ) : c(_c), linux(_linux) {
|
|||||||
row[m_columns_database.m_col_show] = x["SHOW"];
|
row[m_columns_database.m_col_show] = x["SHOW"];
|
||||||
row[m_columns_database.m_col_path] = x["PATH"];
|
row[m_columns_database.m_col_path] = x["PATH"];
|
||||||
row[m_columns_database.m_col_lang] = x["LANGUAGE"];
|
row[m_columns_database.m_col_lang] = x["LANGUAGE"];
|
||||||
row[m_columns_database.m_col_url] = x["URL"];
|
row[m_columns_database.m_col_show_id] = x["TVID"];
|
||||||
|
row[m_columns_database.m_col_dvd] = x["DVD"];
|
||||||
}
|
}
|
||||||
|
|
||||||
m_tree_database->append_column_editable( "Show", m_columns_database.m_col_show );
|
m_tree_database->append_column_editable( "Show", m_columns_database.m_col_show );
|
||||||
m_tree_database->append_column_editable( "Path", m_columns_database.m_col_path );
|
m_tree_database->append_column_editable( "Path", m_columns_database.m_col_path );
|
||||||
m_tree_database->append_column_editable( "Language", m_columns_database.m_col_lang );
|
m_tree_database->append_column_editable( "Language", m_columns_database.m_col_lang );
|
||||||
m_tree_database->append_column_editable( "URL", m_columns_database.m_col_url );
|
m_tree_database->append_column_editable( "ID", m_columns_database.m_col_show_id );
|
||||||
|
m_tree_database->append_column_editable( "DVD", m_columns_database.m_col_dvd );
|
||||||
|
|
||||||
m_button_save->signal_clicked().connect(
|
m_button_save->signal_clicked().connect(
|
||||||
sigc::mem_fun( *this, &DatabaseWindow::save ) );
|
sigc::mem_fun( *this, &DatabaseWindow::save ) );
|
||||||
@ -73,13 +75,13 @@ void DatabaseWindow::save() {
|
|||||||
auto index = static_cast<size_t> ( x[m_columns_database.m_col_id] );
|
auto index = static_cast<size_t> ( x[m_columns_database.m_col_id] );
|
||||||
if( changed_rows.find(index) != changed_rows.end() ) {
|
if( changed_rows.find(index) != changed_rows.end() ) {
|
||||||
auto index = static_cast< size_t > ( x[m_columns_database.m_col_id] );
|
auto index = static_cast< size_t > ( x[m_columns_database.m_col_id] );
|
||||||
auto show = static_cast< std::string > ( x[m_columns_database.m_col_show] );
|
|
||||||
auto path = static_cast< std::string > ( x[m_columns_database.m_col_path] );
|
auto path = static_cast< std::string > ( x[m_columns_database.m_col_path] );
|
||||||
auto lang = static_cast< std::string > ( x[m_columns_database.m_col_lang] );
|
auto lang = static_cast< std::string > ( x[m_columns_database.m_col_lang] );
|
||||||
auto url = static_cast< std::string > ( x[m_columns_database.m_col_url] );
|
auto show_id = static_cast< std::string > ( x[m_columns_database.m_col_show_id] );
|
||||||
std::cout << index << " " << show << " " << path << " " << lang << " " << url << std::endl;
|
bool dvd = static_cast< std::string > ( x[m_columns_database.m_col_dvd] ) == "1";
|
||||||
changeDB( index, path, lang, url, c );
|
std::cout << index << " " << path << " " << lang << " " << show_id << " " << dvd << std::endl;
|
||||||
refreshSingleDB( index, linux, c );
|
changeDB( index, path, lang, show_id, dvd );
|
||||||
|
refreshSingleDB( index, linux );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cleanDB();
|
cleanDB();
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
class DatabaseWindow : public Gtk::Window {
|
class DatabaseWindow : public Gtk::Window {
|
||||||
public:
|
public:
|
||||||
DatabaseWindow() = delete;
|
DatabaseWindow() = delete;
|
||||||
DatabaseWindow( bool _linux, Curl &_c);
|
DatabaseWindow( bool _linux );
|
||||||
virtual ~DatabaseWindow();
|
virtual ~DatabaseWindow();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -43,19 +43,20 @@ protected:
|
|||||||
add(m_col_show);
|
add(m_col_show);
|
||||||
add(m_col_path);
|
add(m_col_path);
|
||||||
add(m_col_lang);
|
add(m_col_lang);
|
||||||
add(m_col_url);
|
add(m_col_show_id);
|
||||||
|
add(m_col_dvd);
|
||||||
}
|
}
|
||||||
Gtk::TreeModelColumn< size_t > m_col_id;
|
Gtk::TreeModelColumn< size_t > m_col_id;
|
||||||
Gtk::TreeModelColumn< std::string > m_col_show;
|
Gtk::TreeModelColumn< std::string > m_col_show;
|
||||||
Gtk::TreeModelColumn< std::string > m_col_path;
|
Gtk::TreeModelColumn< std::string > m_col_path;
|
||||||
Gtk::TreeModelColumn< std::string > m_col_lang;
|
Gtk::TreeModelColumn< std::string > m_col_lang;
|
||||||
Gtk::TreeModelColumn< std::string > m_col_url;
|
Gtk::TreeModelColumn< std::string > m_col_show_id;
|
||||||
|
Gtk::TreeModelColumn< std::string > m_col_dvd;
|
||||||
};
|
};
|
||||||
|
|
||||||
DatabaseColumns m_columns_database;
|
DatabaseColumns m_columns_database;
|
||||||
Glib::RefPtr< Gtk::ListStore > m_model;
|
Glib::RefPtr< Gtk::ListStore > m_model;
|
||||||
|
|
||||||
Curl &c;
|
|
||||||
bool linux;
|
bool linux;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -29,22 +29,14 @@ using char_t = char;
|
|||||||
// CLI functions
|
// CLI functions
|
||||||
void printHelp();
|
void printHelp();
|
||||||
|
|
||||||
string encodeUrl( const string &url );
|
|
||||||
bool searchSeason( const char_t *const path, size_t &season_pos );
|
bool searchSeason( const char_t *const path, size_t &season_pos );
|
||||||
bool searchSeason( const char_t *const path, size_t &season_pos, size_t &ep_pos );
|
bool searchSeason( const char_t *const path, size_t &season_pos, size_t &ep_pos );
|
||||||
|
|
||||||
void parseSeasonNumbers( std::set< int > &seasons_num, const char_t *argument );
|
void parseSeasonNumbers( std::set< int > &seasons_num, const char_t *argument );
|
||||||
|
|
||||||
string encodeUrl( const string &url );
|
|
||||||
|
|
||||||
#else
|
|
||||||
// GUI functions
|
|
||||||
|
|
||||||
std::vector< std::pair< string, string > >
|
|
||||||
getPossibleShows( string show, const string &language );
|
|
||||||
|
|
||||||
#endif // GUI
|
#endif // GUI
|
||||||
|
|
||||||
|
string encodeUrl( const string &url );
|
||||||
string userHome();
|
string userHome();
|
||||||
|
|
||||||
void prepareDB( const string &_pattern = TEXT( "" ) );
|
void prepareDB( const string &_pattern = TEXT( "" ) );
|
||||||
@ -53,7 +45,7 @@ void addToDB( string &show, const string &path, const string &language,
|
|||||||
bool linux, bool dvd );
|
bool linux, bool dvd );
|
||||||
#else
|
#else
|
||||||
void addToDB( string &show, const string &path, const string &language,
|
void addToDB( string &show, const string &path, const string &language,
|
||||||
const string &url, const string &pattern, bool linux, bool dvd );
|
const string &id, const string &pattern, bool linux, bool dvd );
|
||||||
std::vector< std::unordered_map< std::string, std::string > > dbGetShows();
|
std::vector< std::unordered_map< std::string, std::string > > dbGetShows();
|
||||||
#endif
|
#endif
|
||||||
void removeFromDB( const string &path );
|
void removeFromDB( const string &path );
|
||||||
|
5
gui.cpp
5
gui.cpp
@ -1,11 +1,16 @@
|
|||||||
#include <gtkmm/application.h>
|
#include <gtkmm/application.h>
|
||||||
|
|
||||||
#include "mainwindow.hpp"
|
#include "mainwindow.hpp"
|
||||||
|
#include "tv_rename.hpp"
|
||||||
|
|
||||||
|
#define API_KEY "42B66F5E-C6BF-423F-ADF9-CC97163472F6"
|
||||||
|
|
||||||
int main( int argc, char **argv ) {
|
int main( int argc, char **argv ) {
|
||||||
auto app = Gtk::Application::create(
|
auto app = Gtk::Application::create(
|
||||||
argc, argv, "org.idonthaveanorganization.tvrename" );
|
argc, argv, "org.idonthaveanorganization.tvrename" );
|
||||||
|
|
||||||
|
authenticate( API_KEY );
|
||||||
|
|
||||||
MainWindow mw( app );
|
MainWindow mw( app );
|
||||||
|
|
||||||
return app->run( mw );
|
return app->run( mw );
|
||||||
|
@ -12,15 +12,6 @@
|
|||||||
#include "databasewindow.hpp"
|
#include "databasewindow.hpp"
|
||||||
#include "tv_rename.hpp"
|
#include "tv_rename.hpp"
|
||||||
|
|
||||||
constexpr std::array< const char *, 46 > languages{
|
|
||||||
"en", "English", "sv", "Svenska", "no", "Norsk", "da", "Dansk",
|
|
||||||
"fi", "Suomeksi", "nl", "Nederlands", "de", "Deutsch", "it", "Italiano",
|
|
||||||
"es", "Español", "fr", "Français", "pl", "Polski", "hu", "Magyar",
|
|
||||||
"el", "Greek", "tr", "Turkish", "ru", "Russian", "he", "Hebrew",
|
|
||||||
"ja", "Japanese", "pt", "Portuguese", "zh", "Chinese", "cs", "Czech",
|
|
||||||
"sl", "Slovenian", "hr", "Croatian", "ko", "Korea"
|
|
||||||
};
|
|
||||||
|
|
||||||
void MainWindow::chooseFile() {
|
void MainWindow::chooseFile() {
|
||||||
// create a dialog for choosing directory
|
// create a dialog for choosing directory
|
||||||
Gtk::FileChooserDialog dialog( "Select a directory",
|
Gtk::FileChooserDialog dialog( "Select a directory",
|
||||||
@ -82,8 +73,8 @@ void MainWindow::process() {
|
|||||||
( *m_combo_language->get_active() )[m_columns_language.m_col_code];
|
( *m_combo_language->get_active() )[m_columns_language.m_col_code];
|
||||||
|
|
||||||
// fill up m_combo_possible with possible tv shows
|
// fill up m_combo_possible with possible tv shows
|
||||||
auto possible_shows = getPossibleShows(
|
auto possible_shows = searchShow(
|
||||||
std::string( m_entry_show->get_text() ), language_code, c );
|
std::string( m_entry_show->get_text() ), language_code );
|
||||||
|
|
||||||
// if no possible shows were found, tell the user
|
// if no possible shows were found, tell the user
|
||||||
if ( possible_shows.size() == 0 ) {
|
if ( possible_shows.size() == 0 ) {
|
||||||
@ -100,20 +91,20 @@ void MainWindow::process() {
|
|||||||
m_combo_possible->show();
|
m_combo_possible->show();
|
||||||
|
|
||||||
// fill up combo box with results from thetvdb
|
// fill up combo box with results from thetvdb
|
||||||
auto model = Gtk::ListStore::create( m_columns_url );
|
auto model = Gtk::ListStore::create( m_columns_show );
|
||||||
|
|
||||||
m_combo_possible->set_model( model );
|
m_combo_possible->set_model( model );
|
||||||
|
|
||||||
auto row = *( model->append() );
|
auto row = *( model->append() );
|
||||||
|
|
||||||
row[m_columns_url.m_col_show] = possible_shows[0].first;
|
row[m_columns_show.m_col_show] = possible_shows[0].first;
|
||||||
row[m_columns_url.m_col_url] = possible_shows[0].second;
|
row[m_columns_show.m_col_id] = possible_shows[0].second;
|
||||||
m_combo_possible->set_active( row );
|
m_combo_possible->set_active( row );
|
||||||
|
|
||||||
for ( size_t i = 1; i < possible_shows.size(); i++ ) {
|
for ( size_t i = 1; i < possible_shows.size(); i++ ) {
|
||||||
auto row = *( model->append() );
|
auto row = *( model->append() );
|
||||||
row[m_columns_url.m_col_show] = possible_shows[i].first;
|
row[m_columns_show.m_col_show] = possible_shows[i].first;
|
||||||
row[m_columns_url.m_col_url] = possible_shows[i].second;
|
row[m_columns_show.m_col_id] = possible_shows[i].second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,15 +152,15 @@ void MainWindow::getNames() {
|
|||||||
*/
|
*/
|
||||||
void renameFiles(
|
void renameFiles(
|
||||||
const std::vector<
|
const std::vector<
|
||||||
std::pair< std::string, std::pair< std::string, std::string > > >
|
std::pair< std::pair< int, std::string >, std::pair< std::string, std::string > > >
|
||||||
&renamed ) {
|
&renamed ) {
|
||||||
for ( auto renamed_it = renamed.begin(); renamed_it != renamed.end();
|
for ( auto renamed_it = renamed.begin(); renamed_it != renamed.end();
|
||||||
++renamed_it ) {
|
++renamed_it ) {
|
||||||
std::cout << renamed_it->first << "/" << renamed_it->second.first
|
std::cout << renamed_it->first.second << "/" << renamed_it->second.first
|
||||||
<< " --> " << renamed_it->first << "/"
|
<< " --> " << renamed_it->first.second << "/"
|
||||||
<< renamed_it->second.second << std::endl;
|
<< renamed_it->second.second << std::endl;
|
||||||
FSLib::rename( renamed_it->first + "/" + renamed_it->second.first,
|
FSLib::rename( renamed_it->first.second + "/" + renamed_it->second.first,
|
||||||
renamed_it->first + "/" + renamed_it->second.second );
|
renamed_it->first.second + "/" + renamed_it->second.second );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,17 +171,17 @@ void MainWindow::finishedSelection() {
|
|||||||
auto iter = m_combo_possible->get_active();
|
auto iter = m_combo_possible->get_active();
|
||||||
|
|
||||||
// debug output
|
// debug output
|
||||||
std::cout << ( *iter )[m_columns_url.m_col_show] << " " << language_code
|
std::cout << ( *iter )[m_columns_show.m_col_show] << " " << language_code
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
|
||||||
std::string url =
|
std::string show_id =
|
||||||
static_cast< Glib::ustring >( ( *iter )[m_columns_url.m_col_url] );
|
static_cast< Glib::ustring >( ( *iter )[m_columns_show.m_col_id] );
|
||||||
|
|
||||||
// shouldn't ever happen, but just to be sure
|
// shouldn't ever happen, but just to be sure
|
||||||
if ( url.empty() )
|
if ( show_id.empty() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::cout << "https://www.thetvdb.com" << url << std::endl;
|
std::cout << "https://www.thetvdb.com/series/" << show_id << std::endl;
|
||||||
|
|
||||||
std::string input_pattern = m_entry_pattern->get_text();
|
std::string input_pattern = m_entry_pattern->get_text();
|
||||||
|
|
||||||
@ -204,11 +195,12 @@ void MainWindow::finishedSelection() {
|
|||||||
|
|
||||||
for ( auto &x : selected ) {
|
for ( auto &x : selected ) {
|
||||||
// get renamed files for given season
|
// get renamed files for given season
|
||||||
|
// TODO dvd
|
||||||
auto renamed_files = getRenamedFiles(
|
auto renamed_files = getRenamedFiles(
|
||||||
static_cast< Glib::ustring >( ( *iter )[m_columns_url.m_col_show] ),
|
static_cast< Glib::ustring >( ( *iter )[m_columns_show.m_col_show] ),
|
||||||
x, "https://www.thetvdb.com" + url, language_code,
|
x, show_id, language_code,
|
||||||
( input_pattern.empty() ? default_pattern : input_pattern ),
|
( input_pattern.empty() ? default_pattern : input_pattern ),
|
||||||
!m_check_linux->get_active(), c, files[x] );
|
!m_check_linux->get_active(), files[x], false );
|
||||||
|
|
||||||
if ( renamed_files.empty() )
|
if ( renamed_files.empty() )
|
||||||
continue;
|
continue;
|
||||||
@ -401,10 +393,6 @@ MainWindow::MainWindow( const Glib::RefPtr< Gtk::Application > &ptr )
|
|||||||
m_label_dir->set_label( "Directory:" );
|
m_label_dir->set_label( "Directory:" );
|
||||||
m_label_pattern->set_label( "Pattern:" );
|
m_label_pattern->set_label( "Pattern:" );
|
||||||
|
|
||||||
// set dimensions
|
|
||||||
m_combo_language->set_size_request( 120 );
|
|
||||||
m_combo_possible->set_size_request( 200 );
|
|
||||||
|
|
||||||
m_entry_show->set_size_request( 170, 30 );
|
m_entry_show->set_size_request( 170, 30 );
|
||||||
m_entry_dir->set_size_request( 170, 30 );
|
m_entry_dir->set_size_request( 170, 30 );
|
||||||
|
|
||||||
@ -422,22 +410,22 @@ MainWindow::MainWindow( const Glib::RefPtr< Gtk::Application > &ptr )
|
|||||||
auto model = Gtk::ListStore::create( m_columns_language );
|
auto model = Gtk::ListStore::create( m_columns_language );
|
||||||
m_combo_language->set_model( model );
|
m_combo_language->set_model( model );
|
||||||
|
|
||||||
auto row = *( model->append() );
|
for ( const auto &x : getLangs() ) {
|
||||||
row[m_columns_language.m_col_code] = "en";
|
auto row = *( model->append() );
|
||||||
row[m_columns_language.m_col_language] = "English";
|
row[m_columns_language.m_col_code] = x.first;
|
||||||
|
row[m_columns_language.m_col_language] = x.second;
|
||||||
m_combo_language->set_active( row );
|
if( x.first == "en" )
|
||||||
|
m_combo_language->set_active( row );
|
||||||
for ( size_t i = 2; i < languages.size(); i += 2 ) {
|
|
||||||
row = *( model->append() );
|
|
||||||
row[m_columns_language.m_col_code] = languages[i];
|
|
||||||
row[m_columns_language.m_col_language] = languages[i + 1];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set column to be shown in comboboxes
|
// set column to be shown in comboboxes
|
||||||
m_combo_language->pack_start( m_columns_language.m_col_language );
|
m_combo_language->pack_start( m_columns_language.m_col_language );
|
||||||
m_combo_possible->pack_start( m_columns_url.m_col_show );
|
m_combo_possible->pack_start( m_columns_show.m_col_show );
|
||||||
|
|
||||||
|
// set dimensions
|
||||||
|
m_combo_language->set_size_request( 120, 30 );
|
||||||
|
m_combo_possible->set_size_request( 200, 30 );
|
||||||
|
|
||||||
// set signals
|
// set signals
|
||||||
m_button_dir->signal_clicked().connect(
|
m_button_dir->signal_clicked().connect(
|
||||||
@ -480,7 +468,7 @@ MainWindow::MainWindow( const Glib::RefPtr< Gtk::Application > &ptr )
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::dbUpdate() {
|
void MainWindow::dbUpdate() {
|
||||||
updateDB( !m_check_linux->get_active(), c );
|
updateDB( !m_check_linux->get_active() );
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::dbClean() {
|
void MainWindow::dbClean() {
|
||||||
@ -488,7 +476,7 @@ void MainWindow::dbClean() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::dbRefresh() {
|
void MainWindow::dbRefresh() {
|
||||||
refreshDB( !m_check_linux->get_active(), c );
|
refreshDB( !m_check_linux->get_active() );
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::dbAdd() {
|
void MainWindow::dbAdd() {
|
||||||
@ -508,18 +496,19 @@ void MainWindow::dbAdd() {
|
|||||||
auto iter = m_combo_possible->get_active();
|
auto iter = m_combo_possible->get_active();
|
||||||
std::string input_pattern = m_entry_pattern->get_text();
|
std::string input_pattern = m_entry_pattern->get_text();
|
||||||
|
|
||||||
std::string show = static_cast< Glib::ustring >( ( *iter )[m_columns_url.m_col_show] );
|
std::string show = static_cast< Glib::ustring >( ( *iter )[m_columns_show.m_col_show] );
|
||||||
std::string language_code = static_cast< Glib::ustring >( ( *m_combo_language->get_active() )[m_columns_language.m_col_code] );
|
std::string language_code = static_cast< Glib::ustring >( ( *m_combo_language->get_active() )[m_columns_language.m_col_code] );
|
||||||
std::string url = "https://www.thetvdb.com" + static_cast< Glib::ustring >( ( *iter )[m_columns_url.m_col_url] );
|
std::string show_id = static_cast< Glib::ustring >( ( *iter )[m_columns_show.m_col_id] );
|
||||||
|
|
||||||
std::cout << show << " " << language_code << " " << url << std::endl;
|
std::cout << show << " " << language_code << " " << show_id << std::endl;
|
||||||
|
|
||||||
addToDB( show, m_entry_dir->get_text(), language_code, url,
|
// TODO dvd
|
||||||
m_entry_pattern->get_text(), !m_check_linux->get_active(), c );
|
addToDB( show, m_entry_dir->get_text(), language_code, show_id,
|
||||||
|
m_entry_pattern->get_text(), !m_check_linux->get_active(), false );
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::dbManage() {
|
void MainWindow::dbManage() {
|
||||||
auto *dbWindow = new DatabaseWindow( !m_check_linux->get_active(), c );
|
auto *dbWindow = new DatabaseWindow( !m_check_linux->get_active() );
|
||||||
app->add_window( *dbWindow );
|
app->add_window( *dbWindow );
|
||||||
auto app_ptr = app;
|
auto app_ptr = app;
|
||||||
|
|
||||||
|
@ -46,6 +46,8 @@ protected:
|
|||||||
|
|
||||||
Gtk::CheckButton *m_check_linux = new Gtk::CheckButton();
|
Gtk::CheckButton *m_check_linux = new Gtk::CheckButton();
|
||||||
Gtk::CheckButton *m_check_trust = new Gtk::CheckButton();
|
Gtk::CheckButton *m_check_trust = new Gtk::CheckButton();
|
||||||
|
// TODO add dvd checkbox
|
||||||
|
Gtk::CheckButton *m_check_dvd = new Gtk::CheckButton();
|
||||||
|
|
||||||
Gtk::ComboBox *m_combo_language = new Gtk::ComboBox();
|
Gtk::ComboBox *m_combo_language = new Gtk::ComboBox();
|
||||||
Gtk::ComboBox *m_combo_possible = new Gtk::ComboBox();
|
Gtk::ComboBox *m_combo_possible = new Gtk::ComboBox();
|
||||||
@ -60,8 +62,6 @@ protected:
|
|||||||
Gtk::Label *m_label_dir = new Gtk::Label();
|
Gtk::Label *m_label_dir = new Gtk::Label();
|
||||||
Gtk::Label *m_label_pattern = new Gtk::Label();
|
Gtk::Label *m_label_pattern = new Gtk::Label();
|
||||||
|
|
||||||
Curl c;
|
|
||||||
|
|
||||||
class LanguageColumns : public Gtk::TreeModel::ColumnRecord {
|
class LanguageColumns : public Gtk::TreeModel::ColumnRecord {
|
||||||
public:
|
public:
|
||||||
LanguageColumns() {
|
LanguageColumns() {
|
||||||
@ -72,24 +72,24 @@ protected:
|
|||||||
Gtk::TreeModelColumn< std::string > m_col_language;
|
Gtk::TreeModelColumn< std::string > m_col_language;
|
||||||
};
|
};
|
||||||
|
|
||||||
class UrlColumns : public Gtk::TreeModel::ColumnRecord {
|
class ShowColumns : public Gtk::TreeModel::ColumnRecord {
|
||||||
public:
|
public:
|
||||||
UrlColumns() {
|
ShowColumns() {
|
||||||
add( m_col_url );
|
add( m_col_id );
|
||||||
add( m_col_show );
|
add( m_col_show );
|
||||||
}
|
}
|
||||||
Gtk::TreeModelColumn< Glib::ustring > m_col_url;
|
Gtk::TreeModelColumn< Glib::ustring > m_col_id;
|
||||||
Gtk::TreeModelColumn< Glib::ustring > m_col_show;
|
Gtk::TreeModelColumn< Glib::ustring > m_col_show;
|
||||||
};
|
};
|
||||||
|
|
||||||
LanguageColumns m_columns_language;
|
LanguageColumns m_columns_language;
|
||||||
UrlColumns m_columns_url;
|
ShowColumns m_columns_show;
|
||||||
|
|
||||||
Glib::RefPtr< Gtk::Application > app;
|
Glib::RefPtr< Gtk::Application > app;
|
||||||
|
|
||||||
std::unique_ptr<SeasonWindow> sw{nullptr};
|
std::unique_ptr<SeasonWindow> sw{nullptr};
|
||||||
std::vector< int > selected;
|
std::vector< int > selected;
|
||||||
std::map< int, std::set< std::string > > files;
|
std::map< int, std::map< int, string > > files;
|
||||||
std::string path;
|
std::string path;
|
||||||
std::string language_code;
|
std::string language_code;
|
||||||
std::string default_pattern;
|
std::string default_pattern;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include "filesystem.hpp"
|
#include "filesystem.hpp"
|
||||||
@ -10,7 +11,6 @@ using json = nlohmann::json;
|
|||||||
|
|
||||||
#ifndef GUI
|
#ifndef GUI
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -80,6 +80,7 @@ searchShow( const string &show, const string &language ) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef GUI
|
||||||
// get show's ID
|
// get show's ID
|
||||||
string getShowId( string &show, const string &language ) {
|
string getShowId( string &show, const string &language ) {
|
||||||
size_t order{}, pos{};
|
size_t order{}, pos{};
|
||||||
@ -93,6 +94,7 @@ string getShowId( string &show, const string &language ) {
|
|||||||
cin.ignore( 1, '\n' );
|
cin.ignore( 1, '\n' );
|
||||||
return search_results[pos-1].second;
|
return search_results[pos-1].second;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
string showNameFromId( const string &id, const string &language ) {
|
string showNameFromId( const string &id, const string &language ) {
|
||||||
r.addHeader( TEXT( "Accept: application/json" ) );
|
r.addHeader( TEXT( "Accept: application/json" ) );
|
||||||
@ -240,12 +242,44 @@ getRenamedFiles( const string &show, int season, const string id,
|
|||||||
return renamed_files;
|
return renamed_files;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector< std::pair< string, string > > getLangs() {
|
||||||
|
std::vector< std::pair< string, string > > langs;
|
||||||
|
r.addHeader( TEXT( "Accept: application/json" ) );
|
||||||
|
r.addHeader( TEXT( "Authorization: Bearer " ) + api_token );
|
||||||
|
auto j = json::parse( r.get( TEXT( "/languages" ) ) );
|
||||||
|
r.clearHeader();
|
||||||
|
auto langs_json = j["data"].get< std::vector< json > >();
|
||||||
|
for ( auto &x : langs_json ) {
|
||||||
|
langs.emplace_back( toString( x["abbreviation"].get< std::string >() ),
|
||||||
|
toString( x["name"].get< std::string >() ) );
|
||||||
|
}
|
||||||
|
return langs;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool authenticate( const std::string &api_key ) {
|
||||||
|
#ifdef _WIN32
|
||||||
|
r.setServer( TEXT( "api.thetvdb.com" ) );
|
||||||
|
#else
|
||||||
|
r.setServer( "https://api.thetvdb.com" );
|
||||||
|
#endif
|
||||||
|
r.addHeader( TEXT( "Accept: application/json" ) );
|
||||||
|
r.addHeader( TEXT( "Content-Type: application/json" ) );
|
||||||
|
auto j = json::parse( r.post( TEXT( "/login" ),
|
||||||
|
"{ \"apikey\": \"" + api_key + "\" }" ) );
|
||||||
|
api_token = toString( j["token"].get< std::string >() );
|
||||||
|
r.clearHeader();
|
||||||
|
// TODO check return code
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void singleSeason( const string &path, string &show, int season, string id,
|
void singleSeason( const string &path, string &show, int season, string id,
|
||||||
const string &language, const string &pattern,
|
const string &language, const string &pattern,
|
||||||
const bool &linux, const bool &trust,
|
const bool &linux, const bool &trust,
|
||||||
std::map< int, string > *files_ptr, bool print, bool dvd ) {
|
std::map< int, string > *files_ptr, bool print, bool dvd ) {
|
||||||
|
#ifndef GUI
|
||||||
if ( id.empty() )
|
if ( id.empty() )
|
||||||
id = getShowId( show, language );
|
id = getShowId( show, language );
|
||||||
|
#endif
|
||||||
|
|
||||||
std::map< int, std::map< int, string > > *found_files = nullptr;
|
std::map< int, std::map< int, string > > *found_files = nullptr;
|
||||||
|
|
||||||
@ -332,20 +366,6 @@ void allSeasons( const string &path, string &show, const string &language,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector< std::pair< string, string > > getLangs() {
|
|
||||||
std::vector< std::pair< string, string > > langs;
|
|
||||||
r.addHeader( TEXT( "Accept: application/json" ) );
|
|
||||||
r.addHeader( TEXT( "Authorization: Bearer " ) + api_token );
|
|
||||||
auto j = json::parse( r.get( TEXT( "/languages" ) ) );
|
|
||||||
r.clearHeader();
|
|
||||||
auto langs_json = j["data"].get< std::vector< json > >();
|
|
||||||
for ( auto &x : langs_json ) {
|
|
||||||
langs.emplace_back( toString( x["abbreviation"].get< std::string >() ),
|
|
||||||
toString( x["name"].get< std::string >() ) );
|
|
||||||
}
|
|
||||||
return langs;
|
|
||||||
}
|
|
||||||
|
|
||||||
void printLangs() {
|
void printLangs() {
|
||||||
for ( auto &x : getLangs() )
|
for ( auto &x : getLangs() )
|
||||||
cout << x.first << " - " << x.second << std::endl;
|
cout << x.first << " - " << x.second << std::endl;
|
||||||
@ -359,20 +379,4 @@ bool findLanguage( const char_t *language ) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool authenticate( const std::string &api_key ) {
|
|
||||||
#ifdef _WIN32
|
|
||||||
r.setServer( TEXT( "api.thetvdb.com" ) );
|
|
||||||
#else
|
|
||||||
r.setServer( "https://api.thetvdb.com" );
|
|
||||||
#endif
|
|
||||||
r.addHeader( TEXT( "Accept: application/json" ) );
|
|
||||||
r.addHeader( TEXT( "Content-Type: application/json" ) );
|
|
||||||
auto j = json::parse( r.post( TEXT( "/login" ),
|
|
||||||
"{ \"apikey\": \"" + api_key + "\" }" ) );
|
|
||||||
api_token = toString( j["token"].get< std::string >() );
|
|
||||||
r.clearHeader();
|
|
||||||
// TODO check return code
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -25,7 +25,6 @@ using char_t = char;
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TODO change files_ptr contents to new file names
|
|
||||||
void singleSeason( const string &path, string &show, int season, string id,
|
void singleSeason( const string &path, string &show, int season, string id,
|
||||||
const string &language, const string &pattern,
|
const string &language, const string &pattern,
|
||||||
const bool &linux, const bool &trust,
|
const bool &linux, const bool &trust,
|
||||||
@ -39,26 +38,34 @@ void singleSeason( const string &path, string &show, int season, string id,
|
|||||||
|
|
||||||
#ifdef GUI
|
#ifdef GUI
|
||||||
|
|
||||||
std::vector< std::pair< string, std::pair< string, string > > >
|
std::vector< std::pair< std::pair< int, string >, std::pair< string, string > > >
|
||||||
getRenamedFiles( const string &show, int season, string url,
|
getRenamedFiles( const string &show, int season, const string id,
|
||||||
const string &language, const string &pattern,
|
const string &language, const string &pattern,
|
||||||
const bool &linux, Curl &c, const std::map< int, string > &files, bool dvd = false );
|
const bool &linux, const std::map< int, string > &files, bool dvd = false );
|
||||||
|
|
||||||
|
std::vector< std::pair< string, string > > getLangs();
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
void multipleSeasons( const string &path, string &show,
|
void multipleSeasons( const string &path, string &show,
|
||||||
const std::set< int > seasons, const string &language,
|
const std::set< int > seasons, const string &language,
|
||||||
const string &pattern, const size_t &flags );
|
const string &pattern, const size_t &flags );
|
||||||
|
|
||||||
void allSeasons( const string &path, string &show, const string &language,
|
void allSeasons( const string &path, string &show, const string &language,
|
||||||
const string &pattern, const size_t &flags );
|
const string &pattern, const size_t &flags );
|
||||||
|
|
||||||
|
string getShowId( string &show, const string &language );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void printLangs();
|
void printLangs();
|
||||||
|
|
||||||
bool findLanguage( const char_t *language );
|
bool findLanguage( const char_t *language );
|
||||||
|
|
||||||
bool authenticate( const std::string &api_key );
|
bool authenticate( const std::string &api_key );
|
||||||
string getShowId( string &show, const string &language );
|
|
||||||
string showNameFromId( const string &id, const string &language );
|
string showNameFromId( const string &id, const string &language );
|
||||||
|
|
||||||
std::vector< std::pair< string, string > > searchShow( const string &show,
|
std::vector< std::pair< string, string > > searchShow( const string &show,
|
||||||
const string &language );
|
const string &language );
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user