本文整理汇总了C++中CPVRRecordingPtr类的典型用法代码示例。如果您正苦于以下问题:C++ CPVRRecordingPtr类的具体用法?C++ CPVRRecordingPtr怎么用?C++ CPVRRecordingPtr使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CPVRRecordingPtr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: recording
std::string CPVRGUIActions::GetResumeLabel(const CFileItem &item) const
{
std::string resumeString;
const CPVRRecordingPtr recording(CPVRItem(CFileItemPtr(new CFileItem(item))).GetRecording());
if (recording && !recording->IsDeleted())
{
// First try to find the resume position on the back-end, if that fails use video database
int positionInSeconds = recording->GetLastPlayedPosition();
// If the back-end does report a saved position it will be picked up by FileItem
if (positionInSeconds < 0)
{
CVideoDatabase db;
if (db.Open())
{
CBookmark bookmark;
std::string itemPath(recording->m_strFileNameAndPath);
if (db.GetResumeBookMark(itemPath, bookmark) )
positionInSeconds = lrint(bookmark.timeInSeconds);
db.Close();
}
}
// Suppress resume from 0
if (positionInSeconds > 0)
resumeString = StringUtils::Format(g_localizeStrings.Get(12022).c_str(),
StringUtils::SecondsToTimeString(positionInSeconds, TIME_FORMAT_HH_MM_SS).c_str());
}
return resumeString;
}
示例2: OpenStream
bool CPVRClients::OpenStream(const CPVRRecordingPtr &channel)
{
assert(channel.get());
bool bReturn(false);
CloseStream();
/* try to open the recording stream on the client */
PVR_CLIENT client;
if (GetConnectedClient(channel->m_iClientId, client) &&
client->OpenStream(channel))
{
CSingleLock lock(m_critSection);
CDateTime endTime = channel->RecordingTimeAsLocalTime() +
CDateTimeSpan(0, 0, channel->GetDuration() / 60, channel->GetDuration() % 60);
m_bIsRecordingInProgress = (endTime > CDateTime::GetCurrentDateTime());
if (m_bIsRecordingInProgress)
CLog::Log(LOGNOTICE, "PVRClients - %s - recording is still in progress, end time = %s", __FUNCTION__, endTime.GetAsDBDateTime().c_str());
m_playingClientId = channel->m_iClientId;
m_bIsPlayingRecording = true;
m_strPlayingClientName = client->GetFriendlyName();
bReturn = true;
}
return bReturn;
}
示例3: url
CFileItemPtr CPVRRecordings::GetByPath(const std::string &path)
{
CURL url(path);
std::string fileName = url.GetFileName();
URIUtils::RemoveSlashAtEnd(fileName);
CSingleLock lock(m_critSection);
if (StringUtils::StartsWith(fileName, PVR_RECORDING_BASE_PATH "/"))
{
// Check directory name is for deleted recordings
fileName.erase(0, sizeof(PVR_RECORDING_BASE_PATH));
bool bDeleted = StringUtils::StartsWith(fileName, PVR_RECORDING_DELETED_PATH "/");
for (PVR_RECORDINGMAP_CITR it = m_recordings.begin(); it != m_recordings.end(); it++)
{
CPVRRecordingPtr current = it->second;
if (!URIUtils::PathEquals(path, current->m_strFileNameAndPath) || bDeleted != current->IsDeleted())
continue;
CFileItemPtr fileItem(new CFileItem(current));
return fileItem;
}
}
CFileItemPtr fileItem(new CFileItem);
return fileItem;
}
示例4: lock
CFileItemPtr CPVRRecordings::GetByPath(const std::string &path)
{
CSingleLock lock(m_critSection);
CPVRRecordingsPath recPath(path);
if (recPath.IsValid())
{
bool bDeleted = recPath.IsDeleted();
bool bRadio = recPath.IsRadio();
for (const auto recording : m_recordings)
{
CPVRRecordingPtr current = recording.second;
// Omit recordings not matching criteria
if (!URIUtils::PathEquals(path, current->m_strFileNameAndPath) ||
bDeleted != current->IsDeleted() || bRadio != current->IsRadio())
continue;
CFileItemPtr fileItem(new CFileItem(current));
return fileItem;
}
}
CFileItemPtr fileItem(new CFileItem);
return fileItem;
}
示例5: SetRecordingsPlayCount
bool CPVRRecordings::SetRecordingsPlayCount(const CFileItemPtr &item, int count)
{
bool bResult = false;
if (m_database.IsOpen())
{
bResult = true;
CLog::Log(LOGDEBUG, "CPVRRecordings - %s - item path %s", __FUNCTION__, item->GetPath().c_str());
CFileItemList items;
if (item->m_bIsFolder)
{
XFILE::CDirectory::GetDirectory(item->GetPath(), items);
}
else
items.Add(item);
CLog::Log(LOGDEBUG, "CPVRRecordings - %s - will set watched for %d items", __FUNCTION__, items.Size());
for (int i=0;i<items.Size();++i)
{
CLog::Log(LOGDEBUG, "CPVRRecordings - %s - setting watched for item %d", __FUNCTION__, i);
CFileItemPtr pItem=items[i];
if (pItem->m_bIsFolder)
{
CLog::Log(LOGDEBUG, "CPVRRecordings - %s - path %s is a folder, will call recursively", __FUNCTION__, pItem->GetPath().c_str());
if (pItem->GetLabel() != "..")
{
SetRecordingsPlayCount(pItem, count);
}
continue;
}
if (!pItem->HasPVRRecordingInfoTag())
continue;
const CPVRRecordingPtr recording = pItem->GetPVRRecordingInfoTag();
if (recording)
{
recording->SetPlayCount(count);
// Clear resume bookmark
if (count > 0)
{
m_database.ClearBookMarksOfFile(pItem->GetPath(), CBookmark::RESUME);
recording->SetLastPlayedPosition(0);
}
m_database.SetPlayCount(*pItem, count);
}
}
}
return bResult;
}
示例6: lock
bool CPVRRecordings::GetDirectory(const std::string& strPath, CFileItemList &items)
{
CSingleLock lock(m_critSection);
CPVRRecordingsPath recPath(strPath);
if (recPath.IsValid())
{
// Get the directory structure if in non-flatten mode
// Deleted view is always flatten. So only for an active view
std::string strDirectory(recPath.GetDirectoryPath());
if (!recPath.IsDeleted() && m_bGroupItems)
GetSubDirectories(recPath, &items);
// get all files of the currrent directory or recursively all files starting at the current directory if in flatten mode
for (PVR_RECORDINGMAP_CITR it = m_recordings.begin(); it != m_recordings.end(); it++)
{
CPVRRecordingPtr current = it->second;
// skip items that are not members of the target directory
if (!IsDirectoryMember(strDirectory, current->m_strDirectory) || current->IsDeleted() != recPath.IsDeleted())
continue;
if (m_database.IsOpen())
current->UpdateMetadata(m_database);
CFileItemPtr pFileItem(new CFileItem(current));
pFileItem->SetLabel2(current->RecordingTimeAsLocalTime().GetAsLocalizedDateTime(true, false));
pFileItem->m_dateTime = current->RecordingTimeAsLocalTime();
pFileItem->SetPath(current->m_strFileNameAndPath);
// Set art
if (!current->m_strIconPath.empty())
{
pFileItem->SetIconImage(current->m_strIconPath);
pFileItem->SetArt("icon", current->m_strIconPath);
}
if (!current->m_strThumbnailPath.empty())
pFileItem->SetArt("thumb", current->m_strThumbnailPath);
if (!current->m_strFanartPath.empty())
pFileItem->SetArt("fanart", current->m_strFanartPath);
// Use the channel icon as a fallback when a thumbnail is not available
pFileItem->SetArtFallback("thumb", "icon");
pFileItem->SetOverlayImage(CGUIListItem::ICON_OVERLAY_UNWATCHED, pFileItem->GetPVRRecordingInfoTag()->m_playCount > 0);
items.Add(pFileItem);
}
return true;
}
return false;
}
示例7: Undelete
bool CPVRRecordings::Undelete(const CFileItem &item)
{
if (!item.IsDeletedPVRRecording())
{
CLog::Log(LOGERROR, "CPVRRecordings - %s - cannot undelete file: no valid recording tag", __FUNCTION__);
return false;
}
CPVRRecordingPtr tag = item.GetPVRRecordingInfoTag();
return tag->Undelete();
}
示例8: RenameRecording
bool CPVRRecordings::RenameRecording(CFileItem &item, std::string &strNewName)
{
if (!item.IsUsablePVRRecording())
{
CLog::Log(LOGERROR, "CPVRRecordings - %s - cannot rename file: no valid recording tag", __FUNCTION__);
return false;
}
CPVRRecordingPtr tag = item.GetPVRRecordingInfoTag();
return tag->Rename(strNewName);
}
示例9: GetSubDirectories
void CPVRRecordings::GetSubDirectories(const CPVRRecordingsPath &recParentPath, CFileItemList *results)
{
// Only active recordings are fetched to provide sub directories.
// Not applicable for deleted view which is supposed to be flattened.
std::set<CFileItemPtr> unwatchedFolders;
bool bRadio = recParentPath.IsRadio();
for (const auto recording : m_recordings)
{
CPVRRecordingPtr current = recording.second;
if (current->IsDeleted())
continue;
if (current->IsRadio() != bRadio)
continue;
const std::string strCurrent(recParentPath.GetUnescapedSubDirectoryPath(current->m_strDirectory));
if (strCurrent.empty())
continue;
CPVRRecordingsPath recChildPath(recParentPath);
recChildPath.AppendSegment(strCurrent);
std::string strFilePath(recChildPath);
CFileItemPtr pFileItem;
if (m_database.IsOpen())
current->UpdateMetadata(m_database);
if (!results->Contains(strFilePath))
{
pFileItem.reset(new CFileItem(strCurrent, true));
pFileItem->SetPath(strFilePath);
pFileItem->SetLabel(strCurrent);
pFileItem->SetLabelPreformatted(true);
pFileItem->m_dateTime = current->RecordingTimeAsLocalTime();
// Assume all folders are watched, we'll change the overlay later
pFileItem->SetOverlayImage(CGUIListItem::ICON_OVERLAY_WATCHED, false);
results->Add(pFileItem);
}
else
{
pFileItem = results->Get(strFilePath);
if (pFileItem->m_dateTime<current->RecordingTimeAsLocalTime())
pFileItem->m_dateTime = current->RecordingTimeAsLocalTime();
}
if (current->GetPlayCount() == 0)
unwatchedFolders.insert(pFileItem);
}
// Change the watched overlay to unwatched for folders containing unwatched entries
for (auto item : unwatchedFolders)
item->SetOverlayImage(CGUIListItem::ICON_OVERLAY_UNWATCHED, false);
}
示例10: lock
void CPVRRecordings::UpdateFromClient(const CPVRRecordingPtr &tag)
{
CSingleLock lock(m_critSection);
if (tag->IsDeleted())
{
if (tag->IsRadio())
m_bDeletedRadioRecordings = true;
else
m_bDeletedTVRecordings = true;
}
CPVRRecordingPtr newTag = GetById(tag->m_iClientId, tag->m_strRecordingId);
if (newTag)
{
newTag->Update(*tag);
}
else
{
newTag = CPVRRecordingPtr(new CPVRRecording);
newTag->Update(*tag);
newTag->m_iRecordingId = ++m_iLastId;
m_recordings.insert(std::make_pair(CPVRRecordingUid(newTag->m_iClientId, newTag->m_strRecordingId), newTag));
if (newTag->IsRadio())
++m_iRadioRecordings;
else
++m_iTVRecordings;
}
}
示例11: lock
void CPVRRecordings::UpdateFromClient(const CPVRRecordingPtr &tag)
{
CSingleLock lock(m_critSection);
if (tag->IsDeleted())
m_bHasDeleted = true;
CPVRRecordingPtr newTag = GetById(tag->m_iClientId, tag->m_strRecordingId);
if (newTag)
{
newTag->Update(*tag);
}
else
{
newTag = CPVRRecordingPtr(new CPVRRecording);
newTag->Update(*tag);
if (newTag->EpgEvent() > 0)
{
EPG::CEpgInfoTagPtr epgTag = EPG::CEpgContainer::GetInstance().GetTagById(newTag->EpgEvent());
if (epgTag)
epgTag->SetRecording(newTag);
}
newTag->m_iRecordingId = ++m_iLastId;
m_recordings.insert(std::make_pair(CPVRRecordingUid(newTag->m_iClientId, newTag->m_strRecordingId), newTag));
}
}
示例12: TrimSlashes
void CPVRRecordings::GetSubDirectories(const std::string &strBase, CFileItemList *results)
{
// Only active recordings are fetched to provide sub directories.
// Not applicable for deleted view which is supposed to be flattened.
std::string strUseBase = TrimSlashes(strBase);
std::set<CFileItemPtr> unwatchedFolders;
for (PVR_RECORDINGMAP_CITR it = m_recordings.begin(); it != m_recordings.end(); it++)
{
CPVRRecordingPtr current = it->second;
if (current->IsDeleted())
continue;
const std::string strCurrent = GetDirectoryFromPath(current->m_strDirectory, strUseBase);
if (strCurrent.empty())
continue;
std::string strFilePath;
if(strUseBase.empty())
strFilePath = StringUtils::Format("pvr://" PVR_RECORDING_BASE_PATH "/" PVR_RECORDING_ACTIVE_PATH "/%s/", strCurrent.c_str());
else
strFilePath = StringUtils::Format("pvr://" PVR_RECORDING_BASE_PATH "/" PVR_RECORDING_ACTIVE_PATH "/%s/%s/", strUseBase.c_str(), strCurrent.c_str());
CFileItemPtr pFileItem;
if (m_database.IsOpen())
current->UpdateMetadata(m_database);
if (!results->Contains(strFilePath))
{
pFileItem.reset(new CFileItem(strCurrent, true));
pFileItem->SetPath(strFilePath);
pFileItem->SetLabel(strCurrent);
pFileItem->SetLabelPreformated(true);
pFileItem->m_dateTime = current->RecordingTimeAsLocalTime();
// Assume all folders are watched, we'll change the overlay later
pFileItem->SetOverlayImage(CGUIListItem::ICON_OVERLAY_WATCHED, false);
results->Add(pFileItem);
}
else
{
pFileItem=results->Get(strFilePath);
if (pFileItem->m_dateTime<current->RecordingTimeAsLocalTime())
pFileItem->m_dateTime = current->RecordingTimeAsLocalTime();
}
if (current->m_playCount == 0)
unwatchedFolders.insert(pFileItem);
}
// Remove the watched overlay from folders containing unwatched entries
for (std::set<CFileItemPtr>::iterator it = unwatchedFolders.begin(); it != unwatchedFolders.end(); ++it)
(*it)->SetOverlayImage(CGUIListItem::ICON_OVERLAY_WATCHED, true);
}
示例13: lock
void CPVRRecordings::UpdateFromClient(const CPVRRecordingPtr &tag)
{
CSingleLock lock(m_critSection);
if (tag->IsDeleted())
{
if (tag->IsRadio())
m_bDeletedRadioRecordings = true;
else
m_bDeletedTVRecordings = true;
}
CPVRRecordingPtr newTag = GetById(tag->m_iClientId, tag->m_strRecordingId);
if (newTag)
{
newTag->Update(*tag);
}
else
{
newTag = CPVRRecordingPtr(new CPVRRecording);
newTag->Update(*tag);
if (newTag->BroadcastUid() != EPG_TAG_INVALID_UID)
{
const CPVRChannelPtr channel(newTag->Channel());
if (channel)
{
const CPVREpgInfoTagPtr epgTag = CServiceBroker::GetPVRManager().EpgContainer().GetTagById(channel, newTag->BroadcastUid());
if (epgTag)
epgTag->SetRecording(newTag);
}
}
newTag->m_iRecordingId = ++m_iLastId;
m_recordings.insert(std::make_pair(CPVRRecordingUid(newTag->m_iClientId, newTag->m_strRecordingId), newTag));
if (newTag->IsRadio())
++m_iRadioRecordings;
else
++m_iTVRecordings;
}
}
示例14: OpenStream
bool CPVRClients::OpenStream(const CPVRRecordingPtr &channel)
{
assert(channel.get());
bool bReturn(false);
CloseStream();
/* try to open the recording stream on the client */
PVR_CLIENT client;
if (GetConnectedClient(channel->m_iClientId, client) &&
client->OpenStream(channel))
{
CSingleLock lock(m_critSection);
m_playingClientId = channel->m_iClientId;
m_bIsPlayingRecording = true;
m_strPlayingClientName = client->GetFriendlyName();
bReturn = true;
}
return bReturn;
}
示例15: switch
//.........这里部分代码省略.........
const CPVRTimerInfoTagPtr timer = CPVRItem(item).GetTimerInfoTag();
if (timer)
bValue = timer->IsActive();
break;
}
break;
case LISTITEM_TIMERHASCONFLICT:
if (item->IsPVRChannel() || item->IsEPG())
{
const CPVRTimerInfoTagPtr timer = CPVRItem(item).GetTimerInfoTag();
if (timer)
bValue = timer->HasConflict();
return true;
}
break;
case LISTITEM_TIMERHASERROR:
if (item->IsPVRChannel() || item->IsEPG())
{
const CPVRTimerInfoTagPtr timer = CPVRItem(item).GetTimerInfoTag();
if (timer)
bValue = (timer->IsBroken() && !timer->HasConflict());
return true;
}
break;
case LISTITEM_HASRECORDING:
if (item->IsPVRChannel() || item->IsEPG())
{
const CPVREpgInfoTagPtr epgTag = CPVRItem(item).GetEpgInfoTag();
if (epgTag)
bValue = epgTag->HasRecording();
return true;
}
break;
case LISTITEM_HAS_EPG:
if (item->IsPVRChannel() || item->IsEPG() || item->IsPVRTimer())
{
const CPVREpgInfoTagPtr epgTag = CPVRItem(item).GetEpgInfoTag();
bValue = (epgTag != nullptr);
return true;
}
break;
case LISTITEM_ISENCRYPTED:
if (item->IsPVRChannel() || item->IsEPG())
{
const CPVRChannelPtr channel = CPVRItem(item).GetChannel();
if (channel)
bValue = channel->IsEncrypted();
return true;
}
break;
case MUSICPLAYER_CONTENT:
case VIDEOPLAYER_CONTENT:
if (item->IsPVRChannel())
{
bValue = StringUtils::EqualsNoCase(info.GetData3(), "livetv");
return bValue; // if no match for this provider, other providers shall be asked.
}
break;
case VIDEOPLAYER_HAS_INFO:
if (item->IsPVRChannel())
{
bValue = !item->GetPVRChannelInfoTag()->IsEmpty();
return true;
}
break;
case VIDEOPLAYER_HAS_EPG:
if (item->IsPVRChannel())
{
bValue = (item->GetPVRChannelInfoTag()->GetEPGNow() != nullptr);
return true;
}
break;
case VIDEOPLAYER_CAN_RESUME_LIVE_TV:
if (item->IsPVRRecording())
{
const CPVRRecordingPtr recording = item->GetPVRRecordingInfoTag();
const CPVREpgInfoTagPtr epgTag = CServiceBroker::GetPVRManager().EpgContainer().GetTagById(recording->Channel(), recording->BroadcastUid());
bValue = (epgTag && epgTag->IsActive() && epgTag->Channel());
return true;
}
break;
case PLAYER_IS_CHANNEL_PREVIEW_ACTIVE:
if (item->IsPVRChannel())
{
if (CServiceBroker::GetPVRManager().GUIActions()->GetChannelNavigator().IsPreviewAndShowInfo())
{
bValue = true;
}
else
{
bValue = !m_videoInfo.valid;
if (bValue && item->GetPVRChannelInfoTag()->IsRadio())
bValue = !m_audioInfo.valid;
}
return true;
}
break;
}
return false;
}