Ticket #2392: networkcontrol.patch

File networkcontrol.patch, 8.0 KB (added by rl@…, 15 years ago)

Patch to networkcontrol.cpp to allow abbreviated command names

  • programs/mythfrontend/networkcontrol.cpp

    old new  
    1919const int kNetworkControlDataReadyEvent = 35671;
    2020const int kNetworkControlCloseEvent     = 35672;
    2121
     22/** Is @p test an abbreviation of @p command ?
     23 * The @p test substring must be at least @p minchars long.
     24 * @param command the full command name
     25 * @param test the string to test against the command name
     26 * @param minchars the minimum length of test in order to declare a match
     27 * @return true if @p test is the initial substring of @p command
     28 */
     29static bool is_abbrev(QString const& command, QString const& test, unsigned minchars = 1)
     30{
     31    if (test.length() < minchars)
     32        return command == test;
     33    else
     34        return test == command.left(test.length());
     35}
     36
    2237NetworkControl::NetworkControl(int port)
    2338          : QServerSocket(port, 1),
    2439            prompt("# "),
     
    172187
    173188    tokens[0] = tokens[0].lower();
    174189
    175     if (tokens[0] == "jump")
     190    if (is_abbrev("jump", tokens[0]))
    176191        result = processJump(tokens);
    177     else if (tokens[0] == "key")
     192    else if (is_abbrev("key", tokens[0]))
    178193        result = processKey(tokens);
    179     else if (tokens[0] == "play")
     194    else if (is_abbrev("play", tokens[0]))
    180195        result = processPlay(tokens);
    181     else if (tokens[0] == "query")
     196    else if (is_abbrev("query", tokens[0]))
    182197        result = processQuery(tokens);
    183     else if (tokens[0] == "help")
     198    else if (is_abbrev("help", tokens[0]))
    184199        result = processHelp(tokens);
    185200    else if ((tokens[0] == "exit") || (tokens[0] == "quit"))
    186201        QApplication::postEvent(this,
    187202                                new QCustomEvent(kNetworkControlCloseEvent));
    188     else
     203    else if (! tokens[0].isEmpty())
    189204        result = QString("INVALID command '%1', try 'help' for more info")
    190205                         .arg(tokens[0]);
    191206
     
    264279        lineIn.replace(QRegExp("^\\s"), "");
    265280
    266281        tokens = QStringList::split(" ", lineIn);
    267         if (tokens[0].lower() != "key")
     282        if (! is_abbrev("key", tokens[0].lower()))
    268283            lineIn = lineIn.lower();
    269284
    270285        ncLock.lock();
     
    387402                       .arg(tokens[0]);
    388403
    389404    if ((tokens.size() >= 4) &&
    390         (tokens[1] == "program") &&
     405        (is_abbrev("program", tokens[1])) &&
    391406        (tokens[2].contains(QRegExp("^\\d+$"))) &&
    392407        (tokens[3].contains(QRegExp(
    393408                         "^\\d\\d\\d\\d-\\d\\d-\\d\\dt\\d\\d:\\d\\d:\\d\\d$"))))
     
    445460                       "for playback mode")
    446461                       .arg(gContext->getCurrentLocation());
    447462    }
    448     else if (tokens[1] == "chanid")
     463    else if (is_abbrev("chanid", tokens[1], 5))
    449464    {
    450465        if (tokens[2].contains(QRegExp("^\\d+$")))
    451466            message = QString("NETWORK_CONTROL CHANID %1").arg(tokens[2]);
     
    453468            return QString("ERROR: See 'help %1' for usage information")
    454469                           .arg(tokens[0]);
    455470    }
    456     else if (tokens[1] == "channel")
     471    else if (is_abbrev("channel", tokens[1], 5))
    457472    {
    458473        if (tokens.size() < 3)
    459474            return "ERROR: See 'help play' for usage information";
    460475
    461         if (tokens[2] == "up")
     476        if (is_abbrev("up", tokens[2]))
    462477            message = "NETWORK_CONTROL CHANNEL UP";
    463         else if (tokens[2] == "down")
     478        else if (is_abbrev("down", tokens[2]))
    464479            message = "NETWORK_CONTROL CHANNEL DOWN";
    465480        else if (tokens[2].contains(QRegExp("^[-\\.\\d_#]+$")))
    466481            message = QString("NETWORK_CONTROL CHANNEL %1").arg(tokens[2]);
     
    468483            return QString("ERROR: See 'help %1' for usage information")
    469484                           .arg(tokens[0]);
    470485    }
    471     else if (tokens[1] == "seek")
     486    else if (is_abbrev("seek", tokens[1], 2))
    472487    {
    473488        if (tokens.size() < 3)
    474489            return QString("ERROR: See 'help %1' for usage information")
    475490                           .arg(tokens[0]);
    476491
    477         if (tokens[2] == "beginning")
     492        if (is_abbrev("beginning", tokens[2]))
    478493            message = "NETWORK_CONTROL SEEK BEGINNING";
    479         else if (tokens[2] == "forward")
     494        else if (is_abbrev("forward", tokens[2]))
    480495            message = "NETWORK_CONTROL SEEK FORWARD";
    481         else if (tokens[2] == "rewind")
     496        else if (is_abbrev("rewind", tokens[2]))
    482497            message = "NETWORK_CONTROL SEEK BACKWARD";
    483498        else if (tokens[2].contains(QRegExp("^\\d\\d:\\d\\d:\\d\\d$")))
    484499        {
     
    492507            return QString("ERROR: See 'help %1' for usage information")
    493508                           .arg(tokens[0]);
    494509    }
    495     else if (tokens[1] == "speed")
     510    else if (is_abbrev("speed", tokens[1], 2))
    496511    {
    497512        if (tokens.size() < 3)
    498513            return QString("ERROR: See 'help %1' for usage information")
     
    502517            (tokens[2].contains(QRegExp("^\\-*\\d+\\/\\d+x$"))) ||
    503518            (tokens[2].contains(QRegExp("^\\d*\\.\\d+x$"))))
    504519            message = QString("NETWORK_CONTROL SPEED %1").arg(tokens[2]);
    505         else if (tokens[2] == "normal")
     520        else if (is_abbrev("normal", tokens[2]))
    506521            message = QString("NETWORK_CONTROL SPEED 1x");
    507         else if (tokens[2] == "pause")
     522        else if (is_abbrev("pause", tokens[2]))
    508523            message = QString("NETWORK_CONTROL SPEED 0x");
    509524        else
    510525            return QString("ERROR: See 'help %1' for usage information")
    511526                           .arg(tokens[0]);
    512527    }
    513     else if (tokens[1] == "stop")
     528    else if (is_abbrev("stop", tokens[1], 2))
    514529        message = QString("NETWORK_CONTROL STOP");
    515530    else
    516531        return QString("ERROR: See 'help %1' for usage information")
     
    533548        return QString("ERROR: See 'help %1' for usage information")
    534549                       .arg(tokens[0]);
    535550
    536     if (tokens[1] == "location")
     551    if (is_abbrev("location", tokens[1]))
    537552    {
    538553        QString location = gContext->getCurrentLocation();
    539554        result = location;
     
    558573                result += "ERROR: Timed out waiting for reply from player";
    559574        }
    560575    }
    561     else if (tokens[1] == "recordings")
    562         return listRecordings();
    563576    else if ((tokens.size() == 4) &&
    564              (tokens[1] == "recording") &&
     577             is_abbrev("recording", tokens[1]) &&
    565578             (tokens[2].contains(QRegExp("^\\d+$"))) &&
    566579             (tokens[3].contains(QRegExp(
    567580                         "^\\d\\d\\d\\d-\\d\\d-\\d\\dt\\d\\d:\\d\\d:\\d\\d$"))))
    568581        return listRecordings(tokens[2], tokens[3]);
     582    else if (is_abbrev("recordings", tokens[1]))
     583        return listRecordings();
    569584    else
    570585        return QString("ERROR: See 'help %1' for usage information")
    571586                       .arg(tokens[0]);
     
    580595
    581596    if (tokens.size() >= 1)
    582597    {
    583         if (tokens[0] == "help")
     598        if (is_abbrev("help", tokens[0]))
    584599        {
    585600            if (tokens.size() >= 2)
    586601                command = tokens[1];
     
    593608        }
    594609    }
    595610       
    596     if (command == "jump")
     611    if (is_abbrev("jump", command))
    597612    {
    598613        QMap<QString, QString>::Iterator it;
    599614        helpText +=
     
    607622                        it.data() + "\r\n";
    608623        }
    609624    }
    610     else if (command == "key")
     625    else if (is_abbrev("key", command))
    611626    {
    612627        helpText +=
    613628            "key LETTER           - Send the letter key specified\r\n"
     
    628643        }
    629644        helpText += "\r\n";
    630645    }
    631     else if (command == "play")
     646    else if (is_abbrev("play", command))
    632647    {
    633648        helpText +=
    634649            "play channel up       - Change channel Up\r\n"
     
    657672            "play speed 16x        - Playback at 16x speed\r\n"
    658673            "play stop             - Stop playback\r\n";
    659674    }
    660     else if (command == "query")
     675    else if (is_abbrev("query", command))
    661676    {
    662677        helpText +=
    663678            "query location        - Query current screen or location\r\n"