Rack::~Rack() { setRefreshing(false); // stop refresh thread running = false; thread->join(); delete thread; }
void TelegramMessageSearchModel::getFromServer(bool more) { if((p->keyword.isEmpty() && (p->filter == MessagesFilterObject::TypeInputMessagesFilterEmpty || !p->peer)) || !mEngine || !mEngine->telegram()) return; setRefreshing(true); DEFINE_DIS; Telegram::Callback<MessagesMessages> callback = [this, dis, more](TG_MESSAGES_GET_MESSAGES_CALLBACK){ if(!dis || p->lastRequest != msgId) return; setRefreshing(false); if(!error.null) { setError(error.errorText, error.errorCode); return; } setHasBackMore(false); processOnResult(result, more); }; MessagesFilterObject filter; filter.setClassType(p->filter); Telegram *tg = mEngine->telegram(); if(p->peer) { int offset = more? count() : 0; p->lastRequest = tg->messagesSearch(p->peer->core(), p->keyword, InputUser::null, filter.core(), p->minDate.toTime_t(), p->maxDate.toTime_t(), offset, 0, limit(), callback); } else { int offset = 0; if(more) { TQmlMessageObject *msg = get(count(), RoleMessageItem).value<TQmlMessageObject*>(); if(msg) offset = msg->id(); } p->lastRequest = tg->messagesSearchGlobal(p->keyword, 0, InputPeer::null, offset, limit(), callback); } }
void TelegramMembersListModel::refresh() { clean(); if(!p->currentPeer || !mEngine || !mEngine->telegram()) return; DEFINE_DIS; Telegram *tg = mEngine->telegram(); switch(p->currentPeer->classType()) { case InputPeerObject::TypeInputPeerChat: setRefreshing(true); setRefreshing(true); p->lastRequest = tg->messagesGetFullChat(p->currentPeer->chatId(), [this, dis](TG_MESSAGES_GET_FULL_CHAT_CALLBACK){ if(!dis || !mEngine) return; if(p->lastRequest != msgId) return; setRefreshing(false); if(!error.null) { setError(error.errorText, error.errorCode); return; } TelegramSharedDataManager *tsdm = mEngine->sharedData(); QHash<qint32, User> users; Q_FOREACH(const User &user, result.users()) users[user.id()] = user; QList<TelegramChatsMemebrsListModelItem> items; Q_FOREACH(const ChatParticipant &cp, result.fullChat().participants().participants()) { TelegramChatsMemebrsListModelItem item = cp; if(item.userId && users.contains(item.userId)) { const User &user = users.value(item.userId); InputPeer peer(InputPeer::typeInputPeerUser); peer.setUserId(item.userId); peer.setAccessHash(user.accessHash()); item.user = tsdm->insertUser(user); item.peer = tsdm->insertInputPeer(peer); } if(item.inviterId && users.contains(item.inviterId)) item.inviter = tsdm->insertUser(users.value(item.inviterId)); if(item.kickedBy && users.contains(item.kickedBy)) item.kicker = tsdm->insertUser(users.value(item.kickedBy)); items << item; } changed(items); }); break; case InputPeerObject::TypeInputPeerChannel: { InputChannel channel(InputChannel::typeInputChannel); channel.setChannelId(p->currentPeer->channelId()); channel.setAccessHash(p->currentPeer->accessHash()); ChannelParticipantsFilterObject filter; filter.setClassType(static_cast<ChannelParticipantsFilterObject::ChannelParticipantsFilterClassType>(p->filter)); setRefreshing(true); p->lastRequest = tg->channelsGetParticipants(channel, filter.core(), 0, 200, [this, dis](TG_CHANNELS_GET_PARTICIPANTS_CALLBACK){ if(!dis || !mEngine) return; if(p->lastRequest != msgId) return; setRefreshing(false); if(!error.null) { setError(error.errorText, error.errorCode); return; } TelegramSharedDataManager *tsdm = mEngine->sharedData(); QHash<qint32, User> users; Q_FOREACH(const User &user, result.users()) users[user.id()] = user; QList<TelegramChatsMemebrsListModelItem> items; Q_FOREACH(const ChannelParticipant &cp, result.participants()) { TelegramChatsMemebrsListModelItem item = cp; if(item.userId && users.contains(item.userId)) item.user = tsdm->insertUser(users.value(item.userId)); if(item.inviterId && users.contains(item.inviterId)) item.inviter = tsdm->insertUser(users.value(item.inviterId)); if(item.kickedBy && users.contains(item.kickedBy)) item.kicker = tsdm->insertUser(users.value(item.kickedBy)); items << item; } changed(items); }); }