|
MythTV master
|
#include <libmythui/mediamonitor.h>
Public Slots | |
| void | mediaStatusChanged (MythMediaStatus oldStatus, MythMediaDevice *pMedia) const |
| 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... | |
| MythMediaDevice * | GetMedia (const QString &path) |
| Get media device by pathname. More... | |
| void | RegisterMediaHandler (const QString &destination, const QString &description, MediaCallback callback, int mediaType, const QString &extensions) |
| Register a handler for media related events. More... | |
| void | JumpToMediaHandler (MythMediaDevice *pMedia, bool forcePlayback=false) |
| Find a relevant jump point for this type of media. More... | |
| virtual QStringList | GetCDROMBlockDevices (void)=0 |
Static Public Member Functions | |
| static MediaMonitor * | GetMediaMonitor (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... | |
| ~MediaMonitor () override=default | |
| 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... | |
| MythMediaDevice * | selectDrivePopup (const QString &label, bool &canceled, bool showMounted=false, bool showUsable=false) |
| List removable drives, let the user select one. More... | |
Static Protected Member Functions | |
| static void | AttemptEject (MythMediaDevice *device) |
| static QString | defaultDevice (const QString &setting, const QString &label, const char *hardCodedDefault) |
Protected Attributes | |
| QRecursiveMutex | 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 |
| MonitorThread * | m_thread {nullptr} |
| unsigned long | m_monitorPollingInterval |
| bool | m_allowEject |
| QMap< QString, MHData > | m_handlerMap |
| Registered Media Handlers. More... | |
Static Protected Attributes | |
| static MediaMonitor * | s_monitor = nullptr |
Friends | |
| class | MonitorThread |
| class | MonitorThreadDarwin |
Definition at line 47 of file mediamonitor.h.
|
protected |
Lookup some settings, and do OS-specific stuff in sub-classes.
Definition at line 339 of file mediamonitor.cpp.
|
overrideprotecteddefault |
|
protectedpure virtual |
Implemented in MediaMonitorDarwin, MediaMonitorUnix, and MediaMonitorWindows.
|
staticprotected |
Definition at line 279 of file mediamonitor.cpp.
Referenced by ChooseAndEjectMedia(), and EjectMedia().
|
inlineprotectedvirtual |
Reimplemented in MediaMonitorUnix.
Definition at line 104 of file mediamonitor.h.
Referenced by CheckDevices().
|
protected |
Poll the devices in our list.
Definition at line 428 of file mediamonitor.cpp.
| 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 251 of file mediamonitor.cpp.
Referenced by ejectOpticalDisc().
|
static |
CDDevice, user-selected drive, or /dev/cdrom.
Definition at line 894 of file mediamonitor.cpp.
|
static |
CDWriterDeviceLocation, user-selected drive, or /dev/cdrom.
Definition at line 920 of file mediamonitor.cpp.
|
staticprotected |
Definition at line 849 of file mediamonitor.cpp.
Referenced by defaultCDdevice(), defaultCDWriter(), defaultDVDdevice(), defaultDVDWriter(), and defaultVCDdevice().
|
static |
DVDDeviceLocation, user-selected drive, or /dev/dvd.
Definition at line 911 of file mediamonitor.cpp.
Referenced by playDisc().
|
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 932 of file mediamonitor.cpp.
|
static |
VCDDeviceLocation, user-selected drive, or /dev/cdrom.
Definition at line 902 of file mediamonitor.cpp.
|
virtual |
Reimplemented in MediaMonitorUnix.
Definition at line 373 of file mediamonitor.cpp.
Referenced by MediaMonitorUnix::deleteLater(), and main().
| void MediaMonitor::EjectMedia | ( | const QString & | path | ) |
Definition at line 271 of file mediamonitor.cpp.
Referenced by Device::Close().
|
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 975 of file mediamonitor.cpp.
Referenced by eject_cb().
|
overrideprotected |
Installed into the main window's event chain, so that the main thread can safely jump to plugin code.
Definition at line 793 of file mediamonitor.cpp.
|
pure virtual |
Implemented in MediaMonitorDarwin, MediaMonitorUnix, and MediaMonitorWindows.
| MythMediaDevice * MediaMonitor::GetMedia | ( | const QString & | path | ) |
Get media device by pathname.
Must be locked with ValidateAndLock().
Definition at line 534 of file mediamonitor.cpp.
Referenced by Ripper::ejectCD(), EjectMedia(), GetMountPath(), and SetCDSpeed().
|
static |
Definition at line 75 of file mediamonitor.cpp.
Referenced by Device::Close(), defaultDevice(), ImageManagerFe::DetectLocalDevices(), ImageManagerFe::DeviceEvent(), Ripper::ejectCD(), ejectOpticalDisc(), main(), playDisc(), REG_MEDIA_HANDLER(), Ripper::Ripper(), SetCDSpeed(), and Ripper::~Ripper().
| 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.
Definition at line 605 of file mediamonitor.cpp.
Referenced by ImageManagerFe::DetectLocalDevices(), and playDisc().
|
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 558 of file mediamonitor.cpp.
| 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 145 of file mediamonitor.cpp.
Referenced by selectDrivePopup().
|
inline |
Definition at line 55 of file mediamonitor.h.
Referenced by playDisc(), and Ripper::Ripper().
| void MediaMonitor::JumpToMediaHandler | ( | MythMediaDevice * | pMedia, |
| bool | forcePlayback = false |
||
| ) |
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 681 of file mediamonitor.cpp.
Referenced by eventFilter(), and playDisc().
|
protected |
A string summarising the current devices, for debugging.
Definition at line 944 of file mediamonitor.cpp.
Referenced by MediaMonitorUnix::MediaMonitorUnix(), and MediaMonitorWindows::MediaMonitorWindows().
|
slot |
Slot which is called when the device status changes and posts a media event to the mainwindow.
Definition at line 716 of file mediamonitor.cpp.
Referenced by MediaMonitorDarwin::AddDevice(), MediaMonitorUnix::AddDevice(), and MediaMonitorWindows::AddDevice().
| void MediaMonitor::RegisterMediaHandler | ( | const QString & | destination, |
| const QString & | description, | ||
| MediaCallback | 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.
| destination | A 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. |
| description | Unused. |
| callback | The function to call when an event occurs. |
| mediaType | The type of media supported by this callback. The value must be a bitmask of enums of type MythMediaType. |
| extensions | A list of file name extensions supported by this callback. |
Definition at line 644 of file mediamonitor.cpp.
Referenced by REG_MEDIA_HANDLER().
|
protected |
Remove a device from the media monitor.
This function is usually called after a hotpluggable device is unplugged.
| dev | path to device special file to remove. |
Definition at line 392 of file mediamonitor.cpp.
Referenced by MediaMonitorUnix::CheckDeviceNotifications().
|
protected |
List removable drives, let the user select one.
prevent drawing a list if there is only one drive, et cetera
Definition at line 172 of file mediamonitor.cpp.
Referenced by ChooseAndEjectMedia(), and defaultDevice().
|
static |
Definition at line 91 of file mediamonitor.cpp.
Referenced by MythDVDBuffer::SetDVDSpeed().
|
protected |
Check user preferences to see if this device should be monitored.
Definition at line 765 of file mediamonitor.cpp.
Referenced by MediaMonitorDarwin::AddDevice(), and MediaMonitorUnix::AddDevice().
|
virtual |
Start the monitoring thread if needed.
Reimplemented in MediaMonitorDarwin.
Definition at line 448 of file mediamonitor.cpp.
Referenced by main(), and Ripper::~Ripper().
| void MediaMonitor::StopMonitoring | ( | void | ) |
Stop the monitoring thread if needed.
Definition at line 471 of file mediamonitor.cpp.
Referenced by deleteLater(), and Ripper::Ripper().
| void MediaMonitor::Unlock | ( | MythMediaDevice * | pMedia | ) |
decrements the MythMediaDevices reference count
Definition at line 511 of file mediamonitor.cpp.
Referenced by Device::Close(), defaultDevice(), ImageManagerFe::DetectLocalDevices(), ImageManagerFe::DeviceEvent(), Ripper::ejectCD(), GetMountPath(), and SetCDSpeed().
| 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.
Definition at line 494 of file mediamonitor.cpp.
Referenced by defaultDevice(), ImageManagerFe::DetectLocalDevices(), ImageManagerFe::DeviceEvent(), Ripper::ejectCD(), GetMountPath(), and SetCDSpeed().
|
friend |
Definition at line 50 of file mediamonitor.h.
Referenced by StartMonitoring().
|
friend |
Definition at line 51 of file mediamonitor.h.
Referenced by MediaMonitorDarwin::StartMonitoring().
Was MonitorThread started?
Definition at line 129 of file mediamonitor.h.
Referenced by mediaStatusChanged(), StartMonitoring(), MediaMonitorDarwin::StartMonitoring(), and StopMonitoring().
|
protected |
Definition at line 133 of file mediamonitor.h.
Referenced by MediaMonitorUnix::AddDevice(), MediaMonitorUnix::CheckMountable(), and MediaMonitorUnix::FindPartitions().
|
protected |
Definition at line 122 of file mediamonitor.h.
Referenced by MediaMonitorDarwin::AddDevice(), MediaMonitorUnix::AddDevice(), MediaMonitorWindows::AddDevice(), CheckDevices(), MediaMonitorUnix::CheckFileSystemTable(), GetMedia(), GetMedias(), GetRemovable(), listDevices(), RemoveDevice(), MediaMonitorDarwin::StartMonitoring(), and ValidateAndLock().
|
protected |
Definition at line 121 of file mediamonitor.h.
Referenced by MediaMonitorUnix::AddDevice(), MediaMonitorWindows::AddDevice(), CheckDevices(), GetMedia(), GetMedias(), GetRemovable(), RemoveDevice(), Unlock(), and ValidateAndLock().
|
protected |
Registered Media Handlers.
Definition at line 135 of file mediamonitor.h.
Referenced by eventFilter(), JumpToMediaHandler(), and RegisterMediaHandler().
|
protected |
Definition at line 127 of file mediamonitor.h.
Referenced by MediaMonitor(), and shouldIgnore().
|
protected |
Definition at line 132 of file mediamonitor.h.
Referenced by StartMonitoring(), and MediaMonitorDarwin::StartMonitoring().
|
protected |
Definition at line 123 of file mediamonitor.h.
Referenced by RemoveDevice(), and Unlock().
|
protected |
Definition at line 131 of file mediamonitor.h.
Referenced by deleteLater(), StartMonitoring(), MediaMonitorDarwin::StartMonitoring(), and StopMonitoring().
|
protected |
Definition at line 124 of file mediamonitor.h.
Referenced by MediaMonitorDarwin::AddDevice(), MediaMonitorUnix::AddDevice(), MediaMonitorWindows::AddDevice(), RemoveDevice(), Unlock(), and ValidateAndLock().
|
protected |
Definition at line 130 of file mediamonitor.h.
Referenced by StopMonitoring().
|
staticprotected |
Definition at line 137 of file mediamonitor.h.
Referenced by defaultDevice(), GetMediaMonitor(), and GetMountPath().