mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-07 07:33:52 +02:00
Show chats list badge only for non-empty calls.
This commit is contained in:
parent
fa55fd7dd7
commit
732bc38e8e
8 changed files with 38 additions and 12 deletions
|
@ -67,7 +67,7 @@ ChannelData::ChannelData(not_null<Data::Session*> owner, PeerId id)
|
|||
mgInfo = nullptr;
|
||||
}
|
||||
}
|
||||
if (change.diff & MTPDchannel::Flag::f_call_active) {
|
||||
if (change.diff & MTPDchannel::Flag::f_call_not_empty) {
|
||||
if (const auto history = this->owner().historyLoaded(this)) {
|
||||
history->updateChatListEntry();
|
||||
}
|
||||
|
@ -708,7 +708,8 @@ void ChannelData::clearCall() {
|
|||
owner().unregisterGroupCall(_call.get());
|
||||
_call = nullptr;
|
||||
session().changes().peerUpdated(this, UpdateFlag::GroupCall);
|
||||
removeFlags(MTPDchannel::Flag::f_call_active);
|
||||
removeFlags(MTPDchannel::Flag::f_call_active
|
||||
| MTPDchannel::Flag::f_call_not_empty);
|
||||
}
|
||||
|
||||
namespace Data {
|
||||
|
|
|
@ -102,7 +102,7 @@ public:
|
|||
| MTPDchannel::Flag::f_restricted
|
||||
| MTPDchannel::Flag::f_signatures
|
||||
| MTPDchannel::Flag::f_username
|
||||
| MTPDchannel::Flag::f_call_active
|
||||
| MTPDchannel::Flag::f_call_not_empty
|
||||
| MTPDchannel::Flag::f_slowmode_enabled;
|
||||
using Flags = Data::Flags<
|
||||
MTPDchannel::Flags,
|
||||
|
|
|
@ -85,13 +85,34 @@ void GroupCall::requestParticipants() {
|
|||
});
|
||||
_participantsSliceAdded.fire({});
|
||||
_participantsRequestId = 0;
|
||||
changeChannelEmptyCallFlag();
|
||||
}).fail([=](const RPCError &error) {
|
||||
_fullCount = _participants.size();
|
||||
_allReceived = true;
|
||||
_participantsRequestId = 0;
|
||||
changeChannelEmptyCallFlag();
|
||||
}).send();
|
||||
}
|
||||
|
||||
void GroupCall::changeChannelEmptyCallFlag() {
|
||||
constexpr auto flag = MTPDchannel::Flag::f_call_not_empty;
|
||||
if (_channel->call() != this) {
|
||||
return;
|
||||
} else if (fullCount() > 0) {
|
||||
if (!(_channel->flags() & flag)) {
|
||||
_channel->addFlags(flag);
|
||||
_channel->session().changes().peerUpdated(
|
||||
_channel,
|
||||
Data::PeerUpdate::Flag::GroupCall);
|
||||
}
|
||||
} else if (_channel->flags() & flag) {
|
||||
_channel->removeFlags(flag);
|
||||
_channel->session().changes().peerUpdated(
|
||||
_channel,
|
||||
Data::PeerUpdate::Flag::GroupCall);
|
||||
}
|
||||
}
|
||||
|
||||
int GroupCall::fullCount() const {
|
||||
return _fullCount.current();
|
||||
}
|
||||
|
@ -138,6 +159,7 @@ void GroupCall::applyCall(const MTPGroupCall &call, bool force) {
|
|||
_canChangeJoinMuted = data.is_can_change_join_muted();
|
||||
_version = data.vversion().v;
|
||||
_fullCount = data.vparticipants_count().v;
|
||||
changeChannelEmptyCallFlag();
|
||||
}, [&](const MTPDgroupCallDiscarded &data) {
|
||||
const auto id = _id;
|
||||
const auto channel = _channel;
|
||||
|
@ -240,6 +262,7 @@ void GroupCall::applyParticipantsSlice(
|
|||
}
|
||||
if (sliceSource == ApplySliceSource::UpdateReceived) {
|
||||
_fullCount = changedCount;
|
||||
changeChannelEmptyCallFlag();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -78,6 +78,7 @@ private:
|
|||
void applyParticipantsMutes(
|
||||
const MTPDupdateGroupCallParticipants &update);
|
||||
void requestUnknownSsrcs();
|
||||
void changeChannelEmptyCallFlag();
|
||||
|
||||
const not_null<ChannelData*> _channel;
|
||||
const uint64 _id = 0;
|
||||
|
|
|
@ -443,7 +443,7 @@ bool IsUserOnline(not_null<UserData*> user) {
|
|||
}
|
||||
|
||||
bool ChannelHasActiveCall(not_null<ChannelData*> channel) {
|
||||
return (channel->flags() & MTPDchannel::Flag::f_call_active);
|
||||
return (channel->flags() & MTPDchannel::Flag::f_call_not_empty);
|
||||
}
|
||||
|
||||
} // namespace Data
|
||||
|
|
|
@ -686,7 +686,11 @@ not_null<PeerData*> Session::processChat(const MTPChat &data) {
|
|||
} else {
|
||||
channel->setUnavailableReasons({});
|
||||
}
|
||||
channel->setFlags(data.vflags().v);
|
||||
const auto callFlag = MTPDchannel::Flag::f_call_not_empty;
|
||||
const auto callNotEmpty = (data.vflags().v & callFlag)
|
||||
|| (channel->call() && channel->call()->fullCount() > 0);
|
||||
channel->setFlags(data.vflags().v
|
||||
| (callNotEmpty ? callFlag : MTPDchannel::Flag(0)));
|
||||
//if (const auto feedId = data.vfeed_id()) { // #feed
|
||||
// channel->setFeed(feed(feedId->v));
|
||||
//} else {
|
||||
|
|
|
@ -3010,9 +3010,7 @@ void InnerWidget::userOnlineUpdated(not_null<PeerData*> peer) {
|
|||
if (!history) {
|
||||
return;
|
||||
}
|
||||
updateRowCornerStatusShown(
|
||||
history,
|
||||
Data::OnlineTextActive(user, base::unixtime::now()));
|
||||
updateRowCornerStatusShown(history, Data::IsUserOnline(user));
|
||||
}
|
||||
|
||||
void InnerWidget::groupHasCallUpdated(not_null<PeerData*> peer) {
|
||||
|
@ -3024,9 +3022,7 @@ void InnerWidget::groupHasCallUpdated(not_null<PeerData*> peer) {
|
|||
if (!history) {
|
||||
return;
|
||||
}
|
||||
updateRowCornerStatusShown(
|
||||
history,
|
||||
group->flags() & MTPDchannel::Flag::f_call_active);
|
||||
updateRowCornerStatusShown(history, Data::ChannelHasActiveCall(group));
|
||||
}
|
||||
|
||||
void InnerWidget::updateRowCornerStatusShown(
|
||||
|
|
|
@ -238,13 +238,13 @@ void BasicRow::paintUserpic(
|
|||
if (historyForCornerBadge->peer->isUser()) {
|
||||
return;
|
||||
}
|
||||
p.setOpacity(shown);
|
||||
const auto actionPainter = historyForCornerBadge->sendActionPainter();
|
||||
const auto bg = active
|
||||
? st::dialogsBgActive
|
||||
: st::dialogsBg;
|
||||
const auto size = st::dialogsCallBadgeSize;
|
||||
const auto skip = st::dialogsCallBadgeSkip;
|
||||
p.setOpacity(shown);
|
||||
p.translate(st::dialogsPadding);
|
||||
actionPainter->paintSpeaking(
|
||||
p,
|
||||
|
@ -254,6 +254,7 @@ void BasicRow::paintUserpic(
|
|||
bg,
|
||||
now);
|
||||
p.translate(-st::dialogsPadding);
|
||||
p.setOpacity(1.);
|
||||
}
|
||||
|
||||
Row::Row(Key key, int pos) : _id(key), _pos(pos) {
|
||||
|
|
Loading…
Add table
Reference in a new issue