diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/database/database.cpp | 33 | ||||
-rw-r--r-- | src/database/database.hpp | 6 |
2 files changed, 39 insertions, 0 deletions
diff --git a/src/database/database.cpp b/src/database/database.cpp index fd18417..0c7f425 100644 --- a/src/database/database.cpp +++ b/src/database/database.cpp @@ -49,6 +49,39 @@ db::IrcServerOptions Database::get_irc_server_options(const std::string& owner, } } +db::IrcChannelOptions Database::get_irc_channel_options(const std::string& owner, + const std::string& server, + const std::string& channel) +{ + try { + auto options = litesql::select<db::IrcChannelOptions>(Database::get_db(), + db::IrcChannelOptions::Owner == owner && + db::IrcChannelOptions::Server == server && + db::IrcChannelOptions::Channel == channel).one(); + return options; + } catch (const litesql::NotFound& e) { + db::IrcChannelOptions options(Database::get_db()); + options.owner = owner; + options.server = server; + options.channel = channel; + return options; + } +} + +db::IrcChannelOptions Database::get_irc_channel_options_with_server_default(const std::string& owner, + const std::string& server, + const std::string& channel) +{ + auto coptions = Database::get_irc_channel_options(owner, server, channel); + auto soptions = Database::get_irc_server_options(owner, server); + if (coptions.encodingIn.value().empty()) + coptions.encodingIn = soptions.encodingIn; + if (coptions.encodingOut.value().empty()) + coptions.encodingOut = soptions.encodingOut; + + return coptions; +} + void Database::close() { Database::db.reset(nullptr); diff --git a/src/database/database.hpp b/src/database/database.hpp index d8dc735..fc957bd 100644 --- a/src/database/database.hpp +++ b/src/database/database.hpp @@ -29,6 +29,12 @@ public: */ static db::IrcServerOptions get_irc_server_options(const std::string& owner, const std::string& server); + static db::IrcChannelOptions get_irc_channel_options(const std::string& owner, + const std::string& server, + const std::string& channel); + static db::IrcChannelOptions get_irc_channel_options_with_server_default(const std::string& owner, + const std::string& server, + const std::string& channel); static void close(); |