2
0
mirror of https://github.com/kotatogram/kotatogram-desktop synced 2025-09-02 07:35:12 +00:00

Support chat wallpaper set from gallery.

This commit is contained in:
John Preston
2023-04-18 16:47:31 +04:00
parent 9b25973b49
commit 352ae5100a
17 changed files with 347 additions and 102 deletions

View File

@@ -95,6 +95,33 @@ struct ResolvedPaper {
}) | rpl::flatten_latest();
}
[[nodiscard]] rpl::producer<> DebouncedPaletteValue() {
return [=](auto consumer) {
auto lifetime = rpl::lifetime();
struct State {
base::has_weak_ptr guard;
bool scheduled = false;
};
const auto state = lifetime.make_state<State>();
consumer.put_next_copy(rpl::empty);
style::PaletteChanged(
) | rpl::start_with_next([=] {
if (state->scheduled) {
return;
}
state->scheduled = true;
Ui::PostponeCall(&state->guard, [=] {
state->scheduled = false;
consumer.put_next_copy(rpl::empty);
});
}, lifetime);
return lifetime;
};
}
struct ResolvedTheme {
std::optional<Data::CloudTheme> theme;
std::optional<ResolvedPaper> paper;
@@ -111,9 +138,22 @@ struct ResolvedTheme {
) | rpl::map([](
std::optional<Data::CloudTheme> theme,
std::optional<ResolvedPaper> paper,
bool night) {
return ResolvedTheme{ std::move(theme), std::move(paper), night };
});
bool night) -> rpl::producer<ResolvedTheme> {
if (theme || !paper) {
return rpl::single<ResolvedTheme>({
std::move(theme),
std::move(paper),
night,
});
}
return DebouncedPaletteValue(
) | rpl::map([=] {
return ResolvedTheme{
.paper = paper,
.dark = night,
};
});
}) | rpl::flatten_latest();
}
} // namespace