Hi, I need a globally unique identifier for the devices listed by Solid. And Solid::Device::udi() is not that.
So I added the API and implementation for it, but the HAL implementation currently is just proof-of-concept and the fakecomputer.xml doesn't have any uniqueIdentifiers for now. I need this to fix the problem of initial ordering of audio devices in phonon. Without a globally unique identifier I cannot have a "hardware database" where the ordering of devices can be "fixed". -- ________________________________________________________ Matthias Kretz (Germany) <>< http://Vir.homelinux.org/ [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED]
Index: device.h =================================================================== --- device.h (revision 737258) +++ device.h (working copy) @@ -133,6 +133,9 @@ /** * Retrieves the Universal Device Identifier (UDI). * + * \warning Don't use the UDI for anything except communication with Solid. Also don't store + * UDIs as there's no guarantee that the UDI stays the same when the hardware setup changed. + * * @return the udi of the device */ QString udi() const; @@ -145,7 +148,17 @@ */ QString parentUdi() const; + /** + * Returns a string that globally and uniquely identifies the device. + * + * \warning Not every device has such an identifier. Sometimes you can find a + * uniqueIdentifier at the parent device, though. + * + * @return The unique id of the device, or QString() if it has none. + */ + QString uniqueIdentifier() const; + /** * Retrieves the parent of the Device. * Index: device.cpp =================================================================== --- device.cpp (revision 737258) +++ device.cpp (working copy) @@ -100,6 +100,11 @@ return_SOLID_CALL(Ifaces::Device *, d->backendObject(), QString(), parentUdi()); } +QString Solid::Device::uniqueIdentifier() const +{ + return_SOLID_CALL(Ifaces::Device *, d->backendObject(), QString(), uniqueIdentifier()); +} + Solid::Device Solid::Device::parent() const { QString udi = parentUdi(); Index: ifaces/device.h =================================================================== --- ifaces/device.h (revision 737258) +++ ifaces/device.h (working copy) @@ -72,7 +72,17 @@ */ virtual QString parentUdi() const; + /** + * Returns a string that globally and uniquely identifies the device. + * + * \warning Not every device has such an identifier. Sometimes you can find a + * uniqueIdentifier at the parent device, though. + * + * @return The unique id of the device, or QString() if it has none. + */ + virtual QString uniqueIdentifier() const = 0; + /** * Retrieves the name of the device vendor. * Index: backends/hal/haldevice.cpp =================================================================== --- backends/hal/haldevice.cpp (revision 737258) +++ backends/hal/haldevice.cpp (working copy) @@ -115,6 +115,25 @@ return property("info.parent").toString(); } +QString HalDevice::uniqueIdentifier() const +{ + const QVariant vendor_id = property("pci.vendor_id"); + if (vendor_id.isValid()) { + const QVariant product_id = property("pci.product_id"); + if (product_id.isValid()) { + const QVariant subsys_vendor_id = property("pci.subsys_vendor_id"); + if (subsys_vendor_id.isValid()) { + const QVariant subsys_product_id = property("pci.subsys_product_id"); + if (subsys_product_id.isValid()) { + return vendor_id.toString() + QLatin1Char('_') + product_id.toString() + QLatin1Char('_') + + subsys_vendor_id.toString() + QLatin1Char('_') + subsys_product_id.toString(); + } + } + } + } + return QString(); +} + QString HalDevice::vendor() const { return property("info.vendor").toString(); Index: backends/hal/haldevice.h =================================================================== --- backends/hal/haldevice.h (revision 737258) +++ backends/hal/haldevice.h (working copy) @@ -48,6 +48,7 @@ virtual QString udi() const; virtual QString parentUdi() const; + virtual QString uniqueIdentifier() const; virtual QString vendor() const; virtual QString product() const; Index: backends/fakehw/fakedevice.h =================================================================== --- backends/fakehw/fakedevice.h (revision 737258) +++ backends/fakehw/fakedevice.h (working copy) @@ -39,6 +39,7 @@ public Q_SLOTS: virtual QString udi() const; virtual QString parentUdi() const; + virtual QString uniqueIdentifier() const; virtual QString vendor() const; virtual QString product() const; virtual QString icon() const; Index: backends/fakehw/fakedevice.cpp =================================================================== --- backends/fakehw/fakedevice.cpp (revision 737258) +++ backends/fakehw/fakedevice.cpp (working copy) @@ -92,6 +92,11 @@ return d->propertyMap["parent"].toString(); } +QString FakeDevice::uniqueIdentifier() const +{ + return d->propertyMap["uniqueIdentifier"].toString(); +} + QString FakeDevice::vendor() const { return d->propertyMap["vendor"].toString();
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Kde-hardware-devel mailing list Kde-hardware-devel@kde.org https://mail.kde.org/mailman/listinfo/kde-hardware-devel