summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--recordings.cpp15
-rw-r--r--recordings.h2
2 files changed, 15 insertions, 2 deletions
diff --git a/recordings.cpp b/recordings.cpp
index 9d6b219..0e0b365 100644
--- a/recordings.cpp
+++ b/recordings.cpp
@@ -25,11 +25,11 @@ namespace vdrlive {
if (pos != string::npos) {
string dirName(name.substr(index, pos - index));
index = pos + 1;
- Map::iterator i = dir->m_entries.find(dirName);
+ Map::iterator i = findDir(dir, dirName);
if (i == dir->m_entries.end()) {
RecordingsItemPtr recPtr (new RecordingsItemDir(dirName, level));
dir->m_entries.insert(pair< string, RecordingsItemPtr > (dirName, recPtr));
- i = dir->m_entries.find(dirName);
+ i = findDir(dir, dirName);
}
dir = i->second;
level++;
@@ -77,6 +77,17 @@ namespace vdrlive {
return recItem->m_entries.end();
}
+ RecordingsTree::Map::iterator RecordingsTree::findDir(RecordingsItemPtr& dir, const string& dirName)
+ {
+ pair< Map::iterator, Map::iterator > range = dir->m_entries.equal_range(dirName);
+ for (Map::iterator i = range.first; i != range.second; ++i) {
+ if (i->second->IsDir()) {
+ return i;
+ }
+ }
+ return dir->m_entries.end();
+ }
+
RecordingsTree::RecordingsItem::RecordingsItem(const string& name) :
m_name(name),
m_entries()
diff --git a/recordings.h b/recordings.h
index 8640848..c2eea1b 100644
--- a/recordings.h
+++ b/recordings.h
@@ -82,6 +82,8 @@ namespace vdrlive {
int m_maxLevel;
RecordingsItemPtr m_root;
cThreadLock m_recordingsLock;
+
+ Map::iterator findDir(RecordingsItemPtr& dir, const string& dirname);
};
} // namespace vdrlive