diff options
-rw-r--r-- | epgsearch.cpp | 54 | ||||
-rw-r--r-- | epgsearch.h | 10 |
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; }; |