Пример #1
0
bool CPVRTimerInfoTag::DeleteFromClient(bool force) const
{
    try
    {
        CLIENTMAP *clients = CPVRManager::Get()->Clients();

        /* and write it to the backend */
        PVR_ERROR err = clients->find(m_iClientID)->second->DeleteTimer(*this, force);

        if (err == PVR_ERROR_RECORDING_RUNNING)
        {
            if (CGUIDialogYesNo::ShowAndGetInput(122,0,19122,0))
                err = clients->find(m_iClientID)->second->DeleteTimer(*this, true);
        }

        if (err != PVR_ERROR_NO_ERROR)
            throw err;

        return true;
    }
    catch (PVR_ERROR err)
    {
        DisplayError(err);
    }
    return false;
}
Пример #2
0
int CPVRClients::GetChannelGroupMembers(CPVRChannelGroup *group, PVR_ERROR *error)
{
  *error = PVR_ERROR_NO_ERROR;
  int iCurSize = group->Size();
  CLIENTMAP clients;
  GetConnectedClients(&clients);

  /* get the member list from each client */
  boost::shared_ptr<CPVRClient> client;
  CLIENTMAPITR itrClients = clients.begin();
  while (itrClients != clients.end())
  {
    client = (*itrClients).second;
    if (client->GetAddonCapabilities().bSupportsChannelGroups)
    {
      PVR_ERROR currentError;
      if ((currentError = client->GetChannelGroupMembers(group)) != PVR_ERROR_NO_ERROR)
        *error = currentError;
    }

    itrClients++;
  }

  return group->Size() - iCurSize;
}
Пример #3
0
int CPVRClients::GetChannelGroupMembers(CPVRChannelGroup *group, PVR_ERROR *error)
{
  *error = PVR_ERROR_NO_ERROR;
  int iCurSize = group->GetNumChannels();
  CLIENTMAP clients;
  GetActiveClients(&clients);

  /* get the member list from each client */
  CLIENTMAPITR itrClients = clients.begin();
  while (itrClients != clients.end())
  {
    if (HasChannelGroupSupport((*itrClients).first))
    {
      PVR_ERROR currentError;
      currentError = (*itrClients).second->GetChannelGroupMembers(group);

      if (currentError != PVR_ERROR_NO_ERROR)
        *error = currentError;
    }

    itrClients++;
  }

  return group->GetNumChannels() - iCurSize;
}
Пример #4
0
int CPVRClients::GetChannels(CPVRChannelGroupInternal *group, PVR_ERROR *error)
{
  *error = PVR_ERROR_NO_ERROR;
  int iCurSize = group->GetNumChannels();
  CLIENTMAP clients;
  GetActiveClients(&clients);

  /* get the channel list from each client */
  CLIENTMAPITR itrClients = clients.begin();
  while (itrClients != clients.end())
  {
    if ((*itrClients).second->ReadyToUse())
    {
      PVR_ERROR currentError;
      currentError = (*itrClients).second->GetChannels(*group, group->IsRadio());

      if (currentError != PVR_ERROR_NO_ERROR)
        *error = currentError;
    }

    itrClients++;
  }

  return group->GetNumChannels() - iCurSize;
}
Пример #5
0
int CPVRClients::GetRecordings(CPVRRecordings *recordings)
{
  int iCurSize = recordings->size();
  CLIENTMAP clients;
  GetActiveClients(&clients);

  CLIENTMAPITR itrClients = clients.begin();
  while (itrClients != clients.end())
  {
    if (HasRecordingsSupport((*itrClients).first))
      (*itrClients).second->GetRecordings(recordings);

    itrClients++;
  }

  return recordings->size() - iCurSize;
}
Пример #6
0
int CPVRClients::GetTimers(CPVRTimers *timers)
{
  int iCurSize = timers->size();
  CLIENTMAP clients;
  GetActiveClients(&clients);

  /* get the timer list from each client */
  CLIENTMAPITR itrClients = clients.begin();
  while (itrClients != clients.end())
  {
    if (HasTimerSupport((*itrClients).first))
      (*itrClients).second->GetTimers(timers);

    ++itrClients;
  }

  return timers->size() - iCurSize;
}
Пример #7
0
int CPVRClients::GetChannelGroups(CPVRChannelGroups *groups, PVR_ERROR *error)
{
  *error = PVR_ERROR_UNKNOWN;
  int iCurSize = groups->size();
  CLIENTMAP clients;
  GetActiveClients(&clients);

  /* get the channel groups list from each client */
  CLIENTMAPITR itrClients = clients.begin();
  while (itrClients != clients.end())
  {
    if (HasChannelGroupSupport((*itrClients).first))
      (*itrClients).second->GetChannelGroups(groups);

    itrClients++;
  }

  return groups->size() - iCurSize;
}
Пример #8
0
int CPVRClients::GetChannels(CPVRChannelGroupInternal *group, PVR_ERROR *error)
{
  *error = PVR_ERROR_UNKOWN;
  int iCurSize = group->Size();
  CLIENTMAP clients;
  GetActiveClients(&clients);

  /* get the channel list from each client */
  CLIENTMAPITR itrClients = clients.begin();
  while (itrClients != clients.end())
  {
    if ((*itrClients).second->ReadyToUse() && (*itrClients).second->GetNumChannels() > 0)
      (*itrClients).second->GetChannelList(*group, group->IsRadio());

    itrClients++;
  }

  return group->Size() - iCurSize;
}
Пример #9
0
int CPVRClients::GetRecordings(CPVRRecordings *recordings)
{
  int iCurSize = recordings->size();
  CLIENTMAP clients;
  GetActiveClients(&clients);

  CLIENTMAPITR itr = clients.begin();
  while (itr != clients.end())
  {
    /* Load only if the client have Recordings */
    if ((*itr).second->GetNumRecordings() > 0)
    {
      (*itr).second->GetAllRecordings(recordings);
    }
    itr++;
  }

  return recordings->size() - iCurSize;
}
Пример #10
0
int CPVRClients::GetRecordings(CPVRRecordings *recordings)
{
  int iCurSize = recordings->size();
  CLIENTMAP clients;
  GetConnectedClients(&clients);

  boost::shared_ptr<CPVRClient> client;
  CLIENTMAPITR itrClients = clients.begin();
  while (itrClients != clients.end())
  {
    client = (*itrClients).second;
    if (client->GetAddonCapabilities().bSupportsRecordings)
      client->GetRecordings(recordings);

    itrClients++;
  }

  return recordings->size() - iCurSize;
}
Пример #11
0
int CPVRClients::GetTimers(CPVRTimers *timers)
{
  int iCurSize = timers->GetNumActiveTimers();
  CLIENTMAP clients;
  GetConnectedClients(&clients);

  /* get the timer list from each client */
  boost::shared_ptr<CPVRClient> client;
  CLIENTMAPITR itrClients = clients.begin();
  while (itrClients != clients.end())
  {
    client = (*itrClients).second;
    if (client->GetAddonCapabilities().bSupportsTimers)
      client->GetTimers(timers);

    ++itrClients;
  }

  return timers->GetNumActiveTimers() - iCurSize;
}
Пример #12
0
bool CPVRRecording::Delete(void) const
{
  try
  {
    CLIENTMAP *clients = CPVRManager::Get()->Clients();

    /* and write it to the backend */
    PVR_ERROR err = clients->find(m_clientID)->second->DeleteRecording(*this);

    if (err != PVR_ERROR_NO_ERROR)
      throw err;

    return true;
  }
  catch (PVR_ERROR err)
  {
    DisplayError(err);
  }
  return false;
}
Пример #13
0
int CPVRChannelGroupInternal::GetFromClients(void)
{
  CLIENTMAP *clients = CPVRManager::Get()->Clients();
  if (!clients)
    return 0;

  int iCurSize = size();

  /* get the channel list from each client */
  CLIENTMAPITR itrClients = clients->begin();
  while (itrClients != clients->end())
  {
    if ((*itrClients).second->ReadyToUse() && (*itrClients).second->GetNumChannels() > 0)
      (*itrClients).second->GetChannelList(*this, m_bRadio);

    itrClients++;
  }

  return size() - iCurSize;
}
Пример #14
0
bool CPVRRecording::Rename(const CStdString &strNewName) const
{
  try
  {
    CLIENTMAP *clients = CPVRManager::Get()->Clients();

    /* and write it to the backend */
    PVR_ERROR err = clients->find(m_clientID)->second->RenameRecording(*this, strNewName);

    if (err != PVR_ERROR_NO_ERROR)
      throw err;

    CPVRManager::GetRecordings()->Update(true); // async update
    return true;
  }
  catch (PVR_ERROR err)
  {
    DisplayError(err);
  }
  return false;
}
Пример #15
0
int CPVRClients::GetChannelGroups(CPVRChannelGroups *groups, PVR_ERROR *error)
{
  *error = PVR_ERROR_UNKNOWN;
  int iCurSize = groups->size();
  CLIENTMAP clients;
  GetConnectedClients(&clients);

  /* get the channel groups list from each client */
  boost::shared_ptr<CPVRClient> client;
  CLIENTMAPITR itrClients = clients.begin();
  while (itrClients != clients.end())
  {
    client = (*itrClients).second;
    if (client->GetAddonCapabilities().bSupportsChannelGroups)
      client->GetChannelGroups(groups);

    itrClients++;
  }

  return groups->size() - iCurSize;
}
Пример #16
0
bool CPVRTimerInfoTag::UpdateOnClient() const
{
    try
    {
        CLIENTMAP *clients = CPVRManager::Get()->Clients();

        /* and write it to the backend */
        PVR_ERROR err = clients->find(m_iClientID)->second->UpdateTimer(*this);
        if (err != PVR_ERROR_NO_ERROR)
            throw err;

        if (m_StartTime < CDateTime::GetCurrentDateTime() && m_StopTime > CDateTime::GetCurrentDateTime())
            CPVRManager::Get()->TriggerRecordingsUpdate();

        return true;
    }
    catch (PVR_ERROR err)
    {
        DisplayError(err);
    }
    return false;
}
Пример #17
0
int CPVRClients::GetTimers(CPVRTimers *timers)
{
  int iCurSize = timers->size();
  CLIENTMAP clients;
  GetActiveClients(&clients);

  /* get the timer list from each client */
  CLIENTMAPITR itrClients = clients.begin();
  while (itrClients != clients.end())
  {
    if (!GetClientProperties((*itrClients).second->GetID())->SupportTimers ||
        (*itrClients).second->GetNumTimers() <= 0)
    {
      ++itrClients;
      continue;
    }

    (*itrClients).second->GetAllTimers(timers);
    ++itrClients;
  }

  return timers->size() - iCurSize;
}
Пример #18
0
bool CPVRTimerInfoTag::RenameOnClient(const CStdString &newname) const
{
    try
    {
        CLIENTMAP *clients = CPVRManager::Get()->Clients();

        /* and write it to the backend */
        PVR_ERROR err = clients->find(m_iClientID)->second->RenameTimer(*this, newname);

        if (err == PVR_ERROR_NOT_IMPLEMENTED)
            err = clients->find(m_iClientID)->second->UpdateTimer(*this);

        if (err != PVR_ERROR_NO_ERROR)
            throw err;

        return true;
    }
    catch (PVR_ERROR err)
    {
        DisplayError(err);
    }

    return false;
}
Пример #19
0
int CPVRClients::GetChannels(CPVRChannelGroupInternal *group, PVR_ERROR *error)
{
  *error = PVR_ERROR_NO_ERROR;
  int iCurSize = group->Size();
  CLIENTMAP clients;
  GetConnectedClients(&clients);

  /* get the channel list from each client */
  boost::shared_ptr<CPVRClient> client;
  for (CLIENTMAPITR itrClients = clients.begin(); itrClients != clients.end(); itrClients++)
  {
    PVR_ERROR currentError;
    client = (*itrClients).second;

    if (group->IsRadio() && !client->GetAddonCapabilities().bSupportsRadio)
      continue;
    else if (!group->IsRadio() && !client->GetAddonCapabilities().bSupportsTV)
      continue;
    else if ((currentError = client->GetChannels(*group, group->IsRadio())) != PVR_ERROR_NO_ERROR)
      *error = currentError;
  }

  return group->Size() - iCurSize;
}
Пример #20
0
void CPVRGUIInfo::UpdateBackendCache(void)
{
  CStdString strBackendName;
  CStdString strBackendVersion;
  CStdString strBackendHost;
  CStdString strBackendDiskspace;
  CStdString strBackendTimers;
  CStdString strBackendRecordings;
  CStdString strBackendChannels;
  int        iActiveClients(0);

  if (!AddonInfoToggle())
    return;

  CPVRClients *clients = g_PVRClients;
  CLIENTMAP activeClients;
  iActiveClients = clients->GetConnectedClients(&activeClients);
  if (iActiveClients > 0)
  {
    CLIENTMAPITR activeClient = activeClients.begin();
    /* safe to read unlocked */
    for (unsigned int i = 0; i < m_iAddonInfoToggleCurrent; i++)
      activeClient++;

    long long kBTotal = 0;
    long long kBUsed  = 0;

    if (activeClient->second->GetDriveSpace(&kBTotal, &kBUsed) == PVR_ERROR_NO_ERROR)
    {
      kBTotal /= 1024; // Convert to MBytes
      kBUsed /= 1024;  // Convert to MBytes
      strBackendDiskspace.Format("%s %.1f GByte - %s: %.1f GByte",
          g_localizeStrings.Get(20161), (float) kBTotal / 1024, g_localizeStrings.Get(20162), (float) kBUsed / 1024);
    }
    else
    {
      strBackendDiskspace = g_localizeStrings.Get(19055);
    }

    int NumChannels = activeClient->second->GetChannelsAmount();
    if (NumChannels >= 0)
      strBackendChannels.Format("%i", NumChannels);
    else
      strBackendChannels = g_localizeStrings.Get(161);

    int NumTimers = activeClient->second->GetTimersAmount();
    if (NumTimers >= 0)
      strBackendTimers.Format("%i", NumTimers);
    else
      strBackendTimers = g_localizeStrings.Get(161);

    int NumRecordings = activeClient->second->GetRecordingsAmount();
    if (NumRecordings >= 0)
      strBackendRecordings.Format("%i", NumRecordings);
    else
      strBackendRecordings = g_localizeStrings.Get(161);

    strBackendName    = activeClient->second->GetBackendName();
    strBackendVersion = activeClient->second->GetBackendVersion();
    strBackendHost    = activeClient->second->GetConnectionString();
  }

  CSingleLock lock(m_critSection);
  m_strBackendName         = strBackendName;
  m_strBackendVersion      = strBackendVersion;
  m_strBackendHost         = strBackendHost;
  m_strBackendDiskspace    = strBackendDiskspace;
  m_strBackendTimers       = strBackendTimers;
  m_strBackendRecordings   = strBackendRecordings;
  m_strBackendChannels     = strBackendChannels;
  m_iActiveClients         = iActiveClients;
}
Пример #21
0
int CPVRTimers::Update()
{
  CSingleLock lock(m_critSection);

  CLog::Log(LOGDEBUG, "PVRTimers - %s - updating timers",
      __FUNCTION__);

  int iCurSize = size();

  /* clear channel timers */
  for (unsigned int iTimerPtr = 0; iTimerPtr < size(); iTimerPtr++)
  {
    CPVRTimerInfoTag *timerTag = &at(iTimerPtr);
    if (!timerTag || !timerTag->Active())
      continue;

    CPVREpgInfoTag *epgTag = (CPVREpgInfoTag *)timerTag->EpgInfoTag();
    if (!epgTag)
      continue;

    epgTag->SetTimer(NULL);
  }

  /* clear timers */
  clear();

  /* get all timers from the clients */
  CLIENTMAP *clients = g_PVRManager.Clients();
  CLIENTMAPITR itr = clients->begin();
  while (itr != clients->end())
  {
    if (g_PVRManager.GetClientProps((*itr).second->GetID())->SupportTimers)
    {
      if ((*itr).second->GetNumTimers() > 0)
      {
        (*itr).second->GetAllTimers(this);
      }
    }
    itr++;
  }

  //XXX
  g_PVRManager.UpdateRecordingsCache();

  /* set channel timers */
  for (unsigned int ptr = 0; ptr < size(); ptr++)
  {
    /* get the timer tag */
    CPVRTimerInfoTag *timerTag = &at(ptr);
    if (!timerTag || !timerTag->Active())
      continue;

    /* try to get the channel */
    CPVRChannel *channel = CPVRChannels::GetByClientFromAll(timerTag->Number(), timerTag->ClientID());
    if (!channel)
      continue;

    /* try to get the EPG */
    CPVREpg *epg = channel->GetEPG();
    if (!epg)
      continue;

    /* try to set the timer on the epg tag that matches */
    CPVREpgInfoTag *epgTag = (CPVREpgInfoTag *) epg->InfoTagBetween(timerTag->Start(), timerTag->Stop());
    if (epgTag)
      epgTag->SetTimer(timerTag);
  }

  return size() - iCurSize;
}