/** * ======================== legal notice ====================== * * File: MediainfoReader.cc * Created: 30. Juli 2012, 15:03 * Author: Geronimo * Project: libMediaScan: mediatypes and media scanning * * CMP - compound media player * * is a client/server mediaplayer intended to play any media from any workstation * without the need to export or mount shares. cmps is an easy to use backend * with a (ready to use) HTML-interface. Additionally the backend supports * authentication via HTTP-digest authorization. * cmpc is a client with vdr-like osd-menues. * * Copyright (c) 2012 Reinhard Mantey, some rights reserved! * published under Creative Commons by-sa * For details see http://creativecommons.org/licenses/by-sa/3.0/ * * The cmp project's homepage is at http://projects.vdr-developer.org/projects/cmp * * -------------------------------------------------------------- */ #include #include #include #include #include static pcrecpp::RE comment("^\\s*#.*$"); static pcrecpp::RE emptyLine("^\\s*$"); static pcrecpp::RE entry("^\\s*(.+?)\\s*:\\s*(.+?)\\s*$"); std::vector cMediainfoReader::valuableKeys; cMediainfoReader::cMediainfoReader(cLineReader *LineReader) : reader(LineReader) { } cMediainfoReader::~cMediainfoReader() { Close(); } void cMediainfoReader::Close(void) { if (reader) { delete reader; reader = NULL; } } bool cMediainfoReader::IsValuable(std::string &key) { for (size_t i=0; i < valuableKeys.size(); ++i) { if (!strcmp(key.c_str(), valuableKeys[i].c_str())) return true; } return false; } cMediainfoReader::InfoEntry *cMediainfoReader::ReadEntry() { if (!reader) return NULL; const char *line = reader->ReadLine(); std::string name, value; InfoEntry *rv = NULL; do { if (line && entry.FullMatch(line, &name, &value)) { if (IsValuable(name)) { rv = new InfoEntry(name, value); break; } } line = reader->ReadLine(); } while (line && !rv); return rv; } void cMediainfoReader::Setup(const char* keys[]) { valuableKeys.clear(); for (const char **p = keys; p && *p; ++p) { valuableKeys.push_back(*p); } }