mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-07-30 01:08:02 +00:00
Beta 10008001: moved all Notify::Observer-s to base::Subscriber-s.
This commit is contained in:
@@ -31,8 +31,6 @@ void emitPeerUpdated();
|
||||
namespace Notify {
|
||||
namespace {
|
||||
|
||||
using internal::PeerUpdateHandler;
|
||||
|
||||
using SmallUpdatesList = QVector<PeerUpdate>;
|
||||
NeverFreedPointer<SmallUpdatesList> SmallUpdates;
|
||||
using AllUpdatesList = QMap<PeerData*, PeerUpdate>;
|
||||
@@ -46,21 +44,11 @@ void FinishCallback() {
|
||||
SmallUpdates.clear();
|
||||
AllUpdates.clear();
|
||||
}
|
||||
ObservedEventRegistrator<PeerUpdate::Flags, PeerUpdateHandler> creator(StartCallback, FinishCallback);
|
||||
|
||||
base::Observable<PeerUpdate, PeerUpdatedHandler> PeerUpdatedObservable;
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace internal {
|
||||
|
||||
ConnectionId plainRegisterPeerObserver(PeerUpdate::Flags events, PeerUpdateHandler &&handler) {
|
||||
constexpr auto tmp = sizeof(PeerUpdate);
|
||||
return creator.registerObserver(events, std_::forward<PeerUpdateHandler>(handler));
|
||||
}
|
||||
|
||||
} // namespace internal
|
||||
|
||||
void mergePeerUpdate(PeerUpdate &mergeTo, const PeerUpdate &mergeFrom) {
|
||||
if (!(mergeTo.flags & PeerUpdate::Flag::NameChanged)) {
|
||||
if (mergeFrom.flags & PeerUpdate::Flag::NameChanged) {
|
||||
@@ -75,7 +63,8 @@ void mergePeerUpdate(PeerUpdate &mergeTo, const PeerUpdate &mergeFrom) {
|
||||
}
|
||||
|
||||
void peerUpdatedDelayed(const PeerUpdate &update) {
|
||||
t_assert(creator.started());
|
||||
SmallUpdates.makeIfNull();
|
||||
AllUpdates.makeIfNull();
|
||||
|
||||
Global::RefHandleDelayedPeerUpdates().call();
|
||||
|
||||
@@ -87,6 +76,7 @@ void peerUpdatedDelayed(const PeerUpdate &update) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (AllUpdates->isEmpty()) {
|
||||
if (existingUpdatesCount < 5) {
|
||||
SmallUpdates->push_back(update);
|
||||
@@ -104,26 +94,19 @@ void peerUpdatedDelayed(const PeerUpdate &update) {
|
||||
}
|
||||
|
||||
void peerUpdatedSendDelayed() {
|
||||
if (!creator.started()) return;
|
||||
|
||||
App::emitPeerUpdated();
|
||||
|
||||
if (SmallUpdates->isEmpty()) return;
|
||||
if (!SmallUpdates || !AllUpdates || SmallUpdates->empty()) return;
|
||||
|
||||
auto smallList = createAndSwap(*SmallUpdates);
|
||||
auto allList = createAndSwap(*AllUpdates);
|
||||
for_const (auto &update, smallList) {
|
||||
creator.notify(update.flags, update);
|
||||
}
|
||||
for_const (auto &update, allList) {
|
||||
creator.notify(update.flags, update);
|
||||
}
|
||||
for (auto &update : smallList) {
|
||||
PeerUpdated().notify(std_::move(update), true);
|
||||
}
|
||||
for (auto &update : allList) {
|
||||
PeerUpdated().notify(std_::move(update), true);
|
||||
}
|
||||
|
||||
if (SmallUpdates->isEmpty()) {
|
||||
std::swap(smallList, *SmallUpdates);
|
||||
SmallUpdates->resize(0);
|
||||
|
||||
Reference in New Issue
Block a user