diff options
Diffstat (limited to 'server/menuHTTP.c')
-rw-r--r-- | server/menuHTTP.c | 70 |
1 files changed, 66 insertions, 4 deletions
diff --git a/server/menuHTTP.c b/server/menuHTTP.c index d7fb817..7839527 100644 --- a/server/menuHTTP.c +++ b/server/menuHTTP.c @@ -119,8 +119,8 @@ const cChannel* cChannelList::GetGroup(int Index) const char* cHtmlChannelList::menu = "[<a href=\"/\">Home</a> (<a href=\"all.html\" tvid=\"RED\">no script</a>)] " "[<a href=\"tree.html\" tvid=\"GREEN\">Tree View</a>] " - "[<a href=\"groups.html\" tvid=\"YELLOW\">Groups</a> (<a href=\"groups.m3u\">Playlist</a>)] " - "[<a href=\"channels.html\" tvid=\"BLUE\">Channels</a> (<a href=\"channels.m3u\">Playlist</a>)] "; + "[<a href=\"groups.html\" tvid=\"YELLOW\">Groups</a> (<a href=\"groups.m3u\">Playlist</a> | <a href=\"groups.rss\">RSS</a>)] " + "[<a href=\"channels.html\" tvid=\"BLUE\">Channels</a> (<a href=\"channels.m3u\">Playlist</a> | <a href=\"channels.rss\">RSS</a>)] "; const char* cHtmlChannelList::css = "<style type=\"text/css\">\n" @@ -215,10 +215,11 @@ std::string cHtmlChannelList::StreamTypeMenu() return typeMenu; } -cHtmlChannelList::cHtmlChannelList(cChannelIterator *Iterator, eStreamType StreamType, const char *Self, const char *GroupTarget): cChannelList(Iterator) +cHtmlChannelList::cHtmlChannelList(cChannelIterator *Iterator, eStreamType StreamType, const char *Self, const char *Rss, const char *GroupTarget): cChannelList(Iterator) { streamType = StreamType; self = strdup(Self); + rss = strdup(Rss); groupTarget = (GroupTarget && *GroupTarget) ? strdup(GroupTarget) : NULL; htmlState = hsRoot; current = NULL; @@ -227,6 +228,7 @@ cHtmlChannelList::cHtmlChannelList(cChannelIterator *Iterator, eStreamType Strea cHtmlChannelList::~cHtmlChannelList() { free((void *) self); + free((void *) rss); free((void *) groupTarget); } @@ -311,7 +313,7 @@ std::string cHtmlChannelList::Next() std::string cHtmlChannelList::HtmlHead() { - return (std::string) ""; + return (std::string) "<link rel=\"alternate\" type=\"application/rss+xml\" title=\"RSS\" href=\"" + rss + "\"/>"; } std::string cHtmlChannelList::PageTop() @@ -432,3 +434,63 @@ std::string cM3uChannelList::Next() } } +// ******************** cRssChannelList ****************** +cRssChannelList::cRssChannelList(cChannelIterator *Iterator, const char *Base, const char *Html) +: cChannelList(Iterator), + m_IConv(cCharSetConv::SystemCharacterTable(), "UTF-8") +{ + base = strdup(Base); + html = strdup(Html); + rssState = msFirst; +} + +cRssChannelList::~cRssChannelList() +{ + free(base); + free(html); +} + +bool cRssChannelList::HasNext() +{ + return rssState != msLast; +} + +std::string cRssChannelList::Next() +{ + std::string type_ext; + + if (rssState == msFirst) + { + rssState = msContinue; + return (std::string) "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<rss version=\"2.0\">\n\t<channel>\n" + "\t\t<title>VDR</title>\n" + "\t\t<link>" + base + html + "</link>\n" + "\t\t<description>VDR channel list</description>\n" + ; + } + + const cChannel *channel = NextChannel(); + if (!channel) + { + rssState = msLast; + return "\t</channel>\n</rss>\n"; + } + + std::string name = (std::string) m_IConv.Convert(channel->Name()); + + if (channel->GroupSep()) + { + return (std::string) "\t\t<item>\n\t\t\t<title>" + + name + "</title>\n\t\t\t<link>" + + base + "group.rss?group=" + (const char*) itoa(cChannelList::GetGroupIndex(channel)) + "</link>\n\t\t</item>\n"; + } + else + { + return (std::string) "\t\t<item>\n\t\t\t<title>" + + (const char*) itoa(channel->Number()) + " " + name + "</title>\n\t\t\t<link>" + + base + (std::string) channel->GetChannelID().ToString() + "</link>\n\t\t\t<enclosure url=\"" + + base + (std::string) channel->GetChannelID().ToString() + "\" type=\"video/mpeg\" />\n\t\t</item>\n"; + } +} + + |