diff options
Diffstat (limited to 'src/wandad.cpp')
| -rw-r--r-- | src/wandad.cpp | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/src/wandad.cpp b/src/wandad.cpp index af2e3f2..6008b57 100644 --- a/src/wandad.cpp +++ b/src/wandad.cpp @@ -1,3 +1,4 @@ +#include "command.hpp" #include "control_interface.hpp" #include "environment.hpp" #include "filesystem.hpp" @@ -32,6 +33,35 @@ constexpr auto image_filter = [](auto const &path) { return extensions.find(path.extension()) != extensions.cend(); }; +struct listener : wanda::control_interface::listener +{ + listener(std::vector<std::filesystem::path> const &wallpapers, std::shared_ptr<spdlog::logger> logger) + : m_wallpapers{wallpapers}, + m_logger{logger} + { + } + + void on_received(wanda::control_interface &interface, wanda::command command) override + { + switch (command.id) + { + case wanda::command_id::change: + { + auto wallpaper = wanda::random_pick(m_wallpapers); + m_logger->info("changing wallpaper to '{}'", wallpaper.native()); + wanda::set_wallpaper(wallpaper, m_logger); + break; + } + default: + m_logger->error("received unknown command '{}'", static_cast<int>(command.id)); + } + } + +private: + std::vector<std::filesystem::path> const &m_wallpapers; + std::shared_ptr<spdlog::logger> m_logger; +}; + } // namespace int main() @@ -42,16 +72,14 @@ int main() log->info("wanda is starting up"); with(wanda::scan({"/usr/share/backgrounds"}, image_filter), [&](auto const &list) { - auto wallpaper = wanda::random_pick(list); - wanda::set_wallpaper(wallpaper); - auto service = asio::io_service{}; auto socket_path = wanda::xdg_path_for(wanda::xdg_directory::runtime_dir, wanda::environment{}) / ".wanda_interface"; log->info("starting control interface on '{}'", socket_path.native()); - auto interface = wanda::make_interface(service, socket_path, log); + auto listener = ::listener{list, log}; + auto interface = wanda::make_interface(service, socket_path, listener, log); - if(!interface) + if (!interface) { log->error("failed to start control interface"); return; @@ -71,6 +99,10 @@ int main() } }); + auto wallpaper = wanda::random_pick(list); + wanda::set_wallpaper(wallpaper, log); + service.run(); - }) || [&] { log->error("wallpaper directory does not exist"); }; + }) || + [&] { log->error("wallpaper directory does not exist"); }; } |
