diff options
-rw-r--r-- | pages/recordings.ecpp | 4 | ||||
-rw-r--r-- | pages/recordings_item.ecpp | 23 | ||||
-rw-r--r-- | recordings.cpp | 43 | ||||
-rw-r--r-- | recordings.h | 15 |
4 files changed, 67 insertions, 18 deletions
diff --git a/pages/recordings.ecpp b/pages/recordings.ecpp index 6a3a8cf..d056f15 100644 --- a/pages/recordings.ecpp +++ b/pages/recordings.ecpp @@ -38,8 +38,10 @@ using namespace vdrlive; </tr> </table> % RecordingsTree recordingsTree; +% std::string pathArg("Filme"); +% esyslog("DH: calling component: %s with arg %s", "recordings_item", pathArg.c_str()); <div class="recordings"> -<& recordings_item &> +<& recordings_item path=("Serien") path=("Familie Heinz Becker") &> </div> % } </div> diff --git a/pages/recordings_item.ecpp b/pages/recordings_item.ecpp index bb96d53..f8eb24c 100644 --- a/pages/recordings_item.ecpp +++ b/pages/recordings_item.ecpp @@ -6,19 +6,25 @@ using namespace vdrlive; </%pre> <%args> +path[]; </%args> <ul class="recordingslist"> <{ +esyslog("DH: in component 'recordings_item' path elements are:"); +for (path_type::const_iterator i = path.begin(); i != path.end(); ++i) { + esyslog("DH: %s", (*i).c_str()); +} RecordingsTree& recordingsTree = LiveRecordingsTree(); bool active = false; RecordingsTree::Map::iterator iter; -for (iter = recordingsTree.begin(); iter != recordingsTree.end(); iter++) { +RecordingsTree::Map::iterator end = recordingsTree.end(path); +for (iter = recordingsTree.begin(path); iter != end; iter++) { RecordingsTree::RecordingsItemPtr recItem = iter->second; active = !active; }> <li class="recording <? active ? "active" ?>"> % if (recItem->IsDir()) { - <span class="recordingexpand"></span> + <span class="recordingexpand">DirIcon</span> <span class="recordingdate"><$ recItem->StartTime() $></span> <span class="recordingtime"><$ recItem->StartTime() $></span> % } else { @@ -27,8 +33,19 @@ for (iter = recordingsTree.begin(); iter != recordingsTree.end(); iter++) { <span class="recordingtime"><$ FormatDateTime(tr("%I:%M %p"), recItem->StartTime()) $></span> % } <span class="recordingname"><$ recItem->Name() $></span> +<{ + if (recItem->IsDir()) { + std::string pathArg; + for (path_type::const_iterator i = path.begin(); i != path.end(); ++i) { + pathArg += "path=(" + *i + ") "; + } + string name(recItem->Name()); + pathArg += "path=(" + name + ") "; +}> + <span class="recordingtest"><$ pathArg $></span> +% } </li> -<( +<{ } }> </ul> diff --git a/recordings.cpp b/recordings.cpp index 8290f80..3eaef45 100644 --- a/recordings.cpp +++ b/recordings.cpp @@ -40,8 +40,9 @@ namespace vdrlive { level++; } else { - RecordingsItemPtr recPtr (new RecordingsItemRec(recording)); - dir->m_entries[name] = recPtr; + string dirName(name.substr(index, name.length() - index)); + RecordingsItemPtr recPtr (new RecordingsItemRec(dirName, recording)); + dir->m_entries[dirName] = recPtr; } } while (pos != string::npos); } @@ -58,7 +59,36 @@ namespace vdrlive { globalInstance = 0; } - RecordingsTree::RecordingsItem::RecordingsItem() : + RecordingsTree::Map::iterator RecordingsTree::begin(const vector< string >& path) + { + if (path.empty()) { + return m_root->m_entries.begin(); + } + + RecordingsItemPtr recItem = m_root; + for (vector< string >::const_iterator i = path.begin(); i != path.end(); ++i) + { + recItem = recItem->m_entries[*i]; + } + return recItem->m_entries.begin(); + } + + RecordingsTree::Map::iterator RecordingsTree::end(const vector< string >&path) + { + if (path.empty()) { + return m_root->m_entries.end(); + } + + RecordingsItemPtr recItem = m_root; + for (vector< string >::const_iterator i = path.begin(); i != path.end(); ++i) + { + recItem = recItem->m_entries[*i]; + } + return recItem->m_entries.end(); + } + + RecordingsTree::RecordingsItem::RecordingsItem(const string& name) : + m_name(name), m_entries() { } @@ -68,7 +98,7 @@ namespace vdrlive { } RecordingsTree::RecordingsItemDir::RecordingsItemDir() : - m_name(), + RecordingsItem(""), m_level(0) { } @@ -78,12 +108,13 @@ namespace vdrlive { } RecordingsTree::RecordingsItemDir::RecordingsItemDir(const string& name, int level) : - m_name(name), + RecordingsItem(name), m_level(level) { } - RecordingsTree::RecordingsItemRec::RecordingsItemRec(cRecording* recording) : + RecordingsTree::RecordingsItemRec::RecordingsItemRec(const string& name, cRecording* recording) : + RecordingsItem(name), m_recording(recording) { } diff --git a/recordings.h b/recordings.h index 748b832..78041f3 100644 --- a/recordings.h +++ b/recordings.h @@ -3,6 +3,7 @@ #include <ctime> #include <map> +#include <vector> #include <boost/shared_ptr.hpp> #include <vdr/recording.h> @@ -31,12 +32,13 @@ namespace vdrlive { virtual time_t StartTime() const = 0; virtual bool IsDir() const = 0; - virtual const char* Name() const = 0; + virtual const string& Name() const { return m_name; } protected: - RecordingsItem(); + RecordingsItem(const string& name); private: + string m_name; Map m_entries; }; @@ -50,23 +52,20 @@ namespace vdrlive { virtual time_t StartTime() const { return 0; } virtual bool IsDir() const { return true; } - virtual const char* Name() const { return m_name.c_str(); } private: - string m_name; int m_level; }; class RecordingsItemRec : public RecordingsItem { public: - RecordingsItemRec(cRecording* recording); + RecordingsItemRec(const string& name, cRecording* recording); virtual ~RecordingsItemRec(); virtual time_t StartTime() const; virtual bool IsDir() const { return false; } - virtual const char* Name() const { return m_recording->Name(); } private: cRecording *m_recording; @@ -76,8 +75,8 @@ namespace vdrlive { virtual ~RecordingsTree(); - Map::iterator begin() { return m_root->m_entries.begin(); } - Map::iterator end() { return m_root->m_entries.end(); } + Map::iterator begin(const vector< string >& path); + Map::iterator end(const vector< string >&path); int MaxLevel() const { return m_maxLevel; } |