diff --git a/src/kjotsbookmarks.cpp b/src/kjotsbookmarks.cpp --- a/src/kjotsbookmarks.cpp +++ b/src/kjotsbookmarks.cpp @@ -35,7 +35,7 @@ void KJotsBookmarks::openBookmark(const KBookmark &bookmark, Qt::MouseButtons, Qt::KeyboardModifiers) { - if (bookmark.url().scheme() != QStringLiteral("kjots")) { + if (bookmark.url().scheme() != QStringLiteral("akonadi")) { return; } Q_EMIT openLink(bookmark.url()); @@ -65,7 +65,7 @@ if (rows.size() != 1) { return QUrl(); } else { - return QUrl(rows.first().data(KJotsModel::UrlRole).value()); + return rows.first().data(KJotsModel::EntityUrlRole).toUrl(); } } diff --git a/src/kjotsedit.cpp b/src/kjotsedit.cpp --- a/src/kjotsedit.cpp +++ b/src/kjotsedit.cpp @@ -251,25 +251,27 @@ bool KJotsEdit::canInsertFromMimeData(const QMimeData *source) const { - if (source->formats().contains(QLatin1String("kjots/internal_link"))) { - return true; - } else if (source->hasUrls()) { + if (source->hasUrls()) { return true; } else { return KTextEdit::canInsertFromMimeData(source); } } void KJotsEdit::insertFromMimeData(const QMimeData *source) { - if (source->formats().contains(QStringLiteral("kjots/internal_link"))) { - insertHtml(source->data(QStringLiteral("kjots/internal_link"))); - } else if (source->hasUrls()) { + if (source->hasUrls()) { const QList urls = source->urls(); for (const QUrl &url : urls) { - if (url.isValid()) { - QString html = QStringLiteral("%2").arg(QString::fromUtf8(url.toEncoded()), url.toString(QUrl::RemovePassword)); - insertHtml(html); + if (url.scheme() == QStringLiteral("akonadi")) { + QModelIndex idx = KJotsModel::modelIndexForUrl(m_selectionModel->model(), url); + if (idx.isValid()) { + insertHtml(QStringLiteral("%2").arg(idx.data(KJotsModel::EntityUrlRole).toString(), + idx.data().toString())); + } + } else { + QString text = source->hasText() ? source->text() : url.toString(QUrl::RemovePassword); + insertHtml(QStringLiteral("%2").arg(QString::fromUtf8(url.toEncoded()), text)); } } } else if (source->hasHtml()) { @@ -352,16 +354,12 @@ QString message; if (url.isValid()) { - if (url.scheme() == QStringLiteral("kjots")) { - QModelIndex idx = KJotsModel::modelIndexForUrl(m_selectionModel->model(), url); - auto item = idx.data(KJotsModel::ItemRole).value(); - if (item.isValid()) { + if (url.scheme() == QStringLiteral("akonadi")) { + const QModelIndex idx = KJotsModel::modelIndexForUrl(m_selectionModel->model(), url); + if (idx.data(EntityTreeModel::ItemRole).value().isValid()) { message = i18nc("@info:tooltip %1 is page name", "Ctrl+click to open page: %1", idx.data().toString()); - } else { - auto col = idx.data(KJotsModel::CollectionRole).value(); - if (col.isValid()) { - message = i18nc("@info:tooltip %1 is book name", "Ctrl+click to open book: %1", idx.data().toString()); - } + } else if (idx.data(EntityTreeModel::CollectionRole).value().isValid()) { + message = i18nc("@info:tooltip %1 is book name", "Ctrl+click to open book: %1", idx.data().toString()); } } else { message = i18nc("@info:tooltip %1 is hyperlink address", "Ctrl+click to follow the hyperlink: %1", url.toString(QUrl::RemovePassword)); diff --git a/src/kjotslinkdialog.cpp b/src/kjotslinkdialog.cpp --- a/src/kjotslinkdialog.cpp +++ b/src/kjotslinkdialog.cpp @@ -126,17 +126,18 @@ void KJotsLinkDialog::setLinkUrl(const QString &linkUrl) { const QUrl url(linkUrl); - if (url.scheme() != QStringLiteral("kjots")) { + if (url.scheme() == QStringLiteral("akonadi")) { + QModelIndex idx = KJotsModel::modelIndexForUrl(m_descendantsProxyModel, url); + if (idx.isValid()) { + hrefComboRadioButton->setChecked(true); + hrefCombo->view()->setCurrentIndex(idx); + hrefCombo->setCurrentIndex(idx.row()); + } + } else { linkUrlLineEdit->setText(linkUrl); linkUrlLineEditRadioButton->setChecked(true); return; } - QModelIndex idx = KJotsModel::modelIndexForUrl(m_descendantsProxyModel, url); - if (idx.isValid()) { - hrefComboRadioButton->setChecked(true); - hrefCombo->view()->setCurrentIndex(idx); - hrefCombo->setCurrentIndex(idx.row()); - } } QString KJotsLinkDialog::linkText() const @@ -159,7 +160,7 @@ QString KJotsLinkDialog::linkUrl() const { if (hrefComboRadioButton->isChecked()) { - return hrefCombo->view()->currentIndex().data(KJotsModel::UrlRole).value(); + return hrefCombo->view()->currentIndex().data(KJotsModel::EntityUrlRole).toString(); } else { return linkUrlLineEdit->text(); } diff --git a/src/kjotsmodel.h b/src/kjotsmodel.h --- a/src/kjotsmodel.h +++ b/src/kjotsmodel.h @@ -84,8 +84,7 @@ enum KJotsRoles { GrantleeObjectRole = EntityTreeModel::UserRole, DocumentRole, - DocumentCursorPositionRole, - UrlRole + DocumentCursorPositionRole }; // We don't reimplement the Collection overload. diff --git a/src/kjotsmodel.cpp b/src/kjotsmodel.cpp --- a/src/kjotsmodel.cpp +++ b/src/kjotsmodel.cpp @@ -91,7 +91,7 @@ QString KJotsEntity::url() const { - return m_index.data(KJotsModel::UrlRole).value(); + return m_index.data(KJotsModel::EntityUrlRole).toString(); } qint64 KJotsEntity::entityId() const @@ -277,18 +277,6 @@ } } - if (role == KJotsModel::UrlRole) { - const auto item = index.data(ItemRole).value(); - if (item.isValid()) { - return QStringLiteral("kjots://org.kjots.page/%1").arg(item.id()); - } - const auto col = index.data(CollectionRole).value(); - if (col.isValid()) { - return QStringLiteral("kjots://org.kjots.book/%1").arg(col.id()); - } - return QString(); - } - return EntityTreeModel::data(index, role); } @@ -303,21 +291,18 @@ QModelIndex KJotsModel::modelIndexForUrl(const QAbstractItemModel *model, const QUrl &url) { - if (url.scheme() != QStringLiteral("kjots")) { + if (url.scheme() != QStringLiteral("akonadi")) { return QModelIndex(); } - const qint64 targetId = url.path().mid(1).toLongLong(); - - if (url.host() == QStringLiteral("org.kjots.book")) { - return Akonadi::EntityTreeModel::modelIndexForCollection(model, Collection(targetId)); - } else if (url.host() == QStringLiteral("org.kjots.page")) { - const QModelIndexList itemIndexes = Akonadi::EntityTreeModel::modelIndexesForItem(model, Item(targetId)); - if (itemIndexes.isEmpty()) { - return QModelIndex(); + const auto item = Item::fromUrl(url); + const auto col = Collection::fromUrl(url); + if (item.isValid()) { + const QModelIndexList idxs = EntityTreeModel::modelIndexesForItem(model, item); + if (!idxs.isEmpty()) { + return idxs.first(); } - return itemIndexes.first(); - } else { - qWarning() << "Could not recognize URL" << url; - return QModelIndex(); + } else if (col.isValid()) { + return EntityTreeModel::modelIndexForCollection(model, col); } + return QModelIndex(); } diff --git a/src/kjotstreeview.cpp b/src/kjotstreeview.cpp --- a/src/kjotstreeview.cpp +++ b/src/kjotstreeview.cpp @@ -173,16 +173,10 @@ if (rows.size() != 1) { return; } - const QModelIndex idx = rows.at(0); - - const QString title = idx.data().toString(); - const QString link = QStringLiteral("%2 ").arg(idx.data(KJotsModel::UrlRole).toString(), title); - - Item item = idx.data(KJotsModel::ItemRole).value(); - + const QModelIndex idx = rows.first(); QMimeData *mimeData = new QMimeData(); - mimeData->setData(QStringLiteral("kjots/internal_link"), link.toUtf8()); - mimeData->setText(title); + mimeData->setText(idx.data().toString()); + mimeData->setUrls({idx.data(KJotsModel::EntityUrlRole).toUrl()}); QApplication::clipboard()->setMimeData(mimeData); } diff --git a/src/kjotswidget.cpp b/src/kjotswidget.cpp --- a/src/kjotswidget.cpp +++ b/src/kjotswidget.cpp @@ -1759,7 +1759,7 @@ void KJotsWidget::openLink(const QUrl &url) { - if (url.scheme() == QStringLiteral("kjots")) { + if (url.scheme() == QStringLiteral("akonadi")) { treeview->selectionModel()->select(KJotsModel::modelIndexForUrl(treeview->model(), url), QItemSelectionModel::ClearAndSelect); } else { new KRun(url, this);