Ticket #3422: 3422.patch
File 3422.patch, 8.2 KB (added by , 17 years ago) |
---|
-
programs/mythbackend/mainserver.cpp
520 520 } 521 521 else if (command == "LOCK_TUNER") 522 522 { 523 HandleLockTuner(pbs); 523 if (tokens.size() == 1) 524 HandleLockTuner(pbs); 525 else if (tokens.size() == 2) 526 HandleLockTuner(tokens[1].toInt(), pbs); 527 else 528 VERBOSE(VB_IMPORTANT, "Bad LOCK_TUNER query"); 524 529 } 525 530 else if (command == "FREE_TUNER") 526 531 { … … 2319 2324 2320 2325 void MainServer::HandleLockTuner(PlaybackSock *pbs) 2321 2326 { 2327 VERBOSE(VB_GENERAL, "MainServer::HandleLockTuner()"); 2328 2322 2329 MythSocket *pbssock = pbs->getSocket(); 2323 2330 QString pbshost = pbs->getHostname(); 2324 2331 … … 2399 2406 SendResponse(pbssock, strlist); 2400 2407 } 2401 2408 2409 void MainServer::HandleLockTuner(int cardid, PlaybackSock *pbs) 2410 { 2411 MythSocket *pbssock = pbs->getSocket(); 2412 QString pbshost = pbs->getHostname(); 2413 2414 QStringList strlist; 2415 int retval; 2416 2417 EncoderLink *encoder = NULL; 2418 QString enchost; 2419 2420 VERBOSE(VB_GENERAL, "MainServer::HandleLockTuner(cardid) " + 2421 QString("Requested encoder: %1").arg(cardid)); 2422 2423 2424 QMap<int, EncoderLink *>::Iterator iter = encoderList->find(cardid); 2425 if (iter == encoderList->end()) 2426 { 2427 VERBOSE(VB_IMPORTANT, "MainServer::HandleLockTuner() " + 2428 QString("Unknown encoder: %1").arg(cardid)); 2429 } 2430 else 2431 { 2432 encoder = iter.data(); 2433 2434 if (encoder->IsLocal()) { 2435 VERBOSE(VB_IMPORTANT, "Encoder found to be local"); 2436 enchost = gContext->GetHostName(); 2437 } 2438 else 2439 enchost = encoder->GetHostName(); 2440 2441 2442 if (!(enchost == pbshost) || 2443 (!encoder->IsConnected()) || 2444 (encoder->IsBusy()) || 2445 (encoder->IsTunerLocked())) 2446 { 2447 VERBOSE(VB_IMPORTANT, "Encoder set to NULL"); 2448 encoder = NULL; 2449 } 2450 } 2451 2452 if (encoder) 2453 { 2454 VERBOSE(VB_IMPORTANT, "Attempting to Lock Tuner"); 2455 retval = encoder->LockTuner(); 2456 2457 VERBOSE(VB_IMPORTANT, "Lock Tuner returned: " + QString("%1").arg(retval)); 2458 if (retval != -1) 2459 { 2460 QString msg = QString("Cardid %1 LOCKed for external use on %2.") 2461 .arg(retval).arg(pbshost); 2462 VERBOSE(VB_GENERAL, msg); 2463 2464 MSqlQuery query(MSqlQuery::InitCon()); 2465 query.prepare("SELECT videodevice, audiodevice, " 2466 "vbidevice " 2467 "FROM capturecard " 2468 "WHERE cardid = :CARDID ;"); 2469 query.bindValue(":CARDID", retval); 2470 2471 if (query.exec() && query.isActive() && query.size()) 2472 { 2473 // Success 2474 query.next(); 2475 strlist << QString::number(retval) 2476 << query.value(0).toString() 2477 << query.value(1).toString() 2478 << query.value(2).toString(); 2479 2480 if (m_sched) 2481 m_sched->Reschedule(0); 2482 2483 SendResponse(pbssock, strlist); 2484 return; 2485 } 2486 else 2487 { 2488 cerr << "mainserver.o: Failed querying the db for a videodevice" 2489 << endl; 2490 } 2491 } 2492 else 2493 { 2494 VERBOSE(VB_IMPORTANT, "MainServer::HandleLockTuner(cardid) " + 2495 QString("Tuner already locked: %1").arg(cardid)); 2496 // Tuner already locked 2497 strlist << "-2" << "" << "" << ""; 2498 SendResponse(pbssock, strlist); 2499 return; 2500 } 2501 } 2502 VERBOSE(VB_IMPORTANT, "MainServer::HandleLockTuner(cardid) " + 2503 QString("Returning -1: %1").arg(cardid)); 2504 strlist << "-1" << "" << "" << ""; 2505 SendResponse(pbssock, strlist); 2506 } 2507 2402 2508 void MainServer::HandleFreeTuner(int cardid, PlaybackSock *pbs) 2403 2509 { 2404 2510 MythSocket *pbssock = pbs->getSocket(); -
programs/mythbackend/mainserver.h
112 112 void HandleRemoteEncoder(QStringList &slist, QStringList &commands, 113 113 PlaybackSock *pbs); 114 114 void HandleLockTuner(PlaybackSock *pbs); 115 void HandleLockTuner(int cardid, PlaybackSock *pbs); 115 116 void HandleFreeTuner(int cardid, PlaybackSock *pbs); 116 117 void HandleCutMapQuery(const QString &chanid, const QString &starttime, 117 118 PlaybackSock *pbs, bool commbreak); -
libs/libmythui/myththemedmenu.cpp
1 1 #include <qapplication.h> 2 2 #include <qimage.h> 3 3 #include <qdir.h> 4 #include <qregexp.h> 4 5 5 6 #include <iostream> 6 7 #include <cmath> … … 2022 2023 if (cardid == -2) 2023 2024 VERBOSE(VB_IMPORTANT, QString("MythThemedMenuPrivate: Card %1 is " 2024 2025 "already locked").arg(cardid)); 2026 2027 MythDialogBox *error_dialog = new MythDialogBox( 2028 QString("\n\nAll tuners are currently in use. If you want to watch " 2029 "TV, you can cancel one of the in-progress recordings from " 2030 "the delete menu"), 2031 parent->GetScreenStack(), 2032 "NoTunerError"); 2033 error_dialog->Create(); 2034 error_dialog->AddButton("OK"); 2035 parent->GetScreenStack()->AddScreen(error_dialog); 2036 } 2037 } 2038 else if (action.left(11) == "EXECSOURCE ") 2039 { 2040 QString rest = action.right(action.length() - 11).stripWhiteSpace(); 2041 int cmdStart = rest.find(QRegExp("\\s")); 2042 2043 QStringList strlist = QString("LOCK_TUNER %1").arg(rest.left(cmdStart).toInt()); 2044 int requestedId = rest.left(cmdStart)); 2045 2046 VERBOSE(VB_IMPORTANT, QString("MythThemedMenuPrivate: Requesting Card %1 ").arg(requestedId); 2047 2048 gContext->SendReceiveStringList(strlist); 2049 int cardid = strlist[0].toInt(); 2050 2051 VERBOSE(VB_IMPORTANT, QString("MythThemedMenuPrivate: Given Card %1 ").arg(cardid)); 2052 2053 if (cardid == requestedId) 2054 { 2055 rest = rest.right(rest.length() - cmdStart); // Remove cardid selector 2056 rest = rest.sprintf(rest, 2057 (const char*)strlist[1], 2058 (const char*)strlist[2], 2059 (const char*)strlist[3]); 2060 2061 myth_system(rest); 2062 2063 strlist = QString("FREE_TUNER %1").arg(cardid); 2064 gContext->SendReceiveStringList(strlist); 2065 QString ret = strlist[0]; 2066 } 2067 else 2068 { 2069 if (cardid == -2) 2070 VERBOSE(VB_IMPORTANT, QString("MythThemedMenuPrivate: Card %1 is " 2071 "already locked").arg(cardid)); 2025 2072 2026 #if 0 2027 DialogBox *error_dialog = new DialogBox(gContext->GetMainWindow(), 2028 "\n\nAll tuners are currently in use. If you want to watch " 2029 "TV, you can cancel one of the in-progress recordings from " 2030 "the delete menu"); 2073 MythDialogBox *error_dialog = new MythDialogBox( 2074 QString("\n\nThe requested tuner is currently in use. " 2075 "If you require access, you can cancel the appropriate " 2076 "in-progress recording."), 2077 parent->GetScreenStack(), 2078 "NoTunerError"); 2079 error_dialog->Create(); 2031 2080 error_dialog->AddButton("OK"); 2032 error_dialog->exec(); 2033 delete error_dialog; 2034 #endif 2081 parent->GetScreenStack()->AddScreen(error_dialog); 2035 2082 } 2036 2083 } 2037 2084 else if (action.left(5) == "MENU ")