aboutsummaryrefslogtreecommitdiff
path: root/src/wandad.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2018-12-01 19:59:51 +0100
committerFelix Morgner <felix.morgner@gmail.com>2018-12-01 19:59:51 +0100
commit63ec195c36dc331cd77df721d45449a642e8a546 (patch)
treef9fc76c1965b35258825959935b1112f34077918 /src/wandad.cpp
parent56e57082a7e543155fcf583d146f4e130456ca73 (diff)
downloadwanda-63ec195c36dc331cd77df721d45449a642e8a546.tar.xz
wanda-63ec195c36dc331cd77df721d45449a642e8a546.zip
wandad: implement command handler for change
Diffstat (limited to 'src/wandad.cpp')
-rw-r--r--src/wandad.cpp44
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"); };
}