示例#1
0
文件: HTSPData.cpp 项目: macardi/xbmc
bool CHTSPData::GetEvent(SEvent& event, uint32_t id)
{
  if(id == 0)
  {
    event.Clear();
    return false;
  }

  SEvents::iterator it = m_events.find(id);
  if(it != m_events.end())
  {
    event = it->second;
    return true;
  }

  htsmsg_t *msg = htsmsg_create_map();
  htsmsg_add_str(msg, "method", "getEvent");
  htsmsg_add_u32(msg, "eventId", id);
  if((msg = ReadResult(msg)) == NULL)
  {
    XBMC->Log(LOG_DEBUG, "%s - failed to get event %d", __FUNCTION__, id);
    return false;
  }

  if (m_session->ParseEvent(msg, id, event))
  {
    m_events[id] = event;
    return true;
  }

  return false;
}
示例#2
0
bool CHTSPDirectorySession::GetEvent(SEvent& event, uint32_t id)
{
  if(id == 0)
  {
    event.Clear();
    return false;
  }

  SEvents::iterator it = m_events.find(id);
  if(it != m_events.end())
  {
    event = it->second;
    return true;
  }

  htsmsg_t *msg = htsmsg_create_map();
  htsmsg_add_str(msg, "method", "getEvent");
  htsmsg_add_u32(msg, "eventId", id);
  if((msg = ReadResult(msg)) == NULL)
  {
    CLog::Log(LOGDEBUG, "CHTSPSession::GetEvent - failed to get event %u", id);
    return false;
  }
  if(!CHTSPSession::ParseEvent(msg, id, event))
    return false;

  m_events[id] = event;
  return true;
}
示例#3
0
bool CHTSPDirectory::GetChannels( const CURL &base
                                , CFileItemList &items
                                , SChannels channels
                                , int tag)
{
  CURL url(base);

  SEvent event;

  for(SChannels::iterator it = channels.begin(); it != channels.end(); it++)
  {
    if(!m_session->GetEvent(event, it->second.event))
      event.Clear();

    CFileItemPtr item(new CFileItem("", true));

    url.SetFileName("");
    item->SetPath(url.Get());
    CHTSPSession::ParseItem(it->second, tag, event, *item);
    item->m_bIsFolder = false;
    item->SetLabel(item->m_strTitle);
    item->m_strTitle.Format("%d", it->second.num);

    items.Add(item);
  }

  items.AddSortMethod(SortByTrackNumber,   554, LABEL_MASKS("%K[ - %B]", "%Z", "%L", ""));
  items.AddSortMethod(SortByAlbum,         558, LABEL_MASKS("%B", "%Z", "%L", ""), CSettings::Get().GetBool("filelists.ignorethewhensorting") ? SortAttributeIgnoreArticle : SortAttributeNone);
  items.AddSortMethod(SortByLabel,         551, LABEL_MASKS("%Z", "%B", "%L", ""), CSettings::Get().GetBool("filelists.ignorethewhensorting") ? SortAttributeIgnoreArticle : SortAttributeNone);

  items.SetContent("livetv");

  return !channels.empty();

}
示例#4
0
PVR_ERROR CHTSPData::GetEvent(SEvent& ev, uint32_t id)
{
    if(id == 0)
    {
        ev.Clear();
        return PVR_ERROR_UNKNOWN;
    }

    SEvents::iterator it = m_events.find(id);
    if(it != m_events.end())
    {
        ev = it->second;
        return PVR_ERROR_NO_ERROR;
    }

    htsmsg_t *msg = htsmsg_create_map();
    htsmsg_add_str(msg, "method", "getEvent");
    htsmsg_add_u32(msg, "eventId", id);

    CHTSResult result;
    ReadResult(msg, result);
    if(result.status != PVR_ERROR_NO_ERROR)
    {
        XBMC->Log(LOG_DEBUG, "%s - failed to get event %d", __FUNCTION__, id);
        return result.status;
    }

    if (ParseEvent(result.message, id, ev))
    {
        m_events[id] = ev;
        return PVR_ERROR_NO_ERROR;
    }

    return PVR_ERROR_SERVER_ERROR;
}
示例#5
0
bool cHTSPSession::ParseEvent(htsmsg_t* msg, uint32_t id, SEvent &event)
{
    uint32_t start, stop, next, chan_id, content;
    const char *title, *desc;
    if(         htsmsg_get_u32(msg, "start", &start)
                ||          htsmsg_get_u32(msg, "stop" , &stop)
                || (title = htsmsg_get_str(msg, "title")) == NULL)
    {
        XBMC->Log(LOG_DEBUG, "%s - malformed event", __FUNCTION__);
        htsmsg_print(msg);
        htsmsg_destroy(msg);
        return false;
    }
    event.Clear();
    event.id    = id;
    event.start = start;
    event.stop  = stop;
    event.title = title;

    if((desc = htsmsg_get_str(msg, "ext_text")) ||
            (desc = htsmsg_get_str(msg, "description")))
        event.descs = desc;

    if(htsmsg_get_u32(msg, "nextEventId", &next))
        event.next = 0;
    else
        event.next = next;
    if(htsmsg_get_u32(msg, "channelId", &chan_id))
        event.chan_id = -1;
    else
        event.chan_id = chan_id;
    if(htsmsg_get_u32(msg, "contentType", &content))
        event.content = -1;
    else
        event.content = content;

    XBMC->Log(LOG_DEBUG, "%s - id:%u, chan_id:%u, title:'%s', genre_type:%u, genre_sub_type:%u, desc:'%s', start:%u, stop:%u, next:%u"
              , __FUNCTION__
              , event.id
              , event.chan_id
              , event.title.c_str()
              , event.content & 0x0F
              , event.content & 0xF0
              , event.descs.c_str()
              , event.start
              , event.stop
              , event.next);

    return true;
}
示例#6
0
bool cHTSPSession::GetEvent(SEvent& event, uint32_t id)
{
    if(id == 0)
    {
        event.Clear();
        return false;
    }

    htsmsg_t *msg = htsmsg_create_map();
    htsmsg_add_str(msg, "method", "getEvent");
    htsmsg_add_u32(msg, "eventId", id);
    if((msg = ReadResult(msg, true)) == NULL)
    {
        XBMC->Log(LOG_DEBUG, "%s - failed to get event %d", __FUNCTION__, id);
        return false;
    }
    return ParseEvent(msg, id, event);
}
示例#7
0
bool CHTSPDirectory::GetChannels( const CURL &base
                                , CFileItemList &items
                                , SChannels channels
                                , int tag)
{
  CURL url(base);

  SEvent event;

  for(SChannels::iterator it = channels.begin(); it != channels.end(); it++)
  {
    if(!m_session->GetEvent(event, it->second.event))
      event.Clear();

    CFileItemPtr item(new CFileItem("", true));

    url.SetFileName("");
    item->SetPath(url.Get());
    CHTSPSession::ParseItem(it->second, tag, event, *item);
    item->m_bIsFolder = false;
    item->SetLabel(item->m_strTitle);
    item->m_strTitle.Format("%d", it->second.num);

    items.Add(item);
  }

  items.AddSortMethod(SORT_METHOD_TRACKNUM, 554, LABEL_MASKS("%K[ - %B]", "%Z", "%L", ""));

  if (g_guiSettings.GetBool("filelists.ignorethewhensorting"))
    items.AddSortMethod(SORT_METHOD_ALBUM_IGNORE_THE, 558,   LABEL_MASKS("%B", "%Z", "%L", ""));
  else
    items.AddSortMethod(SORT_METHOD_ALBUM,            558,   LABEL_MASKS("%B", "%Z", "%L", ""));

  if (g_guiSettings.GetBool("filelists.ignorethewhensorting"))
    items.AddSortMethod(SORT_METHOD_LABEL_IGNORE_THE, 551, LABEL_MASKS("%Z", "%B", "%L", ""));
  else
    items.AddSortMethod(SORT_METHOD_LABEL,            551, LABEL_MASKS("%Z", "%B", "%L", ""));

  items.SetContent("livetv");

  return !channels.empty();

}