Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:EKrava
kdebase3
kdebase-trident-udisks2-UUID.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kdebase-trident-udisks2-UUID.diff of Package kdebase3
diff -Naru kdebase-3.5.10_orig/kioslave/media/mediamanager/udisks2backend.cpp kdebase-3.5.10/kioslave/media/mediamanager/udisks2backend.cpp --- kdebase-3.5.10_orig/kioslave/media/mediamanager/udisks2backend.cpp 2021-04-20 12:00:31.173890579 +0900 +++ kdebase-3.5.10/kioslave/media/mediamanager/udisks2backend.cpp 2021-04-20 12:10:43.730033389 +0900 @@ -29,8 +29,10 @@ #include <dbus/qdbusproxy.h> #include <dbus/qdbusvariant.h> +#include <kconfig.h> #include <klocale.h> #include <kdebug.h> +#include <kmdcodec.h> #include "udisks2backend.h" @@ -66,6 +68,8 @@ Object(ObjectManager *objectManager, const QDBusObjectPath &objectPath, const QDBusConnection &dbusConnection); ~Object(); + QString uuid() const { return m_uuid; } + QString mount(); QString unmount(bool force); @@ -106,6 +110,7 @@ QDBusObjectPath m_drive; QString m_device; QString m_label; + QString m_uuid; QString m_fsType; Q_INT64 m_size; @@ -127,7 +132,7 @@ ObjectManager(MediaList &mediaList); bool initialize(); - Object *findObject(const QString &path) { return m_objects.find(path); } + Object *findObjectByUUID(const QString &uuid); protected: void handleDBusSignal(const QDBusMessage &message); @@ -369,7 +374,7 @@ if(m_label.isEmpty()) label = QString("%1 %2 (%3)").arg(qHumanReadableSize(m_size)).arg(label).arg(name); - Medium *medium = new Medium(path(), name); + Medium *medium = new Medium(m_uuid, name); medium->setLabel(label); medium->mountableState(m_device, m_mountPoint, m_fsType, m_mounted); medium->setMimeType(mimeType); @@ -441,7 +446,7 @@ if(m_label.isEmpty()) label = QString("%1 %2 (%3)").arg(qHumanReadableSize(m_size)).arg(label).arg(name); - Medium *medium = new Medium(path(), name); + Medium *medium = new Medium(m_uuid, name); medium->setLabel(label); medium->mountableState(m_device, m_mountPoint, m_fsType, m_mounted); medium->setMimeType(mimeType); @@ -474,7 +479,7 @@ mimeType = "media/audiocd"; } - Medium *medium = new Medium(path(), name); + Medium *medium = new Medium(m_uuid, name); medium->setLabel(name); medium->unmountableState(""); medium->setMimeType(mimeType); @@ -493,13 +498,21 @@ // media become available if(mediaAvailable) { - Medium *medium = (m_mountable && m_filesystem ? (m_loop ? createLoopMedium() : createMountableMedium()) : createBlankOrAudioMedium()); + // no uuid, generate a fake one + if(m_uuid.isEmpty()) { + QString dataForFakeUUID = m_label + m_media + m_fsType + QString::number(m_size); + KMD5 context(dataForFakeUUID.ascii()); + m_uuid = "FAKE-UUID-" + context.hexDigest(); + } + + Medium *medium = (m_mountable && m_filesystem ? (m_loop ? createLoopMedium() : createMountableMedium()) : createBlankOrAudioMedium()); m_objectManager->m_mediaList.addMedium(medium, m_objectManager->allowNotification); } // media is not available anymore else { - m_objectManager->m_mediaList.removeMedium(path(), true); + m_objectManager->m_mediaList.removeMedium(m_uuid, true); + m_uuid = QString::null; if(m_mounted) unmount(true); } @@ -549,7 +562,21 @@ m_label = propertyValue.toString(); mediumNeedUpdate = true; } - else if("IdType" == propertyName) + else if("IdUUID" == propertyName) { + // uuid has changed while the media is available, we need to recreate the Medium object + // this situation occur for example when a partition is reformatted + if(m_mediaAvailable) { + // the uuid is probably permanently lost, remove it from mediamanagerc + KConfig cfg("mediamanagerrc"); + cfg.setGroup("UserLabels"); + cfg.deleteEntry(m_uuid); + + m_objectManager->m_mediaList.removeMedium(m_uuid, true); + m_mediaAvailable = false; + } + m_uuid = propertyValue.toString(); + } + else if("IdType" == propertyName) m_fsType = propertyValue.toString(); else if("Size" == propertyName) { m_size = propertyValue.toInt64(); @@ -655,6 +682,17 @@ return true; } +Object *ObjectManager::findObjectByUUID(const QString &uuid) +{ + QDictIterator<Object> it(m_objects); + while(it.current()) { + if(uuid == it.current()->uuid()) + return it.current(); + ++it; + } + + return NULL; +} void ObjectManager::handleDBusSignal(const QDBusMessage &message) { @@ -730,7 +768,7 @@ if(!medium) return i18n("No such medium: %1").arg(name); - UDisks2::Object *obj = d->findObject(name); + UDisks2::Object *obj = d->findObjectByUUID(name); if(!obj) return i18n("No such udisks2 object in cache: %1").arg(name); @@ -744,7 +782,7 @@ if(!medium) return i18n("No such medium: %1").arg(name); - UDisks2::Object *obj = d->findObject(name); + UDisks2::Object *obj = d->findObjectByUUID(name); if(!obj) return i18n("No such udisks2 object in cache: %1").arg(name);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor