1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
/**
* ======================== legal notice ======================
*
* File: AbstractMultiFileMovie.cc
* Created: 3. Juli 2012, 07:39
* Author: <a href="mailto:geronimo013@gmx.de">Geronimo</a>
* 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 <AbstractMultiFileMovie.h>
#include <Logging.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
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;
//}
|