Esempio n. 1
0
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);
        });
    }