bool Frontend::PlayVideo(const QString &Id, bool UseBookmark) { if (TV::IsTVRunning()) { LOG(VB_GENERAL, LOG_WARNING, LOC + QString("Ignoring PlayVideo request - frontend is busy.")); return false; } bool ok; quint64 id = Id.toUInt(&ok); if (!ok) { LOG(VB_GENERAL, LOG_WARNING, LOC + QString("Invalid video Id.")); return false; } VideoMetadataListManager::VideoMetadataPtr metadata = VideoMetadataListManager::loadOneFromDatabase(id); if (!metadata) { LOG(VB_GENERAL, LOG_WARNING, LOC + QString("Didn't find any video metadata.")); return false; } if (metadata->GetHost().isEmpty()) { LOG(VB_GENERAL, LOG_WARNING, LOC + QString("No host for video.")); return false; } QString mrl = generate_file_url("Videos", metadata->GetHost(), metadata->GetFilename()); LOG(VB_GENERAL, LOG_INFO, LOC + QString("PlayVideo, id: %1 usebookmark: %2 url: '%3'") .arg(id).arg(UseBookmark).arg(mrl)); QStringList args; args << mrl << metadata->GetPlot() << metadata->GetTitle() << metadata->GetSubtitle() << metadata->GetDirector() << QString::number(metadata->GetSeason()) << QString::number(metadata->GetEpisode()) << metadata->GetInetRef() << QString::number(metadata->GetLength()) << QString::number(metadata->GetYear()) << QString::number(metadata->GetID()) << QString::number(UseBookmark); MythEvent *me = new MythEvent(ACTION_HANDLEMEDIA, args); qApp->postEvent(GetMythMainWindow(), me); return true; }
DTC::LiveStreamInfo *Content::AddVideoLiveStream( int nId, int nMaxSegments, int nWidth, int nHeight, int nBitrate, int nAudioBitrate, int nSampleRate ) { if (nId < 0) throw( "Id is invalid" ); VideoMetadataListManager::VideoMetadataPtr metadata = VideoMetadataListManager::loadOneFromDatabase(nId); if (!metadata) { LOG( VB_UPNP, LOG_ERR, QString("AddVideoLiveStream - no metadata for %1") .arg( nId )); return NULL; } if ( metadata->GetHost().toLower() != gCoreContext->GetHostName().toLower()) { // We only handle requests for local resources QString sMsg = QString("AddVideoLiveStream: Wrong Host '%1' request from '%2'.") .arg( gCoreContext->GetHostName()) .arg( metadata->GetHost() ); LOG(VB_UPNP, LOG_ERR, sMsg); throw HttpRedirectException( metadata->GetHost() ); } StorageGroup sg("Videos", metadata->GetHost()); QString sFileName = sg.FindFile(metadata->GetFilename()); // ---------------------------------------------------------------------- // check to see if the file exists // ---------------------------------------------------------------------- if (!QFile::exists( sFileName )) { LOG( VB_UPNP, LOG_ERR, QString("AddVideoLiveStream - file does not exist.")); return NULL; } return AddLiveStream( "Videos", metadata->GetFilename(), metadata->GetHost(), nMaxSegments, nWidth, nHeight, nBitrate, nAudioBitrate, nSampleRate ); }
DTC::VideoMetadataInfoList* Video::GetVideos( bool bDescending, int nStartIndex, int nCount ) { VideoMetadataListManager::metadata_list videolist; VideoMetadataListManager::loadAllFromDatabase(videolist); std::vector<VideoMetadataListManager::VideoMetadataPtr> videos(videolist.begin(), videolist.end()); // ---------------------------------------------------------------------- // Build Response // ---------------------------------------------------------------------- DTC::VideoMetadataInfoList *pVideoMetadataInfos = new DTC::VideoMetadataInfoList(); nStartIndex = min( nStartIndex, (int)videos.size() ); nCount = (nCount > 0) ? min( nCount, (int)videos.size() ) : videos.size(); int nEndIndex = min((nStartIndex + nCount), (int)videos.size() ); for( int n = nStartIndex; n < nEndIndex; n++ ) { DTC::VideoMetadataInfo *pVideoMetadataInfo = pVideoMetadataInfos->AddNewVideoMetadataInfo(); VideoMetadataListManager::VideoMetadataPtr metadata = videos[n]; if (metadata) { pVideoMetadataInfo->setId(metadata->GetID()); pVideoMetadataInfo->setTitle(metadata->GetTitle()); pVideoMetadataInfo->setSubTitle(metadata->GetSubtitle()); pVideoMetadataInfo->setTagline(metadata->GetTagline()); pVideoMetadataInfo->setDirector(metadata->GetDirector()); pVideoMetadataInfo->setStudio(metadata->GetStudio()); pVideoMetadataInfo->setDescription(metadata->GetPlot()); pVideoMetadataInfo->setCertification(metadata->GetRating()); pVideoMetadataInfo->setInetRef(metadata->GetInetRef()); pVideoMetadataInfo->setHomePage(metadata->GetHomepage()); pVideoMetadataInfo->setReleaseDate(QDateTime(metadata->GetReleaseDate())); pVideoMetadataInfo->setAddDate(QDateTime(metadata->GetInsertdate())); pVideoMetadataInfo->setUserRating(metadata->GetUserRating()); pVideoMetadataInfo->setLength(metadata->GetLength()); pVideoMetadataInfo->setSeason(metadata->GetSeason()); pVideoMetadataInfo->setEpisode(metadata->GetEpisode()); pVideoMetadataInfo->setParentalLevel(metadata->GetShowLevel()); pVideoMetadataInfo->setVisible(metadata->GetBrowse()); pVideoMetadataInfo->setWatched(metadata->GetWatched()); pVideoMetadataInfo->setProcessed(metadata->GetProcessed()); pVideoMetadataInfo->setFileName(metadata->GetFilename()); pVideoMetadataInfo->setHash(metadata->GetHash()); pVideoMetadataInfo->setHost(metadata->GetHost()); pVideoMetadataInfo->setCoverart(metadata->GetCoverFile()); pVideoMetadataInfo->setFanart(metadata->GetFanart()); pVideoMetadataInfo->setBanner(metadata->GetBanner()); pVideoMetadataInfo->setScreenshot(metadata->GetScreenshot()); pVideoMetadataInfo->setTrailer(metadata->GetTrailer()); } } int curPage = 0, totalPages = 0; if (nCount == 0) totalPages = 1; else totalPages = (int)ceil((float)videos.size() / nCount); if (totalPages == 1) curPage = 1; else { curPage = (int)ceil((float)nStartIndex / nCount) + 1; } pVideoMetadataInfos->setStartIndex ( nStartIndex ); pVideoMetadataInfos->setCount ( nCount ); pVideoMetadataInfos->setCurrentPage ( curPage ); pVideoMetadataInfos->setTotalPages ( totalPages ); pVideoMetadataInfos->setTotalAvailable( videos.size() ); pVideoMetadataInfos->setAsOf ( QDateTime::currentDateTime() ); pVideoMetadataInfos->setVersion ( MYTH_BINARY_VERSION ); pVideoMetadataInfos->setProtoVer ( MYTH_PROTO_VERSION ); return pVideoMetadataInfos; }
void FillVideoMetadataInfo ( DTC::VideoMetadataInfo *pVideoMetadataInfo, VideoMetadataListManager::VideoMetadataPtr pMetadata, bool bDetails) { pVideoMetadataInfo->setId(pMetadata->GetID()); pVideoMetadataInfo->setTitle(pMetadata->GetTitle()); pVideoMetadataInfo->setSubTitle(pMetadata->GetSubtitle()); pVideoMetadataInfo->setTagline(pMetadata->GetTagline()); pVideoMetadataInfo->setDirector(pMetadata->GetDirector()); pVideoMetadataInfo->setStudio(pMetadata->GetStudio()); pVideoMetadataInfo->setDescription(pMetadata->GetPlot()); pVideoMetadataInfo->setCertification(pMetadata->GetRating()); pVideoMetadataInfo->setInetref(pMetadata->GetInetRef()); pVideoMetadataInfo->setCollectionref(pMetadata->GetCollectionRef()); pVideoMetadataInfo->setHomePage(pMetadata->GetHomepage()); pVideoMetadataInfo->setReleaseDate(QDateTime(pMetadata->GetReleaseDate())); pVideoMetadataInfo->setAddDate(QDateTime(pMetadata->GetInsertdate())); pVideoMetadataInfo->setUserRating(pMetadata->GetUserRating()); pVideoMetadataInfo->setLength(pMetadata->GetLength()); pVideoMetadataInfo->setPlayCount(pMetadata->GetPlayCount()); pVideoMetadataInfo->setSeason(pMetadata->GetSeason()); pVideoMetadataInfo->setEpisode(pMetadata->GetEpisode()); pVideoMetadataInfo->setParentalLevel(pMetadata->GetShowLevel()); pVideoMetadataInfo->setVisible(pMetadata->GetBrowse()); pVideoMetadataInfo->setWatched(pMetadata->GetWatched()); pVideoMetadataInfo->setProcessed(pMetadata->GetProcessed()); pVideoMetadataInfo->setContentType(ContentTypeToString( pMetadata->GetContentType())); pVideoMetadataInfo->setFileName(pMetadata->GetFilename()); pVideoMetadataInfo->setHash(pMetadata->GetHash()); pVideoMetadataInfo->setHostName(pMetadata->GetHost()); pVideoMetadataInfo->setCoverart(pMetadata->GetCoverFile()); pVideoMetadataInfo->setFanart(pMetadata->GetFanart()); pVideoMetadataInfo->setBanner(pMetadata->GetBanner()); pVideoMetadataInfo->setScreenshot(pMetadata->GetScreenshot()); pVideoMetadataInfo->setTrailer(pMetadata->GetTrailer()); pVideoMetadataInfo->setSerializeArtwork( true ); if (bDetails) { if (!pMetadata->GetFanart().isEmpty()) { DTC::ArtworkInfo *pArtInfo = pVideoMetadataInfo->Artwork()->AddNewArtworkInfo(); pArtInfo->setStorageGroup("Fanart"); pArtInfo->setType("fanart"); pArtInfo->setURL(QString("/Content/GetImageFile?StorageGroup=%1" "&FileName=%2").arg("Fanart") .arg(pMetadata->GetFanart())); } if (!pMetadata->GetCoverFile().isEmpty()) { DTC::ArtworkInfo *pArtInfo = pVideoMetadataInfo->Artwork()->AddNewArtworkInfo(); pArtInfo->setStorageGroup("Coverart"); pArtInfo->setType("coverart"); pArtInfo->setURL(QString("/Content/GetImageFile?StorageGroup=%1" "&FileName=%2").arg("Coverart") .arg(pMetadata->GetCoverFile())); } if (!pMetadata->GetBanner().isEmpty()) { DTC::ArtworkInfo *pArtInfo = pVideoMetadataInfo->Artwork()->AddNewArtworkInfo(); pArtInfo->setStorageGroup("Banners"); pArtInfo->setType("banner"); pArtInfo->setURL(QString("/Content/GetImageFile?StorageGroup=%1" "&FileName=%2").arg("Banners") .arg(pMetadata->GetBanner())); } if (!pMetadata->GetScreenshot().isEmpty()) { DTC::ArtworkInfo *pArtInfo = pVideoMetadataInfo->Artwork()->AddNewArtworkInfo(); pArtInfo->setStorageGroup("Screenshots"); pArtInfo->setType("screenshot"); pArtInfo->setURL(QString("/Content/GetImageFile?StorageGroup=%1" "&FileName=%2").arg("Screenshots") .arg(pMetadata->GetScreenshot())); } } }