summaryrefslogtreecommitdiff
path: root/server/menuHTTP.h
diff options
context:
space:
mode:
Diffstat (limited to 'server/menuHTTP.h')
-rw-r--r--server/menuHTTP.h83
1 files changed, 53 insertions, 30 deletions
diff --git a/server/menuHTTP.h b/server/menuHTTP.h
index b025598..ec759e9 100644
--- a/server/menuHTTP.h
+++ b/server/menuHTTP.h
@@ -6,16 +6,38 @@
class cChannel;
-// ******************** cChannelIterator ******************
-class cChannelIterator
+// ******************** cItemIterator ******************
+class cItemIterator
+{
+ public:
+ virtual bool Next() = 0;
+ virtual bool IsGroup() const = 0;
+ virtual const cString ItemId() const = 0;
+ virtual const char* ItemTitle() const = 0;
+ virtual const cString ItemRessource() const = 0;
+ virtual const char* Alang(int i) const = 0;
+ virtual const char* Dlang(int i) const = 0;
+};
+
+class cChannelIterator: public cItemIterator
{
private:
- const cChannel *channel;
+ const cChannel *first;
+ const cChannel *current;
protected:
virtual const cChannel* NextChannel(const cChannel *Channel) = 0;
static inline const cChannel* SkipFakeGroups(const cChannel *Channel);
+ // Helper which returns the group by its index
+ static const cChannel* GetGroup(const char* GroupId);
public:
- const cChannel* Next();
+
+ virtual bool Next();
+ virtual bool IsGroup() const { return current && current->GroupSep(); }
+ virtual const cString ItemId() const;
+ virtual const char* ItemTitle() const { return current ? current->Name() : ""; }
+ virtual const cString ItemRessource() const { return (current ? current->GetChannelID() : tChannelID::InvalidID).ToString(); }
+ virtual const char* Alang(int i) const { return current && current->Apid(i) ? current->Alang(i) : NULL; }
+ virtual const char* Dlang(int i) const { return current && current->Dpid(i) ? current->Dlang(i) : NULL; }
cChannelIterator(const cChannel *First);
virtual ~cChannelIterator() {};
};
@@ -54,7 +76,7 @@ class cListGroup: public cChannelIterator
protected:
virtual const cChannel* NextChannel(const cChannel *Channel);
public:
- cListGroup(const cChannel *Group);
+ cListGroup(const char *GroupId);
virtual ~cListGroup() {};
};
@@ -66,31 +88,32 @@ class cListTree: public cChannelIterator
protected:
virtual const cChannel* NextChannel(const cChannel *Channel);
public:
- cListTree(const cChannel *SelectedGroup);
+ cListTree(const char *SelectedGroupId);
virtual ~cListTree() {};
};
-// ******************** cChannelList ******************
-class cChannelList
+// ******************** cMenuList ******************
+class cMenuList
{
private:
- cChannelIterator *iterator;
+ cItemIterator *iterator;
protected:
- const cChannel* NextChannel() { return iterator->Next(); }
+ bool NextItem() { return iterator->Next(); }
+ bool IsGroup() { return iterator->IsGroup(); }
+ const cString ItemId() { return iterator->ItemId(); }
+ const char* ItemTitle() { return iterator->ItemTitle(); }
+ const cString ItemRessource() { return iterator->ItemRessource(); }
+ const char* Alang(int i) { return iterator->Alang(i); }
+ const char* Dlang(int i) { return iterator->Dlang(i); }
public:
- // Helper which returns the group index
- static int GetGroupIndex(const cChannel* Group);
- // Helper which returns the group by its index
- static const cChannel* GetGroup(int Index);
-
virtual std::string HttpHeader() { return "HTTP/1.0 200 OK\r\n"; };
virtual bool HasNext() = 0;
virtual std::string Next() = 0;
- cChannelList(cChannelIterator *Iterator);
- virtual ~cChannelList();
+ cMenuList(cItemIterator *Iterator);
+ virtual ~cMenuList();
};
-class cHtmlChannelList: public cChannelList
+class cHtmlMenuList: public cMenuList
{
private:
static const char* menu;
@@ -104,7 +127,7 @@ class cHtmlChannelList: public cChannelList
hsItemsTop, hsItem, hsItemsBottom
};
eHtmlState htmlState;
- const cChannel *current;
+ bool onItem;
eStreamType streamType;
const char* self;
const char* rss;
@@ -118,18 +141,18 @@ class cHtmlChannelList: public cChannelList
std::string PageBottom();
public:
virtual std::string HttpHeader() {
- return cChannelList::HttpHeader()
+ return cMenuList::HttpHeader()
+ "Content-type: text/html; charset="
+ (cCharSetConv::SystemCharacterTable() ? cCharSetConv::SystemCharacterTable() : "UTF-8")
+ "\r\n";
}
virtual bool HasNext();
virtual std::string Next();
- cHtmlChannelList(cChannelIterator *Iterator, eStreamType StreamType, const char *Self, const char *Rss, const char *GroupTarget);
- virtual ~cHtmlChannelList();
+ cHtmlMenuList(cItemIterator *Iterator, eStreamType StreamType, const char *Self, const char *Rss, const char *GroupTarget);
+ virtual ~cHtmlMenuList();
};
-class cM3uChannelList: public cChannelList
+class cM3uMenuList: public cMenuList
{
private:
char *base;
@@ -137,14 +160,14 @@ class cM3uChannelList: public cChannelList
eM3uState m3uState;
cCharSetConv m_IConv;
public:
- virtual std::string HttpHeader() { return cChannelList::HttpHeader() + "Content-type: audio/x-mpegurl; charset=UTF-8\r\n"; };
+ virtual std::string HttpHeader() { return cMenuList::HttpHeader() + "Content-type: audio/x-mpegurl; charset=UTF-8\r\n"; };
virtual bool HasNext();
virtual std::string Next();
- cM3uChannelList(cChannelIterator *Iterator, const char* Base);
- virtual ~cM3uChannelList();
+ cM3uMenuList(cItemIterator *Iterator, const char* Base);
+ virtual ~cM3uMenuList();
};
-class cRssChannelList: public cChannelList
+class cRssMenuList: public cMenuList
{
private:
char *base;
@@ -153,12 +176,12 @@ class cRssChannelList: public cChannelList
eRssState rssState;
cCharSetConv m_IConv;
public:
- virtual std::string HttpHeader() { return cChannelList::HttpHeader() + "Content-type: application/rss+xml\r\n"; };
+ virtual std::string HttpHeader() { return cMenuList::HttpHeader() + "Content-type: application/rss+xml\r\n"; };
virtual bool HasNext();
virtual std::string Next();
- cRssChannelList(cChannelIterator *Iterator, const char *Base, const char *Html);
- virtual ~cRssChannelList();
+ cRssMenuList(cItemIterator *Iterator, const char *Base, const char *Html);
+ virtual ~cRssMenuList();
};
inline const cChannel* cChannelIterator::SkipFakeGroups(const cChannel* Group)