mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Respect wallpaper_overriden flag.
This commit is contained in:
parent
1a69975131
commit
514ced1d8e
7 changed files with 47 additions and 22 deletions
|
@ -1996,7 +1996,8 @@ void Updates::feedUpdate(const MTPUpdate &update) {
|
||||||
if (const auto peer = session().data().peerLoaded(peerFromMTP(d.vpeer()))) {
|
if (const auto peer = session().data().peerLoaded(peerFromMTP(d.vpeer()))) {
|
||||||
if (const auto paper = d.vwallpaper()) {
|
if (const auto paper = d.vwallpaper()) {
|
||||||
peer->setWallPaper(
|
peer->setWallPaper(
|
||||||
Data::WallPaper::Create(&session(), *paper));
|
Data::WallPaper::Create(&session(), *paper),
|
||||||
|
d.is_wallpaper_overridden());
|
||||||
} else {
|
} else {
|
||||||
peer->setWallPaper({});
|
peer->setWallPaper({});
|
||||||
}
|
}
|
||||||
|
|
|
@ -310,7 +310,7 @@ void BackgroundBox::resetForPeer() {
|
||||||
}).send();
|
}).send();
|
||||||
|
|
||||||
const auto weak = Ui::MakeWeak(this);
|
const auto weak = Ui::MakeWeak(this);
|
||||||
_forPeer->setWallPaper(std::nullopt);
|
_forPeer->setWallPaper({});
|
||||||
if (weak) {
|
if (weak) {
|
||||||
_controller->finishChatThemeEdit(_forPeer);
|
_controller->finishChatThemeEdit(_forPeer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1227,16 +1227,30 @@ const QString &PeerData::themeEmoji() const {
|
||||||
return _themeEmoticon;
|
return _themeEmoticon;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PeerData::setWallPaper(std::optional<Data::WallPaper> paper) {
|
void PeerData::setWallPaper(
|
||||||
if (!paper && !_wallPaper) {
|
std::optional<Data::WallPaper> paper,
|
||||||
return;
|
bool overriden) {
|
||||||
} else if (paper && _wallPaper && _wallPaper->equals(*paper)) {
|
const auto paperChanged = (paper || _wallPaper)
|
||||||
return;
|
&& (!paper || !_wallPaper || !_wallPaper->equals(*paper));
|
||||||
|
if (paperChanged) {
|
||||||
|
_wallPaper = paper
|
||||||
|
? std::make_unique<Data::WallPaper>(std::move(*paper))
|
||||||
|
: nullptr;
|
||||||
}
|
}
|
||||||
_wallPaper = paper
|
|
||||||
? std::make_unique<Data::WallPaper>(std::move(*paper))
|
const auto overridenValue = overriden ? 1 : 0;
|
||||||
: nullptr;
|
const auto overridenChanged = (_wallPaperOverriden != overridenValue);
|
||||||
session().changes().peerUpdated(this, UpdateFlag::ChatWallPaper);
|
if (overridenChanged) {
|
||||||
|
_wallPaperOverriden = overridenValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (paperChanged || overridenChanged) {
|
||||||
|
session().changes().peerUpdated(this, UpdateFlag::ChatWallPaper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PeerData::wallPaperOverriden() const {
|
||||||
|
return _wallPaperOverriden != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Data::WallPaper *PeerData::wallPaper() const {
|
const Data::WallPaper *PeerData::wallPaper() const {
|
||||||
|
|
|
@ -414,7 +414,10 @@ public:
|
||||||
void setThemeEmoji(const QString &emoticon);
|
void setThemeEmoji(const QString &emoticon);
|
||||||
[[nodiscard]] const QString &themeEmoji() const;
|
[[nodiscard]] const QString &themeEmoji() const;
|
||||||
|
|
||||||
void setWallPaper(std::optional<Data::WallPaper> paper);
|
void setWallPaper(
|
||||||
|
std::optional<Data::WallPaper> paper,
|
||||||
|
bool overriden = false);
|
||||||
|
[[nodiscard]] bool wallPaperOverriden() const;
|
||||||
[[nodiscard]] const Data::WallPaper *wallPaper() const;
|
[[nodiscard]] const Data::WallPaper *wallPaper() const;
|
||||||
|
|
||||||
enum class StoriesState {
|
enum class StoriesState {
|
||||||
|
@ -467,7 +470,8 @@ private:
|
||||||
crl::time _lastFullUpdate = 0;
|
crl::time _lastFullUpdate = 0;
|
||||||
|
|
||||||
QString _name;
|
QString _name;
|
||||||
int _nameVersion = 1;
|
uint32 _nameVersion : 31 = 1;
|
||||||
|
uint32 _wallPaperOverriden : 1 = 0;
|
||||||
|
|
||||||
TimeId _ttlPeriod = 0;
|
TimeId _ttlPeriod = 0;
|
||||||
|
|
||||||
|
@ -475,6 +479,7 @@ private:
|
||||||
TimeId _requestChatDate = 0;
|
TimeId _requestChatDate = 0;
|
||||||
|
|
||||||
Settings _settings = PeerSettings(PeerSetting::Unknown);
|
Settings _settings = PeerSettings(PeerSetting::Unknown);
|
||||||
|
|
||||||
BlockStatus _blockStatus = BlockStatus::Unknown;
|
BlockStatus _blockStatus = BlockStatus::Unknown;
|
||||||
LoadedStatus _loadedStatus = LoadedStatus::Not;
|
LoadedStatus _loadedStatus = LoadedStatus::Not;
|
||||||
TranslationFlag _translationFlag = TranslationFlag::Unknown;
|
TranslationFlag _translationFlag = TranslationFlag::Unknown;
|
||||||
|
|
|
@ -515,7 +515,8 @@ void ApplyUserUpdate(not_null<UserData*> user, const MTPDuserFull &update) {
|
||||||
|
|
||||||
if (const auto paper = update.vwallpaper()) {
|
if (const auto paper = update.vwallpaper()) {
|
||||||
user->setWallPaper(
|
user->setWallPaper(
|
||||||
Data::WallPaper::Create(&user->session(), *paper));
|
Data::WallPaper::Create(&user->session(), *paper),
|
||||||
|
update.is_wallpaper_overridden());
|
||||||
} else {
|
} else {
|
||||||
user->setWallPaper({});
|
user->setWallPaper({});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1195,7 +1195,8 @@ void History::applyServiceChanges(
|
||||||
}, [&](const MTPDmessageActionSetChatWallPaper &data) {
|
}, [&](const MTPDmessageActionSetChatWallPaper &data) {
|
||||||
if (item->out() || data.is_for_both()) {
|
if (item->out() || data.is_for_both()) {
|
||||||
peer->setWallPaper(
|
peer->setWallPaper(
|
||||||
Data::WallPaper::Create(&session(), data.vwallpaper()));
|
Data::WallPaper::Create(&session(), data.vwallpaper()),
|
||||||
|
!item->out() && data.is_for_both());
|
||||||
}
|
}
|
||||||
}, [&](const MTPDmessageActionChatJoinedByRequest &data) {
|
}, [&](const MTPDmessageActionChatJoinedByRequest &data) {
|
||||||
processJoinedPeer(item->from());
|
processJoinedPeer(item->from());
|
||||||
|
|
|
@ -40,22 +40,25 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
namespace HistoryView {
|
namespace HistoryView {
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
[[nodiscard]] bool HasThatWallPaperForBoth(
|
[[nodiscard]] bool WallPaperRevertable(
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
const Data::WallPaper &paper) {
|
const Data::WallPaper &paper) {
|
||||||
|
if (!peer->wallPaperOverriden()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
const auto now = peer->wallPaper();
|
const auto now = peer->wallPaper();
|
||||||
return now && now->equals(paper);
|
return now && now->equals(paper);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] bool HasThatWallPaperForBoth(not_null<HistoryItem*> item) {
|
[[nodiscard]] bool WallPaperRevertable(not_null<HistoryItem*> item) {
|
||||||
const auto media = item->media();
|
const auto media = item->media();
|
||||||
const auto paper = media ? media->paper() : nullptr;
|
const auto paper = media ? media->paper() : nullptr;
|
||||||
return paper
|
return paper
|
||||||
&& media->paperForBoth()
|
&& media->paperForBoth()
|
||||||
&& HasThatWallPaperForBoth(item->history()->peer, *paper);
|
&& WallPaperRevertable(item->history()->peer, *paper);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] rpl::producer<bool> HasThatWallPaperForBothValue(
|
[[nodiscard]] rpl::producer<bool> WallPaperRevertableValue(
|
||||||
not_null<HistoryItem*> item) {
|
not_null<HistoryItem*> item) {
|
||||||
const auto media = item->media();
|
const auto media = item->media();
|
||||||
const auto paper = media ? media->paper() : nullptr;
|
const auto paper = media ? media->paper() : nullptr;
|
||||||
|
@ -67,7 +70,7 @@ namespace {
|
||||||
peer,
|
peer,
|
||||||
Data::PeerUpdate::Flag::ChatWallPaper
|
Data::PeerUpdate::Flag::ChatWallPaper
|
||||||
) | rpl::map([peer, paper = *paper] {
|
) | rpl::map([peer, paper = *paper] {
|
||||||
return HasThatWallPaperForBoth(peer, paper);
|
return WallPaperRevertable(peer, paper);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -499,7 +502,7 @@ rpl::producer<QString> ThemeDocumentBox::button() {
|
||||||
return _parent->data()->out()
|
return _parent->data()->out()
|
||||||
? nullptr
|
? nullptr
|
||||||
: rpl::conditional(
|
: rpl::conditional(
|
||||||
HasThatWallPaperForBothValue(_parent->data()),
|
WallPaperRevertableValue(_parent->data()),
|
||||||
tr::lng_action_set_wallpaper_remove(),
|
tr::lng_action_set_wallpaper_remove(),
|
||||||
tr::lng_action_set_wallpaper_button());
|
tr::lng_action_set_wallpaper_button());
|
||||||
}
|
}
|
||||||
|
@ -518,7 +521,7 @@ ClickHandlerPtr ThemeDocumentBox::createViewLink() {
|
||||||
const auto view = weak.get();
|
const auto view = weak.get();
|
||||||
if (view
|
if (view
|
||||||
&& !view->data()->out()
|
&& !view->data()->out()
|
||||||
&& HasThatWallPaperForBoth(view->data())) {
|
&& WallPaperRevertable(view->data())) {
|
||||||
const auto reset = crl::guard(weak, [=](Fn<void()> close) {
|
const auto reset = crl::guard(weak, [=](Fn<void()> close) {
|
||||||
const auto api = &controller->session().api();
|
const auto api = &controller->session().api();
|
||||||
api->request(MTPmessages_SetChatWallPaper(
|
api->request(MTPmessages_SetChatWallPaper(
|
||||||
|
|
Loading…
Add table
Reference in a new issue