1 #ifndef __lib_dvb_serviceplaylist_h
2 #define __lib_dvb_serviceplaylist_h
4 #include <lib/dvb/service.h>
11 // PlaylistEntry types
12 PlaylistEntry
=1, // normal PlaylistEntry (no Timerlist entry)
13 SwitchTimerEntry
=2, // simple service switch timer
14 RecTimerEntry
=4, // timer do recording
16 recDVR
=8, // timer do DVR recording
17 recVCR
=16, // timer do VCR recording (LIRC) not used yet
18 recNgrab
=131072, // timer do record via Ngrab Server
20 stateWaiting
=32, // timer is waiting
21 stateRunning
=64, // timer is running
22 statePaused
=128, // timer is paused
23 stateFinished
=256, // timer is finished
24 stateError
=512, // timer has error state(s)
26 errorNoSpaceLeft
=1024, // HDD no space Left ( recDVR )
27 errorUserAborted
=2048, // User Action aborts this event
28 errorZapFailed
=4096, // Zap to service failed
29 errorOutdated
=8192, // Outdated event
30 // box was switched off during the event
31 // advanced entry propertys
32 boundFile
=16384, // Playlistentry have an bounded file
33 isSmartTimer
=32768, // this is a smart timer (EIT related) not uses Yet
34 isRepeating
=262144, // this timer is repeating
35 doFinishOnly
=65536, // Finish an running event/action
36 // this events are automatically removed
37 // from the timerlist after finish
38 doShutdown
=67108864, // timer shutdown the box
39 doGoSleep
=134217728, // timer set box to standby
40 // Repeated Timer Days
41 Su
=524288, Mo
=1048576, Tue
=2097152,
42 Wed
=4194304, Thu
=8388608, Fr
=16777216, Sa
=33554432
44 eServicePath services
;
45 eServiceReference service
;
54 type
; // event type and current state of timer events...
55 ePlaylistEntry(const eServiceReference
&ref
)
56 :services(ref
), service(services
.path
.back()), current_position(-1), time_begin(-1), duration(-1), type(PlaylistEntry
)
58 ePlaylistEntry(const eServiceReference
&ref
, int current_position
)
59 :services(ref
), service(services
.path
.back()), current_position(current_position
), time_begin(-1), duration(-1), type(PlaylistEntry
)
61 ePlaylistEntry(const eServiceReference
&ref
, int time_begin
, int duration
, int event_id
=-1, int type
=SwitchTimerEntry
)
62 :services(ref
), service(services
.path
.back()), event_id(event_id
), time_begin(time_begin
), duration(duration
), type(type
)
64 ePlaylistEntry(const eServicePath
&p
)
65 :services(p
), service(services
.path
.back()), current_position(-1), time_begin(-1), duration(-1), type(PlaylistEntry
)
67 const eServicePath
&getPath() const { return services
; }
68 operator eServiceReference
&() { return service
; }
69 operator const eServiceReference
&() const { return service
; }
70 operator const eServicePath
&() const { return services
; }
72 bool operator == (const eServiceReference
&r
) const
76 bool operator == (const ePlaylistEntry
&e
) const
78 if ( type
== PlaylistEntry
)
79 return e
.service
== service
;
80 else if ( type
& isRepeating
)
81 return (e
.service
== service
)
82 && (e
.time_begin
== time_begin
)
83 && ((e
.type
& (Su
|Mo
|Tue
|Wed
|Thu
|Fr
|Sa
)) == (type
& (Su
|Mo
|Tue
|Wed
|Thu
|Fr
|Sa
)));
85 return e
.service
== service
&& e
.time_begin
== time_begin
;
87 bool operator < (const ePlaylistEntry
&e
) const
89 return ( service
.descr
.compare( e
.service
.descr
) < 0 ) ;
93 class ePlaylist
: public eService
96 std::list
<ePlaylistEntry
> list
;
99 int load(const char *filename
);
100 int save(const char *filename
=0);
102 std::list
<ePlaylistEntry
>::iterator current
;
105 const std::list
<ePlaylistEntry
>& getConstList() const { return list
; }
106 std::list
<ePlaylistEntry
>& getList() { changed
=1;return list
; }
108 int deleteService(std::list
<ePlaylistEntry
>::iterator it
);
109 int moveService(std::list
<ePlaylistEntry
>::iterator it
, std::list
<ePlaylistEntry
>::iterator before
);
115 class eServicePlaylistHandler
: public eServiceHandler
117 static eServicePlaylistHandler
*instance
;
118 void addFile(void *node
, const eString
&filename
);
120 std::multimap
<eServiceReference
,eServiceReference
> playlists
;
121 std::set
<int> usedUniqueIDs
;
123 enum { ID
= 0x1001 } ;
124 static eServicePlaylistHandler
*getInstance() { return instance
; }
126 eService
*createService(const eServiceReference
&node
);
128 eServicePlaylistHandler();
129 ~eServicePlaylistHandler();
131 // service list functions
132 void enterDirectory(const eServiceReference
&dir
, Signal1
<void,const eServiceReference
&> &callback
);
133 void leaveDirectory(const eServiceReference
&dir
);
135 eService
*addRef(const eServiceReference
&service
);
136 void removeRef(const eServiceReference
&service
);
138 // playlist functions
139 eServiceReference
newPlaylist(const eServiceReference
&parent
=eServiceReference(), const eServiceReference
&serviceref
=eServiceReference());
141 void removePlaylist(const eServiceReference
&service
);