예제 #1
0
파일: handler.cpp 프로젝트: kuiba/qutim
bool Handler::eventFilter(QObject *obj, QEvent *event)
{
	if (event->type() == Reply::eventType()) {
		Authorization::Reply *reply = static_cast<Authorization::Reply*>(event);
		if (reply->replyType() == Reply::New) {
			QString reason;
			Message pseudoMessage(reply->body());
			pseudoMessage.setChatUnit(reply->contact());
			pseudoMessage.setIncoming(false);

            bool accepted = true;

			doHandle(pseudoMessage).connect(this, [&accepted, reply] (Result result, const QString &reason) {
                if (Error == result) {
                    NotificationRequest request(Notification::BlockedMessage);
                    request.setObject(reply->contact());
                    request.setText(reason);
                    request.send();
                }
                accepted = (result == Accept);
            });

			if (accepted)
				return true;
		}
	}
    return QObject::eventFilter(obj, event);
}
예제 #2
0
	/*
	 * Handle a result.
	 * An exception may be thrown by a derived class.
	 *
	 * @param x A value that needs to be handled.
	 */
	void handle(const T& x)
	{
		doHandle(x);
	}