Move more database stuff out of the main application file
This commit is contained in:
parent
e47089325d
commit
87d85c60f3
14
db.cpp
14
db.cpp
|
@ -17,6 +17,20 @@ std::string get_string(sqlite3_stmt *row, int col)
|
||||||
return std::string((char*)sqlite3_column_text(row, col));
|
return std::string((char*)sqlite3_column_text(row, col));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void db_check_schema();
|
||||||
|
|
||||||
|
void db_init(const std::string &filename)
|
||||||
|
{
|
||||||
|
SC(sqlite3_open(filename.c_str(), &db));
|
||||||
|
db_check_schema();
|
||||||
|
}
|
||||||
|
|
||||||
|
void db_shutdown()
|
||||||
|
{
|
||||||
|
sqlite3_close(db);
|
||||||
|
db = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void db_check_schema() {
|
void db_check_schema() {
|
||||||
bool settings_table_found = false;
|
bool settings_table_found = false;
|
||||||
|
|
||||||
|
|
3
db.h
3
db.h
|
@ -16,7 +16,8 @@ public:
|
||||||
};
|
};
|
||||||
std::string get_string(sqlite3_stmt *row, int col);
|
std::string get_string(sqlite3_stmt *row, int col);
|
||||||
|
|
||||||
void db_check_schema();
|
void db_init(const std::string &filename);
|
||||||
|
void db_shutdown();
|
||||||
|
|
||||||
std::string db_get_setting(const std::string &key);
|
std::string db_get_setting(const std::string &key);
|
||||||
void db_set_setting(const std::string &key, const std::string &value);
|
void db_set_setting(const std::string &key, const std::string &value);
|
||||||
|
|
30
main.cpp
30
main.cpp
|
@ -134,21 +134,15 @@ void load_videos_for_channel(const std::string &channelId, bool force=false)
|
||||||
{
|
{
|
||||||
if(videos.find(channelId) != videos.end() && !force)
|
if(videos.find(channelId) != videos.end() && !force)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::vector<Video> &channelVideos = videos[channelId];
|
std::vector<Video> &channelVideos = videos[channelId];
|
||||||
channelVideos.clear();
|
channelVideos = Video::get_all_for_channel(channelId);
|
||||||
|
for(Video &video: channelVideos) {
|
||||||
|
video.tui_title_width = string_width(video.title);
|
||||||
|
}
|
||||||
|
|
||||||
if(channels[*selected_channel].id == channelId)
|
if(channels[*selected_channel].id == channelId)
|
||||||
selected_video = 0;
|
selected_video = 0;
|
||||||
|
|
||||||
sqlite3_stmt *query;
|
|
||||||
SC(sqlite3_prepare_v2(db, "SELECT * FROM videos WHERE channelId=?1 ORDER BY published DESC;", -1, &query, nullptr));
|
|
||||||
|
|
||||||
SC(sqlite3_bind_text(query, 1, channelId.c_str(), -1, SQLITE_TRANSIENT));
|
|
||||||
while(sqlite3_step(query) == SQLITE_ROW) {
|
|
||||||
Video video(query);
|
|
||||||
video.tui_title_width = string_width(video.title);
|
|
||||||
channelVideos.push_back(video);
|
|
||||||
}
|
|
||||||
SC(sqlite3_finalize(query));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void fetch_videos_for_channel(Channel &ch, bool name_in_title=false)
|
void fetch_videos_for_channel(Channel &ch, bool name_in_title=false)
|
||||||
|
@ -447,16 +441,10 @@ int main()
|
||||||
database_filename = config["database"];
|
database_filename = config["database"];
|
||||||
}
|
}
|
||||||
|
|
||||||
SC(sqlite3_open(database_filename.c_str(), &db));
|
db_init(database_filename);
|
||||||
db_check_schema();
|
for(Channel &channel: Channel::get_all(db)) {
|
||||||
|
|
||||||
sqlite3_stmt *query;
|
|
||||||
sqlite3_prepare_v2(db, "SELECT * FROM channels;", -1, &query, nullptr);
|
|
||||||
while(sqlite3_step(query) == SQLITE_ROW) {
|
|
||||||
Channel channel(query);
|
|
||||||
add_channel_to_list(channel);
|
add_channel_to_list(channel);
|
||||||
}
|
}
|
||||||
sqlite3_finalize(query);
|
|
||||||
|
|
||||||
if(channels.size())
|
if(channels.size())
|
||||||
select_channel_by_index(0);
|
select_channel_by_index(0);
|
||||||
|
@ -503,7 +491,7 @@ int main()
|
||||||
} while (!exit);
|
} while (!exit);
|
||||||
|
|
||||||
tp_shutdown();
|
tp_shutdown();
|
||||||
sqlite3_close(db);
|
db_shutdown();
|
||||||
curl_global_cleanup();
|
curl_global_cleanup();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
31
yt.cpp
31
yt.cpp
|
@ -104,6 +104,20 @@ Channel Channel::add(sqlite3 *db, const std::string &selector, const std::string
|
||||||
return Channel(channel_id, channel_name);
|
return Channel(channel_id, channel_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<Channel> Channel::get_all(sqlite3 *db)
|
||||||
|
{
|
||||||
|
std::vector<Channel> channels;
|
||||||
|
|
||||||
|
sqlite3_stmt *query;
|
||||||
|
SC(sqlite3_prepare_v2(db, "SELECT * FROM channels;", -1, &query, nullptr));
|
||||||
|
while(sqlite3_step(query) == SQLITE_ROW) {
|
||||||
|
channels.emplace_back(query);
|
||||||
|
}
|
||||||
|
SC(sqlite3_finalize(query));
|
||||||
|
|
||||||
|
return channels;
|
||||||
|
}
|
||||||
|
|
||||||
std::string Channel::upload_playlist() const
|
std::string Channel::upload_playlist() const
|
||||||
{
|
{
|
||||||
return "UU" + id.substr(2);
|
return "UU" + id.substr(2);
|
||||||
|
@ -256,3 +270,20 @@ void Video::set_flag(sqlite3 *db, VideoFlag flag, bool value)
|
||||||
SC(sqlite3_step(query));
|
SC(sqlite3_step(query));
|
||||||
SC(sqlite3_finalize(query));
|
SC(sqlite3_finalize(query));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<Video> Video::get_all_for_channel(const std::string &channel_id)
|
||||||
|
{
|
||||||
|
std::vector<Video> videos;
|
||||||
|
|
||||||
|
sqlite3_stmt *query;
|
||||||
|
SC(sqlite3_prepare_v2(db, "SELECT * FROM videos WHERE channelId=?1 ORDER BY published DESC;", -1, &query, nullptr));
|
||||||
|
SC(sqlite3_bind_text(query, 1, channel_id.c_str(), -1, SQLITE_TRANSIENT));
|
||||||
|
|
||||||
|
while(sqlite3_step(query) == SQLITE_ROW) {
|
||||||
|
videos.emplace_back(query);
|
||||||
|
Video video(query);
|
||||||
|
}
|
||||||
|
SC(sqlite3_finalize(query));
|
||||||
|
|
||||||
|
return videos;
|
||||||
|
}
|
||||||
|
|
3
yt.h
3
yt.h
|
@ -3,6 +3,7 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class sqlite3;
|
class sqlite3;
|
||||||
class sqlite3_stmt;
|
class sqlite3_stmt;
|
||||||
|
@ -21,6 +22,7 @@ public:
|
||||||
|
|
||||||
Channel(sqlite3_stmt *row);
|
Channel(sqlite3_stmt *row);
|
||||||
static Channel add(sqlite3 *db, const std::string &selector, const std::string &value);
|
static Channel add(sqlite3 *db, const std::string &selector, const std::string &value);
|
||||||
|
static std::vector<Channel> get_all(sqlite3 *db);
|
||||||
|
|
||||||
std::string upload_playlist() const;
|
std::string upload_playlist() const;
|
||||||
void fetch_new_videos(sqlite3 *db, progress_info *info=nullptr, std::optional<std::string> after={}, std::optional<int> max_count={});
|
void fetch_new_videos(sqlite3 *db, progress_info *info=nullptr, std::optional<std::string> after={}, std::optional<int> max_count={});
|
||||||
|
@ -50,6 +52,7 @@ struct Video
|
||||||
|
|
||||||
Video(sqlite3_stmt *row);
|
Video(sqlite3_stmt *row);
|
||||||
void set_flag(sqlite3 *db, VideoFlag flag, bool value=true);
|
void set_flag(sqlite3 *db, VideoFlag flag, bool value=true);
|
||||||
|
static std::vector<Video> get_all_for_channel(const std::string &channel_id);
|
||||||
|
|
||||||
size_t tui_title_width;
|
size_t tui_title_width;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue