MythTV  master
Public Slots | Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | Friends | List of all members
MediaMonitor Class Referenceabstract

#include <mythmediamonitor.h>

Inheritance diagram for MediaMonitor:
Inheritance graph
[legend]
Collaboration diagram for MediaMonitor:
Collaboration graph
[legend]

Public Slots

void mediaStatusChanged (MythMediaStatus oldStatus, MythMediaDevice *pMedia)
 Slot which is called when the device status changes and posts a media event to the mainwindow. More...
 

Public Member Functions

virtual void deleteLater (void)
 
bool IsActive (void) const
 
virtual void StartMonitoring (void)
 Start the monitoring thread if needed. More...
 
void StopMonitoring (void)
 Stop the monitoring thread if needed. More...
 
void ChooseAndEjectMedia (void)
 Unmounts and ejects removable media devices. More...
 
void EjectMedia (const QString &path)
 
bool ValidateAndLock (MythMediaDevice *pMedia)
 Validates the MythMediaDevice and increments its reference count. More...
 
void Unlock (MythMediaDevice *pMedia)
 decrements the MythMediaDevices reference count More...
 
QList< MythMediaDevice * > GetRemovable (bool showMounted=false, bool showUsable=false)
 Generate a list of removable drives. More...
 
QList< MythMediaDevice * > GetMedias (unsigned mediatypes)
 Ask for available media. More...
 
MythMediaDeviceGetMedia (const QString &path)
 Get media device by pathname. More...
 
void RegisterMediaHandler (const QString &destination, const QString &description, void(*callback)(MythMediaDevice *), int mediaType, const QString &extensions)
 Register a handler for media related events. More...
 
void JumpToMediaHandler (MythMediaDevice *pMedia)
 Find a relevant jump point for this type of media. More...
 
virtual QStringList GetCDROMBlockDevices (void)=0
 

Static Public Member Functions

static MediaMonitorGetMediaMonitor (void)
 
static QString GetMountPath (const QString &devPath)
 If the device is being monitored, return its mountpoint. More...
 
static void SetCDSpeed (const char *device, int speed)
 
static QString defaultCDdevice ()
 CDDevice, user-selected drive, or /dev/cdrom. More...
 
static QString defaultVCDdevice ()
 VCDDeviceLocation, user-selected drive, or /dev/cdrom. More...
 
static QString defaultDVDdevice ()
 DVDDeviceLocation, user-selected drive, or /dev/dvd. More...
 
static QString defaultCDWriter ()
 CDWriterDeviceLocation, user-selected drive, or /dev/cdrom. More...
 
static QString defaultDVDWriter ()
 MythArchiveDVDLocation, user-selected drive, or /dev/dvd. More...
 
static void ejectOpticalDisc (void)
 Eject a disk, unmount a drive, open a tray. More...
 

Protected Member Functions

 MediaMonitor (QObject *par, unsigned long interval, bool allowEject)
 Lookup some settings, and do OS-specific stuff in sub-classes. More...
 
virtual ~MediaMonitor ()=default
 
void AttemptEject (MythMediaDevice *device)
 
void CheckDevices (void)
 Poll the devices in our list. More...
 
virtual void CheckDeviceNotifications (void)
 
virtual bool AddDevice (MythMediaDevice *pDevice)=0
 
bool RemoveDevice (const QString &dev)
 Remove a device from the media monitor. More...
 
bool shouldIgnore (const MythMediaDevice *device)
 Check user preferences to see if this device should be monitored. More...
 
bool eventFilter (QObject *obj, QEvent *event) override
 Installed into the main window's event chain, so that the main thread can safely jump to plugin code. More...
 
QString listDevices (void)
 A string summarising the current devices, for debugging. More...
 
MythMediaDeviceselectDrivePopup (const QString &label, bool showMounted=false, bool showUsable=false)
 List removable drives, let the user select one. More...
 

Static Protected Member Functions

static QString defaultDevice (const QString &setting, const QString &label, const char *hardCodedDefault)
 

Protected Attributes

QMutex m_DevicesLock
 
QList< MythMediaDevice * > m_Devices
 
QList< MythMediaDevice * > m_RemovedDevices
 
QMap< MythMediaDevice *, int > m_UseCount
 
QStringList m_IgnoreList
 
bool volatile m_Active {false}
 Was MonitorThread started? More...
 
QWaitCondition m_wait
 
MonitorThreadm_Thread {nullptr}
 
unsigned long m_MonitorPollingInterval
 
bool m_AllowEject
 
QMap< QString, MHDatam_handlerMap
 Registered Media Handlers. More...
 

Static Protected Attributes

static MediaMonitors_monitor = nullptr
 

Friends

class MonitorThread
 
class MonitorThreadDarwin
 

Detailed Description

Definition at line 39 of file mythmediamonitor.h.

Constructor & Destructor Documentation

◆ MediaMonitor()

MediaMonitor::MediaMonitor ( QObject *  par,
unsigned long  interval,
bool  allowEject 
)
protected

Lookup some settings, and do OS-specific stuff in sub-classes.

Bug:
If the user changes the MonitorDrives or IgnoreDevices settings, it will have no effect until the frontend is restarted.

Definition at line 347 of file mythmediamonitor.cpp.

◆ ~MediaMonitor()

virtual MediaMonitor::~MediaMonitor ( )
protectedvirtualdefault

Member Function Documentation

◆ deleteLater()

void MediaMonitor::deleteLater ( void  )
virtual

Reimplemented in MediaMonitorUnix.

Definition at line 385 of file mythmediamonitor.cpp.

Referenced by MediaMonitorUnix::deleteLater(), and main().

◆ IsActive()

bool MediaMonitor::IsActive ( void  ) const
inline

Definition at line 47 of file mythmediamonitor.h.

Referenced by Ripper::Ripper().

◆ StartMonitoring()

void MediaMonitor::StartMonitoring ( void  )
virtual

Start the monitoring thread if needed.

Reimplemented in MediaMonitorDarwin.

Definition at line 461 of file mythmediamonitor.cpp.

Referenced by main(), and Ripper::~Ripper().

◆ StopMonitoring()

void MediaMonitor::StopMonitoring ( void  )

Stop the monitoring thread if needed.

Definition at line 484 of file mythmediamonitor.cpp.

Referenced by deleteLater(), and Ripper::Ripper().

◆ ChooseAndEjectMedia()

void MediaMonitor::ChooseAndEjectMedia ( void  )

Unmounts and ejects removable media devices.

If no media devices are known to the MediaMonitor this function does nothing. If a single device is known, it is unmounted and ejected if possible. If multiple devices are known, a popup box is display so the user can choose which device to eject.

Definition at line 257 of file mythmediamonitor.cpp.

Referenced by ejectOpticalDisc().

◆ EjectMedia()

void MediaMonitor::EjectMedia ( const QString &  path)

Definition at line 279 of file mythmediamonitor.cpp.

Referenced by Device::Close().

◆ GetMediaMonitor()

MediaMonitor * MediaMonitor::GetMediaMonitor ( void  )
static

◆ GetMountPath()

QString MediaMonitor::GetMountPath ( const QString &  devPath)
static

If the device is being monitored, return its mountpoint.

A convenience function for plugins. (Only currently needed for Mac OS X, which mounts Audio CDs)

Definition at line 572 of file mythmediamonitor.cpp.

◆ SetCDSpeed()

void MediaMonitor::SetCDSpeed ( const char *  device,
int  speed 
)
static

Definition at line 102 of file mythmediamonitor.cpp.

Referenced by DVDRingBuffer::SetDVDSpeed().

◆ ValidateAndLock()

bool MediaMonitor::ValidateAndLock ( MythMediaDevice pMedia)

Validates the MythMediaDevice and increments its reference count.

Returns true if pMedia device is valid, otherwise returns false. If this function returns false the caller should gracefully recover.

NOTE: This function can block.

See also
Unlock(MythMediaDevice *pMedia), GetMedias(unsigned mediatypes)

Definition at line 507 of file mythmediamonitor.cpp.

Referenced by defaultDevice(), ImageManagerFe::DetectLocalDevices(), ImageManagerFe::DeviceEvent(), Ripper::ejectCD(), GetMountPath(), IconView::HandleMediaDeviceSelect(), IconView::HandleMediaEscape(), IconView::HandleShowDevices(), IconView::ReloadSettings(), and SetCDSpeed().

◆ Unlock()

void MediaMonitor::Unlock ( MythMediaDevice pMedia)

◆ GetRemovable()

QList< MythMediaDevice * > MediaMonitor::GetRemovable ( bool  showMounted = false,
bool  showUsable = false 
)

Generate a list of removable drives.

Has to iterate through all devices to check if any are suitable.

Definition at line 156 of file mythmediamonitor.cpp.

Referenced by selectDrivePopup().

◆ GetMedias()

QList< MythMediaDevice * > MediaMonitor::GetMedias ( unsigned  mediatypes)

Ask for available media.

Must be locked with ValidateAndLock().

This method returns a list of MythMediaDevice pointers which match the given mediatype.

It is potentially unsafe to use the pointers returned by this function. The devices may be removed and their associated MythMediaDevice objects destroyed. It is the responsibility of the caller to ensure that the pointers are validated and the reference count is incremented by calling MediaMonitor::ValidateAndLock() before the the returned pointer is dereferenced and MediaMonitor::Unlock() when done.

See also
ValidateAndLock(MythMediaDevice *pMedia)
Unlock(MythMediaDevice *pMedia)

Definition at line 619 of file mythmediamonitor.cpp.

Referenced by ImageManagerFe::DetectLocalDevices(), IconView::HandleMediaEscape(), and IconView::HandleShowDevices().

◆ GetMedia()

MythMediaDevice * MediaMonitor::GetMedia ( const QString &  path)

Get media device by pathname.

Must be locked with ValidateAndLock().

See also
ValidateAndLock(MythMediaDevice *pMedia)
Unlock(MythMediaDevice *pMedia)

Definition at line 547 of file mythmediamonitor.cpp.

Referenced by Ripper::ejectCD(), EjectMedia(), GetMountPath(), and SetCDSpeed().

◆ RegisterMediaHandler()

void MediaMonitor::RegisterMediaHandler ( const QString &  destination,
const QString &  description,
void(*)(MythMediaDevice *)  callback,
int  mediaType,
const QString &  extensions 
)

Register a handler for media related events.

This method registers a callback function for when media related events occur. The call must specify the type of media supported by the handler, and (if needed) a list of media file extensions that are supported.

Parameters
destinationA name for this callback function. For example: "MythDVD DVD Media Handler". This argument must be unique as it is also used as the key for creating the map of handler.
descriptionUnused.
callbackThe function to call when an event occurs.
mediaTypeThe type of media supported by this callback. The value must be an enum of type MythMediaType.
extensionsA list of file name extensions supported by this callback.

Definition at line 659 of file mythmediamonitor.cpp.

◆ JumpToMediaHandler()

void MediaMonitor::JumpToMediaHandler ( MythMediaDevice pMedia)

Find a relevant jump point for this type of media.

If there's more than one we should show a popup to allow the user to select which one to use, but for now, we're going to just use the first one.

Definition at line 697 of file mythmediamonitor.cpp.

Referenced by eventFilter().

◆ defaultCDdevice()

QString MediaMonitor::defaultCDdevice ( )
static

CDDevice, user-selected drive, or /dev/cdrom.

Definition at line 900 of file mythmediamonitor.cpp.

◆ defaultVCDdevice()

QString MediaMonitor::defaultVCDdevice ( )
static

VCDDeviceLocation, user-selected drive, or /dev/cdrom.

Definition at line 908 of file mythmediamonitor.cpp.

◆ defaultDVDdevice()

QString MediaMonitor::defaultDVDdevice ( )
static

DVDDeviceLocation, user-selected drive, or /dev/dvd.

Definition at line 917 of file mythmediamonitor.cpp.

Referenced by playDisc().

◆ defaultCDWriter()

QString MediaMonitor::defaultCDWriter ( )
static

CDWriterDeviceLocation, user-selected drive, or /dev/cdrom.

Definition at line 926 of file mythmediamonitor.cpp.

◆ defaultDVDWriter()

QString MediaMonitor::defaultDVDWriter ( )
static

MythArchiveDVDLocation, user-selected drive, or /dev/dvd.

This should also look for drives with blanks or RWs in them, but Nigel hasn't worked out how to do this tidily (yet).

Definition at line 938 of file mythmediamonitor.cpp.

◆ ejectOpticalDisc()

void MediaMonitor::ejectOpticalDisc ( void  )
static

Eject a disk, unmount a drive, open a tray.

If the Media Monitor is enabled, we use its fully-featured routine. Otherwise, we guess a drive and use a primitive OS-specific command

Definition at line 982 of file mythmediamonitor.cpp.

Referenced by eject_cb(), and IconView::HandleEject().

◆ GetCDROMBlockDevices()

virtual QStringList MediaMonitor::GetCDROMBlockDevices ( void  )
pure virtual

◆ mediaStatusChanged

void MediaMonitor::mediaStatusChanged ( MythMediaStatus  oldStatus,
MythMediaDevice pMedia 
)
slot

Slot which is called when the device status changes and posts a media event to the mainwindow.

Definition at line 732 of file mythmediamonitor.cpp.

Referenced by MediaMonitorWindows::AddDevice(), MediaMonitorDarwin::AddDevice(), and MediaMonitorUnix::AddDevice().

◆ AttemptEject()

void MediaMonitor::AttemptEject ( MythMediaDevice device)
protected

Definition at line 287 of file mythmediamonitor.cpp.

Referenced by ChooseAndEjectMedia(), and EjectMedia().

◆ CheckDevices()

void MediaMonitor::CheckDevices ( void  )
protected

Poll the devices in our list.

Definition at line 440 of file mythmediamonitor.cpp.

◆ CheckDeviceNotifications()

virtual void MediaMonitor::CheckDeviceNotifications ( void  )
inlineprotectedvirtual

Reimplemented in MediaMonitorUnix.

Definition at line 96 of file mythmediamonitor.h.

Referenced by CheckDevices().

◆ AddDevice()

virtual bool MediaMonitor::AddDevice ( MythMediaDevice pDevice)
protectedpure virtual

◆ RemoveDevice()

bool MediaMonitor::RemoveDevice ( const QString &  dev)
protected

Remove a device from the media monitor.

This function is usually called after a hotpluggable device is unplugged.

Parameters
devpath to device special file to remove.
Returns
true if device is removed from the Media Monitor.

Definition at line 404 of file mythmediamonitor.cpp.

Referenced by MediaMonitorUnix::CheckDeviceNotifications().

◆ shouldIgnore()

bool MediaMonitor::shouldIgnore ( const MythMediaDevice device)
protected

Check user preferences to see if this device should be monitored.

Definition at line 779 of file mythmediamonitor.cpp.

Referenced by MediaMonitorDarwin::AddDevice(), and MediaMonitorUnix::AddDevice().

◆ eventFilter()

bool MediaMonitor::eventFilter ( QObject *  obj,
QEvent *  event 
)
overrideprotected

Installed into the main window's event chain, so that the main thread can safely jump to plugin code.

Definition at line 807 of file mythmediamonitor.cpp.

◆ listDevices()

QString MediaMonitor::listDevices ( void  )
protected

A string summarising the current devices, for debugging.

Definition at line 950 of file mythmediamonitor.cpp.

Referenced by MediaMonitorUnix::MediaMonitorUnix(), and MediaMonitorWindows::MediaMonitorWindows().

◆ defaultDevice()

QString MediaMonitor::defaultDevice ( const QString &  setting,
const QString &  label,
const char *  hardCodedDefault 
)
staticprotected

◆ selectDrivePopup()

MythMediaDevice * MediaMonitor::selectDrivePopup ( const QString &  label,
bool  showMounted = false,
bool  showUsable = false 
)
protected

List removable drives, let the user select one.

prevent drawing a list if there is only one drive, et cetera

Definition at line 184 of file mythmediamonitor.cpp.

Referenced by ChooseAndEjectMedia(), and defaultDevice().

Friends And Related Function Documentation

◆ MonitorThread

friend class MonitorThread
friend

Definition at line 42 of file mythmediamonitor.h.

Referenced by StartMonitoring().

◆ MonitorThreadDarwin

friend class MonitorThreadDarwin
friend

Definition at line 43 of file mythmediamonitor.h.

Referenced by MediaMonitorDarwin::StartMonitoring().

Member Data Documentation

◆ m_DevicesLock

QMutex MediaMonitor::m_DevicesLock
protected

◆ m_Devices

QList<MythMediaDevice*> MediaMonitor::m_Devices
protected

◆ m_RemovedDevices

QList<MythMediaDevice*> MediaMonitor::m_RemovedDevices
protected

Definition at line 114 of file mythmediamonitor.h.

Referenced by RemoveDevice(), and Unlock().

◆ m_UseCount

QMap<MythMediaDevice*, int> MediaMonitor::m_UseCount
protected

◆ m_IgnoreList

QStringList MediaMonitor::m_IgnoreList
protected

Definition at line 118 of file mythmediamonitor.h.

Referenced by MediaMonitor(), and shouldIgnore().

◆ m_Active

bool volatile MediaMonitor::m_Active {false}
protected

◆ m_wait

QWaitCondition MediaMonitor::m_wait
protected

Definition at line 121 of file mythmediamonitor.h.

Referenced by StopMonitoring().

◆ m_Thread

MonitorThread* MediaMonitor::m_Thread {nullptr}
protected

◆ m_MonitorPollingInterval

unsigned long MediaMonitor::m_MonitorPollingInterval
protected

Definition at line 123 of file mythmediamonitor.h.

Referenced by MediaMonitorDarwin::StartMonitoring(), and StartMonitoring().

◆ m_AllowEject

bool MediaMonitor::m_AllowEject
protected

◆ m_handlerMap

QMap<QString, MHData> MediaMonitor::m_handlerMap
protected

Registered Media Handlers.

Definition at line 126 of file mythmediamonitor.h.

Referenced by eventFilter(), JumpToMediaHandler(), and RegisterMediaHandler().

◆ s_monitor

MediaMonitor * MediaMonitor::s_monitor = nullptr
staticprotected

Definition at line 128 of file mythmediamonitor.h.

Referenced by defaultDevice(), GetMediaMonitor(), and GetMountPath().


The documentation for this class was generated from the following files: