summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de>2007-01-05 22:26:58 +0000
committerDieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de>2007-01-05 22:26:58 +0000
commit2f4711bc0484ceba4db8472408f71c0b3d32bab3 (patch)
tree66fc0fb00755984e4faaaa202997103a8d35815f
parent1101d20f95fc86e0e1e20e69467cb152632b4fc4 (diff)
downloadvdr-plugin-live-2f4711bc0484ceba4db8472408f71c0b3d32bab3.tar.gz
vdr-plugin-live-2f4711bc0484ceba4db8472408f71c0b3d32bab3.tar.bz2
Added recordings (not very functional now) to cvs
-rw-r--r--Makefile4
-rw-r--r--recordings.cpp87
-rw-r--r--recordings.h86
3 files changed, 175 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 25d4a86..95bc4ca 100644
--- a/Makefile
+++ b/Makefile
@@ -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