2010-07-23 15:46:30 +02:00
|
|
|
#ifndef MACDEVICELISTER_H
|
|
|
|
#define MACDEVICELISTER_H
|
|
|
|
|
|
|
|
#include "devicelister.h"
|
|
|
|
|
2010-09-04 21:32:36 +02:00
|
|
|
#include <QMutex>
|
2011-08-11 21:37:09 +02:00
|
|
|
#include <QSet>
|
2010-07-23 15:46:30 +02:00
|
|
|
#include <QThread>
|
|
|
|
|
|
|
|
#include <DiskArbitration/DADisk.h>
|
|
|
|
#include <DiskArbitration/DADissenter.h>
|
|
|
|
#include <IOKit/IOKitLib.h>
|
|
|
|
|
|
|
|
class MacDeviceLister : public DeviceLister {
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
MacDeviceLister();
|
|
|
|
~MacDeviceLister();
|
|
|
|
|
|
|
|
virtual QStringList DeviceUniqueIDs();
|
2010-08-16 01:26:04 +02:00
|
|
|
virtual QVariantList DeviceIcons(const QString& id);
|
2010-07-23 15:46:30 +02:00
|
|
|
virtual QString DeviceManufacturer(const QString& id);
|
|
|
|
virtual QString DeviceModel(const QString& id);
|
|
|
|
virtual quint64 DeviceCapacity(const QString& id);
|
|
|
|
virtual quint64 DeviceFreeSpace(const QString& id);
|
|
|
|
virtual QVariantMap DeviceHardwareInfo(const QString& id);
|
2011-08-11 22:10:14 +02:00
|
|
|
virtual bool AskForScan(const QString& serial) const;
|
2010-07-23 15:46:30 +02:00
|
|
|
virtual QString MakeFriendlyName(const QString& id);
|
2010-08-01 13:55:01 +02:00
|
|
|
virtual QList<QUrl> MakeDeviceUrls(const QString& id);
|
2010-07-23 15:46:30 +02:00
|
|
|
|
2010-07-25 03:07:51 +02:00
|
|
|
virtual void UnmountDevice(const QString &id);
|
2010-08-14 20:37:16 +02:00
|
|
|
virtual void UpdateDeviceFreeSpace(const QString& id);
|
2010-07-25 03:07:51 +02:00
|
|
|
|
2010-09-01 22:31:10 +02:00
|
|
|
struct MTPDevice {
|
2010-09-04 21:32:36 +02:00
|
|
|
MTPDevice() : capacity(0), free_space(0) {}
|
2010-09-01 22:31:10 +02:00
|
|
|
QString vendor;
|
|
|
|
QString product;
|
2010-09-02 23:20:27 +02:00
|
|
|
quint16 vendor_id;
|
2010-09-01 22:31:10 +02:00
|
|
|
quint16 product_id;
|
2010-09-02 23:20:27 +02:00
|
|
|
|
|
|
|
int quirks;
|
|
|
|
int bus;
|
|
|
|
int address;
|
2010-09-04 21:32:36 +02:00
|
|
|
|
2011-04-04 15:15:56 +02:00
|
|
|
quint64 capacity;
|
|
|
|
quint64 free_space;
|
2010-09-01 22:31:10 +02:00
|
|
|
};
|
|
|
|
|
2010-08-23 12:26:00 +02:00
|
|
|
public slots:
|
|
|
|
virtual void ShutDown();
|
|
|
|
|
2010-07-23 15:46:30 +02:00
|
|
|
private:
|
|
|
|
virtual void Init();
|
|
|
|
|
|
|
|
static void DiskAddedCallback(DADiskRef disk, void* context);
|
|
|
|
static void DiskRemovedCallback(DADiskRef disk, void* context);
|
2010-09-01 22:31:10 +02:00
|
|
|
static void USBDeviceAddedCallback(void* refcon, io_iterator_t it);
|
2010-09-04 21:32:36 +02:00
|
|
|
static void USBDeviceRemovedCallback(void* refcon, io_iterator_t it);
|
2010-07-23 15:46:30 +02:00
|
|
|
|
2010-07-25 03:29:22 +02:00
|
|
|
static void DiskUnmountCallback(
|
|
|
|
DADiskRef disk, DADissenterRef dissenter, void* context);
|
|
|
|
|
2010-09-02 23:20:27 +02:00
|
|
|
void FoundMTPDevice(const MTPDevice& device, const QString& serial);
|
2010-09-04 21:32:36 +02:00
|
|
|
void RemovedMTPDevice(const QString& serial);
|
|
|
|
|
2011-04-04 15:15:56 +02:00
|
|
|
quint64 GetFreeSpace(const QUrl& url);
|
|
|
|
quint64 GetCapacity(const QUrl& url);
|
2010-09-02 23:20:27 +02:00
|
|
|
|
2011-08-11 21:37:09 +02:00
|
|
|
bool IsCDDevice(const QString& serial) const;
|
|
|
|
|
2010-07-25 03:29:22 +02:00
|
|
|
DASessionRef loop_session_;
|
2010-08-23 12:26:00 +02:00
|
|
|
CFRunLoopRef run_loop_;
|
2010-07-25 03:29:22 +02:00
|
|
|
|
2010-07-24 20:34:22 +02:00
|
|
|
QMap<QString, QString> current_devices_;
|
2010-09-02 23:20:27 +02:00
|
|
|
QMap<QString, MTPDevice> mtp_devices_;
|
2011-08-11 21:37:09 +02:00
|
|
|
QSet<QString> cd_devices_;
|
2010-09-01 22:31:10 +02:00
|
|
|
|
2010-09-04 21:32:36 +02:00
|
|
|
QMutex libmtp_mutex_;
|
|
|
|
|
2010-09-01 22:31:10 +02:00
|
|
|
static QSet<MTPDevice> sMTPDeviceList;
|
2010-07-23 15:46:30 +02:00
|
|
|
};
|
|
|
|
|
2010-09-01 22:31:10 +02:00
|
|
|
uint qHash(const MacDeviceLister::MTPDevice& device);
|
|
|
|
inline bool operator==(const MacDeviceLister::MTPDevice& a, const MacDeviceLister::MTPDevice& b) {
|
2010-09-04 22:11:14 +02:00
|
|
|
return (a.vendor_id == b.vendor_id) &&
|
2010-09-01 22:31:10 +02:00
|
|
|
(a.product_id == b.product_id);
|
|
|
|
}
|
|
|
|
|
2010-07-23 15:46:30 +02:00
|
|
|
#endif
|