summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epgsearch.cpp54
-rw-r--r--epgsearch.h10
2 files changed, 62 insertions, 2 deletions
diff --git a/epgsearch.cpp b/epgsearch.cpp
index 9ff5760..4d7d3fe 100644
--- a/epgsearch.cpp
+++ b/epgsearch.cpp
@@ -3,6 +3,7 @@
#include <vdr/channels.h>
#include <vdr/plugin.h>
#include <iomanip>
+#include <openssl/md5.h>
#include "epgsearch/services.h"
#include "epgsearch.h"
#include "exception.h"
@@ -485,7 +486,9 @@ SearchResult::SearchResult( string const& data )
}
}
-SearchResults::SearchResults(int id)
+std::set<std::string> SearchResults::querySet;
+
+void SearchResults::GetByID(int id)
{
Epgsearch_services_v1_0 service;
if ( cPluginManager::CallFirstService("Epgsearch-services-v1.0", &service) == 0 )
@@ -496,4 +499,53 @@ SearchResults::SearchResults(int id)
m_list.sort();
}
+void SearchResults::GetByQuery(std::string const& query)
+{
+ Epgsearch_services_v1_0 service;
+ if ( cPluginManager::CallFirstService("Epgsearch-services-v1.0", &service) == 0 )
+ throw HtmlError( tr("No searchtimers available") );
+
+ list< string > list = service.handler->QuerySearch(query);
+ m_list.assign( list.begin(), list.end() );
+ m_list.sort();
+}
+
+std::string SearchResults::MD5Hash(std::string const& query)
+{
+ unsigned char md5[MD5_DIGEST_LENGTH];
+ MD5(reinterpret_cast<const unsigned char*>(query.c_str()), query.size(), md5);
+
+ ostringstream hashStr;
+ hashStr << hex;
+ for (size_t i = 0; i < MD5_DIGEST_LENGTH; i++)
+ hashStr << (0 + md5[i]);
+
+ return hashStr.str();
+}
+
+std::string SearchResults::AddQuery(std::string const& query)
+{
+ querySet.insert(query);
+ return MD5Hash(query);
+}
+
+std::string SearchResults::PopQuery(std::string const& md5)
+{
+ std::string query;
+ if (!md5.empty())
+ {
+ std::set<std::string>::iterator it;
+ for (it = querySet.begin(); it != querySet.end(); it++)
+ {
+ if (md5 == MD5Hash(*it))
+ {
+ query = *it;
+ querySet.erase(it);
+ break;
+ }
+ }
+ }
+ return query;
+}
+
} // namespace vdrlive
diff --git a/epgsearch.h b/epgsearch.h
index 604d328..cde0679 100644
--- a/epgsearch.h
+++ b/epgsearch.h
@@ -3,6 +3,7 @@
#include <vector>
#include <list>
+#include <set>
#include <string>
#include <vdr/channels.h>
#include <vdr/epg.h>
@@ -335,13 +336,16 @@ private:
class SearchResults
{
+ static std::set<std::string> querySet;
public:
typedef std::list< SearchResult > searchresults;
typedef searchresults::size_type size_type;
typedef searchresults::iterator iterator;
typedef searchresults::const_iterator const_iterator;
- SearchResults(int searchId);
+ SearchResults() {}
+ void GetByID(int id);
+ void GetByQuery(std::string const& query);
size_type size() const { return m_list.size(); }
@@ -349,6 +353,10 @@ public:
const_iterator begin() const { return m_list.begin(); }
iterator end() { return m_list.end(); }
const_iterator end() const { return m_list.end(); }
+
+ static std::string AddQuery(std::string const& query);
+ static std::string PopQuery(std::string const& md5);
+ static std::string MD5Hash(std::string const& query);
private:
searchresults m_list;
};