diff options
Diffstat (limited to 'source/app')
| -rw-r--r-- | source/app/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | source/app/wandac/CMakeLists.txt | 37 | ||||
| -rw-r--r-- | source/app/wandac/include/wandac/cli.hpp | 27 | ||||
| -rw-r--r-- | source/app/wandac/include/wandac/listener.hpp | 26 | ||||
| -rw-r--r-- | source/app/wandac/src/cli.cpp | 30 | ||||
| -rw-r--r-- | source/app/wandac/src/listener.cpp | 30 | ||||
| -rw-r--r-- | source/app/wandac/src/main.cpp | 43 | ||||
| -rw-r--r-- | source/app/wandad/CMakeLists.txt | 21 | ||||
| -rw-r--r-- | source/app/wandad/src/main.cpp | 148 |
9 files changed, 0 insertions, 368 deletions
diff --git a/source/app/CMakeLists.txt b/source/app/CMakeLists.txt deleted file mode 100644 index 1ac7ab1..0000000 --- a/source/app/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -include("CheckIPOSupported") - -check_ipo_supported(RESULT "WANDA_IPO_SUPPORTED") - -add_subdirectory("wandac") -add_subdirectory("wandad")
\ No newline at end of file diff --git a/source/app/wandac/CMakeLists.txt b/source/app/wandac/CMakeLists.txt deleted file mode 100644 index 71aff36..0000000 --- a/source/app/wandac/CMakeLists.txt +++ /dev/null @@ -1,37 +0,0 @@ -add_library("${PROJECT_NAME}c-components" OBJECT - "src/cli.cpp" - "src/listener.cpp" -) - -target_include_directories("${PROJECT_NAME}c-components" PUBLIC - "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" -) - -target_link_libraries("${PROJECT_NAME}c-components" PUBLIC - "wanda::control" - "wanda::proto" - - "bfg::lyra" - "Boost::headers" -) - -add_executable("wandac" - "src/main.cpp" -) - - -target_link_libraries("${PROJECT_NAME}c" PRIVATE - "${PROJECT_NAME}c-components" - - "wanda::system" - - "spdlog::spdlog_header_only" -) - -set_target_properties("wandac" PROPERTIES - CXX_STANDARD_REQUIRED YES - CXX_EXTENSIONS OFF - INTERPROCEDURAL_OPTIMIZATION ${WANDA_IPO_SUPPORTED} -) - -install(TARGETS "wandac") diff --git a/source/app/wandac/include/wandac/cli.hpp b/source/app/wandac/include/wandac/cli.hpp deleted file mode 100644 index c04b138..0000000 --- a/source/app/wandac/include/wandac/cli.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef WANDA_APP_WANDAC_CLI_HPP -#define WANDA_APP_WANDAC_CLI_HPP - -#include <lyra/args.hpp> -#include <lyra/cli_parser.hpp> - -#include <iosfwd> -#include <string> - -namespace wandac -{ - - struct cli - { - auto parse(lyra::args arguments, std::ostream & error_stream) -> bool; - auto print_usage(std::ostream & output_stream) -> void; - - std::string command{}; - bool help{}; - - private: - lyra::cli_parser parser{}; - }; - -} // namespace wandac - -#endif
\ No newline at end of file diff --git a/source/app/wandac/include/wandac/listener.hpp b/source/app/wandac/include/wandac/listener.hpp deleted file mode 100644 index 49b75b6..0000000 --- a/source/app/wandac/include/wandac/listener.hpp +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef WANDA_APP_WANDAC_LISTENER_HPP -#define WANDA_APP_WANDAC_LISTENER_HPP - -#include "wandac/cli.hpp" - -#include <wanda/control/commander.hpp> - -#include <boost/asio/io_context.hpp> - -namespace wandac -{ - - struct listener : wanda::control::commander::listener - { - listener(wandac::cli const & cli, boost::asio::io_context & service); - - auto on_connected(wanda::control::commander & commander) -> void override ; - - private: - wandac::cli const & m_cli; - boost::asio::io_context & m_service; - }; - -} // namespace wandac - -#endif
\ No newline at end of file diff --git a/source/app/wandac/src/cli.cpp b/source/app/wandac/src/cli.cpp deleted file mode 100644 index 954ca63..0000000 --- a/source/app/wandac/src/cli.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "wandac/cli.hpp" - -#include <lyra/arg.hpp> -#include <lyra/help.hpp> - -#include <ostream> - -namespace wandac -{ - - auto cli::parse(lyra::args arguments, std::ostream & error_stream) -> bool - { - parser |= // - lyra::help(help) | // - lyra::arg{command, "command"}("The command to send to the deamon").required(); - - auto result = parser.parse(arguments); - - if (!result) - { - error_stream << "Error while processing command line arguments: " << result.message() << '\n' << parser << '\n'; - return false; - } - - return true; - } - - auto cli::print_usage(std::ostream & output_stream) -> void { output_stream << parser << '\n'; } - -} // namespace wandac diff --git a/source/app/wandac/src/listener.cpp b/source/app/wandac/src/listener.cpp deleted file mode 100644 index 9655390..0000000 --- a/source/app/wandac/src/listener.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "wandac/listener.hpp" - -#include "wanda/control/commander.hpp" -#include "wandac/cli.hpp" - -#include <wanda/control/commander.hpp> -#include <wanda/proto/command.hpp> - -#include <boost/asio/io_context.hpp> - -namespace wandac -{ - - listener::listener(wandac::cli const & cli, boost::asio::io_context & service) - : m_cli{cli} - , m_service{service} - { - } - - auto listener::on_connected(wanda::control::commander & commander) -> void - { - if (m_cli.command == "change") - { - commander.send(wanda::proto::make_change_command()); - - post(m_service, [&] { commander.stop(); }); - } - } - -} // namespace wandac diff --git a/source/app/wandac/src/main.cpp b/source/app/wandac/src/main.cpp deleted file mode 100644 index 4e68e0b..0000000 --- a/source/app/wandac/src/main.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include "wandac/cli.hpp" -#include "wandac/listener.hpp" - -#include <wanda/control/commander.hpp> -#include <wanda/system/environment.hpp> -#include <wanda/system/logging.hpp> -#include <wanda/system/xdg.hpp> - -#include <boost/asio/io_context.hpp> -#include <spdlog/sinks/stdout_color_sinks.h> - -#include <cstdlib> -#include <filesystem> -#include <iostream> - -int main(int argc, char const * const * argv) -{ - auto cli = wandac::cli{}; - if (!cli.parse({argc, argv}, std::cerr)) - { - return EXIT_FAILURE; - } - else if (cli.help) - { - cli.print_usage(std::cout); - return EXIT_SUCCESS; - } - - wanda::system::initialize_logger(std::make_shared<spdlog::sinks::stderr_color_sink_st>()); - - auto environment = wanda::system::environment{}; - auto runtime_dir = wanda::system::xdg_path_for(wanda::system::xdg_directory::runtime_dir, environment); - auto interface = runtime_dir / ".wanda_interface"; - auto service = boost::asio::io_context{}; - auto listener = wandac::listener{cli, service}; - - auto commander = wanda::control::commander{service, interface, listener}; - - wanda::system::get_logger()->info("trying to connect to wanda control interface on '{}'", interface.native()); - commander.start(); - - service.run(); -} diff --git a/source/app/wandad/CMakeLists.txt b/source/app/wandad/CMakeLists.txt deleted file mode 100644 index 9bf0ec5..0000000 --- a/source/app/wandad/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -add_executable("wandad" - "src/main.cpp" -) - -target_link_libraries("wandad" PRIVATE - "wanda::control" - "wanda::proto" - "wanda::std_ext" - "wanda::system" - - "bfg::lyra" - "spdlog::spdlog_header_only" -) - -set_target_properties("wandad" PROPERTIES - CXX_STANDARD_REQUIRED YES - CXX_EXTENSIONS OFF - INTERPROCEDURAL_OPTIMIZATION ${WANDA_IPO_SUPPORTED} -) - -install(TARGETS "wandad") diff --git a/source/app/wandad/src/main.cpp b/source/app/wandad/src/main.cpp deleted file mode 100644 index 9feac82..0000000 --- a/source/app/wandad/src/main.cpp +++ /dev/null @@ -1,148 +0,0 @@ -#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 <boost/asio/io_context.hpp> -#include <boost/asio/signal_set.hpp> -#include <lyra/lyra.hpp> -#include <spdlog/sinks/stdout_color_sinks.h> - -#include <csignal> -#include <cstdlib> -#include <filesystem> -#include <iostream> -#include <set> -#include <string> - -namespace -{ - constexpr auto image_filter = [](auto const & path) { - static auto const extensions = std::set<std::filesystem::path>{ - std::filesystem::path{".jpg"}, - std::filesystem::path{".png"}, - }; - - if (!std::filesystem::is_regular_file(path)) - { - return false; - } - - return extensions.find(path.extension()) != extensions.cend(); - }; - - struct cli - { - std::string wallpaper_directory{}; - bool help{}; - - lyra::cli_parser parser{}; - - auto parse(int argc, char const * const * argv, std::ostream & error) - { - parser |= // - lyra::help(help) | // - lyra::arg{wallpaper_directory, "directory"}("The wallpaper source directory").required(); - - auto result = parser.parse({argc, argv}); - - if (!result) - { - error << "Error while processing command line arguments: " << result.message() << '\n' << parser << '\n'; - return false; - } - - return true; - } - }; - - 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::proto::command command) override - { - switch (command.id) - { - 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::system::get_logger()->error("received unknown command '{}'", static_cast<int>(command.id)); - } - } - - private: - std::vector<std::filesystem::path> const & m_wallpapers; - }; - -} // namespace - -int main(int argc, char const * const * argv) -{ - using namespace wanda::std_ext; - - auto cli = ::cli{}; - if (!cli.parse(argc, argv, std::cerr)) - { - return EXIT_FAILURE; - } - else if (cli.help) - { - std::cout << cli.parser << '\n'; - return EXIT_SUCCESS; - } - - 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 = boost::asio::io_context{}; - 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 = boost::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"); }; -} |
