From 962912ff747e4800720a9b5ccbcd40230421b3d1 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 29 Nov 2018 22:28:07 +0100 Subject: wanda: fix shutdown code --- CMakeLists.txt | 2 ++ src/control_interface.cpp | 29 ++++++++++++++--------------- src/control_interface.hpp | 2 +- src/main.cpp | 28 ++++++++-------------------- src/wallpaper.cpp | 23 +++++++++++++++++++++++ src/wallpaper.hpp | 14 ++++++++++++++ 6 files changed, 62 insertions(+), 36 deletions(-) create mode 100644 src/wallpaper.cpp create mode 100644 src/wallpaper.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index d90fecc..cbb15a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,6 +36,8 @@ add_executable("wanda" "src/setting.cpp" "src/setting.hpp" "src/type_wrapper.hpp" + "src/wallpaper.cpp" + "src/wallpaper.hpp" ) target_link_libraries("wanda" diff --git a/src/control_interface.cpp b/src/control_interface.cpp index b662da5..2b368dd 100644 --- a/src/control_interface.cpp +++ b/src/control_interface.cpp @@ -2,13 +2,13 @@ #include +#include + #include #include #include #include -#include - namespace wanda { @@ -40,11 +40,6 @@ boost::system::error_code control_interface::start() return error; } - if (auto error = boost::system::error_code{}; m_acceptor.set_option(boost::asio::socket_base::reuse_address(true), error)) - { - return error; - } - if (auto error = boost::system::error_code{}; m_acceptor.bind(m_endpoint, error)) { return error; @@ -61,10 +56,21 @@ boost::system::error_code control_interface::start() } } +boost::system::error_code control_interface::shutdown() +{ + for(auto & connection : m_connections) + { + connection->close(); + } + + auto error = boost::system::error_code{}; + return m_acceptor.close(error); +} + void control_interface::perform_accept() { m_acceptor.async_accept(m_socket, [that = shared_from_this(), this](auto const &error) { - if (error) + if (error && error != boost::asio::error::operation_aborted) { // TODO: Handle error } @@ -73,7 +79,6 @@ void control_interface::perform_accept() auto [connection, inserted] = m_connections.insert(make_control_connection(std::move(m_socket))); if(inserted) { - std::cout << "Accepted a new connection\n"; (*connection)->add(shared_from_this()); (*connection)->start(); } @@ -82,14 +87,8 @@ void control_interface::perform_accept() }); } -void control_interface::on_received(control_connection::pointer, std::string message) -{ - std::cout << "Received '" << message << "'\n"; -} - void control_interface::on_close(control_connection::pointer connection) { - std::cout << "Connection closed\n"; m_connections.erase(connection); } diff --git a/src/control_interface.hpp b/src/control_interface.hpp index f95362c..c69aeb4 100644 --- a/src/control_interface.hpp +++ b/src/control_interface.hpp @@ -31,8 +31,8 @@ struct control_interface : control_connection::listener, keyed @@ -13,19 +14,6 @@ namespace { -void set_wallpaper(std::filesystem::path wallpaper) -{ - using namespace wanda::literals; - using namespace wanda::std_ext; - using namespace std::string_literals; - - with("org.gnome.desktop.background"_setting, [&](auto &setting) { - with(setting["picture-uri"_key], [&](auto &value) { - value = "file://" + wallpaper.native(); - }) || [] { std::cerr << "No such key!\n"; }; - }) || [] { std::cerr << "No such setting!\n"; }; -} - constexpr auto image_filter = [](auto const &path) { static auto const extensions = std::set{ std::filesystem::path{".jpg"}, @@ -48,22 +36,22 @@ int main() with(wanda::scan({"/usr/share/backgrounds"}, image_filter), [](auto const &list) { auto wallpaper = wanda::random_pick(list); - std::cout << "changing wallpaper to " << wallpaper << '\n'; - set_wallpaper(wallpaper); + wanda::set_wallpaper(wallpaper); auto service = boost::asio::io_service{}; auto interface = wanda::make_interface(service, ".wanda_interface"); auto status = interface->start(); - if(status) + if (status) { return; } auto signals = boost::asio::signal_set{service, SIGINT}; - signals.async_wait([&](auto const & error, auto const signal){ - if(!error && signal == SIGINT) + signals.async_wait([&](auto const &error, auto const signal) { + if (!error && signal == SIGINT) { + interface->shutdown(); service.stop(); } }); diff --git a/src/wallpaper.cpp b/src/wallpaper.cpp new file mode 100644 index 0000000..39abb60 --- /dev/null +++ b/src/wallpaper.cpp @@ -0,0 +1,23 @@ +#include "optional.hpp" +#include "setting.hpp" +#include "wallpaper.hpp" + +#include + +namespace wanda +{ + +void set_wallpaper(std::filesystem::path wallpaper) +{ + using namespace wanda::literals; + using namespace wanda::std_ext; + using namespace std::string_literals; + + with("org.gnome.desktop.background"_setting, [&](auto &setting) { + with(setting["picture-uri"_key], [&](auto &value) { + value = "file://" + wallpaper.native(); + }) || [] { std::cerr << "No such key!\n"; }; + }) || [] { std::cerr << "No such setting!\n"; }; +} + +} // namespace wanda \ No newline at end of file diff --git a/src/wallpaper.hpp b/src/wallpaper.hpp new file mode 100644 index 0000000..6222557 --- /dev/null +++ b/src/wallpaper.hpp @@ -0,0 +1,14 @@ +#ifndef WANDA_WALLPAPER_HPP +#define WANDA_WALLPAPER_HPP + +#include + +namespace wanda +{ + +void set_wallpaper(std::filesystem::path wallpaper); + +} // wanda + + +#endif \ No newline at end of file -- cgit v1.2.3