]> git.vomp.tv Git - vompclient.git/blob - media.cc
Media Player From Andreas Vogel
[vompclient.git] / media.cc
1 /*
2     Copyright 2004-2005 Chris Tallon, Andreas Vogel
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21 #include "media.h"
22 #include "vdr.h"
23 #include <time.h>
24
25 Media* Media::recInfoFor = NULL;
26
27
28 Media::Media()
29 {
30   start = 0;
31   displayName = NULL;
32   fileName = NULL;
33   index = -1;
34   markList = NULL;
35   mediaType=MEDIA_TYPE_UNKNOWN;
36 }
37
38 Media::~Media()
39 {
40   if (displayName) { delete[] displayName; displayName = NULL; }
41   if (fileName) { delete[] fileName; fileName = NULL; }
42   index = -1; // just in case
43
44   if (markList && markList->size())
45   {
46     for(UINT i = 0; i < markList->size(); i++)
47     {
48       delete (*markList)[i];
49     }
50     markList->clear();
51     Log::getInstance()->log("Media", Log::DEBUG, "Media destructor, marks list deleted");
52   }
53
54   if (markList) delete markList;
55 }
56
57 ULONG Media::getTime() const
58 {
59   return start;
60 }
61
62 const char* Media::getDisplayName() const
63 {
64   if (displayName) return displayName;
65   return fileName;
66 }
67
68 const char* Media::getFileName() const
69 {
70   return fileName;
71 }
72
73 void Media::setTime(ULONG tstartTime)
74 {
75   start = tstartTime;
76 }
77
78 void Media::setMediaType(int mtype)
79 {
80   mediaType=mtype;
81 }
82
83 int Media::getMediaType() const
84 {
85   return mediaType;
86 }
87
88 void Media::setDisplayName(char* tDisplayName)
89 {
90   if (displayName) delete[] displayName;
91
92   displayName = new char[strlen(tDisplayName) + 1];
93   if (displayName) strcpy(displayName, tDisplayName);
94 }
95
96 void Media::setFileName(char* tFileName)
97 {
98   if (fileName) delete[] fileName;
99
100   fileName = new char[strlen(tFileName) + 1];
101   if (fileName) strcpy(fileName, tFileName);
102 }
103
104 char * Media::getTimeString(char * buffer) const {
105   if (! buffer) buffer=new char[TIMEBUFLEN];
106   struct tm ltime;
107   time_t recStartTime = (time_t)getTime();
108   struct tm *btime = localtime_r(&recStartTime,&ltime);
109   if (btime && recStartTime != 0) {
110 #ifndef _MSC_VER
111   strftime(buffer,TIMEBUFLEN, "%0g/%0m/%0d %0H:%0M ", btime);
112 #else
113   strftime(buffer, TIMEBUFLEN, "%g/%m/%d %H:%M ", btime);
114 #endif
115   }
116   else {
117     snprintf(buffer,TIMEBUFLEN,"00/00/00 00:00 ");
118     }
119   return buffer;
120 }
121
122 void Media::loadMarks()
123 {
124   markList = VDR::getInstance()->getMarks(fileName);
125 }
126
127
128
129 int Media::getPrevMark(int currentFrame)
130 {
131   MarkList::reverse_iterator i;
132   Mark* loopMark = NULL;
133
134   if (!markList || !markList->size()) return 0;
135
136   for(i = markList->rbegin(); i != markList->rend(); i++)
137   {
138     loopMark = *i;
139     Log::getInstance()->log("Media", Log::NOTICE, "findprev:comparing Frame %i with current Frame %i",loopMark->pos,currentFrame);
140
141     if (loopMark->pos < currentFrame)
142     {
143       Log::getInstance()->log("Media", Log::NOTICE, "findprev:setting pos %i to jumpframe_target",loopMark->pos);
144       return loopMark->pos;
145     }
146   }
147
148   // No previous mark
149   return 0;
150 }
151
152 int Media::getNextMark(int currentFrame)
153 {
154   MarkList::iterator i;
155   Mark* loopMark = NULL;
156
157   if (!markList || !markList->size()) return 0;
158
159   for(i = markList->begin(); i != markList->end(); i++)
160   {
161     loopMark = *i;
162     Log::getInstance()->log("Media", Log::NOTICE, "findnext:comparing Frame %i with current Frame %i",loopMark->pos,currentFrame);
163
164     if (loopMark->pos > currentFrame)
165     {
166       Log::getInstance()->log("Media", Log::NOTICE, "findnext:setting pos %i to jumpframe_target",loopMark->pos);
167       return loopMark->pos;
168     }
169   }
170
171   // No next mark
172   return 0;
173 }
174
175 bool Media::hasMarks()
176 {
177   return (markList && markList->size());
178 }
179
180 MarkList* Media::getMarkList()
181 {
182   return markList;
183 }