void ApiV2::parseRemoteCommand(Command &command) { if (command.data->length() >= 2) { switch (command.data->at(1)) { case cmd_mouse: parseMouseCommand(command); break; case cmd_pointer: parsePointerCommand(command); break; case cmd_media: parseMediaCommand(command); break; case cmd_request: parseRequest(command); break; case cmd_laser: parseLaserCommand(command); break; case cmd_custom: parseCustomCommand(command); break; default: //Logger::Instance()->add("Unkown remote command"); break; } } }
IrcCommand* CommandParser::parseCommand(const QString& receiver, const QString& text) { if (text.startsWith("//") || text.startsWith("/ ") || !text.startsWith('/')) { QString message = text; if (message.startsWith('/')) message.remove(0, 1); return IrcCommand::createMessage(receiver, message.trimmed()); } else { typedef IrcCommand*(*ParseFunc)(const QString&, const QStringList&); static QHash<QString, ParseFunc> parseFunctions; if (parseFunctions.isEmpty()) { parseFunctions.insert("ADMIN", &CommandParser::parseAdmin); parseFunctions.insert("AWAY", &CommandParser::parseAway); parseFunctions.insert("INFO", &CommandParser::parseInfo); parseFunctions.insert("INVITE", &CommandParser::parseInvite); parseFunctions.insert("KICK", &CommandParser::parseKick); parseFunctions.insert("KNOCK", &CommandParser::parseKnock); parseFunctions.insert("LIST", &CommandParser::parseList); parseFunctions.insert("ME", &CommandParser::parseMe); parseFunctions.insert("MODE", &CommandParser::parseMode); parseFunctions.insert("MOTD", &CommandParser::parseMotd); parseFunctions.insert("NAMES", &CommandParser::parseNames); parseFunctions.insert("NICK", &CommandParser::parseNick); parseFunctions.insert("NOTICE", &CommandParser::parseNotice); parseFunctions.insert("PART", &CommandParser::parsePart); parseFunctions.insert("PING", &CommandParser::parsePing); parseFunctions.insert("QUIT", &CommandParser::parseQuit); parseFunctions.insert("QUOTE", &CommandParser::parseQuote); parseFunctions.insert("STATS", &CommandParser::parseStats); parseFunctions.insert("TIME", &CommandParser::parseTime); parseFunctions.insert("TOPIC", &CommandParser::parseTopic); parseFunctions.insert("TRACE", &CommandParser::parseTrace); parseFunctions.insert("USERS", &CommandParser::parseUsers); parseFunctions.insert("VERSION", &CommandParser::parseVersion); parseFunctions.insert("WHO", &CommandParser::parseWho); parseFunctions.insert("WHOIS", &CommandParser::parseWhois); parseFunctions.insert("WHOWAS", &CommandParser::parseWhowas); } const QString expanded = expandAlias(receiver, text.mid(1)); const QStringList words = expanded.split(" ", QString::SkipEmptyParts); const QString command = words.value(0).toUpper(); ParseFunc parseFunc = parseFunctions.value(command); if (parseFunc) { IrcCommand* cmd = parseFunc(receiver, words.mid(1)); if (cmd) return cmd; } else if (command_syntaxes().contains(command.toUpper())) { return parseCustomCommand(command, words.mid(1), command_syntaxes().value(command.toUpper())); } } // unknown command return 0; }