00001 #ifndef MYTH_MEDIA_MONITOR_H
00002 #define MYTH_MEDIA_MONITOR_H
00003
00004 #include <qvaluelist.h>
00005 #include <qguardedptr.h>
00006 #include <qthread.h>
00007 #include <qstring.h>
00008
00009 #include "mythmedia.h"
00010
00011 const int kMediaEventType = 30042;
00012
00013 class MPUBLIC MediaEvent : public QCustomEvent
00014 {
00015 public:
00016 MediaEvent(MediaStatus oldStatus, MythMediaDevice* pDevice)
00017 : QCustomEvent(kMediaEventType)
00018 { m_OldStatus = oldStatus; m_Device = pDevice;}
00019
00020 MediaStatus getOldStatus(void) const { return m_OldStatus; }
00021 MythMediaDevice* getDevice(void) { return m_Device; }
00022
00023 protected:
00024 MediaStatus m_OldStatus;
00025 QGuardedPtr<MythMediaDevice> m_Device;
00026 };
00027
00028 class MediaMonitor;
00029 class MonitorThread : public QThread
00030 {
00031 public:
00032 MonitorThread(MediaMonitor* pMon, unsigned long interval);
00033 void setMonitor(MediaMonitor* pMon) { m_Monitor = pMon; }
00034 virtual void run(void);
00035
00036 protected:
00037 QGuardedPtr<MediaMonitor> m_Monitor;
00038 unsigned long m_Interval;
00039 };
00040
00041 class MPUBLIC MediaMonitor : public QObject
00042 {
00043 Q_OBJECT
00044 friend class MonitorThread;
00045 friend class MonitorThreadDarwin;
00046
00047 protected:
00048 MediaMonitor(QObject* par, unsigned long interval, bool allowEject);
00049
00050 public:
00051 ~MediaMonitor();
00052
00053 bool IsActive(void) const { return m_Active; }
00054
00055 virtual void StartMonitoring(void);
00056 void StopMonitoring(void);
00057 void ChooseAndEjectMedia(void);
00058
00059 static MediaMonitor *GetMediaMonitor(void);
00060 static QString GetMountPath(const QString& devPath);
00061 static void SetCDSpeed(const char *device, int speed);
00062
00063 bool ValidateAndLock(MythMediaDevice *pMedia);
00064 void Unlock(MythMediaDevice *pMedia);
00065
00066
00067
00068
00069 QValueList<MythMediaDevice*> GetMedias(MediaType mediatype);
00070 MythMediaDevice* GetMedia(const QString &path);
00071
00072 void MonitorRegisterExtensions(uint mediaType, const QString &extensions);
00073
00074
00075 static QString defaultCDdevice();
00076 static QString defaultVCDdevice();
00077 static QString defaultDVDdevice();
00078 static QString defaultCDWriter();
00079 static QString defaultDVDWriter();
00080
00081 virtual QStringList GetCDROMBlockDevices(void) = 0;
00082
00083 public slots:
00084 void mediaStatusChanged(MediaStatus oldStatus, MythMediaDevice* pMedia);
00085
00086 protected:
00087 void CheckDevices(void);
00088 virtual void CheckDeviceNotifications(void) {};
00089 virtual bool AddDevice(MythMediaDevice* pDevice) = 0;
00090 bool RemoveDevice(const QString &dev);
00091 bool shouldIgnore(MythMediaDevice *device);
00092
00093 const QString listDevices(void);
00094
00095 static QString defaultDevice(const QString setting,
00096 const QString label, char *hardCodedDefault);
00097 MythMediaDevice *selectDrivePopup(const QString label, bool mounted=false);
00098
00099 protected:
00100 QMutex m_DevicesLock;
00101 QValueList<MythMediaDevice*> m_Devices;
00102 QValueList<MythMediaDevice*> m_RemovedDevices;
00103 QMap<MythMediaDevice*, int> m_UseCount;
00104
00105
00106 QStringList m_IgnoreList;
00107
00108 bool m_Active;
00109 bool m_SendEvent;
00110 bool m_StartThread;
00111
00112 MonitorThread *m_Thread;
00113 unsigned long m_MonitorPollingInterval;
00114 bool m_AllowEject;
00115
00116 static MediaMonitor *c_monitor;
00117 };
00118
00119 #endif // MYTH_MEDIA_MONITOR_H