summaryrefslogtreecommitdiffstats
path: root/dvddrive.cpp
blob: b81fca2e835a3a4a2201051213b0381e49e3b4ca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "dvddrive.h"
#include <QDBusConnection>
#include <QDBusInterface>
#include <QDBusReply>
#include <QDebug>
#include <QStringList>

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;
	}
}