Skip to content

Commit

Permalink
fix: add support for pipewire versions < 0.3.68
Browse files Browse the repository at this point in the history
  • Loading branch information
Curve committed Mar 30, 2024
1 parent db16998 commit 33038d9
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 8 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.21)
project(rohrkabel LANGUAGES CXX VERSION 3.0)
project(rohrkabel LANGUAGES CXX VERSION 3.1)

# --------------------------------------------------------------------------------------------------------
# Library options
Expand Down
23 changes: 16 additions & 7 deletions src/proxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,37 +74,46 @@ namespace pipewire
{
listener hook;
pw_proxy_events events;
std::promise<expected<spa::dict>> props;

public:
spa::dict props;
std::promise<expected<void>> done;
};

auto m_state = std::make_shared<state>();
m_state->events.version = PW_VERSION_PROXY_EVENTS;

m_state->events.bound = [](void *data, uint32_t)
{
auto &m_state = *reinterpret_cast<state *>(data);
m_state.done.set_value({});
};

m_state->events.bound_props = [](void *data, uint32_t, const spa_dict *props)
{
auto &m_state = *reinterpret_cast<state *>(data);
m_state.props.set_value(props);
m_state.props = props;
};

m_state->events.error = [](void *data, int seq, int res, const char *message)
{
auto &m_state = *reinterpret_cast<state *>(data);
m_state.props.set_value(tl::make_unexpected<error>({seq, res, message}));
m_state.done.set_value(tl::make_unexpected<error>({seq, res, message}));
};

pw_proxy_add_listener(raw, m_state->hook.get(), &m_state->events, m_state.get());

return make_lazy<expected<proxy>>(
[m_state, raw]() -> expected<proxy>
{
auto props = m_state->props.get_future().get();
auto done = m_state->done.get_future().get();

if (!props.has_value())
if (!done.has_value())
{
return tl::make_unexpected(props.error());
return tl::make_unexpected(done.error());
}

return proxy{raw, std::move(props.value())};
return proxy{raw, std::move(m_state->props)};
});
}
} // namespace pipewire

0 comments on commit 33038d9

Please sign in to comment.