void WebSocketMythEvent::customEvent(QEvent* event) { if (event->type() == MythEvent::MythEventMessage) { if (!m_sendEvents) return; MythEvent *me = static_cast<MythEvent *>(event); QString message = me->Message(); if (message.startsWith("SYSTEM_EVENT")) message.remove(0, 13); // Strip SYSTEM_EVENT from the frontend, it's not useful QStringList tokens = message.split(" ", QString::SkipEmptyParts); if (tokens.isEmpty()) return; // If no-one is listening for this event, then ignore it if (!m_filters.contains("ALL") && !m_filters.contains(tokens[0])) return; SendTextMessage(message); } }
void HouseKeeper::customEvent(QEvent *e) { if ((MythEvent::Type)(e->type()) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent*)e; if (me->Message().left(20) == "HOUSE_KEEPER_RUNNING") { QStringList tokens = me->Message() .split(" ", QString::SkipEmptyParts); if (tokens.size() != 4) return; QString hostname = tokens[1]; QString tag = tokens[2]; QDateTime last = MythDate::fromString(tokens[3]); QMutexLocker mapLock(&m_mapLock); if (m_taskMap.contains(tag)) { if ((m_taskMap[tag]->GetScope() == kHKGlobal) || ((m_taskMap[tag]->GetScope() == kHKLocal) && (gCoreContext->GetHostName() == hostname))) // task being run in the same scope as us. // update the run time so we don't attempt to run // it ourselves m_taskMap[tag]->SetLastRun(last); } } } }
/** \fn MythSystemEventHandler::customEvent(QEvent *e) * \brief Custom Event handler for receiving and processing System Events * \sa MythSystemEventHandler::SubstituteMatches(const QStringList &tokens, QString &command) * MythSystemEventHandler::EventNameToSetting(const QString &name) * * This function listens for SYSTEM_EVENT messages and fires off any * necessary event handler commands. In addition to SYSTEM_EVENT messages, * this code also forwards GLOBAL_SYSTEM_EVENT which may have been sent * by the local system via code that does not have access to the master * backend connection to send events on its own. One example is the * code that sends KEY_xx system events. * * \param e Pointer to QEvent containing event to handle */ void MythSystemEventHandler::customEvent(QEvent *e) { if ((MythEvent::Type)(e->type()) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)e; QString msg = me->Message().simplified(); if (msg == "CLEAR_SETTINGS_CACHE") msg = "SYSTEM_EVENT SETTINGS_CACHE_CLEARED"; // Listen for any GLOBAL_SYSTEM_EVENT messages and resend to // the master backend as regular SYSTEM_EVENT messages. if (msg.startsWith("GLOBAL_SYSTEM_EVENT ")) { gCoreContext->SendMessage(msg.mid(7) + QString(" SENDER %1").arg(gCoreContext->GetHostName())); return; } if ((!msg.startsWith("SYSTEM_EVENT ")) && (!msg.startsWith("LOCAL_SYSTEM_EVENT "))) return; QStringList tokens = msg.split(' ', QString::SkipEmptyParts); // Return if this event is for another host if ((tokens.size() >= 4) && (tokens[2] == "HOST") && (tokens[3] != gCoreContext->GetHostName())) return; QString cmd; // See if this system has a command that runs for all system events cmd = gCoreContext->GetSetting("EventCmdAll"); if (!cmd.isEmpty()) { SubstituteMatches(tokens, cmd); SystemEventThread *eventThread = new SystemEventThread(cmd); MThreadPool::globalInstance()->startReserved( eventThread, "SystemEvent"); } // Check for an EventCmd for this particular event cmd = gCoreContext->GetSetting(EventNameToSetting(tokens[1])); if (!cmd.isEmpty()) { SubstituteMatches(tokens, cmd); SystemEventThread *eventThread = new SystemEventThread(cmd, tokens[1]); MThreadPool::globalInstance()->startReserved( eventThread, "SystemEvent"); } } }
void MediaServer::customEvent( QEvent *e ) { if (MythEvent::Type(e->type()) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)e; QString message = me->Message(); //-=>TODO: Need to handle events to notify clients of changes } }
void VideoSetupWizard::customEvent(QEvent *e) { if ((MythEvent::Type)(e->type()) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)e; QStringList tokens = me->Message().split(" ", QString::SkipEmptyParts); if (tokens.isEmpty()) return; if (tokens[0] == "DOWNLOAD_FILE") { QStringList args = me->ExtraDataList(); if ((tokens.size() != 2) || (args[1] != m_downloadFile)) return; if (tokens[1] == "UPDATE") { QString message = tr("Downloading Video Sample...\n" "(%1 of %2 MB)") .arg(QString::number(args[2].toInt() / 1024.0 / 1024.0, 'f', 2)) .arg(QString::number(args[3].toInt() / 1024.0 / 1024.0, 'f', 2)); m_progressDialog->SetMessage(message); m_progressDialog->SetTotal(args[3].toInt()); m_progressDialog->SetProgress(args[2].toInt()); } else if (tokens[1] == "FINISHED") { int fileSize = args[2].toInt(); int errorCode = args[4].toInt(); if (m_progressDialog) m_progressDialog->Close(); QFileInfo file(m_downloadFile); if ((m_downloadFile.startsWith("myth://"))) { if ((errorCode == 0) && (fileSize > 0)) { if (m_testType == ttHighDefinition) testHDVideo(); else if (m_testType == ttStandardDefinition) testSDVideo(); } else { ShowOkPopup(tr("Error downloading sample to backend.")); } } } } } }
/** * \fn UPNPScanner::CustomEvent(QEvent*) * Processes subscription and SSDP cache update events. */ void UPNPScanner::customEvent(QEvent *event) { if ((MythEvent::Type)(event->type()) != MythEvent::MythEventMessage) return; // UPnP events MythEvent *me = (MythEvent *)event; QString ev = me->Message(); if (ev == "UPNP_STARTSCAN") { BrowseNextContainer(); return; } else if (ev == "UPNP_EVENT") { MythInfoMapEvent *info = (MythInfoMapEvent*)event; if (!info) return; if (!info->InfoMap()) return; QString usn = info->InfoMap()->value("usn"); QString id = info->InfoMap()->value("SystemUpdateID"); if (usn.isEmpty() || id.isEmpty()) return; m_lock.lock(); if (m_servers.contains(usn)) { int newid = id.toInt(); if (m_servers[usn]->m_systemUpdateID != newid) { m_scanComplete &= m_servers[usn]->ResetContent(newid); LOG(VB_GENERAL, LOG_INFO, LOC + QString("New SystemUpdateID '%1' for %2").arg(id).arg(usn)); Debug(); } } m_lock.unlock(); return; } // process SSDP cache updates QString uri = me->ExtraDataCount() > 0 ? me->ExtraData(0) : QString(); QString usn = me->ExtraDataCount() > 1 ? me->ExtraData(1) : QString(); if (uri == "urn:schemas-upnp-org:device:MediaServer:1") { QString url = (ev == "SSDP_ADD") ? me->ExtraData(2) : QString(); AddServer(usn, url); } }
void NetSearch::customEvent(QEvent *event) { if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; if (me->Message().left(17) == "DOWNLOAD_COMPLETE") { QStringList tokens = me->Message() .split(" ", QString::SkipEmptyParts); if (tokens.size() != 2) { VERBOSE(VB_IMPORTANT, "Bad DOWNLOAD_COMPLETE message"); return; } GetMythMainWindow()->HandleMedia("Internal", tokens.takeAt(1)); } } else if (event->type() == ThumbnailDLEvent::kEventType) { ThumbnailDLEvent *tde = (ThumbnailDLEvent *)event; if (!tde) return; ThumbnailData *data = tde->thumb; if (!data) return; QString title = data->title; QString file = data->url; uint pos = qVariantValue<uint>(data->data); if (file.isEmpty() || !((uint)m_searchResultList->GetCount() >= pos)) { delete data; return; } MythUIButtonListItem *item = m_searchResultList->GetItemAt(pos); if (item && item->GetText() == title) { item->SetImage(file); } delete data; } }
static void incomingCustomEvent(QEvent* e) { if ((MythEvent::Type)(e->type()) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)e; QString message = me->Message(); message = message.simplified(); QStringList tokens = message.split(" ", QString::SkipEmptyParts); LOG(VB_COMMFLAG, LOG_INFO, QString("mythcommflag: Received Event: '%1'") .arg(message)); if ((watchingRecording) && (tokens.size() >= 3) && (tokens[0] == "DONE_RECORDING")) { int cardnum = tokens[1].toInt(); int filelen = tokens[2].toInt(); message = QString("mythcommflag: Received a " "DONE_RECORDING event for card %1. ") .arg(cardnum); if (recorderNum != -1 && cardnum == recorderNum) { commDetector->recordingFinished(filelen); watchingRecording = false; message += "Informed CommDetector that recording has finished."; LOG(VB_COMMFLAG, LOG_INFO, message); } } if ((tokens.size() >= 2) && (tokens[0] == "COMMFLAG_REQUEST")) { uint chanid = 0; QDateTime recstartts; ProgramInfo::ExtractKey(tokens[1], chanid, recstartts); message = QString("mythcommflag: Received a " "COMMFLAG_REQUEST event for chanid %1 @ %2. ") .arg(chanid).arg(recstartts.toString(Qt::ISODate)); if ((global_program_info->GetChanID() == chanid) && (global_program_info->GetRecordingStartTime() == recstartts)) { commDetector->requestCommBreakMapUpdate(); message += "Requested CommDetector to generate new break list."; LOG(VB_COMMFLAG, LOG_INFO, message); } } } }
void MythCoreContext::SendEvent(const MythEvent &event) { if (IsBackend()) { dispatch(event); return; } QStringList strlist( "MESSAGE" ); strlist << event.Message(); strlist << event.ExtraDataList(); SendReceiveStringList(strlist); }
void RemoteSendEvent(const MythEvent &event) { if (gCoreContext->IsBackend()) { gCoreContext->dispatch(event); return; } QStringList strlist( "MESSAGE" ); strlist << event.Message(); strlist << event.ExtraDataList(); gCoreContext->SendReceiveStringList(strlist); }
void BackendSelection::customEvent(QEvent *event) { if (((MythEvent::Type)(event->type())) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; QString message = me->Message(); QString URI = me->ExtraData(0); QString URN = me->ExtraData(1); QString URL = me->ExtraData(2); VERBOSE(VB_UPNP, QString("BackendSelection::customEvent(%1, %2, %3, %4)") .arg(message).arg(URI).arg(URN).arg(URL)); if (message.startsWith("SSDP_ADD") && URI.startsWith("urn:schemas-mythtv-org:device:MasterMediaServer:")) { DeviceLocation *devLoc = SSDP::Instance()->Find(URI, URN); if (devLoc) { devLoc->AddRef(); AddItem(devLoc); // this does a Release() } } else if (message.startsWith("SSDP_REMOVE")) { //-=>Note: This code will never get executed until // SSDPCache is changed to handle NotifyRemove correctly RemoveItem(URN); } } else if (event->type() == DialogCompletionEvent::kEventType) { DialogCompletionEvent *dce = dynamic_cast<DialogCompletionEvent*>(event); if (!dce) return; QString resultid = dce->GetId(); if (resultid == "password") { m_pinCode = dce->GetResultText(); Accept(); } } }
void DecoderHandler::customEvent(QEvent *event) { if (DecoderHandlerEvent *dhe = dynamic_cast<DecoderHandlerEvent*>(event)) { // Proxy all DecoderHandlerEvents return dispatch(*dhe); } else if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; QStringList tokens = me->Message().split(" ", QString::SkipEmptyParts); if (tokens.isEmpty()) return; if (tokens[0] == "DOWNLOAD_FILE") { QStringList args = me->ExtraDataList(); if (tokens[1] == "UPDATE") { } else if (tokens[1] == "FINISHED") { QString downloadUrl = args[0]; int fileSize = args[2].toInt(); int errorCode = args[4].toInt(); QString filename = args[1]; if ((errorCode != 0) || (fileSize == 0)) { LOG(VB_GENERAL, LOG_ERR, QString("DecoderHandler: failed to download playlist from '%1'") .arg(downloadUrl)); QUrl url(downloadUrl); m_state = STOPPED; doOperationStop(); doFailed(url, "Could not get playlist"); } else { QUrl fileUrl(filename); createPlaylistFromFile(fileUrl); } } } } }
/** \brief Dispatch an event to all listeners * * Makes a copy of the event on the heap by calling * MythEvent::clone() and dispatches is by calling * QCoreApplication::postEvent(). * * \param event MythEvent to dispatch. */ void MythObservable::dispatch(const MythEvent &event) { QMutexLocker locker(m_lock); QSet<QObject*>::const_iterator it = m_listeners.begin(); for (; it != m_listeners.end() ; ++it) QCoreApplication::postEvent(*it, event.clone()); }
bool ProcessThread::event(QEvent *e) { if (MythEvent::MythEventMessage == e->type()) { MythEvent *me = static_cast<MythEvent*>(e); if (me->Message() == "CreateProcess") { QMutexLocker locker(&m_lock); m_proc = new QProcess(); m_proc->start(me->ExtraData(0)); m_wait.wakeOne(); return true; } } return QThread::event(e); }
/** * \brief Handle custom events * \param event The custom event */ void GallerySlideView::customEvent(QEvent *event) { if ((MythEvent::Type)(event->type()) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; QString message = me->Message(); QStringList extra = me->ExtraDataList(); if (message == "IMAGE_METADATA" && !extra.isEmpty()) { int id = extra[0].toInt(); ImagePtrK selected = m_view->GetSelected(); if (selected && selected->m_id == id) m_infoList.Display(*selected, extra.mid(1)); } else if (message == "THUMB_AVAILABLE") { if (!extra.isEmpty() && m_view->Update(extra[0].toInt())) ShowSlide(0); } } else if (event->type() == DialogCompletionEvent::kEventType) { DialogCompletionEvent *dce = (DialogCompletionEvent *)(event); QString resultid = dce->GetId(); int buttonnum = dce->GetResult(); if (resultid == "metadatamenu") { switch (buttonnum) { case 0: Transform(kRotateCW); break; case 1: Transform(kRotateCCW); break; case 2: Transform(kFlipHorizontal); break; case 3: Transform(kFlipVertical); break; case 4: Transform(kResetToExif); break; case 5: Zoom(10); break; case 6: Zoom(-10); break; } } } }
void ZMMiniPlayer::customEvent (QEvent* event) { if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = static_cast<MythEvent*>(event); if (!me) return; if (me->Message().startsWith("ZONEMINDER_NOTIFICATION")) { QStringList list = me->Message().simplified().split(' '); if (list.size() < 2) return; int monID = list[1].toInt(); if (monID != m_alarmMonitor) { m_alarmMonitor = monID; m_frameTimer->stop(); Monitor *mon = ZMClient::get()->getMonitorByID(monID); if (mon) { m_players->at(0)->setMonitor(mon); m_players->at(0)->updateCamera(); } m_frameTimer->start(FRAME_UPDATE_TIME); } // restart the display timer on any notification messages if it is active if (m_displayTimer->isActive()) m_displayTimer->start(10000); } } // Parent MythUIType handler always returns false. (Shouldn't it // call up?) Continue to call QObject as before. QObject::customEvent(event); }
void BrowserApi::customEvent(QEvent *e) { if ((MythEvent::Type)(e->type()) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)e; QString message = me->Message(); if (message.left(13) != "MUSIC_CONTROL") return; QStringList tokens = message.simplified().split(" "); if ((tokens.size() >= 4) && (tokens[1] == "ANSWER") && (tokens[2] == gCoreContext->GetHostName())) { m_answer = tokens[3]; for (int i = 4; i < tokens.size(); i++) m_answer += QString(" ") + tokens[i]; m_gotAnswer = true; } } }
void ZMMiniPlayer::customEvent (QEvent* event) { if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = dynamic_cast<MythEvent*>(event); if (!me) return; if (me->Message().startsWith("ZONEMINDER_NOTIFICATION")) { QStringList list = me->Message().simplified().split(' '); if (list.size() < 2) return; int monID = list[1].toInt(); if (monID != m_alarmMonitor) { m_alarmMonitor = monID; m_frameTimer->stop(); Monitor *mon = ZMClient::get()->getMonitorAt(monID); if (mon) { m_players->at(0)->setMonitor(mon); m_players->at(0)->updateCamera(); } m_frameTimer->start(FRAME_UPDATE_TIME); } m_displayTimer->start(10000); } } QObject::customEvent(event); }
void IdleScreen::customEvent(QEvent* event) { if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = static_cast<MythEvent *>(event); if (me->Message().startsWith("RECONNECT_")) { m_secondsToShutdown = -1; UpdateStatus(); } else if (me->Message().startsWith("SHUTDOWN_COUNTDOWN")) { QString secs = me->Message().mid(19); m_secondsToShutdown = secs.toInt(); UpdateStatus(); } else if (me->Message().startsWith("SHUTDOWN_NOW")) { if (gCoreContext->IsFrontendOnly()) { // does the user want to shutdown this frontend only machine // when the BE shuts down? if (gCoreContext->GetNumSetting("ShutdownWithMasterBE", 0) == 1) { LOG(VB_GENERAL, LOG_NOTICE, "Backend has gone offline, Shutting down frontend"); QString poweroff_cmd = gCoreContext->GetSetting("MythShutdownPowerOff", ""); if (!poweroff_cmd.isEmpty()) myth_system(poweroff_cmd); } } } else if (me->Message().startsWith("SCHEDULE_CHANGE") || me->Message().startsWith("RECORDING_LIST_CHANGE") || me->Message() == "UPDATE_PROG_INFO") { QMutexLocker lock(&m_schedUpdateMutex); if (!PendingSchedUpdate()) { QTimer::singleShot(50, this, SLOT(UpdateScheduledList())); SetPendingSchedUpdate(true); } } } MythUIType::customEvent(event); }
void ZMClient::customEvent (QEvent* event) { if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = dynamic_cast<MythEvent*>(event); if (!me) return; if (me->Message().startsWith("ZONEMINDER_NOTIFICATION")) { QStringList list = me->Message().simplified().split(' '); if (list.size() < 2) return; int monID = list[1].toInt(); showMiniPlayer(monID); } } QObject::customEvent(event); }
bool MythContextPrivate::event(QEvent *e) { if (e->type() == (QEvent::Type) MythEvent::MythEventMessage) { if (disableeventpopup) return true; MythEvent *me = (MythEvent*)e; if (me->Message() == "VERSION_MISMATCH" && (1 == me->ExtraDataCount())) ShowVersionMismatchPopup(me->ExtraData(0).toUInt()); else if (me->Message() == "CONNECTION_FAILURE") ShowConnectionFailurePopup(false); else if (me->Message() == "PERSISTENT_CONNECTION_FAILURE") ShowConnectionFailurePopup(true); else if (me->Message() == "CONNECTION_RESTABLISHED") HideConnectionFailurePopup(); return true; } return QObject::event(e); }
void WelcomeDialog::customEvent(QEvent *e) { if ((MythEvent::Type)(e->type()) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *) e; if (me->Message().left(21) == "RECORDING_LIST_CHANGE" || me->Message() == "UPDATE_PROG_INFO") { LOG(VB_GENERAL, LOG_NOTICE, "MythWelcome received a recording list change event"); QMutexLocker lock(&m_RecListUpdateMuxtex); if (pendingRecListUpdate()) { LOG(VB_GENERAL, LOG_NOTICE, " [deferred to pending handler]"); } else { // we can't query the backend from inside a customEvent QTimer::singleShot(500, this, SLOT(updateRecordingList())); setPendingRecListUpdate(true); } } else if (me->Message().left(15) == "SCHEDULE_CHANGE") { LOG(VB_GENERAL, LOG_NOTICE, "MythWelcome received a SCHEDULE_CHANGE event"); QMutexLocker lock(&m_SchedUpdateMuxtex); if (pendingSchedUpdate()) { LOG(VB_GENERAL, LOG_NOTICE, " [deferred to pending handler]"); } else { QTimer::singleShot(500, this, SLOT(updateScheduledList())); setPendingSchedUpdate(true); } } else if (me->Message().left(18) == "SHUTDOWN_COUNTDOWN") { #if 0 LOG(VB_GENERAL, LOG_NOTICE, "MythWelcome received a SHUTDOWN_COUNTDOWN event"); #endif QString secs = me->Message().mid(19); m_secondsToShutdown = secs.toInt(); updateStatusMessage(); updateScreen(); } else if (me->Message().left(12) == "SHUTDOWN_NOW") { LOG(VB_GENERAL, LOG_NOTICE, "MythWelcome received a SHUTDOWN_NOW event"); if (gCoreContext->IsFrontendOnly()) { // does the user want to shutdown this frontend only machine // when the BE shuts down? if (gCoreContext->GetNumSetting("ShutdownWithMasterBE", 0) == 1) { LOG(VB_GENERAL, LOG_NOTICE, "MythWelcome is shutting this computer down now"); QString poweroff_cmd = gCoreContext->GetSetting("MythShutdownPowerOff", ""); if (!poweroff_cmd.isEmpty()) myth_system(poweroff_cmd); } } } } }
void ViewScheduled::customEvent(QEvent *event) { if ((MythEvent::Type)(event->type()) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; QString message = me->Message(); if (message != "SCHEDULE_CHANGE") return; m_needFill = true; if (m_inEvent) return; m_inEvent = true; LoadList(); m_inEvent = false; } else if (event->type() == DialogCompletionEvent::kEventType) { DialogCompletionEvent *dce = (DialogCompletionEvent*)(event); QString resultid = dce->GetId(); QString resulttext = dce->GetResultText(); int buttonnum = dce->GetResult(); if (resultid == "deleterule") { RecordingRule *record = qVariantValue<RecordingRule *>(dce->GetData()); if (record) { if (buttonnum > 0) { if (!record->Delete()) VERBOSE(VB_IMPORTANT, "Failed to delete recording rule"); } delete record; } EmbedTVWindow(); } else if (resultid == "menu") { if (resulttext == tr("Show Important")) { setShowAll(false); } else if (resulttext == tr("Show All")) { setShowAll(true); } else if (resulttext == tr("Program Details")) { details(); } else if (resulttext == tr("Upcoming by title")) { upcoming(); } else if (resulttext == tr("Upcoming scheduled")) { upcomingScheduled(); } else if (resulttext == tr("Custom Edit")) { customEdit(); } else if (resulttext == tr("Delete Rule")) { deleteRule(); } else if (resulttext == tr("Show Cards")) { viewCards(); } else if (resulttext == tr("Show Inputs")) { viewInputs(); } if (m_needFill) LoadList(); } else ScheduleCommon::customEvent(event); } }
void ViewScheduled::customEvent(QEvent *event) { if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = static_cast<MythEvent *>(event); QString message = me->Message(); if (message != "SCHEDULE_CHANGE") return; m_needFill = true; if (m_inEvent) return; m_inEvent = true; LoadList(); m_inEvent = false; } else if (event->type() == DialogCompletionEvent::kEventType) { DialogCompletionEvent *dce = (DialogCompletionEvent*)(event); QString resultid = dce->GetId(); QString resulttext = dce->GetResultText(); int buttonnum = dce->GetResult(); if (resultid == "deleterule") { RecordingRule *record = dce->GetData().value<RecordingRule *>(); if (record) { if (buttonnum > 0) { if (!record->Delete()) LOG(VB_GENERAL, LOG_ERR, "Failed to delete recording rule"); } delete record; } EmbedTVWindow(); } else if (resultid == "menu") { if (resulttext == tr("Show Important")) { setShowAll(false); } else if (resulttext == tr("Show All")) { setShowAll(true); } else if (resulttext == tr("Program Details")) { ShowDetails(); } else if (resulttext == tr("Program Guide")) { ShowGuide(); } else if (resulttext == tr("Channel Search")) { ShowChannelSearch(); } else if (resulttext == tr("Upcoming by title")) { ShowUpcoming(); } else if (resulttext == tr("Upcoming scheduled")) { ShowUpcomingScheduled(); } else if (resulttext == tr("Previously Recorded")) { ShowPrevious(); } else if (resulttext == tr("Custom Edit")) { EditCustom(); } else if (resulttext == tr("Delete Rule")) { deleteRule(); } else if (resulttext == tr("Show Inputs")) { viewInputs(); } if (m_needFill) LoadList(); } else ScheduleCommon::customEvent(event); } }
void EditMetadataDialog::customEvent(QEvent *event) { if (event->type() == DialogCompletionEvent::kEventType) { DialogCompletionEvent *dce = (DialogCompletionEvent*)(event); // make sure the user didn't ESCAPE out of the menu if (dce->GetResult() < 0) return; QString resultid = dce->GetId(); QString resulttext = dce->GetResultText(); if (resultid == "optionsmenu") { if (resulttext == tr("Edit Albumart Images")) switchToAlbumArt(); else if (resulttext == tr("Search Internet For Genre Image")) { updateMetadata(); searchForGenreImages(); } else if (resulttext == tr("Search Internet For Artist Image")) { updateMetadata(); searchForArtistImages(); } else if (resulttext == tr("Search Internet For Album Image")) { updateMetadata(); searchForAlbumImages(); } else if (resulttext == tr("Check Track Length")) { int length = calcTrackLength(m_metadata->Filename()); if (length != m_metadata->Length() / 1000) { int oldLength = m_metadata->Length() / 1000; // save the new length to our working copy of the metadata m_metadata->setLength(length * 1000); // save the new length to the source copy of the metadata m_sourceMetadata->setLength(length * 1000); m_sourceMetadata->dumpToDatabase(); // this will update any track lengths displayed on screen gPlayer->sendMetadataChangedEvent(m_sourceMetadata->ID()); // this will force the playlist stats to update MusicPlayerEvent me(MusicPlayerEvent::TrackChangeEvent, gPlayer->getCurrentTrackPos()); gPlayer->dispatch(me); ShowOkPopup(QString("Updated track length to %1 seconds\nwas %2 seconds").arg(length).arg(oldLength)); } } } } else if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; QStringList tokens = me->Message().split(" ", QString::SkipEmptyParts); if (!tokens.isEmpty()) { if (tokens[0] == "BROWSER_DOWNLOAD_FINISHED") { scanForImages(); // force the icons to update updateAlbumImage(); updateArtistImage(); updateGenreImage(); m_metadata->getAlbumArtImages()->dumpToDatabase(); // force a reload of the images for any tracks affected MetadataPtrList *allMusic = gMusicData->all_music->getAllMetadata(); for (int x = 0; x < allMusic->count(); x++) { if ((allMusic->at(x)->ID() == m_sourceMetadata->ID()) || (allMusic->at(x)->getDirectoryId() == m_sourceMetadata->getDirectoryId())) { allMusic->at(x)->reloadAlbumArtImages(); gPlayer->sendAlbumArtChangedEvent(allMusic->at(x)->ID()); } } } } } }
void MythCoreContext::dispatchNow(const MythEvent &event) { VERBOSE(VB_NETWORK, QString("MythEvent: %1").arg(event.Message())); MythObservable::dispatchNow(event); }
bool PreviewGeneratorQueue::event(QEvent *e) { if (e->type() != (QEvent::Type) MythEvent::MythEventMessage) return QObject::event(e); MythEvent *me = (MythEvent*)e; if (me->Message() == "GET_PREVIEW") { const QStringList list = me->ExtraDataList(); QStringList::const_iterator it = list.begin(); ProgramInfo evinfo(it, list.end()); QString token; QSize outputsize; QString outputfile; long long time = -1LL; bool time_fmt_sec; if (it != list.end()) token = (*it++); if (it != list.end()) outputsize.setWidth((*it++).toInt()); if (it != list.end()) outputsize.setHeight((*it++).toInt()); if (it != list.end()) outputfile = (*it++); if (it != list.end()) time = (*it++).toLongLong(); QString fn; if (it != list.end()) { time_fmt_sec = (*it++).toInt() != 0; fn = GeneratePreviewImage(evinfo, outputsize, outputfile, time, time_fmt_sec, token); } return true; } else if (me->Message() == "PREVIEW_SUCCESS" || me->Message() == "PREVIEW_FAILED") { QString pginfokey = me->ExtraData(0); // pginfo->MakeUniqueKey() QString filename = me->ExtraData(1); // outFileName QString msg = me->ExtraData(2); QString datetime = me->ExtraData(3); QString token = me->ExtraData(4); { QMutexLocker locker(&m_lock); QMap<QString,QString>::iterator kit = m_tokenToKeyMap.find(token); if (kit == m_tokenToKeyMap.end()) { LOG(VB_GENERAL, LOG_ERR, LOC + QString("Failed to find token %1 in map.").arg(token)); return true; } PreviewMap::iterator it = m_previewMap.find(*kit); if (it == m_previewMap.end()) { LOG(VB_GENERAL, LOG_ERR, LOC + QString("Failed to find key %1 in map.").arg(*kit)); return true; } if ((*it).gen) (*it).gen->deleteLater(); (*it).gen = NULL; (*it).genStarted = false; if (me->Message() == "PREVIEW_SUCCESS") { (*it).attempts = 0; (*it).lastBlockTime = 0; (*it).blockRetryUntil = QDateTime(); } else { (*it).lastBlockTime = max(m_minBlockSeconds, (*it).lastBlockTime * 2); (*it).blockRetryUntil = MythDate::current().addSecs((*it).lastBlockTime); } QStringList list; list.push_back(pginfokey); list.push_back(filename); list.push_back(msg); list.push_back(datetime); QSet<QString>::const_iterator tit = (*it).tokens.begin(); for (; tit != (*it).tokens.end(); ++tit) { kit = m_tokenToKeyMap.find(*tit); if (kit != m_tokenToKeyMap.end()) m_tokenToKeyMap.erase(kit); list.push_back(*tit); } if (list.size() > 4) { QSet<QObject*>::iterator sit = m_listeners.begin(); for (; sit != m_listeners.end(); ++sit) { MythEvent *e = new MythEvent(me->Message(), list); QCoreApplication::postEvent(*sit, e); } (*it).tokens.clear(); } m_running = (m_running > 0) ? m_running - 1 : 0; } UpdatePreviewGeneratorThreads(); return true; } return false; }
void EditAlbumartDialog::customEvent(QEvent *event) { if (event->type() == DialogCompletionEvent::kEventType) { DialogCompletionEvent *dce = (DialogCompletionEvent*)(event); // make sure the user didn't ESCAPE out of the menu if (dce->GetResult() < 0) return; QString resultid = dce->GetId(); QString resulttext = dce->GetResultText(); if (resultid == "changetypemenu") { int type = dce->GetData().toInt(); if ((type >= IT_UNKNOWN) && (type < IT_LAST)) { // get selected image in list MythUIButtonListItem *item = m_coverartList->GetItemCurrent(); if (item) { item->SetText(m_albumArt->getTypeName((ImageType) type)); AlbumArtImage *image = qVariantValue<AlbumArtImage*> (item->GetData()); if (image) { AlbumArtImage oldImage = *image; image->imageType = (ImageType) type; if (image->imageType == oldImage.imageType) return; // rename any cached image to match the new type if (image->embedded) { // update the new cached image filename image->filename = QString(GetConfDir() + "/MythMusic/AlbumArt/%1-%2.jpg") .arg(m_metadata->ID()) .arg(AlbumArtImages::getTypeFilename(image->imageType)); if (image->filename != oldImage.filename && QFile::exists(oldImage.filename)) { // remove any old cached file with the same name as the new one QFile::remove(image->filename); // rename the old cached file to the new one QFile::rename(oldImage.filename, image->filename); // force the theme image cache to refresh the image GetMythUI()->RemoveFromCacheByFile(image->filename); } // change the image type in the tag if it supports it MetaIO *tagger = m_metadata->getTagger(); if (tagger && tagger->supportsEmbeddedImages()) { if (!tagger->changeImageType(m_metadata->Filename(), &oldImage, image->imageType)) LOG(VB_GENERAL, LOG_INFO, "EditAlbumartDialog: failed to change image type"); } } else { QFileInfo fi(oldImage.filename); // get the new images filename image->filename = QString(fi.absolutePath() + "/%1.jpg") .arg(AlbumArtImages::getTypeFilename(image->imageType)); if (image->filename != oldImage.filename && QFile::exists(oldImage.filename)) { // remove any old cached file with the same name as the new one QFile::remove(image->filename); // rename the old cached file to the new one QFile::rename(oldImage.filename, image->filename); // force the theme image cache to refresh the image GetMythUI()->RemoveFromCacheByFile(image->filename); } } m_albumArtChanged = true; gridItemChanged(item); } } } } else if (resultid == "asktypemenu") { int type = dce->GetData().toInt(); if ((type >= IT_UNKNOWN) && (type < IT_LAST)) copyImageToTag((ImageType) type); } else if (resultid == "optionsmenu") { if (resulttext == tr("Edit Metadata")) switchToMetadata(); else if (resulttext == tr("Rescan For Images")) rescanForImages(); else if (resulttext == tr("Search Internet For Images")) searchForAlbumImages(); else if (resulttext == tr("Change Image Type")) showTypeMenu(); else if (resulttext == tr("Copy Selected Image To Tag")) copySelectedImageToTag(); else if (resulttext == tr("Remove Selected Image From Tag")) removeSelectedImageFromTag(); else if (resulttext == tr("Copy Image To Tag")) startCopyImageToTag(); } else if (resultid == "imagelocation") { m_imageFilename = resulttext; // save directory location for next time QFileInfo fi(m_imageFilename); gCoreContext->SaveSetting("MusicLastImageLocation", fi.canonicalPath()); showTypeMenu(false); } } else if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; QStringList tokens = me->Message().split(" ", QString::SkipEmptyParts); if (!tokens.isEmpty()) { if (tokens[0] == "BROWSER_DOWNLOAD_FINISHED") rescanForImages(); } } }
void StreamView::customEvent(QEvent *event) { bool handled = true; if (event->type() == MusicPlayerEvent::PlayedTracksChangedEvent) { if (gPlayer->getPlayedTracksList().count()) updateTrackInfo(gPlayer->getCurrentMetadata()); // add the new track to the list if (m_playedTracksList && gPlayer->getPlayedTracksList().count()) { Metadata *mdata = gPlayer->getPlayedTracksList().last(); MythUIButtonListItem *item = new MythUIButtonListItem(m_playedTracksList, "", qVariantFromValue(mdata), 0); MetadataMap metadataMap; mdata->toMap(metadataMap); item->SetTextFromMap(metadataMap); item->SetFontState("normal"); item->DisplayState("default", "playstate"); item->SetImage(mdata->getAlbumArtFile()); m_playedTracksList->SetItemCurrent(item); } } else if (event->type() == MusicPlayerEvent::TrackChangeEvent) { MusicPlayerEvent *mpe = dynamic_cast<MusicPlayerEvent *>(event); if (!mpe) return; int trackNo = mpe->TrackID; if (m_streamList) { if (m_currentTrack >= 0 && m_currentTrack < m_streamList->GetCount()) { MythUIButtonListItem *item = m_streamList->GetItemAt(m_currentTrack); if (item) { item->SetFontState("normal"); item->DisplayState("default", "playstate"); } } if (trackNo >= 0 && trackNo < m_streamList->GetCount()) { if (m_currentTrack == m_streamList->GetCurrentPos()) m_streamList->SetItemCurrent(trackNo); MythUIButtonListItem *item = m_streamList->GetItemAt(trackNo); if (item) { item->SetFontState("running"); item->DisplayState("playing", "playstate"); } } } m_currentTrack = trackNo; updateTrackInfo(gPlayer->getCurrentMetadata()); } else if (event->type() == OutputEvent::Playing) { if (gPlayer->isPlaying()) { if (m_streamList) { MythUIButtonListItem *item = m_streamList->GetItemAt(m_currentTrack); if (item) { item->SetFontState("running"); item->DisplayState("playing", "playstate"); } } } // pass it on to the default handler in MusicCommon handled = false; } else if (event->type() == OutputEvent::Stopped) { if (m_streamList) { MythUIButtonListItem *item = m_streamList->GetItemAt(m_currentTrack); if (item) { item->SetFontState("normal"); item->DisplayState("stopped", "playstate"); } } // pass it on to the default handler in MusicCommon handled = false; } else if (event->type() == OutputEvent::Buffering) { } else if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; QStringList tokens = me->Message().split(" ", QString::SkipEmptyParts); if (tokens.isEmpty()) return; if (tokens[0] == "DOWNLOAD_FILE") { QStringList args = me->ExtraDataList(); if (tokens[1] == "UPDATE") { } else if (tokens[1] == "FINISHED") { QString url = args[0]; int fileSize = args[2].toInt(); int errorCode = args[4].toInt(); QString filename = args[1]; if ((errorCode != 0) || (fileSize == 0)) LOG(VB_GENERAL, LOG_ERR, QString("StreamView: failed to download radio icon from '%1'").arg(url)); else { for (int x = 0; x < m_streamList->GetCount(); x++) { MythUIButtonListItem *item = m_streamList->GetItemAt(x); Metadata *mdata = qVariantValue<Metadata*> (item->GetData()); if (mdata && mdata->LogoUrl() == url) item->SetImage(filename); } } } } } else if (event->type() == DecoderHandlerEvent::OperationStart) { DecoderHandlerEvent *dhe = dynamic_cast<DecoderHandlerEvent*>(event); if (!dhe) return; if (dhe->getMessage() && m_bufferStatus) { m_bufferStatus->SetText(*dhe->getMessage()); } } else if (event->type() == DecoderHandlerEvent::BufferStatus) { DecoderHandlerEvent *dhe = dynamic_cast<DecoderHandlerEvent*>(event); if (!dhe) return; int available, maxSize; dhe->getBufferStatus(&available, &maxSize); if (m_bufferStatus) { QString status = QString("%1%").arg((int)(100.0 / ((double)maxSize / (double)available))); m_bufferStatus->SetText(status); } if (m_bufferProgress) { m_bufferProgress->SetTotal(maxSize); m_bufferProgress->SetUsed(available); } } else if (event->type() == DecoderHandlerEvent::OperationStop) { if (m_bufferStatus) m_bufferStatus->SetText(""); } else if (event->type() == DialogCompletionEvent::kEventType) { DialogCompletionEvent *dce = static_cast<DialogCompletionEvent*>(event); // make sure the user didn't ESCAPE out of the menu if (dce->GetResult() < 0) return; QString resultid = dce->GetId(); QString resulttext = dce->GetResultText(); if (resultid == "streammenu") { if (resulttext == tr("Add Stream")) { MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); MythScreenType *screen = new EditStreamMetadata(mainStack, this, NULL); if (screen->Create()) mainStack->AddScreen(screen); else delete screen; } else if (resulttext == tr("Remove Stream")) { removeStream(); } else if (resulttext == tr("Edit Stream")) { editStream(); } } else handled = false; } else handled = false; if (!handled) MusicCommon::customEvent(event); }
void NewsSite::customEvent(QEvent *event) { if ((MythEvent::Type)(event->type()) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; QStringList tokens = me->Message().split(" ", QString::SkipEmptyParts); if (tokens.isEmpty()) return; if (tokens[0] == "DOWNLOAD_FILE") { QStringList args = me->ExtraDataList(); if (tokens[1] == "UPDATE") { // could update a progressbar here } else if (tokens[1] == "FINISHED") { QString filename = args[1]; int fileSize = args[2].toInt(); QString errorStr = args[3]; int errorCode = args[4].toInt(); if ((errorCode != 0) || (fileSize == 0)) { LOG(VB_GENERAL, LOG_ERR, LOC + "HTTP Connection Error" + QString("\n\t\t\tExplanation: %1: %2") .arg(errorCode).arg(errorStr)); m_state = NewsSite::RetrieveFailed; m_updateErrorString = QString("%1: %2").arg(errorCode).arg(errorStr); emit finished(this); return; } else { m_updateErrorString = QString::null; //m_data = data; if (m_name.isEmpty()) { m_state = NewsSite::WriteFailed; } else { if (QFile::exists(filename)) { m_updated = MythDate::current(); m_state = NewsSite::Success; } else { m_state = NewsSite::WriteFailed; } } emit finished(this); } } } } }