From dd1659f80d5cac06461519a0390a4c284ee64212 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Sat, 5 Sep 2009 22:57:40 -0400 Subject: DVDDrive class. --- dvddrive.cpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dvddrive.h | 27 +++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 dvddrive.cpp create mode 100644 dvddrive.h diff --git a/dvddrive.cpp b/dvddrive.cpp new file mode 100644 index 0000000..b81fca2 --- /dev/null +++ b/dvddrive.cpp @@ -0,0 +1,72 @@ +#include "dvddrive.h" +#include +#include +#include +#include +#include + +DVDDrive::DVDDrive(QObject *parent) + : QObject(parent) +{ + m_halManager = new QDBusInterface(QLatin1String("org.freedesktop.Hal"), QLatin1String("/org/freedesktop/Hal/Manager"), QLatin1String("org.freedesktop.Hal.Manager"), QDBusConnection::systemBus(), this); + QStringList devices = m_halManager->call(QLatin1String("FindDeviceByCapability"), QLatin1String("volume.disc")).arguments().at(0).toStringList(); + m_halDisc = 0; + foreach (QString device, devices) { + if (deviceAdded(device)) + break; + } + connect(m_halManager, SIGNAL(DeviceAdded(QString)), this, SLOT(deviceAdded(const QString&))); + connect(m_halManager, SIGNAL(DeviceRemoved(QString)), this, SLOT(deviceRemoved(const QString&))); +} +bool DVDDrive::deviceAdded(const QString &device) +{ + QDBusInterface *old = m_halDisc; + m_halDisc = new QDBusInterface(QLatin1String("org.freedesktop.Hal"), device, QLatin1String("org.freedesktop.Hal.Device"), QDBusConnection::systemBus(), this); + if (m_halDisc->call(QLatin1String("GetPropertyBoolean"), QLatin1String("volume.disc.is_videodvd")).arguments().at(0).toBool()) { + if (old) + delete old; + emit dvdAdded(); + return true; + } else { + delete m_halDisc; + m_halDisc = old; + return false; + } +} +void DVDDrive::deviceRemoved(const QString &device) +{ + if (m_halDisc && m_halDisc->path() == device) { + delete m_halDisc; + m_halDisc = 0; + emit dvdRemoved(); + } +} +QString DVDDrive::dvdName() const +{ + if (m_halDisc) + return m_halDisc->call(QLatin1String("GetPropertyString"), QLatin1String("volume.label")).arguments().at(0).toString(); + else + return QString(); +} +QString DVDDrive::dvdDevice() const +{ + if (m_halDisc) + return m_halDisc->call(QLatin1String("GetPropertyString"), QLatin1String("block.device")).arguments().at(0).toString(); + else + return QString(); +} +bool DVDDrive::dvdInserted() const +{ + return m_halDisc != 0; +} +void DVDDrive::eject() +{ + if (m_halDisc) { + QString path = m_halDisc->path(); + deviceRemoved(path); + m_halDisc = new QDBusInterface(QLatin1String("org.freedesktop.Hal"), path, QLatin1String("org.freedesktop.Hal.Device.Volume"), QDBusConnection::systemBus(), this); + m_halDisc->call(QLatin1String("Eject"), QStringList()); + delete m_halDisc; + m_halDisc = 0; + } +} diff --git a/dvddrive.h b/dvddrive.h new file mode 100644 index 0000000..a400ae3 --- /dev/null +++ b/dvddrive.h @@ -0,0 +1,27 @@ +#ifndef DVDDRIVE_H +#define DVDDRIVE_H + +#include +class QDBusInterface; + +class DVDDrive : public QObject +{ + Q_OBJECT +public: + DVDDrive(QObject *parent = 0); + QString dvdName() const; + QString dvdDevice() const; + bool dvdInserted() const; + void eject(); +private: + QDBusInterface *m_halManager; + QDBusInterface *m_halDisc; +private slots: + bool deviceAdded(const QString &device); + void deviceRemoved(const QString &device); +signals: + void dvdAdded(); + void dvdRemoved(); +}; + +#endif // DVDDRIVE_H -- cgit v1.2.3-59-g8ed1b