示例#1
0
	QXmppPresence StatusToPresence (State state, const QString& text, int prio)
	{
		QXmppPresence::Type presType = state == SOffline ?
				QXmppPresence::Unavailable :
				QXmppPresence::Available;

		QXmppPresence pres (presType);
		if (state != SOffline)
			pres.setAvailableStatusType (static_cast<QXmppPresence::AvailableStatusType> (state - 1));
		pres.setStatusText (text);
		pres.setPriority (prio);

		return pres;
	}
    bool XMPPPresenceCommand::executeCommand(QStringList * const arguments)
    {
        bool ret = false;
        if (arguments->length() < 4)
        {
            this->client->write(tr("ERROR: xmppPresence <resource> <priority> <status> <message>")
                                + "\r\n");
        }
        else
        {
            QXmppClient * const client =
                    XMPPResourceStore::instance()->getFromStore(arguments->first());
            arguments->removeFirst();
            if (client)
            {
                bool intOk = false;
                const int priority = arguments->first().toInt(&intOk);
                arguments->removeFirst();
                if (not intOk)
                {
                    this->client->write(tr("ERROR: Priority must be an integer") + "\r\n");
                }
                else
                {
                    QXmppPresence presence;
                    presence.setPriority(priority);

                    const QString type = arguments->first();
                    arguments->removeFirst();
                    bool sOk = true;
                    presence.setType(QXmppPresence::Available);
                    if (type == "online")
                    {
                        presence.setAvailableStatusType(QXmppPresence::Online);
                    }
                    else if (type == "away")
                    {
                        presence.setAvailableStatusType(QXmppPresence::Away);
                    }
                    else if (type == "xa")
                    {
                        presence.setAvailableStatusType(QXmppPresence::XA);
                    }
                    else if (type == "dnd")
                    {
                        presence.setAvailableStatusType(QXmppPresence::DND);
                    }
                    else if (type == "chat")
                    {
                        presence.setAvailableStatusType(QXmppPresence::Chat);
                    }
                    else if (type == "invisible")
                    {
                        presence.setAvailableStatusType(QXmppPresence::Invisible);
                    }
                    else
                    {
                        sOk = false;
                        this->client->write(tr("ERROR: Unknown presence status type") + "\r\n");
                    }
                    if (sOk)
                    {
                        const QString message = arguments->join(" ");
                        presence.setStatusText(message);
                        if (XMPPDebugCommand::isDebugEnabled())
                        {
                            XMPPPrintCommand::printMessage(
                                        true,
                                        &presence);
                        }
                        ret = client->sendPacket(presence);
                        if (not ret)
                        {
                            this->client->write(tr("ERROR: Failed to send packet") + "\r\n");
                        }
                        else
                        {
                            XMPPResourceStore::instance()->setLastMessageSent(
                                        client,
                                        presence);
                        }
                    }
                }
            }
            else
            {
                this->client->write(tr("ERROR: Unknown resource") + "\r\n");
            }
        }
        return ret;
    }