#include "dolphin_generalsettings.h"
-#include <KBookmark>
-#include <KBookmarkManager>
#include "dolphindebug.h"
#include <QIcon>
-#include <KProtocolInfo>
#include <KLocalizedString>
-#include <QStandardPaths>
#include <KAboutData>
#include "placesitem.h"
#include <QAction>
-#include <QDate>
#include <QMimeData>
#include <QTimer>
#include <KUrlMimeData>
-#include <KFilePlacesModel>
-#include <Solid/Device>
#include <Solid/DeviceNotifier>
-#include <Solid/OpticalDisc>
#include <Solid/OpticalDrive>
-#include <Solid/StorageAccess>
-#include <Solid/StorageDrive>
#include <views/dolphinview.h>
#include <views/viewproperties.h>
namespace {
- // Hence a prefix to the application-name of the stored bookmarks is
+ // A suffix to the application-name of the stored bookmarks is
// added, which is only read by PlacesItemModel.
- const char AppNamePrefix[] = "-places-panel";
+ const QString AppNameSuffix = QStringLiteral("-places-panel");
+ static QList<QUrl> balooURLs = {
+ QUrl(QStringLiteral("timeline:/today")),
+ QUrl(QStringLiteral("timeline:/yesterday")),
+ QUrl(QStringLiteral("timeline:/thismonth")),
+ QUrl(QStringLiteral("timeline:/lastmonth")),
+ QUrl(QStringLiteral("search:/documents")),
+ QUrl(QStringLiteral("search:/images")),
+ QUrl(QStringLiteral("search:/audio")),
+ QUrl(QStringLiteral("search:/videos"))
+ };
}
PlacesItemModel::PlacesItemModel(QObject* parent) :
m_hiddenItemsShown(false),
m_deviceToTearDown(nullptr),
m_storageSetupInProgress(),
- m_sourceModel(new KFilePlacesModel(this))
+ m_sourceModel(new KFilePlacesModel(KAboutData::applicationData().componentName() + AppNameSuffix, this))
{
+ cleanupBookmarks();
loadBookmarks();
initializeDefaultViewProperties();
for(int r = 0, rMax = m_sourceModel->rowCount(); r < rMax; r++) {
sourceIndex = m_sourceModel->index(r, 0);
+ const KBookmark sourceBookmark = m_sourceModel->bookmarkForIndex(sourceIndex);
- if (bookmarkId(m_sourceModel->bookmarkForIndex(sourceIndex)) == iBookmarkId) {
+ if (bookmarkId(sourceBookmark) == iBookmarkId) {
break;
}
- if (!m_sourceModel->isHidden(sourceIndex)) {
+ if (m_hiddenItemsShown || !m_sourceModel->isHidden(sourceIndex)) {
pos++;
}
}
continue;
}
- createPlacesItem(text, url, QString(), qMax(0, index - 1));
+ createPlacesItem(text, url, KIO::iconNameForUrl(url), qMax(0, index - 1));
}
}
// will save bookmark alteration and fix sort if that is broken by the drag/drop operation
const KBookmark bookmark = m_sourceModel->bookmarkForIndex(index);
Q_ASSERT(!bookmark.isNull());
- PlacesItem *item = new PlacesItem(bookmark);
+ PlacesItem *item = itemFromBookmark(bookmark);
+ if (!item) {
+ item = new PlacesItem(bookmark);
+ }
updateItem(item, index);
insertSortedItem(item);
const int targetRow = row + (start - r) - (r < row ? blockSize : 0);
const QModelIndex targetIndex = m_sourceModel->index(targetRow, 0, destination);
- const KBookmark bookmark = m_sourceModel->bookmarkForIndex(targetIndex);
- PlacesItem *item = new PlacesItem(bookmark);
- updateItem(item, targetIndex);
-
- insertSortedItem(item);
+ addItemFromSourceModel(targetIndex);
}
}
placeItem->setUrl(m_sourceModel->url(sourceIndex));
placeItem->bookmark().setMetaDataItem(QStringLiteral("OnlyInApp"),
bookmark.metaDataItem(QStringLiteral("OnlyInApp")));
+ // must update the bookmark object
+ placeItem->setBookmark(bookmark);
}
}
}
}
}
+void PlacesItemModel::cleanupBookmarks()
+{
+ // KIO model now provides support for baloo urls, and because of that we
+ // need to remove old URLs that were visible only in Dolphin to avoid duplication
+ int row = 0;
+ do {
+ const QModelIndex sourceIndex = m_sourceModel->index(row, 0);
+ const KBookmark bookmark = m_sourceModel->bookmarkForIndex(sourceIndex);
+ const QUrl url = bookmark.url();
+ const QString appName = bookmark.metaDataItem(QStringLiteral("OnlyInApp"));
+
+ if ((appName == KAboutData::applicationData().componentName() ||
+ appName == KAboutData::applicationData().componentName() + AppNameSuffix) && balooURLs.contains(url)) {
+ qCDebug(DolphinDebug) << "Removing old baloo url:" << url;
+ m_sourceModel->removePlace(sourceIndex);
+ } else {
+ row++;
+ }
+ } while (row < m_sourceModel->rowCount());
+}
+
void PlacesItemModel::loadBookmarks()
{
for(int r = 0, rMax = m_sourceModel->rowCount(); r < rMax; r++) {
const QModelIndex sourceIndex = m_sourceModel->index(r, 0);
- KBookmark bookmark = m_sourceModel->bookmarkForIndex(sourceIndex);
- if (acceptBookmark(bookmark) &&
- (m_hiddenItemsShown || !m_sourceModel->isHidden(sourceIndex))) {
+ if (m_hiddenItemsShown || !m_sourceModel->isHidden(sourceIndex)) {
addItemFromSourceModel(sourceIndex);
}
}
#endif
}
-bool PlacesItemModel::acceptBookmark(const KBookmark& bookmark) const
-{
- const QString udi = bookmark.metaDataItem(QStringLiteral("UDI"));
- const QUrl url = bookmark.url();
- const QString appName = bookmark.metaDataItem(QStringLiteral("OnlyInApp"));
- const bool allowedHere = (appName.isEmpty()
- || appName == KAboutData::applicationData().componentName()
- || appName == KAboutData::applicationData().componentName() + AppNamePrefix);
-
- return (udi.isEmpty() && allowedHere);
-}
-
void PlacesItemModel::clear() {
KStandardItemModel::clear();
}