/**
* ======================== 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;
//}