fixed: Improved DVDPlayer to fix problem with switch channels
[xbmc:xbmc-antiquated.git] / XBMC / xbmc / pvrclients / PVRClient.h
1 #pragma once
2 /*
3  *      Copyright (C) 2005-2009 Team XBMC
4  *      http://www.xbmc.org
5  *
6  *  This Program 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, or (at your option)
9  *  any later version.
10  *
11  *  This Program 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 XBMC; see the file COPYING.  If not, write to
18  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19  *  http://www.gnu.org/copyleft/gpl.html
20  *
21  */
22
23 #include "IPVRClient.h"
24 #include "../utils/Addon.h"
25 #include "DllPVRClient.h"
26 #include "../addons/lib/addon_local.h"
27
28 class CPVRClient : public IPVRClient
29 {
30 public:
31   CPVRClient(const long clientID, struct PVRClient* pClient, DllPVRClient* pDll,
32                const ADDON::CAddon& addon, IPVRClientCallback *pvrCB);
33   ~CPVRClient();
34
35   /* DLL related */
36   bool Init();
37   void DeInit();
38   bool ReInit();
39   bool ReadyToUse() { return m_ReadyToUse; }
40   virtual ADDON_STATUS GetStatus();
41   virtual ADDON_STATUS SetSetting(const char *settingName, const void *settingValue);
42
43   /* Server */
44   virtual long GetID();
45   virtual PVR_ERROR GetProperties(PVR_SERVERPROPS *props);
46
47   /* General */
48   virtual const std::string GetBackendName();
49   virtual const std::string GetBackendVersion();
50   virtual const std::string GetConnectionString();
51   virtual PVR_ERROR GetDriveSpace(long long *total, long long *used);
52
53   /* TV Guide */
54   virtual PVR_ERROR GetEPGForChannel(const cPVRChannelInfoTag &channelinfo, cPVREpg *epg, time_t start, time_t end);
55
56   /* Channels */
57   virtual int GetNumChannels();
58   virtual PVR_ERROR GetChannelList(cPVRChannels &channels, bool radio);
59   virtual PVR_ERROR GetChannelSettings(cPVRChannelInfoTag *result);
60   virtual PVR_ERROR UpdateChannelSettings(const cPVRChannelInfoTag &chaninfo);
61   virtual PVR_ERROR AddChannel(const cPVRChannelInfoTag &info);
62   virtual PVR_ERROR DeleteChannel(unsigned int number);
63   virtual PVR_ERROR RenameChannel(unsigned int number, CStdString &newname);
64   virtual PVR_ERROR MoveChannel(unsigned int number, unsigned int newnumber);
65
66   /* Recordings */
67   virtual int GetNumRecordings(void);
68   virtual PVR_ERROR GetAllRecordings(cPVRRecordings *results);
69   virtual PVR_ERROR DeleteRecording(const cPVRRecordingInfoTag &recinfo);
70   virtual PVR_ERROR RenameRecording(const cPVRRecordingInfoTag &recinfo, CStdString &newname);
71
72   /* Timers */
73   virtual int GetNumTimers(void);
74   virtual PVR_ERROR GetAllTimers(cPVRTimers *results);
75   virtual PVR_ERROR AddTimer(const cPVRTimerInfoTag &timerinfo);
76   virtual PVR_ERROR DeleteTimer(const cPVRTimerInfoTag &timerinfo, bool force = false);
77   virtual PVR_ERROR RenameTimer(const cPVRTimerInfoTag &timerinfo, CStdString &newname);
78   virtual PVR_ERROR UpdateTimer(const cPVRTimerInfoTag &timerinfo);
79
80   virtual bool OpenLiveStream(const cPVRChannelInfoTag &channelinfo);
81   virtual void CloseLiveStream();
82   virtual int ReadLiveStream(BYTE* buf, int buf_size);
83   virtual __int64 SeekLiveStream(__int64 pos, int whence=SEEK_SET);
84   virtual __int64 LengthLiveStream(void);
85   virtual int GetCurrentClientChannel();
86   virtual bool SwitchChannel(const cPVRChannelInfoTag &channelinfo);
87   virtual bool SignalQuality(PVR_SIGNALQUALITY &qualityinfo);
88
89   virtual bool OpenRecordedStream(const cPVRRecordingInfoTag &recinfo);
90   virtual void CloseRecordedStream(void);
91   virtual int ReadRecordedStream(BYTE* buf, int buf_size);
92   virtual __int64 SeekRecordedStream(__int64 pos, int whence=SEEK_SET);
93   virtual __int64 LengthRecordedStream(void);
94
95   virtual bool OpenTVDemux(PVRDEMUXHANDLE handle, const cPVRChannelInfoTag &channelinfo);
96   virtual bool OpenRecordingDemux(PVRDEMUXHANDLE handle, const cPVRRecordingInfoTag &recinfo);
97   virtual void DisposeDemux();
98   virtual void ResetDemux();
99   virtual void FlushDemux();
100   virtual void AbortDemux();
101   virtual void SetDemuxSpeed(int iSpeed);
102   virtual demux_packet_t* ReadDemux();
103   virtual bool SeekDemuxTime(int time, bool backwords, double* startpts);
104   virtual int GetDemuxStreamLength();
105
106 protected:
107   std::auto_ptr<struct PVRClient> m_pClient;
108   std::auto_ptr<DllPVRClient> m_pDll;
109   const                 long m_clientID;
110   bool                  m_ReadyToUse;
111   IPVRClientCallback   *m_manager;
112   AddonCB              *m_callbacks;
113   CStdString            m_hostName;
114   CCriticalSection      m_critSection;
115
116 private:
117   void WriteClientChannelInfo(const cPVRChannelInfoTag &channelinfo, PVR_CHANNEL &tag);
118   void WriteClientTimerInfo(const cPVRTimerInfoTag &timerinfo, PVR_TIMERINFO &tag);
119   void WriteClientRecordingInfo(const cPVRRecordingInfoTag &recordinginfo, PVR_RECORDINGINFO &tag);
120   static void PVRResetPlayer(void *userData);
121   static void PVRTransferEpgEntry(void *userData, const PVRHANDLE handle, const PVR_PROGINFO *epgentry);
122   static void PVRTransferChannelEntry(void *userData, const PVRHANDLE handle, const PVR_CHANNEL *channel);
123   static void PVRTransferTimerEntry(void *userData, const PVRHANDLE handle, const PVR_TIMERINFO *timer);
124   static void PVRTransferRecordingEntry(void *userData, const PVRHANDLE handle, const PVR_RECORDINGINFO *recording);
125   static void PVREventCallback(void *userData, const PVR_EVENT pvrevent, const char *msg);
126 };
127
128 typedef std::vector<CPVRClient*> VECCLIENTS;