Пример #1
0
bool CPVRTimerInfoTag::UpdateEntry(const CPVRTimerInfoTag &tag)
{
  if (m_EpgInfo)
  {
    m_EpgInfo->SetTimer(NULL);
    m_EpgInfo = NULL;
  }

  m_iClientID         = tag.m_iClientID;
  m_iClientIndex      = tag.m_iClientIndex;
  m_bIsActive         = tag.m_bIsActive;
  m_strTitle          = tag.m_strTitle;
  m_strDir            = tag.m_strDir;
  m_iClientNumber     = tag.m_iClientNumber;
  m_iClientChannelUid = tag.m_iClientChannelUid;
  m_StartTime         = tag.m_StartTime;
  m_StopTime          = tag.m_StopTime;
  m_FirstDay          = tag.m_FirstDay;
  m_iPriority         = tag.m_iPriority;
  m_iLifetime         = tag.m_iLifetime;
  m_bIsRecording      = tag.m_bIsRecording;
  m_bIsRepeating      = tag.m_bIsRepeating;
  m_iWeekdays         = tag.m_iWeekdays;
  m_iChannelNumber    = tag.m_iChannelNumber;
  m_bIsRadio          = tag.m_bIsRadio;

  /* try to find an epg event */
  UpdateEpgEvent();

  return true;
}
Пример #2
0
void CAddonCallbacksPVR::PVREpgEventStateChange(void* addonData, EPG_TAG* tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState)
{
  CPVRClient *client = GetPVRClient(addonData);
  if (!client || !tag)
  {
    CLog::Log(LOGERROR, "PVR - %s - invalid handler data", __FUNCTION__);
    return;
  }

  CLog::Log(LOGDEBUG, "PVR - %s - state for epg event '%d' on channel '%d' on client '%s' changed to '%d'.",
            __FUNCTION__, tag->iUniqueBroadcastId, iUniqueChannelId, client->Name().c_str(), newState);

  static CCriticalSection queueMutex;
  static std::vector<EpgEventStateChange> queuedChanges;

  // during Kodi startup, addons may push updates very early, even before EPGs are ready to use.
  if (g_PVRManager.EpgsCreated())
  {
    {
      // deliver queued changes, if any. discard event if delivery fails.
      CSingleLock lock(queueMutex);
      if (!queuedChanges.empty())
        CLog::Log(LOGNOTICE, "PVR - %s - processing %ld queued epg event changes.", __FUNCTION__, queuedChanges.size());

      while (!queuedChanges.empty())
      {
        auto it = queuedChanges.begin();
        UpdateEpgEvent(*it, true);
        queuedChanges.erase(it);
      }
    }

    // deliver current change.
    UpdateEpgEvent(EpgEventStateChange(client->GetID(), iUniqueChannelId, tag, newState), false);
  }
  else
  {
    // queue for later delivery.
    CSingleLock lock(queueMutex);
    queuedChanges.push_back(EpgEventStateChange(client->GetID(), iUniqueChannelId, tag, newState));
  }
}
Пример #3
0
bool CPVRTimerInfoTag::UpdateOnClient()
{
  UpdateEpgEvent();
  PVR_ERROR error;
  if (!CPVRManager::GetClients()->UpdateTimer(*this, &error))
  {
    DisplayError(error);
    return false;
  }
  else
  {
    if (m_StartTime < CDateTime::GetCurrentDateTime() && m_StopTime > CDateTime::GetCurrentDateTime())
      CPVRManager::Get()->TriggerRecordingsUpdate();
    return true;
  }
}