00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 #ifndef MYTHXML_H_
00012 #define MYTHXML_H_
00013
00014 #include <qdom.h>
00015 #include <qdatetime.h>
00016
00017 #include "upnp.h"
00018
00019 #include "mainserver.h"
00020 #include "eventing.h"
00021
00022 #include "autoexpire.h"
00023 #include "mythcontext.h"
00024 #include "jobqueue.h"
00025 #include "programinfo.h"
00026
00027 extern QMap<int, EncoderLink *> tvList;
00028 extern AutoExpire *expirer;
00029 extern Scheduler *sched;
00030
00031 typedef enum
00032 {
00033 MXML_Unknown = 0,
00034 MXML_GetServiceDescription = 1,
00035
00036 MXML_GetProgramGuide = 2,
00037 MXML_GetHosts = 3,
00038 MXML_GetKeys = 4,
00039 MXML_GetSetting = 5,
00040 MXML_PutSetting = 6,
00041
00042 MXML_GetChannelIcon = 7,
00043 MXML_GetRecorded = 8,
00044 MXML_GetPreviewImage = 9,
00045
00046 MXML_GetRecording = 10,
00047 MXML_GetMusic = 11,
00048
00049 MXML_GetExpiring = 12,
00050 MXML_GetProgramDetails = 13,
00051 MXML_GetVideo = 14,
00052
00053 MXML_GetConnectionInfo = 15,
00054 MXML_GetAlbumArt = 16,
00055 MXML_GetVideoArt = 17
00056
00057 } MythXMLMethod;
00058
00061
00062
00063
00066
00067 class MythXML : public Eventing
00068 {
00069 private:
00070
00071 QString m_sControlUrl;
00072 QString m_sServiceDescFileName;
00073
00074 Scheduler *m_pSched;
00075 QMap<int, EncoderLink *> *m_pEncoders;
00076 AutoExpire *m_pExpirer;
00077 bool m_bIsMaster;
00078 int m_nPreRollSeconds;
00079
00080 protected:
00081
00082
00083
00084 virtual QString GetServiceType () { return "urn:schemas-mythtv-org:service:MythTv:1"; }
00085 virtual QString GetServiceId () { return "urn:mythtv-org:serviceId:MYTHTV_1-0"; }
00086 virtual QString GetServiceControlURL() { return m_sControlUrl.mid( 1 ); }
00087 virtual QString GetServiceDescURL () { return m_sControlUrl.mid( 1 ) + "/GetServDesc"; }
00088
00089 private:
00090
00091 MythXMLMethod GetMethod( const QString &sURI );
00092
00093 void GetProgramGuide( HTTPRequest *pRequest );
00094 void GetProgramDetails( HTTPRequest *pRequest );
00095
00096 void GetHosts ( HTTPRequest *pRequest );
00097 void GetKeys ( HTTPRequest *pRequest );
00098 void GetSetting ( HTTPRequest *pRequest );
00099 void PutSetting ( HTTPRequest *pRequest );
00100
00101 void GetChannelIcon ( HTTPRequest *pRequest );
00102 void GetRecorded ( HTTPRequest *pRequest );
00103 void GetPreviewImage( HTTPRequest *pRequest );
00104
00105 void GetConnectionInfo( HTTPRequest *pRequest );
00106 void GetAlbumArt ( HTTPRequest *pRequest );
00107 void GetVideoArt ( HTTPRequest *pRequest );
00108
00109 void GetExpiring ( HTTPRequest *pRequest );
00110
00111 void GetRecording ( HttpWorkerThread *pThread,
00112 HTTPRequest *pRequest );
00113
00114 void GetMusic ( HttpWorkerThread *pThread,
00115 HTTPRequest *pRequest );
00116
00117 void GetVideo ( HttpWorkerThread *pThread,
00118 HTTPRequest *pRequest );
00119
00120
00121 void GetDeviceDesc ( HTTPRequest *pRequest );
00122 void GetFile ( HTTPRequest *pRequest, QString sFileName );
00123
00124 public:
00125 MythXML( UPnpDevice *pDevice );
00126 virtual ~MythXML();
00127
00128 bool ProcessRequest( HttpWorkerThread *pThread, HTTPRequest *pRequest );
00129
00130
00131
00132 static void FillProgramInfo ( QDomDocument *pDoc,
00133 QDomNode &node,
00134 ProgramInfo *pInfo,
00135 bool bIncChannel = true,
00136 bool bDetails = true );
00137
00138 static void FillChannelInfo ( QDomElement &channel,
00139 ProgramInfo *pInfo,
00140 bool bDetails = true );
00141
00142 };
00143
00146
00147
00148
00151
00152 class ThreadData : public HttpWorkerData
00153 {
00154 public:
00155
00156 typedef enum
00157 {
00158 DT_Unknown = 0,
00159 DT_Recording = 1,
00160 DT_Music = 2,
00161 DT_Video = 3
00162
00163
00164 } ThreadDataType;
00165
00166
00167 ThreadDataType m_eType;
00168
00169 QString m_sChanId;
00170 QString m_sStartTime;
00171 QString m_sFileName;
00172 QString m_sVideoID;
00173
00174 int m_nTrackNumber;
00175
00176 public:
00177
00178 ThreadData( long nTrackNumber, const QString &sFileName )
00179 {
00180 m_eType = DT_Music;
00181 m_nTrackNumber = nTrackNumber;
00182 m_sFileName = sFileName;
00183 }
00184
00185 ThreadData( const QString &sChanId,
00186 const QString &sStartTime,
00187 const QString &sFileName )
00188 {
00189 m_eType = DT_Recording;
00190 m_sChanId = sChanId;
00191 m_sStartTime = sStartTime;
00192 m_sFileName = sFileName;
00193 }
00194
00195 ThreadData( const QString &sVideoID,
00196 const QString &sFileName )
00197 {
00198 m_eType = DT_Video;
00199 m_sVideoID = sVideoID;
00200 m_sFileName = sFileName;
00201 }
00202
00203
00204 virtual ~ThreadData()
00205 {
00206 }
00207
00208 bool IsSameRecording( const QString &sChanId,
00209 const QString &sStartTime )
00210 {
00211 return( (sChanId == m_sChanId ) && (sStartTime == m_sStartTime ));
00212 }
00213 };
00214
00215
00216 #endif