m_volume(),
m_disc(),
m_mtp(),
- m_signalHandler(0),
- m_trashDirLister(0),
+ m_signalHandler(nullptr),
+ m_trashDirLister(nullptr),
m_bookmark()
{
m_signalHandler = new PlacesItemSignalHandler(this);
// watches for changes if the number of items has been changed.
// The update of the icon is handled in onTrashDirListerCompleted().
m_trashDirLister = new KDirLister();
- m_trashDirLister->setAutoErrorHandlingEnabled(false, 0);
+ m_trashDirLister->setAutoErrorHandlingEnabled(false, nullptr);
m_trashDirLister->setDelayedMimeTypes(true);
QObject::connect(m_trashDirLister.data(), static_cast<void(KDirLister::*)()>(&KDirLister::completed),
m_signalHandler.data(), &PlacesItemSignalHandler::onTrashDirListerCompleted);
return dataValue("isHidden").toBool();
}
+bool PlacesItem::isGroupHidden() const
+{
+ return dataValue("isGroupHidden").toBool();
+}
+
+void PlacesItem::setGroupHidden(bool hidden)
+{
+ setDataValue("isGroupHidden", hidden);
+}
+
void PlacesItem::setSystemItem(bool isSystemItem)
{
setDataValue("isSystemItem", isSystemItem);
void PlacesItem::setBookmark(const KBookmark& bookmark)
{
- if (bookmark == m_bookmark) {
- return;
- }
+ const bool bookmarkDataChanged = !(bookmark == m_bookmark);
+ // bookmark object must be updated to keep in sync with source model
m_bookmark = bookmark;
+ if (!bookmarkDataChanged) {
+ return;
+ }
+
delete m_access;
delete m_volume;
delete m_disc;
delete m_mtp;
-
const QString udi = bookmark.metaDataItem(QStringLiteral("UDI"));
if (udi.isEmpty()) {
setIcon(bookmark.icon());
setText(i18nc("KFile System Bookmarks", bookmark.text().toUtf8().constData()));
setUrl(bookmark.url());
+ setSystemItem(bookmark.metaDataItem(QStringLiteral("isSystemItem")) == QLatin1String("true"));
} else {
initializeDevice(udi);
}
- const GroupType type = groupType();
- if (icon().isEmpty()) {
- switch (type) {
- case RecentlySavedType: setIcon(QStringLiteral("chronometer")); break;
- case SearchForType: setIcon(QStringLiteral("system-search")); break;
- case PlacesType:
- default: setIcon(QStringLiteral("folder"));
- }
-
- }
-
- switch (type) {
- case PlacesType: setGroup(i18nc("@item", "Places")); break;
- case RecentlySavedType: setGroup(i18nc("@item", "Recently Saved")); break;
- case SearchForType: setGroup(i18nc("@item", "Search For")); break;
- case DevicesType: setGroup(i18nc("@item", "Devices")); break;
- default: Q_ASSERT(false); break;
- }
-
setHidden(bookmark.metaDataItem(QStringLiteral("IsHidden")) == QLatin1String("true"));
}
return m_bookmark;
}
-PlacesItem::GroupType PlacesItem::groupType() const
-{
- if (udi().isEmpty()) {
- const QString protocol = url().scheme();
- if (protocol == QLatin1String("timeline")) {
- return RecentlySavedType;
- }
-
- if (protocol.contains(QLatin1String("search"))) {
- return SearchForType;
- }
-
- if (protocol == QLatin1String("bluetooth") || protocol == QLatin1String("obexftp") || protocol == QLatin1String("kdeconnect")) {
- return DevicesType;
- }
-
- return PlacesType;
- }
-
- return DevicesType;
-}
-
bool PlacesItem::storageSetupNeeded() const
{
return m_access ? !m_access->isAccessible() : false;
}
-KBookmark PlacesItem::createBookmark(KBookmarkManager* manager,
- const QString& text,
- const QUrl& url,
- const QString& iconName)
-{
- KBookmarkGroup root = manager->root();
- if (root.isNull()) {
- return KBookmark();
- }
-
- KBookmark bookmark = root.addBookmark(text, url, iconName);
- bookmark.setFullText(text);
- bookmark.setMetaDataItem(QStringLiteral("ID"), generateNewId());
-
- return bookmark;
-}
-
-KBookmark PlacesItem::createDeviceBookmark(KBookmarkManager* manager,
- const QString& udi)
+bool PlacesItem::isSearchOrTimelineUrl() const
{
- KBookmarkGroup root = manager->root();
- if (root.isNull()) {
- return KBookmark();
- }
-
- KBookmark bookmark = root.createNewSeparator();
- bookmark.setMetaDataItem(QStringLiteral("UDI"), udi);
- bookmark.setMetaDataItem(QStringLiteral("isSystemItem"), QStringLiteral("true"));
- return bookmark;
+ const QString urlScheme = url().scheme();
+ return (urlScheme.contains("search") || urlScheme.contains("timeline"));
}
void PlacesItem::onDataValueChanged(const QByteArray& role,
setUrl(QUrl::fromLocalFile(m_access->filePath()));
QObject::connect(m_access.data(), &Solid::StorageAccess::accessibilityChanged,
m_signalHandler.data(), &PlacesItemSignalHandler::onAccessibilityChanged);
+ QObject::connect(m_access.data(), &Solid::StorageAccess::teardownRequested,
+ m_signalHandler.data(), &PlacesItemSignalHandler::onTearDownRequested);
} else if (m_disc && (m_disc->availableContent() & Solid::OpticalDisc::Audio) != 0) {
Solid::Block *block = m_device.as<Solid::Block>();
if (block) {
}
} else if (role == "url") {
m_bookmark.setUrl(url());
- } else if (role == "udi)") {
+ } else if (role == "udi") {
m_bookmark.setMetaDataItem(QStringLiteral("UDI"), udi());
} else if (role == "isSystemItem") {
m_bookmark.setMetaDataItem(QStringLiteral("isSystemItem"), isSystemItem() ? QStringLiteral("true") : QStringLiteral("false"));
return QString::number(QDateTime::currentDateTimeUtc().toTime_t()) +
'/' + QString::number(count++) + " (V2)";
}
+
+PlacesItemSignalHandler *PlacesItem::signalHandler() const
+{
+ return m_signalHandler.data();
+}