mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Show new-peer-info photo/name change.
This commit is contained in:
parent
b6a31979f2
commit
72a35ba58b
5 changed files with 108 additions and 0 deletions
|
@ -349,6 +349,8 @@ enum class MessageFlag : uint64 {
|
||||||
EstimatedDate = (1ULL << 49),
|
EstimatedDate = (1ULL << 49),
|
||||||
|
|
||||||
ReactionsAllowed = (1ULL << 50),
|
ReactionsAllowed = (1ULL << 50),
|
||||||
|
|
||||||
|
HideDisplayDate = (1ULL << 51),
|
||||||
};
|
};
|
||||||
inline constexpr bool is_flag_type(MessageFlag) { return true; }
|
inline constexpr bool is_flag_type(MessageFlag) { return true; }
|
||||||
using MessageFlags = base::flags<MessageFlag>;
|
using MessageFlags = base::flags<MessageFlag>;
|
||||||
|
|
|
@ -137,6 +137,10 @@ void History::setHasPendingResizedItems() {
|
||||||
void History::itemRemoved(not_null<HistoryItem*> item) {
|
void History::itemRemoved(not_null<HistoryItem*> item) {
|
||||||
if (item == _joinedMessage) {
|
if (item == _joinedMessage) {
|
||||||
_joinedMessage = nullptr;
|
_joinedMessage = nullptr;
|
||||||
|
} else if (item == _newPeerNameChange) {
|
||||||
|
_newPeerNameChange = nullptr;
|
||||||
|
} else if (item == _newPeerPhotoChange) {
|
||||||
|
_newPeerPhotoChange = nullptr;
|
||||||
}
|
}
|
||||||
item->removeMainView();
|
item->removeMainView();
|
||||||
if (_lastServerMessage == item) {
|
if (_lastServerMessage == item) {
|
||||||
|
@ -1229,6 +1233,8 @@ void History::mainViewRemoved(
|
||||||
not_null<HistoryBlock*> block,
|
not_null<HistoryBlock*> block,
|
||||||
not_null<HistoryView::Element*> view) {
|
not_null<HistoryView::Element*> view) {
|
||||||
Expects(_joinedMessage != view->data());
|
Expects(_joinedMessage != view->data());
|
||||||
|
Expects(_newPeerNameChange != view->data());
|
||||||
|
Expects(_newPeerPhotoChange != view->data());
|
||||||
|
|
||||||
if (_firstUnreadView == view) {
|
if (_firstUnreadView == view) {
|
||||||
getNextFirstUnreadMessage();
|
getNextFirstUnreadMessage();
|
||||||
|
@ -3243,6 +3249,85 @@ HistoryItem *History::insertJoinedMessage() {
|
||||||
return _joinedMessage;
|
return _joinedMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void History::checkNewPeerMessages() {
|
||||||
|
if (!loadedAtTop()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const auto user = peer->asUser();
|
||||||
|
if (!user) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const auto photo = user->photoChangeDate();
|
||||||
|
const auto name = user->nameChangeDate();
|
||||||
|
if (!photo && _newPeerPhotoChange) {
|
||||||
|
_newPeerPhotoChange->destroy();
|
||||||
|
}
|
||||||
|
if (!name && _newPeerNameChange) {
|
||||||
|
_newPeerNameChange->destroy();
|
||||||
|
}
|
||||||
|
if ((!photo || _newPeerPhotoChange) && (!name || _newPeerNameChange)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto when = [](TimeId date) {
|
||||||
|
const auto now = base::unixtime::now();
|
||||||
|
const auto passed = now - date;
|
||||||
|
if (passed < 3600) {
|
||||||
|
return tr::lng_new_contact_updated_now(tr::now);
|
||||||
|
} else if (passed < 24 * 3600) {
|
||||||
|
return tr::lng_new_contact_updated_hours(
|
||||||
|
tr::now,
|
||||||
|
lt_count,
|
||||||
|
(passed / 3600));
|
||||||
|
} else if (passed < 60 * 24 * 3600) {
|
||||||
|
return tr::lng_new_contact_updated_days(
|
||||||
|
tr::now,
|
||||||
|
lt_count,
|
||||||
|
(passed / (24 * 3600)));
|
||||||
|
}
|
||||||
|
return tr::lng_new_contact_updated_months(
|
||||||
|
tr::now,
|
||||||
|
lt_count,
|
||||||
|
(passed / (30 * 24 * 3600)));
|
||||||
|
};
|
||||||
|
|
||||||
|
auto firstDate = TimeId();
|
||||||
|
for (const auto &block : blocks) {
|
||||||
|
for (const auto &message : block->messages) {
|
||||||
|
const auto item = message->data();
|
||||||
|
if (item != _newPeerPhotoChange && item != _newPeerNameChange) {
|
||||||
|
firstDate = item->date();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (firstDate) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!firstDate) {
|
||||||
|
firstDate = base::unixtime::serialize(
|
||||||
|
QDateTime(QDate(2013, 8, 1), QTime(0, 0)));
|
||||||
|
}
|
||||||
|
const auto add = [&](tr::phrase<lngtag_when> phrase, TimeId date) {
|
||||||
|
const auto result = makeMessage({
|
||||||
|
.id = owner().nextLocalMessageId(),
|
||||||
|
.flags = MessageFlag::Local | MessageFlag::HideDisplayDate,
|
||||||
|
.date = (--firstDate),
|
||||||
|
}, PreparedServiceText{ TextWithEntities{
|
||||||
|
phrase(tr::now, lt_when, when(date)),
|
||||||
|
} });
|
||||||
|
insertMessageToBlocks(result);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (photo && !_newPeerPhotoChange) {
|
||||||
|
_newPeerPhotoChange = add(tr::lng_new_contact_updated_photo, photo);
|
||||||
|
}
|
||||||
|
if (name && !_newPeerNameChange) {
|
||||||
|
_newPeerNameChange = add(tr::lng_new_contact_updated_name, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void History::insertMessageToBlocks(not_null<HistoryItem*> item) {
|
void History::insertMessageToBlocks(not_null<HistoryItem*> item) {
|
||||||
Expects(item->mainView() == nullptr);
|
Expects(item->mainView() == nullptr);
|
||||||
|
|
||||||
|
@ -3296,6 +3381,8 @@ void History::checkLocalMessages() {
|
||||||
&& peer->asChannel()->inviter
|
&& peer->asChannel()->inviter
|
||||||
&& goodDate(peer->asChannel()->inviteDate)) {
|
&& goodDate(peer->asChannel()->inviteDate)) {
|
||||||
insertJoinedMessage();
|
insertJoinedMessage();
|
||||||
|
} else {
|
||||||
|
checkNewPeerMessages();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3309,6 +3396,15 @@ void History::removeJoinedMessage() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void History::removeNewPeerMessages() {
|
||||||
|
if (_newPeerNameChange) {
|
||||||
|
_newPeerNameChange->destroy();
|
||||||
|
}
|
||||||
|
if (_newPeerPhotoChange) {
|
||||||
|
_newPeerPhotoChange->destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void History::reactionsEnabledChanged(bool enabled) {
|
void History::reactionsEnabledChanged(bool enabled) {
|
||||||
if (!enabled) {
|
if (!enabled) {
|
||||||
for (const auto &item : _items) {
|
for (const auto &item : _items) {
|
||||||
|
|
|
@ -82,6 +82,7 @@ public:
|
||||||
[[nodiscard]] HistoryItem *joinedMessageInstance() const;
|
[[nodiscard]] HistoryItem *joinedMessageInstance() const;
|
||||||
void checkLocalMessages();
|
void checkLocalMessages();
|
||||||
void removeJoinedMessage();
|
void removeJoinedMessage();
|
||||||
|
void removeNewPeerMessages();
|
||||||
|
|
||||||
void reactionsEnabledChanged(bool enabled);
|
void reactionsEnabledChanged(bool enabled);
|
||||||
|
|
||||||
|
@ -545,6 +546,7 @@ private:
|
||||||
|
|
||||||
HistoryItem *insertJoinedMessage();
|
HistoryItem *insertJoinedMessage();
|
||||||
void insertMessageToBlocks(not_null<HistoryItem*> item);
|
void insertMessageToBlocks(not_null<HistoryItem*> item);
|
||||||
|
void checkNewPeerMessages();
|
||||||
|
|
||||||
[[nodiscard]] Dialogs::BadgesState computeBadgesState() const;
|
[[nodiscard]] Dialogs::BadgesState computeBadgesState() const;
|
||||||
[[nodiscard]] Dialogs::BadgesState adjustBadgesStateByFolder(
|
[[nodiscard]] Dialogs::BadgesState adjustBadgesStateByFolder(
|
||||||
|
@ -563,6 +565,8 @@ private:
|
||||||
Element *_unreadBarView = nullptr;
|
Element *_unreadBarView = nullptr;
|
||||||
Element *_firstUnreadView = nullptr;
|
Element *_firstUnreadView = nullptr;
|
||||||
HistoryItem *_joinedMessage = nullptr;
|
HistoryItem *_joinedMessage = nullptr;
|
||||||
|
HistoryItem *_newPeerNameChange = nullptr;
|
||||||
|
HistoryItem *_newPeerPhotoChange = nullptr;
|
||||||
bool _loadedAtTop = false;
|
bool _loadedAtTop = false;
|
||||||
bool _loadedAtBottom = true;
|
bool _loadedAtBottom = true;
|
||||||
|
|
||||||
|
|
|
@ -322,6 +322,9 @@ public:
|
||||||
[[nodiscard]] bool hideEditedBadge() const {
|
[[nodiscard]] bool hideEditedBadge() const {
|
||||||
return (_flags & MessageFlag::HideEdited);
|
return (_flags & MessageFlag::HideEdited);
|
||||||
}
|
}
|
||||||
|
[[nodiscard]] bool hideDisplayDate() const {
|
||||||
|
return (_flags & MessageFlag::HideDisplayDate);
|
||||||
|
}
|
||||||
[[nodiscard]] bool isLocal() const {
|
[[nodiscard]] bool isLocal() const {
|
||||||
return _flags & MessageFlag::Local;
|
return _flags & MessageFlag::Local;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1427,6 +1427,9 @@ bool Element::countIsTopicRootReply() const {
|
||||||
|
|
||||||
void Element::setDisplayDate(bool displayDate) {
|
void Element::setDisplayDate(bool displayDate) {
|
||||||
const auto item = data();
|
const auto item = data();
|
||||||
|
if (item->hideDisplayDate()) {
|
||||||
|
displayDate = false;
|
||||||
|
}
|
||||||
if (displayDate && !Has<DateBadge>()) {
|
if (displayDate && !Has<DateBadge>()) {
|
||||||
AddComponents(DateBadge::Bit());
|
AddComponents(DateBadge::Bit());
|
||||||
Get<DateBadge>()->init(
|
Get<DateBadge>()->init(
|
||||||
|
|
Loading…
Add table
Reference in a new issue