diff options
author | Dieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de> | 2007-01-05 22:26:58 +0000 |
---|---|---|
committer | Dieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de> | 2007-01-05 22:26:58 +0000 |
commit | 2f4711bc0484ceba4db8472408f71c0b3d32bab3 (patch) | |
tree | 66fc0fb00755984e4faaaa202997103a8d35815f | |
parent | 1101d20f95fc86e0e1e20e69467cb152632b4fc4 (diff) | |
download | vdr-plugin-live-2f4711bc0484ceba4db8472408f71c0b3d32bab3.tar.gz vdr-plugin-live-2f4711bc0484ceba4db8472408f71c0b3d32bab3.tar.bz2 |
Added recordings (not very functional now) to cvs
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | recordings.cpp | 87 | ||||
-rw-r--r-- | recordings.h | 86 |
3 files changed, 175 insertions, 2 deletions
@@ -1,7 +1,7 @@ # # Makefile for a Video Disk Recorder plugin # -# $Id: Makefile,v 1.24 2007/01/05 21:20:27 lordjaxom Exp $ +# $Id: Makefile,v 1.25 2007/01/05 22:26:58 tadi Exp $ # The official name of this plugin. # This name will be used in the '-P...' option of VDR to load the plugin. @@ -59,7 +59,7 @@ SUBDIRS = httpd pages css images javascript ### The object files (add further files here): PLUGINOBJS = $(PLUGIN).o thread.o tntconfig.o setup.o i18n.o timers.o \ - tools.o + tools.o recordings.o WEBLIBS = pages/libpages.a css/libcss.a images/libimages.a diff --git a/recordings.cpp b/recordings.cpp new file mode 100644 index 0000000..3f72b30 --- /dev/null +++ b/recordings.cpp @@ -0,0 +1,87 @@ +#include <string> +#include <boost/shared_ptr.hpp> +#include "recordings.h" + +namespace vdrlive { + + RecordingsTree::RecordingsTree() : + m_maxLevel(0), + m_root(new RecordingsItemDir()), + m_recordingsLock(&Recordings) + + { + for ( cRecording* recording = Recordings.First(); recording != 0; recording = Recordings.Next( recording ) ) { + if (m_maxLevel < recording->HierarchyLevels()) { + m_maxLevel = recording->HierarchyLevels(); + } + + RecordingsItemPtr& dir = m_root; + string name(recording->Name()); + int level = 0; + size_t index = 0; + size_t pos = 0; + do { + pos = name.find('~', index); + if (pos != string::npos) { + string dirName(name.substr(index, pos - index)); + index = pos + 1; + Map::iterator i = dir->m_entries.find(dirName); + if (i == dir->m_entries.end()) { + RecordingsItemPtr recPtr (new RecordingsItemDir(dirName, level)); + dir->m_entries[dirName] = recPtr; + } + dir = dir->m_entries[dirName]; + level++; + } + else { + RecordingsItemPtr recPtr (new RecordingsItemRec(recording)); + dir->m_entries[name] = recPtr; + } + } while (pos != string::npos); + } + } + + RecordingsTree::~RecordingsTree() + { + } + + RecordingsTree::RecordingsItem::RecordingsItem() : + m_entries() + { + } + + RecordingsTree::RecordingsItem::~RecordingsItem() + { + } + + RecordingsTree::RecordingsItemDir::RecordingsItemDir() : + m_name(), + m_level(0) + { + } + + RecordingsTree::RecordingsItemDir::~RecordingsItemDir() + { + } + + RecordingsTree::RecordingsItemDir::RecordingsItemDir(const string& name, int level) : + m_name(name), + m_level(level) + { + } + + RecordingsTree::RecordingsItemRec::RecordingsItemRec(cRecording* recording) : + m_recording(recording) + { + } + + RecordingsTree::RecordingsItemRec::~RecordingsItemRec() + { + } + + time_t RecordingsTree::RecordingsItemRec::StartTime() const + { + return m_recording->start; + } + +} // namespace vdrlive diff --git a/recordings.h b/recordings.h new file mode 100644 index 0000000..d350bbd --- /dev/null +++ b/recordings.h @@ -0,0 +1,86 @@ +#ifndef VDR_LIVE_RECORDINGS_H +#define VDR_LIVE_RECORDINGS_H + +#include <ctime> +#include <map> +#include <boost/shared_ptr.hpp> +#include <vdr/recording.h> + +namespace vdrlive { + + using namespace boost; + using namespace std; + + class RecordingsTree + { + public: + + class RecordingsItem; + + typedef shared_ptr< RecordingsItem > RecordingsItemPtr; + typedef map< string, RecordingsItemPtr > Map; + + class RecordingsItem + { + friend class RecordingsTree; + + public: + virtual ~RecordingsItem(); + virtual time_t StartTime() const = 0; + virtual bool IsDir() const = 0; + virtual const char* Name() const = 0; + + protected: + RecordingsItem(); + + private: + Map m_entries; + }; + + class RecordingsItemDir : public RecordingsItem + { + public: + RecordingsItemDir(); + virtual ~RecordingsItemDir(); + RecordingsItemDir(const string& name, int level); + + 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); + 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; + }; + + RecordingsTree(); + virtual ~RecordingsTree(); + + Map::iterator begin() { return m_root->m_entries.begin(); } + Map::iterator end() { return m_root->m_entries.end(); } + + int MaxLevel() const { return m_maxLevel; } + + private: + int m_maxLevel; + RecordingsItemPtr m_root; + cThreadLock m_recordingsLock; + }; + +} // namespace vdrlive + +#endif // VDR_LIVE_RECORDINGS_H |