+void PlacesItem::setBookmark(const KBookmark& bookmark)
+{
+ if (bookmark == m_bookmark) {
+ return;
+ }
+
+ m_bookmark = bookmark;
+
+ 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());
+ } 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"));
+}
+
+KBookmark PlacesItem::bookmark() const
+{
+ 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)
+{
+ 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;
+}
+
+void PlacesItem::onDataValueChanged(const QByteArray& role,
+ const QVariant& current,
+ const QVariant& previous)
+{
+ Q_UNUSED(current);
+ Q_UNUSED(previous);
+
+ if (!m_bookmark.isNull()) {
+ updateBookmarkForRole(role);
+ }
+}
+
+void PlacesItem::onDataChanged(const QHash<QByteArray, QVariant>& current,
+ const QHash<QByteArray, QVariant>& previous)
+{
+ Q_UNUSED(previous);
+
+ if (!m_bookmark.isNull()) {
+ QHashIterator<QByteArray, QVariant> it(current);
+ while (it.hasNext()) {
+ it.next();
+ updateBookmarkForRole(it.key());
+ }
+ }
+}
+