2
0
mirror of https://github.com/telegramdesktop/tdesktop synced 2025-09-05 00:46:08 +00:00

Initial chat theme changing.

This commit is contained in:
John Preston
2021-09-24 19:10:25 +04:00
parent 80028e41f3
commit ab0d2bf9c6
20 changed files with 773 additions and 120 deletions

View File

@@ -25,8 +25,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
namespace Window {
namespace {
constexpr auto kDarkValueThreshold = 0.5;
[[nodiscard]] rpl::producer<QString> PeerThemeEmojiValue(
not_null<PeerData*> peer) {
return peer->session().changes().peerFlagsValue(
@@ -51,17 +49,9 @@ constexpr auto kDarkValueThreshold = 0.5;
[[nodiscard]] auto MaybeCloudThemeValueFromPeer(
not_null<PeerData*> peer)
-> rpl::producer<std::optional<Data::CloudTheme>> {
auto isThemeDarkValue = rpl::single(
rpl::empty_value()
) | rpl::then(
style::PaletteChanged()
) | rpl::map([] {
return (st::dialogsBg->c.valueF() < kDarkValueThreshold);
}) | rpl::distinct_until_changed();
return rpl::combine(
MaybeChatThemeDataValueFromPeer(peer),
std::move(isThemeDarkValue)
Theme::IsThemeDarkValue() | rpl::distinct_until_changed()
) | rpl::map([](std::optional<Data::ChatTheme> theme, bool night) {
return !theme
? std::nullopt
@@ -304,7 +294,7 @@ auto ChatThemeValueFromPeer(
not_null<SessionController*> controller,
not_null<PeerData*> peer)
-> rpl::producer<std::shared_ptr<Ui::ChatTheme>> {
return MaybeCloudThemeValueFromPeer(
auto cloud = MaybeCloudThemeValueFromPeer(
peer
) | rpl::map([=](std::optional<Data::CloudTheme> theme)
-> rpl::producer<std::shared_ptr<Ui::ChatTheme>> {
@@ -314,6 +304,17 @@ auto ChatThemeValueFromPeer(
return controller->cachedChatThemeValue(*theme);
}) | rpl::flatten_latest(
) | rpl::distinct_until_changed();
return rpl::combine(
std::move(cloud),
controller->peerThemeOverrideValue()
) | rpl::map([=](
std::shared_ptr<Ui::ChatTheme> &&cloud,
PeerThemeOverride &&overriden) {
return (overriden.peer == peer.get())
? std::move(overriden.theme)
: std::move(cloud);
});
}
} // namespace Window