void GameUI::showMenu() { MythGenericTree *node = m_gameUITree->GetCurrentNode(); MythScreenStack *popupStack = GetMythMainWindow()-> GetStack("popup stack"); MythDialogBox *showMenuPopup = new MythDialogBox(node->GetText(), popupStack, "showMenuPopup"); if (showMenuPopup->Create()) { showMenuPopup->SetReturnEvent(this, "showMenuPopup"); showMenuPopup->AddButton(tr("Scan For Changes")); if (isLeaf(node)) { RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); if (romInfo) { showMenuPopup->AddButton(tr("Show Information")); if (romInfo->Favorite()) showMenuPopup->AddButton(tr("Remove Favorite")); else showMenuPopup->AddButton(tr("Make Favorite")); showMenuPopup->AddButton(tr("Retrieve Details")); showMenuPopup->AddButton(tr("Edit Details")); } } popupStack->AddScreen(showMenuPopup); } else delete showMenuPopup; }
void NetTree::doDeleteVideo(bool remove) { if (!remove) return; ResultItem *item; if (m_type == DLG_TREE) item = qVariantValue<ResultItem *>(m_siteMap->GetCurrentNode()->GetData()); else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (!node) return; item = qVariantValue<ResultItem *>(node->GetData()); } if (!item) return; QString filename = GetDownloadFilename(item->GetTitle(), item->GetMediaURL()); if (filename.startsWith("myth://")) RemoteFile::DeleteFile(filename); else { QFile file(filename); file.remove(); } }
void NetTree::streamWebVideo() { ResultItem *item; if (m_type == DLG_TREE) item = qVariantValue<ResultItem *>(m_siteMap->GetCurrentNode()->GetData()); else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (!node) return; item = qVariantValue<ResultItem *>(node->GetData()); } if (!item) return; if (!item->GetDownloadable()) { showWebVideo(); return; } GetMythMainWindow()->HandleMedia("Internal", item->GetMediaURL(), item->GetDescription(), item->GetTitle(), item->GetSubtitle(), QString(), item->GetSeason(), item->GetEpisode(), QString(), item->GetTime().toInt(), item->GetDate().toString("yyyy")); }
void GameUI::toggleFavorite(void) { MythGenericTree *node = m_gameUITree->GetCurrentNode(); if (isLeaf(node)) { RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); romInfo->setFavorite(true); updateChangedNode(node, romInfo); } }
void NetTree::showMenu(void) { QString label = tr("Playback/Download Options"); MythMenu *menu = new MythMenu(label, this, "options"); ResultItem *item = NULL; if (m_type == DLG_TREE) { MythGenericTree *node = m_siteMap->GetCurrentNode(); if (node) item = qVariantValue<ResultItem *>(node->GetData()); } else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (node) item = qVariantValue<ResultItem *>(node->GetData()); } if (item) { if (item->GetDownloadable()) menu->AddItem(tr("Stream Video"), SLOT(streamWebVideo())); menu->AddItem(tr("Open Web Link"), SLOT(showWebVideo())); if (item->GetDownloadable()) menu->AddItem(tr("Save This Video"), SLOT(doDownloadAndPlay())); } menu->AddItem(tr("Scan/Manage Subscriptions"), NULL, createShowManageMenu()); menu->AddItem(tr("Change View"), NULL, createShowViewMenu()); MythDialogBox *menuPopup = new MythDialogBox(menu, m_popupStack, "mythnettreemenupopup"); if (menuPopup->Create()) m_popupStack->AddScreen(menuPopup); else delete menuPopup; }
void GameUI::OnGameSearchDone(MetadataLookup *lookup) { if (m_busyPopup) { m_busyPopup->Close(); m_busyPopup = NULL; } if (!lookup) return; MythGenericTree *node = qVariantValue<MythGenericTree *>(lookup->GetData()); if (!node) return; RomInfo *metadata = qVariantValue<RomInfo *>(node->GetData()); if (!metadata) return; metadata->setGamename(lookup->GetTitle()); metadata->setYear(QString::number(lookup->GetYear())); metadata->setPlot(lookup->GetDescription()); metadata->setSystem(lookup->GetSystem()); QStringList coverart, fanart, screenshot; // Imagery ArtworkList coverartlist = lookup->GetArtwork(kArtworkCoverart); for (ArtworkList::const_iterator p = coverartlist.begin(); p != coverartlist.end(); ++p) { coverart.prepend((*p).url); } ArtworkList fanartlist = lookup->GetArtwork(kArtworkFanart); for (ArtworkList::const_iterator p = fanartlist.begin(); p != fanartlist.end(); ++p) { fanart.prepend((*p).url); } ArtworkList screenshotlist = lookup->GetArtwork(kArtworkScreenshot); for (ArtworkList::const_iterator p = screenshotlist.begin(); p != screenshotlist.end(); ++p) { screenshot.prepend((*p).url); } StartGameImageSet(node, coverart, fanart, screenshot); metadata->SaveToDatabase(); updateChangedNode(node, metadata); }
/** \fn GalleryViewHelper::GetImageMetadataFromSelectedNode() * \brief Returns the data selected node * \return ImageMetadata */ ImageMetadata *GalleryViewHelper::GetImageMetadataFromSelectedNode() { if (!m_currentNode) return NULL; MythGenericTree *node = m_currentNode->getSelectedChild(); if (!node) return NULL; ImageMetadata *im = node->GetData().value<ImageMetadata *>(); if (!im) return NULL; return im; }
/** \fn GalleryView::GetImageMetadataFromButton(MythUIButtonListItem *) * \brief Returns the data of the given image list item * \param item The given image list item * \return ImageMetadata */ ImageMetadata *GalleryView::GetImageMetadataFromButton(MythUIButtonListItem *item) { if (!item) return NULL; MythGenericTree *node = item->GetData().value<MythGenericTree *>(); if (!node) return NULL; ImageMetadata *data = node->GetData().value<ImageMetadata *>(); if (!data) return NULL; return data; }
/** \fn GalleryViewHelper::GetImageMetadataFromNode(int) * \brief Returns the data of the given node id * \param id The specified node id that shall be used * \return ImageMetadata */ ImageMetadata *GalleryViewHelper::GetImageMetadataFromNode(int i) { if (!m_currentNode) return NULL; MythGenericTree *node = m_currentNode->getChildAt(i); if (!node) return NULL; ImageMetadata *im = qVariantValue<ImageMetadata *>(node->GetData()); if (!im) return NULL; return im; }
/** \fn GalleryView::GetImageMetadataFromSelectedButton() * \brief Returns the data of the currently selected image list item * \return ImageMetadata */ ImageMetadata *GalleryView::GetImageMetadataFromSelectedButton() { MythUIButtonListItem *item = m_imageList->GetItemCurrent(); if (!item) return NULL; MythGenericTree *node = item->GetData().value<MythGenericTree *>(); if (!node) return NULL; ImageMetadata *data = node->GetData().value<ImageMetadata *>(); if (!data) return NULL; return data; }
void NetTree::doPlayVideo(QString filename) { ResultItem *item; if (m_type == DLG_TREE) item = qVariantValue<ResultItem *>(m_siteMap->GetCurrentNode()->GetData()); else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (!node) return; item = qVariantValue<ResultItem *>(node->GetData()); } if (!item) return; GetMythMainWindow()->HandleMedia("Internal", filename); }
void GameUI::showInfo() { MythGenericTree *node = m_gameUITree->GetCurrentNode(); if (isLeaf(node)) { RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); if (!romInfo) return; MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); GameDetailsPopup *details_dialog = new GameDetailsPopup(mainStack, romInfo); if (details_dialog->Create()) { mainStack->AddScreen(details_dialog); details_dialog->SetReturnEvent(this, "detailsPopup"); } else delete details_dialog; } }
void GameUI::edit(void) { MythGenericTree *node = m_gameUITree->GetCurrentNode(); if (isLeaf(node)) { RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); MythScreenStack *screenStack = GetScreenStack(); EditRomInfoDialog *md_editor = new EditRomInfoDialog(screenStack, "mythgameeditmetadata", romInfo); if (md_editor->Create()) { screenStack->AddScreen(md_editor); md_editor->SetReturnEvent(this, "editMetadata"); } else delete md_editor; } }
void GameUI::itemClicked(MythUIButtonListItem*) { MythGenericTree *node = m_gameUITree->GetCurrentNode(); if (isLeaf(node)) { RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); if (!romInfo) return; if (romInfo->RomCount() == 1) { GameHandler::Launchgame(romInfo, NULL); } else { //: %1 is the game name QString msg = QString(tr("Choose System for:\n%1")) .arg(node->getString()); MythScreenStack *popupStack = GetMythMainWindow()-> GetStack("popup stack"); MythDialogBox *chooseSystemPopup = new MythDialogBox( msg, popupStack, "chooseSystemPopup"); if (chooseSystemPopup->Create()) { chooseSystemPopup->SetReturnEvent(this, "chooseSystemPopup"); QString all_systems = romInfo->AllSystems(); QStringList players = all_systems.split(","); for (QStringList::Iterator it = players.begin(); it != players.end(); ++it) { chooseSystemPopup->AddButton(*it); } chooseSystemPopup->AddButton(tr("Cancel")); popupStack->AddScreen(chooseSystemPopup); } else delete chooseSystemPopup; } } }
void NetTree::doDownloadAndPlay() { ResultItem *item; if (m_type == DLG_TREE) item = qVariantValue<ResultItem *>(m_siteMap->GetCurrentNode()->GetData()); else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (!node) return; item = qVariantValue<ResultItem *>(node->GetData()); } if (!item) return; QString baseFilename = GetDownloadFilename(item->GetTitle(), item->GetMediaURL()); QString finalFilename = generate_file_url("Default", gCoreContext->GetMasterHostName(), baseFilename); LOG(VB_GENERAL, LOG_INFO, QString("Downloading %1 to %2") .arg(item->GetMediaURL()) .arg(finalFilename)); // Does the file already exist? bool exists = RemoteFile::Exists(finalFilename); if (exists) { doPlayVideo(finalFilename); return; } else DownloadVideo(item->GetMediaURL(), baseFilename); }
void GameUI::handleDownloadedImages(MetadataLookup *lookup) { if (!lookup) return; MythGenericTree *node = qVariantValue<MythGenericTree *>(lookup->GetData()); if (!node) return; RomInfo *metadata = qVariantValue<RomInfo *>(node->GetData()); if (!metadata) return; DownloadMap downloads = lookup->GetDownloads(); if (downloads.isEmpty()) return; for (DownloadMap::iterator i = downloads.begin(); i != downloads.end(); ++i) { VideoArtworkType type = i.key(); ArtworkInfo info = i.value(); QString filename = info.url; if (type == kArtworkCoverart) metadata->setBoxart(filename); else if (type == kArtworkFanart) metadata->setFanart(filename); else if (type == kArtworkScreenshot) metadata->setScreenshot(filename); } metadata->SaveToDatabase(); updateChangedNode(node, metadata); }
void NetTree::slotItemChanged() { ResultItem *item; RSSSite *site; if (m_type == DLG_TREE) { item = qVariantValue<ResultItem *>(m_siteMap->GetCurrentNode()->GetData()); site = qVariantValue<RSSSite *>(m_siteMap->GetCurrentNode()->GetData()); } else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (!node) return; item = qVariantValue<ResultItem *>(node->GetData()); site = qVariantValue<RSSSite *>(node->GetData()); } if (item) { MetadataMap metadataMap; item->toMap(metadataMap); SetTextFromMap(metadataMap); if (!item->GetThumbnail().isEmpty() && m_thumbImage) { m_thumbImage->Reset(); QString dlfile = item->GetThumbnail(); if (dlfile.contains("%SHAREDIR%")) { dlfile.replace("%SHAREDIR%", GetShareDir()); m_thumbImage->SetFilename(dlfile); m_thumbImage->Load(); } else { QString sFilename = getDownloadFilename(item->GetTitle(), item->GetThumbnail()); bool exists = QFile::exists(sFilename); if (exists) { m_thumbImage->SetFilename(sFilename); m_thumbImage->Load(); } } } else if (m_thumbImage) m_thumbImage->Reset(); if (m_downloadable) { if (item->GetDownloadable()) m_downloadable->DisplayState("yes"); else m_downloadable->DisplayState("no"); } } else if (site) { ResultItem *res = new ResultItem(site->GetTitle(), QString(), site->GetDescription(), site->GetURL(), site->GetImage(), QString(), site->GetAuthor(), QDateTime(), 0, 0, -1, QString(), QStringList(), QString(), QStringList(), 0, 0, QString(), 0, QStringList(), 0, 0, 0); MetadataMap metadataMap; res->toMap(metadataMap); SetTextFromMap(metadataMap); if (!site->GetImage().isEmpty() && m_thumbImage) { m_thumbImage->SetFilename(site->GetImage()); m_thumbImage->Load(); } else if (m_thumbImage) m_thumbImage->Reset(); if (m_downloadable) { m_downloadable->Reset(); } } else { QString title; if (m_type == DLG_TREE) title = m_siteMap->GetItemCurrent()->GetText(); else title = m_siteButtonList->GetItemCurrent()->GetText(); QString thumb; if (m_type == DLG_TREE) thumb = m_siteMap->GetCurrentNode()-> GetData().toString(); else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (node) thumb = node->GetData().toString(); } ResultItem *res = new ResultItem(title, QString(), QString(), QString(), thumb, QString(), QString(), QDateTime(), 0, 0, -1, QString(), QStringList(), QString(), QStringList(), 0, 0, QString(), 0, QStringList(), 0, 0, 0); MetadataMap metadataMap; res->toMap(metadataMap); SetTextFromMap(metadataMap); if (m_thumbImage) { if (!thumb.startsWith("http://")) { if (thumb.contains("%SHAREDIR%")) thumb.replace("%SHAREDIR%", GetShareDir()); bool exists = QFile::exists(thumb); if (exists) { m_thumbImage->SetFilename(thumb); m_thumbImage->Load(); } else m_thumbImage->Reset(); } else { QString url = thumb; QString title; if (m_type == DLG_TREE) title = m_siteMap->GetItemCurrent()->GetText(); else title = m_siteButtonList->GetItemCurrent()->GetText(); QString sFilename = GetDownloadFilename(title, url); bool exists = QFile::exists(sFilename); if (exists && !url.isEmpty()) { m_thumbImage->SetFilename(sFilename); m_thumbImage->Load(); } else m_thumbImage->Reset(); } } if (m_downloadable) m_downloadable->Reset(); } }
/** \fn GalleryView::UpdateImageItem(MythUIButtonListItem *) * \brief Updates the visible representation of a MythUIButtonListItem * \param item The item that shall be updated * \return void */ void GalleryView::UpdateImageItem(MythUIButtonListItem *item) { if (!item) return; MythGenericTree *node = item->GetData().value<MythGenericTree *>(); if (!node) return; // update the position in the node list m_galleryViewHelper->m_currentNode->setSelectedChild(node); ImageMetadata *im = node->GetData().value<ImageMetadata *>(); if (!im) return; // Depending what the themer has done, display a small // icon that shows if the current item is a file or a folder // Also show an additional background image if required. This is // primarily useful when the item is a folder and a folder background // image shall be shown behind the small preview thumbnail images switch (im->m_type) { case kSubDirectory: item->SetText(QString::number(im->m_dirCount), "childcount"); if (im->m_fileCount > 0) item->SetText(QString("%1/%2") .arg(im->m_dirCount) .arg(im->m_fileCount), "childcount"); item->DisplayState("subfolder", "nodetype"); break; case kUpDirectory: item->DisplayState("upfolder", "nodetype"); break; case kImageFile: item->DisplayState("image", "nodetype"); break; case kVideoFile: item->DisplayState("video", "nodetype"); break; default: break; } // set the image as hidden or visible QString state = (im->m_isHidden) ? "hidden" : "visible"; item->DisplayState(state, "nodevisibility"); item->SetText(im->m_name, "title"); item->SetText(im->m_name); // set the image as selected item->setChecked(MythUIButtonListItem::NotChecked); item->DisplayState("off", "nodecheck"); if (im->m_selected) { item->setChecked(MythUIButtonListItem::FullChecked); item->DisplayState("full", "nodecheck"); } // update the other widgets in the screen if (item == m_imageList->GetItemCurrent()) UpdateText(item); // set the thumbnail image UpdateThumbnail(item); }
void NetTree::UpdateItem(MythUIButtonListItem *item) { if (!item) return; MythGenericTree *node = GetNodePtrFromButton(item); if (!node) return; RSSSite *site = qVariantValue<RSSSite *>(node->GetData()); ResultItem *video = qVariantValue<ResultItem *>(node->GetData()); int nodeInt = node->getInt(); if (nodeInt == kSubFolder) { item->SetText(QString("%1").arg(node->visibleChildCount()), "childcount"); item->DisplayState("subfolder", "nodetype"); item->SetText(node->getString(), "title"); item->SetText(node->getString()); item->SetImage(node->GetData().toString()); } else if (nodeInt == kUpFolder) { item->DisplayState("upfolder", "nodetype"); item->SetText(node->getString(), "title"); item->SetText(node->getString()); } if (site) { item->SetText(site->GetTitle()); item->SetText(site->GetDescription(), "description"); item->SetText(site->GetURL(), "url"); item->SetImage(site->GetImage()); } else if (video) { item->SetText(video->GetTitle()); MetadataMap metadataMap; video->toMap(metadataMap); item->SetTextFromMap(metadataMap); int pos; if (m_type == DLG_TREE) pos = 0; else pos = m_siteButtonList->GetItemPos(item); QString dlfile = video->GetThumbnail(); if (dlfile.contains("%SHAREDIR%")) dlfile.replace("%SHAREDIR%", GetShareDir()); else dlfile = getDownloadFilename(video->GetTitle(), video->GetThumbnail()); if (QFile::exists(dlfile)) item->SetImage(dlfile); else if (video->GetThumbnail().startsWith("http")) m_imageDownload->addThumb(video->GetTitle(), video->GetThumbnail(), qVariantFromValue<uint>(pos)); } else { item->SetText(node->getString()); if (!node->GetData().toString().isEmpty()) { QString tpath = node->GetData().toString(); if (tpath.startsWith("http://")) { uint pos; if (m_type == DLG_TREE) pos = 0; else pos = m_siteButtonList->GetItemPos(item); QString dlfile = GetThumbnailFilename(tpath, node->getString()); if (QFile::exists(dlfile)) item->SetImage(dlfile); else m_imageDownload->addThumb(node->getString(), tpath, qVariantFromValue<uint>(pos)); } else if (tpath != "0") { QString filename = node->GetData().toString(); if (filename.contains("%SHAREDIR%")) filename.replace("%SHAREDIR%", GetShareDir()); item->SetImage(filename); } } } }
void GameUI::customEvent(QEvent *event) { if (event->type() == DialogCompletionEvent::kEventType) { DialogCompletionEvent *dce = (DialogCompletionEvent*)(event); QString resultid = dce->GetId(); QString resulttext = dce->GetResultText(); if (resultid == "showMenuPopup") { if (resulttext == tr("Edit Details")) { edit(); } if (resulttext == tr("Scan For Changes")) { doScan(); } else if (resulttext == tr("Show Information")) { showInfo(); } else if (resulttext == tr("Make Favorite") || resulttext == tr("Remove Favorite")) { toggleFavorite(); } else if (resulttext == tr("Retrieve Details")) { gameSearch(); } } else if (resultid == "chooseSystemPopup") { if (!resulttext.isEmpty() && resulttext != tr("Cancel")) { MythGenericTree *node = m_gameUITree->GetCurrentNode(); RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); GameHandler::Launchgame(romInfo, resulttext); } } else if (resultid == "editMetadata") { MythGenericTree *node = m_gameUITree->GetCurrentNode(); RomInfo *oldRomInfo = qVariantValue<RomInfo *>(node->GetData()); delete oldRomInfo; RomInfo *romInfo = qVariantValue<RomInfo *>(dce->GetData()); node->SetData(qVariantFromValue(romInfo)); node->SetText(romInfo->Gamename()); romInfo->SaveToDatabase(); updateChangedNode(node, romInfo); } else if (resultid == "detailsPopup") { // Play button pushed itemClicked(0); } } if (event->type() == MetadataLookupEvent::kEventType) { MetadataLookupEvent *lue = (MetadataLookupEvent *)event; MetadataLookupList lul = lue->lookupList; if (m_busyPopup) { m_busyPopup->Close(); m_busyPopup = NULL; } if (lul.isEmpty()) return; if (lul.count() == 1) { OnGameSearchDone(lul.takeFirst()); } else { MetadataResultsDialog *resultsdialog = new MetadataResultsDialog(m_popupStack, lul); connect(resultsdialog, SIGNAL(haveResult(MetadataLookup*)), SLOT(OnGameSearchListSelection(MetadataLookup*)), Qt::QueuedConnection); if (resultsdialog->Create()) m_popupStack->AddScreen(resultsdialog); } } else if (event->type() == MetadataLookupFailure::kEventType) { MetadataLookupFailure *luf = (MetadataLookupFailure *)event; MetadataLookupList lul = luf->lookupList; if (m_busyPopup) { m_busyPopup->Close(); m_busyPopup = NULL; } if (lul.size()) { MetadataLookup *lookup = lul.takeFirst(); MythGenericTree *node = qVariantValue<MythGenericTree *>(lookup->GetData()); if (node) { RomInfo *metadata = qVariantValue<RomInfo *>(node->GetData()); if (metadata) { } } LOG(VB_GENERAL, LOG_ERR, QString("No results found for %1").arg(lookup->GetTitle())); } } else if (event->type() == ImageDLEvent::kEventType) { ImageDLEvent *ide = (ImageDLEvent *)event; MetadataLookup *lookup = ide->item; if (!lookup) return; handleDownloadedImages(lookup); } }
void NetTree::showWebVideo() { ResultItem *item; if (m_type == DLG_TREE) item = qVariantValue<ResultItem *>(m_siteMap->GetCurrentNode()->GetData()); else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (!node) return; item = qVariantValue<ResultItem *>(node->GetData()); } if (!item) return; if (!item->GetPlayer().isEmpty()) { QString cmd = item->GetPlayer(); QStringList args = item->GetPlayerArguments(); if (!args.size()) { args += item->GetMediaURL(); if (!args.size()) args += item->GetURL(); } else { args.replaceInStrings("%DIR%", QString(GetConfDir() + "/MythNetvision")); args.replaceInStrings("%MEDIAURL%", item->GetMediaURL()); args.replaceInStrings("%URL%", item->GetURL()); args.replaceInStrings("%TITLE%", item->GetTitle()); } QString playerCommand = cmd + " " + args.join(" "); myth_system(playerCommand); } else { QString url = item->GetURL(); LOG(VB_GENERAL, LOG_DEBUG, QString("Web URL = %1").arg(url)); if (url.isEmpty()) return; QString browser = gCoreContext->GetSetting("WebBrowserCommand", ""); QString zoom = gCoreContext->GetSetting("WebBrowserZoomLevel", "1.0"); if (browser.isEmpty()) { ShowOkPopup(tr("No browser command set! MythNetTree needs MythBrowser " "installed to display the video.")); return; } if (browser.toLower() == "internal") { GetMythMainWindow()->HandleMedia("WebBrowser", url); return; } else { QString cmd = browser; cmd.replace("%ZOOM%", zoom); cmd.replace("%URL%", url); cmd.replace('\'', "%27"); cmd.replace("&","\\&"); cmd.replace(";","\\;"); GetMythMainWindow()->AllowInput(false); myth_system(cmd, kMSDontDisableDrawing); GetMythMainWindow()->AllowInput(true); return; } } }