bool CPVRRecording::operator ==(const CPVRRecording& right) const { return (this == &right) || (m_strRecordingId == right.m_strRecordingId && m_iClientId == right.m_iClientId && m_strChannelName == right.m_strChannelName && m_recordingTime == right.m_recordingTime && GetDuration() == right.GetDuration() && m_strPlotOutline == right.m_strPlotOutline && m_strPlot == right.m_strPlot && m_iPriority == right.m_iPriority && m_iLifetime == right.m_iLifetime && m_strDirectory == right.m_strDirectory && m_strFileNameAndPath == right.m_strFileNameAndPath && m_strTitle == right.m_strTitle && m_strShowTitle == right.m_strShowTitle && m_iSeason == right.m_iSeason && m_iEpisode == right.m_iEpisode && GetPremiered() == right.GetPremiered() && m_strIconPath == right.m_strIconPath && m_strThumbnailPath == right.m_strThumbnailPath && m_strFanartPath == right.m_strFanartPath && m_iRecordingId == right.m_iRecordingId && m_bIsDeleted == right.m_bIsDeleted && m_iEpgEventId == right.m_iEpgEventId && m_iChannelUid == right.m_iChannelUid && m_bRadio == right.m_bRadio); }
void CPVRGUIInfo::UpdatePlayingTag(void) { CPVRChannelPtr currentChannel; CPVRRecording recording; if (g_PVRManager.GetCurrentChannel(currentChannel)) { CEpgInfoTag epgTag; bool bHasEpgTag = GetPlayingTag(epgTag); CPVRChannelPtr channel; if (bHasEpgTag) channel = epgTag.ChannelTag(); if (!bHasEpgTag || !epgTag.IsActive() || !channel || *channel != *currentChannel) { CEpgInfoTag newTag; { CSingleLock lock(m_critSection); ResetPlayingTag(); if (currentChannel->GetEPGNow(newTag)) { m_playingEpgTag = new CEpgInfoTag(newTag); m_iDuration = m_playingEpgTag->GetDuration() * 1000; } } g_PVRManager.UpdateCurrentFile(); } } else if (g_PVRClients->GetPlayingRecording(recording)) { ResetPlayingTag(); m_iDuration = recording.GetDuration() * 1000; } }
/*! * @brief Copy over recording info from xbmcRecording to addonRecording. * @param xbmcRecording The recording on XBMC's side. * @param addonRecording The recording on the addon's side. */ void CPVRClient::WriteClientRecordingInfo(const CPVRRecording &xbmcRecording, PVR_RECORDING &addonRecording) { time_t recTime; xbmcRecording.RecordingTimeAsUTC().GetAsTime(recTime); memset(&addonRecording, 0, sizeof(addonRecording)); addonRecording.recordingTime = recTime - g_advancedSettings.m_iPVRTimeCorrection; strncpy(addonRecording.strRecordingId, xbmcRecording.m_strRecordingId.c_str(), sizeof(addonRecording.strRecordingId) - 1); strncpy(addonRecording.strTitle, xbmcRecording.m_strTitle.c_str(), sizeof(addonRecording.strTitle) - 1); strncpy(addonRecording.strPlotOutline, xbmcRecording.m_strPlotOutline.c_str(), sizeof(addonRecording.strPlotOutline) - 1); strncpy(addonRecording.strPlot, xbmcRecording.m_strPlot.c_str(), sizeof(addonRecording.strPlot) - 1); strncpy(addonRecording.strChannelName, xbmcRecording.m_strChannelName.c_str(), sizeof(addonRecording.strChannelName) - 1); addonRecording.iDuration = xbmcRecording.GetDuration(); addonRecording.iPriority = xbmcRecording.m_iPriority; addonRecording.iLifetime = xbmcRecording.m_iLifetime; addonRecording.iPlayCount = xbmcRecording.m_playCount; addonRecording.iLastPlayedPosition = (int)xbmcRecording.m_resumePoint.timeInSeconds; addonRecording.bIsDeleted = xbmcRecording.IsDeleted(); strncpy(addonRecording.strDirectory, xbmcRecording.m_strDirectory.c_str(), sizeof(addonRecording.strDirectory) - 1); strncpy(addonRecording.strStreamURL, xbmcRecording.m_strStreamURL.c_str(), sizeof(addonRecording.strStreamURL) - 1); strncpy(addonRecording.strIconPath, xbmcRecording.m_strIconPath.c_str(), sizeof(addonRecording.strIconPath) - 1); strncpy(addonRecording.strThumbnailPath, xbmcRecording.m_strThumbnailPath.c_str(), sizeof(addonRecording.strThumbnailPath) - 1); strncpy(addonRecording.strFanartPath, xbmcRecording.m_strFanartPath.c_str(), sizeof(addonRecording.strFanartPath) - 1); }
void CPVRRecording::Update(const CPVRRecording &tag) { m_strRecordingId = tag.m_strRecordingId; m_iClientId = tag.m_iClientId; m_strTitle = tag.m_strTitle; m_strShowTitle = tag.m_strShowTitle; m_iSeason = tag.m_iSeason; m_iEpisode = tag.m_iEpisode; SetPremiered(tag.GetPremiered()); m_recordingTime = tag.m_recordingTime; m_iPriority = tag.m_iPriority; m_iLifetime = tag.m_iLifetime; m_strDirectory = tag.m_strDirectory; m_strPlot = tag.m_strPlot; m_strPlotOutline = tag.m_strPlotOutline; m_strStreamURL = tag.m_strStreamURL; m_strChannelName = tag.m_strChannelName; m_genre = tag.m_genre; m_strIconPath = tag.m_strIconPath; m_strThumbnailPath = tag.m_strThumbnailPath; m_strFanartPath = tag.m_strFanartPath; m_bIsDeleted = tag.m_bIsDeleted; m_iEpgEventId = tag.m_iEpgEventId; m_iChannelUid = tag.m_iChannelUid; m_bRadio = tag.m_bRadio; CVideoInfoTag::SetPlayCount(tag.GetLocalPlayCount()); CVideoInfoTag::SetResumePoint(tag.GetLocalResumePoint()); SetDuration(tag.GetDuration()); //Old Method of identifying TV show title and subtitle using m_strDirectory and strPlotOutline (deprecated) std::string strShow = StringUtils::Format("%s - ", g_localizeStrings.Get(20364).c_str()); if (StringUtils::StartsWithNoCase(m_strPlotOutline, strShow)) { CLog::Log(LOGDEBUG,"CPVRRecording::Update - PVR addon provides episode name in strPlotOutline which is deprecated"); std::string strEpisode = m_strPlotOutline; std::string strTitle = m_strDirectory; size_t pos = strTitle.rfind('/'); strTitle.erase(0, pos + 1); strEpisode.erase(0, strShow.size()); m_strTitle = strTitle; pos = strEpisode.find('-'); strEpisode.erase(0, pos + 2); m_strShowTitle = strEpisode; } if (m_bIsDeleted) OnDelete(); UpdatePath(); }
/*! * @brief Copy over recording info from xbmcRecording to addonRecording. * @param xbmcRecording The recording on XBMC's side. * @param addonRecording The recording on the addon's side. */ inline void PVRWriteClientRecordingInfo(const CPVRRecording &xbmcRecording, PVR_RECORDING &addonRecording) { time_t recTime; xbmcRecording.RecordingTimeAsUTC().GetAsTime(recTime); addonRecording.recordingTime = recTime - g_advancedSettings.m_iPVRTimeCorrection; addonRecording.strRecordingId = xbmcRecording.m_strRecordingId.c_str(); addonRecording.strTitle = xbmcRecording.m_strTitle.c_str(); addonRecording.strPlotOutline = xbmcRecording.m_strPlotOutline.c_str(); addonRecording.strPlot = xbmcRecording.m_strPlot.c_str(); addonRecording.strChannelName = xbmcRecording.m_strChannelName.c_str(); addonRecording.iDuration = xbmcRecording.GetDuration(); addonRecording.iPriority = xbmcRecording.m_iPriority; addonRecording.iLifetime = xbmcRecording.m_iLifetime; addonRecording.strDirectory = xbmcRecording.m_strDirectory.c_str(); addonRecording.strStreamURL = xbmcRecording.m_strStreamURL.c_str(); }
void CPVRGUIInfo::UpdatePlayingTag(void) { CSingleLock lock(m_critSection); CPVRChannel currentChannel; CPVRRecording recording; if (g_PVRManager.GetCurrentChannel(¤tChannel)) { if (!m_playingEpgTag || !m_playingEpgTag->IsActive() || (*m_playingEpgTag->ChannelTag() != currentChannel)) { m_playingEpgTag = currentChannel.GetEPGNow(); m_iDuration = m_playingEpgTag ? m_playingEpgTag->GetDuration() * 1000 : 0; g_PVRManager.UpdateCurrentFile(); } } else if (g_PVRClients->GetPlayingRecording(&recording)) { m_playingEpgTag = NULL; m_iDuration = recording.GetDuration() * 1000; } }
void CPVRRecordings::GetContents(const CStdString &strDirectory, CFileItemList *results) { for (unsigned int iRecordingPtr = 0; iRecordingPtr < m_recordings.size(); iRecordingPtr++) { CPVRRecording *current = m_recordings.at(iRecordingPtr); bool directMember = !HasAllRecordingsPathExtension(strDirectory); if (!IsDirectoryMember(RemoveAllRecordingsPathExtension(strDirectory), current->m_strDirectory, directMember)) continue; CFileItemPtr pFileItem(new CFileItem(*current)); pFileItem->SetLabel2(current->RecordingTimeAsLocalTime().GetAsLocalizedDateTime(true, false)); pFileItem->m_dateTime = current->RecordingTimeAsLocalTime(); pFileItem->SetPath(current->m_strFileNameAndPath); if (!current->m_strIconPath.IsEmpty()) pFileItem->SetIconImage(current->m_strIconPath); if (!current->m_strThumbnailPath.IsEmpty()) pFileItem->SetThumbnailImage(current->m_strThumbnailPath); if (!current->m_strFanartPath.IsEmpty()) pFileItem->SetProperty("Fanart_Image", current->m_strFanartPath); // Set the play count either directly from client (if supported) or from video db if (g_PVRClients->SupportsRecordingPlayCount(pFileItem->GetPVRRecordingInfoTag()->m_iClientId)) { pFileItem->GetPVRRecordingInfoTag()->m_playCount=pFileItem->GetPVRRecordingInfoTag()->m_iRecPlayCount; } else { CVideoDatabase db; if (db.Open()) pFileItem->GetPVRRecordingInfoTag()->m_playCount=db.GetPlayCount(*pFileItem); } pFileItem->SetOverlayImage(CGUIListItem::ICON_OVERLAY_UNWATCHED, pFileItem->GetPVRRecordingInfoTag()->m_playCount > 0); // Set the resumePoint either directly from client (if supported) or from video db int positionInSeconds = current->GetLastPlayedPosition(); if (positionInSeconds > 0) { // If the back-end does report a saved position then make sure there is a corresponding resume bookmark CBookmark bookmark; bookmark.timeInSeconds = positionInSeconds; bookmark.totalTimeInSeconds = (double)current->GetDuration(); pFileItem->GetPVRRecordingInfoTag()->m_resumePoint = bookmark; } else if (positionInSeconds < 0) { CVideoDatabase db; if (db.Open()) { CBookmark bookmark; if (db.GetResumeBookMark(current->m_strFileNameAndPath, bookmark)) pFileItem->GetPVRRecordingInfoTag()->m_resumePoint = bookmark; db.Close(); } } results->Add(pFileItem); } }