diff options
Diffstat (limited to 'source/app')
| -rw-r--r-- | source/app/CMakeLists.txt | 41 | ||||
| -rw-r--r-- | source/app/src/wandac.cpp | 39 | ||||
| -rw-r--r-- | source/app/src/wandad.cpp | 121 |
3 files changed, 104 insertions, 97 deletions
diff --git a/source/app/CMakeLists.txt b/source/app/CMakeLists.txt index a224b57..7fd46c2 100644 --- a/source/app/CMakeLists.txt +++ b/source/app/CMakeLists.txt @@ -2,42 +2,55 @@ include("CheckIPOSupported") check_ipo_supported(RESULT "WANDA_IPO_SUPPORTED") +find_package("asio") find_package("lyra") +find_package("spdlog") -#[=====[ Server ]=====] +#[=====[ Client ]=====] -add_executable("wandad" - "src/wandad.cpp" +add_executable("wandac" + "src/wandac.cpp" ) -target_link_libraries("wandad" PRIVATE +target_link_libraries("${PROJECT_NAME}c" PRIVATE + "wanda::control" + "wanda::proto" + "wanda::system" + + "asio::asio" "bfg::lyra" - "wanda::wanda" + "spdlog::spdlog" ) -set_target_properties("wandad" PROPERTIES +set_target_properties("wandac" PROPERTIES CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS OFF INTERPROCEDURAL_OPTIMIZATION ${WANDA_IPO_SUPPORTED} ) -install(TARGETS "wandad") +install(TARGETS "wandac") -#[=====[ Client ]=====] +#[=====[ Server ]=====] -add_executable("wandac" - "src/wandac.cpp" +add_executable("wandad" + "src/wandad.cpp" ) -target_link_libraries("${PROJECT_NAME}c" PRIVATE +target_link_libraries("wandad" PRIVATE + "wanda::control" + "wanda::proto" + "wanda::std_ext" + "wanda::system" + + "asio::asio" "bfg::lyra" - "wanda::wanda" + "spdlog::spdlog" ) -set_target_properties("wandac" PROPERTIES +set_target_properties("wandad" PROPERTIES CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS OFF INTERPROCEDURAL_OPTIMIZATION ${WANDA_IPO_SUPPORTED} ) -install(TARGETS "wandac")
\ No newline at end of file +install(TARGETS "wandad") diff --git a/source/app/src/wandac.cpp b/source/app/src/wandac.cpp index 1873ef4..ae24d0f 100644 --- a/source/app/src/wandac.cpp +++ b/source/app/src/wandac.cpp @@ -1,8 +1,8 @@ -#include <wanda/command.hpp> -#include <wanda/commander.hpp> -#include <wanda/environment.hpp> -#include <wanda/logging.hpp> -#include <wanda/xdg.hpp> +#include <wanda/control/commander.hpp> +#include <wanda/proto/command.hpp> +#include <wanda/system/environment.hpp> +#include <wanda/system/logging.hpp> +#include <wanda/system/xdg.hpp> #include <asio.hpp> #include <lyra/lyra.hpp> @@ -23,18 +23,13 @@ struct cli auto parse(int argc, char const * const * argv, std::ostream & error) { - parser |= lyra::arg{command, "command"}("The command to send to the deamon").required() | - lyra::help(help); + parser |= lyra::arg{command, "command"}("The command to send to the deamon").required() | lyra::help(help); auto result = parser.parse({argc, argv}); if (!result) { - error << "Error while processing command line arguments: " - << result.message() - << '\n' - << parser - << '\n'; + error << "Error while processing command line arguments: " << result.message() << '\n' << parser << '\n'; return false; } @@ -42,7 +37,7 @@ struct cli } }; -struct listener : wanda::commander::listener +struct listener : wanda::control::commander::listener { listener(::cli & cli, asio::io_service & service) : m_cli{cli} @@ -50,14 +45,12 @@ struct listener : wanda::commander::listener { } - void on_connected(wanda::commander & commander) override + void on_connected(wanda::control::commander & commander) override { if (m_cli.command == "change") { - commander.send(wanda::make_change_command()); - m_service.post([&]{ - commander.stop(); - }); + commander.send(wanda::proto::make_change_command()); + m_service.post([&] { commander.stop(); }); } } @@ -79,15 +72,17 @@ int main(int argc, char const * const * argv) return EXIT_SUCCESS; } - wanda::initialize_logger(std::make_shared<spdlog::sinks::stderr_color_sink_st>()); + wanda::system::initialize_logger(std::make_shared<spdlog::sinks::stderr_color_sink_st>()); - auto interface = wanda::xdg_path_for(wanda::xdg_directory::runtime_dir, wanda::environment{}) / ".wanda_interface"; + auto interface = + wanda::system::xdg_path_for(wanda::system::xdg_directory::runtime_dir, wanda::system::environment{}) / + ".wanda_interface"; auto service = asio::io_service{}; auto listener = ::listener{cli, service}; - auto commander = wanda::commander{service, interface, listener}; + auto commander = wanda::control::commander{service, interface, listener}; - wanda::get_logger()->info("trying to connect to wanda control interface on '{}'", interface.native()); + wanda::system::get_logger()->info("trying to connect to wanda control interface on '{}'", interface.native()); commander.start(); service.run(); diff --git a/source/app/src/wandad.cpp b/source/app/src/wandad.cpp index 8579a83..a610b8a 100644 --- a/source/app/src/wandad.cpp +++ b/source/app/src/wandad.cpp @@ -1,12 +1,12 @@ -#include <wanda/command.hpp> -#include <wanda/control_interface.hpp> -#include <wanda/environment.hpp> -#include <wanda/filesystem.hpp> -#include <wanda/logging.hpp> -#include <wanda/optional.hpp> -#include <wanda/setting.hpp> -#include <wanda/wallpaper.hpp> -#include <wanda/xdg.hpp> +#include <wanda/control/interface.hpp> +#include <wanda/proto/command.hpp> +#include <wanda/std_ext/optional.hpp> +#include <wanda/system/environment.hpp> +#include <wanda/system/filesystem.hpp> +#include <wanda/system/logging.hpp> +#include <wanda/system/setting.hpp> +#include <wanda/system/wallpaper.hpp> +#include <wanda/system/xdg.hpp> #include <asio.hpp> #include <lyra/lyra.hpp> @@ -43,18 +43,14 @@ namespace auto parse(int argc, char const * const * argv, std::ostream & error) { - parser |= lyra::arg{wallpaper_directory, "directory"}("The wallpaper source directory").required() | - lyra::help(help); + parser |= + lyra::arg{wallpaper_directory, "directory"}("The wallpaper source directory").required() | lyra::help(help); auto result = parser.parse({argc, argv}); if (!result) { - error << "Error while processing command line arguments: " - << result.message() - << '\n' - << parser - << '\n'; + error << "Error while processing command line arguments: " << result.message() << '\n' << parser << '\n'; return false; } @@ -62,25 +58,25 @@ namespace } }; - struct listener : wanda::control_interface::listener + struct listener : wanda::control::interface::listener { listener(std::vector<std::filesystem::path> const & wallpapers) : m_wallpapers{wallpapers} { } - void on_received(wanda::control_interface & interface, wanda::command command) override + void on_received(wanda::control::interface & interface, wanda::proto::command command) override { switch (command.id) { - case wanda::command_id::change: { - auto wallpaper = wanda::random_pick(m_wallpapers); - wanda::get_logger()->info("changing wallpaper to '{}'", wallpaper.native()); - wanda::set_wallpaper(wallpaper); + case wanda::proto::command_id::change: { + auto wallpaper = wanda::system::random_pick(m_wallpapers); + wanda::system::get_logger()->info("changing wallpaper to '{}'", wallpaper.native()); + wanda::system::set_wallpaper(wallpaper); break; } default: - wanda::get_logger()->error("received unknown command '{}'", static_cast<int>(command.id)); + wanda::system::get_logger()->error("received unknown command '{}'", static_cast<int>(command.id)); } } @@ -105,42 +101,45 @@ int main(int argc, char const * const * argv) return EXIT_SUCCESS; } - wanda::initialize_logger(std::make_shared<spdlog::sinks::stdout_color_sink_st>()); - wanda::get_logger()->info("wanda is starting up"); - - with(wanda::scan({cli.wallpaper_directory}, image_filter), [&](auto const & list) { - auto service = asio::io_service{}; - auto socket_path = wanda::xdg_path_for(wanda::xdg_directory::runtime_dir, wanda::environment{}) / ".wanda_interface"; - - wanda::get_logger()->info("starting control interface on '{}'", socket_path.native()); - auto listener = ::listener{list}; - auto interface = wanda::make_interface(service, socket_path, listener); - - if (!interface) - { - wanda::get_logger()->error("failed to start control interface"); - return; - } - - if (interface->start()) - { - return; - } - - auto signals = asio::signal_set{service, SIGINT, SIGTERM}; - signals.async_wait([&](auto const & error, auto const signal) { - if (!error) - { - wanda::get_logger()->info("Received signal {}. terminating...", signal); - interface->shutdown(); - service.stop(); - } - }); - - auto wallpaper = wanda::random_pick(list); - wanda::set_wallpaper(wallpaper); - - service.run(); - }) || - [&] { wanda::get_logger()->error("wallpaper directory does not exist"); }; + wanda::system::initialize_logger(std::make_shared<spdlog::sinks::stdout_color_sink_st>()); + wanda::system::get_logger()->info("wanda is starting up"); + + with(wanda::system::scan({cli.wallpaper_directory}, image_filter), + [&](auto const & list) { + auto service = asio::io_service{}; + auto socket_path = + wanda::system::xdg_path_for(wanda::system::xdg_directory::runtime_dir, wanda::system::environment{}) / + ".wanda_interface"; + + wanda::system::get_logger()->info("starting control interface on '{}'", socket_path.native()); + auto listener = ::listener{list}; + auto interface = wanda::control::make_interface(service, socket_path, listener); + + if (!interface) + { + wanda::system::get_logger()->error("failed to start control interface"); + return; + } + + if (interface->start()) + { + return; + } + + auto signals = asio::signal_set{service, SIGINT, SIGTERM}; + signals.async_wait([&](auto const & error, auto const signal) { + if (!error) + { + wanda::system::get_logger()->info("Received signal {}. terminating...", signal); + interface->shutdown(); + service.stop(); + } + }); + + auto wallpaper = wanda::system::random_pick(list); + wanda::system::set_wallpaper(wallpaper); + + service.run(); + }) || + [&] { wanda::system::get_logger()->error("wallpaper directory does not exist"); }; } |
