本文整理汇总了C++中CPVREpgInfoTagPtr::EndAsUTC方法的典型用法代码示例。如果您正苦于以下问题:C++ CPVREpgInfoTagPtr::EndAsUTC方法的具体用法?C++ CPVREpgInfoTagPtr::EndAsUTC怎么用?C++ CPVREpgInfoTagPtr::EndAsUTC使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CPVREpgInfoTagPtr
的用法示例。
在下文中一共展示了CPVREpgInfoTagPtr::EndAsUTC方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetTagNow
CPVREpgInfoTagPtr CPVREpg::GetTagNow(bool bUpdateIfNeeded /* = true */) const
{
CSingleLock lock(m_critSection);
if (m_nowActiveStart.IsValid())
{
std::map<CDateTime, CPVREpgInfoTagPtr>::const_iterator it = m_tags.find(m_nowActiveStart);
if (it != m_tags.end() && it->second->IsActive())
return it->second;
}
if (bUpdateIfNeeded)
{
CPVREpgInfoTagPtr lastActiveTag;
/* one of the first items will always match if the list is sorted */
for (std::map<CDateTime, CPVREpgInfoTagPtr>::const_iterator it = m_tags.begin(); it != m_tags.end(); ++it)
{
if (it->second->IsActive())
{
m_nowActiveStart = it->first;
return it->second;
}
else if (it->second->WasActive())
lastActiveTag = it->second;
}
/* there might be a gap between the last and next event. return the last if found and it ended not more than 5 minutes ago */
if (lastActiveTag &&
lastActiveTag->EndAsUTC() + CDateTimeSpan(0, 0, 5, 0) >= CDateTime::GetUTCDateTime())
return lastActiveTag;
}
return CPVREpgInfoTagPtr();
}
示例2: GetTimerForEpgTag
CPVRTimerInfoTagPtr CPVRTimers::GetTimerForEpgTag(const CPVREpgInfoTagPtr &epgTag) const
{
if (epgTag)
{
CSingleLock lock(m_critSection);
for (const auto &tagsEntry : m_tags)
{
for (const auto &timersEntry : tagsEntry.second)
{
if (timersEntry->IsTimerRule())
continue;
if (timersEntry->GetEpgInfoTag(false) == epgTag)
return timersEntry;
if (timersEntry->m_iClientChannelUid != PVR_CHANNEL_INVALID_UID &&
timersEntry->m_iClientChannelUid == epgTag->UniqueChannelID())
{
if (timersEntry->UniqueBroadcastID() != EPG_TAG_INVALID_UID &&
timersEntry->UniqueBroadcastID() == epgTag->UniqueBroadcastID())
return timersEntry;
if (timersEntry->m_bIsRadio == epgTag->IsRadio() &&
timersEntry->StartAsUTC() <= epgTag->StartAsUTC() &&
timersEntry->EndAsUTC() >= epgTag->EndAsUTC())
return timersEntry;
}
}
}
}
return CPVRTimerInfoTagPtr();
}
示例3: GetRecordingForEpgTag
CPVRRecordingPtr CPVRRecordings::GetRecordingForEpgTag(const CPVREpgInfoTagPtr &epgTag) const
{
CSingleLock lock(m_critSection);
for (const auto recording : m_recordings)
{
if (recording.second->IsDeleted())
continue;
unsigned int iEpgEvent = recording.second->BroadcastUid();
if (iEpgEvent != EPG_TAG_INVALID_UID)
{
if (iEpgEvent == epgTag->UniqueBroadcastID())
{
// uid matches. perfect.
return recording.second;
}
}
else
{
// uid is optional, so check other relevant data.
// note: don't use recording.second->Channel() for comparing channels here as this can lead
// to deadlocks. compare client ids and channel ids instead, this has the same effect.
if (epgTag->Channel() &&
recording.second->ClientID() == epgTag->Channel()->ClientID() &&
recording.second->ChannelUid() == epgTag->Channel()->UniqueID() &&
recording.second->RecordingTimeAsUTC() <= epgTag->StartAsUTC() &&
recording.second->EndTimeAsUTC() >= epgTag->EndAsUTC())
return recording.second;
}
}
return CPVRRecordingPtr();
}
示例4: GetRecordingForEpgTag
CPVRRecordingPtr CPVRRecordings::GetRecordingForEpgTag(const CPVREpgInfoTagPtr &epgTag) const
{
if (!epgTag)
return {};
CSingleLock lock(m_critSection);
for (const auto recording : m_recordings)
{
if (recording.second->IsDeleted())
continue;
if (recording.second->ClientID() != epgTag->ClientID())
continue;
if (recording.second->ChannelUid() != epgTag->UniqueChannelID())
continue;
unsigned int iEpgEvent = recording.second->BroadcastUid();
if (iEpgEvent != EPG_TAG_INVALID_UID)
{
if (iEpgEvent == epgTag->UniqueBroadcastID())
return recording.second;
}
else
{
if (recording.second->RecordingTimeAsUTC() <= epgTag->StartAsUTC() &&
recording.second->EndTimeAsUTC() >= epgTag->EndAsUTC())
return recording.second;
}
}
return CPVRRecordingPtr();
}
示例5: FindChannelAndBlockIndex
void CGUIEPGGridContainerModel::FindChannelAndBlockIndex(int channelUid, unsigned int broadcastUid, int eventOffset, int &newChannelIndex, int &newBlockIndex) const
{
const CDateTimeSpan blockDuration(0, 0, MINSPERBLOCK, 0);
newChannelIndex = INVALID_INDEX;
newBlockIndex = INVALID_INDEX;
// find the channel
int iCurrentChannel = 0;
for (const auto& channel : m_channelItems)
{
if (channel->GetPVRChannelInfoTag()->UniqueID() == channelUid)
{
newChannelIndex = iCurrentChannel;
break;
}
iCurrentChannel++;
}
if (newChannelIndex != INVALID_INDEX)
{
// find the block
CDateTime gridCursor(m_gridStart); //reset cursor for new channel
unsigned long progIdx = m_epgItemsPtr[newChannelIndex].start;
unsigned long lastIdx = m_epgItemsPtr[newChannelIndex].stop;
int iEpgId = m_programmeItems[progIdx]->GetEPGInfoTag()->EpgID();
CPVREpgInfoTagPtr tag;
for (int block = 0; block < m_blocks; ++block)
{
while (progIdx <= lastIdx)
{
tag = m_programmeItems[progIdx]->GetEPGInfoTag();
if (tag->EpgID() != iEpgId || gridCursor < tag->StartAsUTC() || m_gridEnd <= tag->StartAsUTC())
break; // next block
if (gridCursor < tag->EndAsUTC())
{
if (broadcastUid > 0 && tag->UniqueBroadcastID() == broadcastUid)
{
newBlockIndex = block + eventOffset;
return; // done.
}
break; // next block
}
progIdx++;
}
gridCursor += blockDuration;
}
}
}
示例6: GetLastEventBlock
int CGUIEPGGridContainerModel::GetLastEventBlock(const CPVREpgInfoTagPtr &event) const
{
// Last block of a tag is always the block calculated using event's end time, not rounded up.
// Refer to CGUIEPGGridContainerModel::Refresh, where the model is created, for details!
return GetBlock(event->EndAsUTC());
}
示例7: Initialize
//.........这里部分代码省略.........
m_blocks = MAXBLOCKS;
else if (m_blocks < iBlocksPerPage)
m_blocks = iBlocksPerPage;
m_gridIndex.reserve(m_channelItems.size());
const std::vector<GridItem> blocks(m_blocks);
for (size_t channel = 0; channel < m_channelItems.size(); ++channel)
{
m_gridIndex.emplace_back(blocks);
CDateTime gridCursor(m_gridStart); //reset cursor for new channel
unsigned long progIdx = m_epgItemsPtr[channel].start;
unsigned long lastIdx = m_epgItemsPtr[channel].stop;
int iEpgId = m_programmeItems[progIdx]->GetEPGInfoTag()->EpgID();
int itemSize = 1; // size of the programme in blocks
int savedBlock = 0;
CFileItemPtr item;
CPVREpgInfoTagPtr tag;
for (int block = 0; block < m_blocks; ++block)
{
while (progIdx <= lastIdx)
{
item = m_programmeItems[progIdx];
tag = item->GetEPGInfoTag();
// Note: Start block of an event is start-time-based calculated block + 1,
// unless start times matches exactly the begin of a block.
if (tag->EpgID() != iEpgId || gridCursor < tag->StartAsUTC() || m_gridEnd <= tag->StartAsUTC())
break;
if (gridCursor < tag->EndAsUTC())
{
m_gridIndex[channel][block].item = item;
m_gridIndex[channel][block].progIndex = progIdx;
break;
}
progIdx++;
}
gridCursor += blockDuration;
if (block == 0)
continue;
const CFileItemPtr prevItem(m_gridIndex[channel][block - 1].item);
const CFileItemPtr currItem(m_gridIndex[channel][block].item);
if (block == m_blocks - 1 || prevItem != currItem)
{
// special handling for last block.
int blockDelta = -1;
int sizeDelta = 0;
if (block == m_blocks - 1 && prevItem == currItem)
{
itemSize++;
blockDelta = 0;
sizeDelta = 1;
}
if (prevItem)
{
m_gridIndex[channel][savedBlock].item->SetProperty("GenreType", prevItem->GetEPGInfoTag()->GenreType());
示例8: OnMessage
bool CGUIWindowPVRGuideBase::OnMessage(CGUIMessage& message)
{
bool bReturn = false;
switch (message.GetMessage())
{
case GUI_MSG_CLICKED:
{
if (message.GetSenderId() == m_viewControl.GetCurrentControl())
{
int iItem = m_viewControl.GetSelectedItem();
if (iItem >= 0 && iItem < m_vecItems->Size())
{
CFileItemPtr pItem = m_vecItems->Get(iItem);
/* process actions */
switch (message.GetParam1())
{
case ACTION_SELECT_ITEM:
case ACTION_MOUSE_LEFT_CLICK:
switch(CServiceBroker::GetSettings().GetInt(CSettings::SETTING_EPG_SELECTACTION))
{
case EPG_SELECT_ACTION_CONTEXT_MENU:
OnPopupMenu(iItem);
bReturn = true;
break;
case EPG_SELECT_ACTION_SWITCH:
CServiceBroker::GetPVRManager().GUIActions()->SwitchToChannel(pItem, true);
bReturn = true;
break;
case EPG_SELECT_ACTION_PLAY_RECORDING:
CServiceBroker::GetPVRManager().GUIActions()->PlayRecording(pItem, true);
bReturn = true;
break;
case EPG_SELECT_ACTION_INFO:
CServiceBroker::GetPVRManager().GUIActions()->ShowEPGInfo(pItem);
bReturn = true;
break;
case EPG_SELECT_ACTION_RECORD:
CServiceBroker::GetPVRManager().GUIActions()->ToggleTimer(pItem);
bReturn = true;
break;
case EPG_SELECT_ACTION_SMART_SELECT:
{
const CPVREpgInfoTagPtr tag(pItem->GetEPGInfoTag());
if (tag)
{
const CDateTime start(tag->StartAsUTC());
const CDateTime end(tag->EndAsUTC());
const CDateTime now(CDateTime::GetUTCDateTime());
if (start <= now && now <= end)
{
// current event
CServiceBroker::GetPVRManager().GUIActions()->SwitchToChannel(pItem, true);
}
else if (now < start)
{
// future event
if (tag->HasTimer())
CServiceBroker::GetPVRManager().GUIActions()->EditTimer(pItem);
else
CServiceBroker::GetPVRManager().GUIActions()->AddTimer(pItem, false);
}
else
{
// past event
if (tag->HasRecording())
CServiceBroker::GetPVRManager().GUIActions()->PlayRecording(pItem, true);
else if (tag->IsPlayable())
CServiceBroker::GetPVRManager().GUIActions()->PlayEpgTag(pItem);
else
CServiceBroker::GetPVRManager().GUIActions()->ShowEPGInfo(pItem);
}
bReturn = true;
}
break;
}
}
break;
case ACTION_SHOW_INFO:
CServiceBroker::GetPVRManager().GUIActions()->ShowEPGInfo(pItem);
bReturn = true;
break;
case ACTION_PLAY:
CServiceBroker::GetPVRManager().GUIActions()->PlayRecording(pItem, true);
bReturn = true;
break;
case ACTION_RECORD:
CServiceBroker::GetPVRManager().GUIActions()->ToggleTimer(pItem);
bReturn = true;
break;
case ACTION_PVR_SHOW_TIMER_RULE:
CServiceBroker::GetPVRManager().GUIActions()->AddTimerRule(pItem, true);
bReturn = true;
break;
case ACTION_CONTEXT_MENU:
case ACTION_MOUSE_RIGHT_CLICK:
OnPopupMenu(iItem);
bReturn = true;
break;
}
//.........这里部分代码省略.........