From 2d48ae784ea6828e8626c32c848f64232d8f35c0 Mon Sep 17 00:00:00 2001 From: geronimo Date: Fri, 13 Jul 2012 04:26:40 +0200 Subject: initial import --- libs/fsScan/src/AbstractMultiFileMovie.cc | 111 ++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 libs/fsScan/src/AbstractMultiFileMovie.cc (limited to 'libs/fsScan/src/AbstractMultiFileMovie.cc') diff --git a/libs/fsScan/src/AbstractMultiFileMovie.cc b/libs/fsScan/src/AbstractMultiFileMovie.cc new file mode 100644 index 0000000..bcbd115 --- /dev/null +++ b/libs/fsScan/src/AbstractMultiFileMovie.cc @@ -0,0 +1,111 @@ +/** + * ======================== legal notice ====================== + * + * File: AbstractMultiFileMovie.cc + * Created: 3. Juli 2012, 07:39 + * Author: Geronimo + * Project: libfsScan: mediatypes and filesystem 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 +#include + +cAbstractMultiFileMovie::cAbstractMultiFileMovie(const char *Name, const char *Logical, const char *Path, const char *Mime, SupportedMediaType Type) + : cMovie(Name, Logical, Path, Mime, Type) + , movieFiles(0) + , curFileNo(0) + , fileNameBuf(NULL) + , bufSize(0) +{ +} + +cAbstractMultiFileMovie::~cAbstractMultiFileMovie() +{ + free(fileNameBuf); +} + +size_t cAbstractMultiFileMovie::ReadChunk(char* Buf, size_t bufSize) +{ + long rv = 0; + + if (fd < 1) { + fd = open(FirstFile(), O_RDONLY | O_LARGEFILE); + if (fd < 1) { + esyslog("could not open requested path %s - Error #%d", FirstFile(), errno); + return 0; + } + } + isyslog("have filehandle #%d (%s)", fd, FirstFile()); + rv = read(fd, Buf, bufSize); + + if (rv < (long) bufSize) { + const char *nextFilename = NextFile(); + + if (nextFilename) { + close(fd); + fd = open(nextFilename, O_RDONLY | O_LARGEFILE); + if (fd < 1) { + esyslog("could not open requested path %s - Error #%d", nextFilename, errno); + return 0; + } + isyslog("have filehandle #%d (%s)", fd, nextFilename); + rv = read(fd, Buf, bufSize); + } + if (rv < (long) bufSize) { + close(fd); + fd = -1; + } + } + return rv; +} + +//int cAbstractMultiFileMovie::ReadBlah(char* buf, size_t bufSize) +//{ +// size_t bytesRead = 0; +// +// if (!fp) { +// if (!(fp = f open(FirstFile(), "r"))) { +// //TODO: add some verbose error message? +// return 0; +// } +// } +// +// bytesRead = f read(buf, sizeof(char), bufSize, fp); +// +// if (bytesRead < bufSize) { +// const char *nextFilename = NextFile(); +// +// if (nextFilename) { +// f close(fp); +// if (!(fp = f open(nextFilename, "r"))) { +// //TODO: be verbose +// return 0; +// } +// bytesRead += f read(buf + bytesRead, sizeof(char), bufSize - bytesRead, fp); +// } +// if (bytesRead < bufSize) { +// f close(fp); +// fp = NULL; +// } +// } +// return bytesRead; +//} -- cgit v1.2.3