Warning, file /network/krdc/bookmarkmanager.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2007 Urs Wolfer <uwolfer@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "bookmarkmanager.h"
0008 #include "mainwindow.h"
0009 #include "krdc_debug.h"
0010 
0011 #include <KLocalizedString>
0012 
0013 #include <QStandardPaths>
0014 
0015 BookmarkManager::BookmarkManager(KActionCollection *collection, QMenu *menu, MainWindow *parent)
0016         : QObject(parent),
0017         KBookmarkOwner(),
0018         m_mainWindow(parent)
0019 {
0020     const QString dir = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QString(),
0021                                                QStandardPaths::LocateOption::LocateDirectory);
0022     const QString file = dir + QLatin1String("krdc/bookmarks.xml");
0023 
0024     m_manager = KBookmarkManager::managerForFile(file, QLatin1String("krdc"));
0025     m_manager->setUpdate(true);
0026 
0027     m_bookmarkMenu = new KBookmarkMenu(m_manager, this, menu);
0028     collection->addActions(menu->actions());
0029 
0030     KBookmarkGroup root = m_manager->root();
0031     KBookmark bm = root.first();
0032     while (!bm.isNull()) {
0033         if (bm.metaDataItem(QLatin1String("krdc-history")) == QLatin1String("historyfolder")) // get it also when user renamed it
0034             break;
0035         bm = root.next(bm);
0036     }
0037 
0038     if (bm.isNull()) {
0039         qCDebug(KRDC) << "History folder not found. Create it.";
0040         bm = m_manager->root().createNewFolder(i18n("History"));
0041         bm.setMetaDataItem(QStringLiteral("krdc-history"), QStringLiteral("historyfolder"));
0042         m_manager->emitChanged();
0043     }
0044 
0045     m_historyGroup = bm.toGroup();
0046 }
0047 
0048 BookmarkManager::~BookmarkManager()
0049 {
0050     delete m_bookmarkMenu;
0051 }
0052 
0053 void BookmarkManager::addHistoryBookmark(RemoteView *view)
0054 {
0055     KBookmark bm = m_historyGroup.first();
0056     const QString urlString = urlForView(view);
0057     const QUrl url = QUrl::fromUserInput(urlString);
0058     while (!bm.isNull()) {
0059         if (bm.url() == url) {
0060             qCDebug(KRDC) << "Found URL. Move it at the history start.";
0061             m_historyGroup.moveBookmark(bm, KBookmark());
0062             bm.updateAccessMetadata();
0063             m_manager->emitChanged(m_historyGroup);
0064             return;
0065         }
0066         bm = m_historyGroup.next(bm);
0067     }
0068 
0069     if (bm.isNull()) {
0070         qCDebug(KRDC) << "Add new history bookmark.";
0071         bm = m_historyGroup.addBookmark(titleForUrl(url), url, QString());
0072         bm.updateAccessMetadata();
0073         m_historyGroup.moveBookmark(bm, KBookmark());
0074         m_manager->emitChanged(m_historyGroup);
0075     }
0076 }
0077 
0078 void BookmarkManager::openBookmark(const KBookmark &bm, Qt::MouseButtons, Qt::KeyboardModifiers)
0079 {
0080     Q_EMIT openUrl(bm.url());
0081 }
0082 
0083 void BookmarkManager::openFolderinTabs(const KBookmarkGroup &bookmarkGroup)
0084 {
0085     KBookmark bm = bookmarkGroup.first();
0086     while (!bm.isNull()) {
0087         Q_EMIT openUrl(bm.url());
0088         bm = bookmarkGroup.next(bm);
0089     }
0090 }
0091 
0092 bool BookmarkManager::addBookmarkEntry() const
0093 {
0094     return true;
0095 }
0096 
0097 bool BookmarkManager::editBookmarkEntry() const
0098 {
0099     return true;
0100 }
0101 
0102 QUrl BookmarkManager::currentUrl() const
0103 {
0104     RemoteView *view = m_mainWindow->currentRemoteView();
0105     if (view)
0106         return QUrl(urlForView(view));
0107     else
0108         return QUrl();
0109 }
0110 
0111 QString BookmarkManager::urlForView(RemoteView *view) const
0112 {
0113     return view->url().toDisplayString(QUrl::UrlFormattingOption::StripTrailingSlash);
0114 }
0115 
0116 QString BookmarkManager::currentTitle() const
0117 {
0118     return titleForUrl(currentUrl());
0119 }
0120 
0121 QString BookmarkManager::titleForUrl(const QUrl &url) const
0122 {
0123     return url.toDisplayString(QUrl::UrlFormattingOption::StripTrailingSlash);
0124 }
0125 
0126 bool BookmarkManager::supportsTabs() const
0127 {
0128     return true;
0129 }
0130 
0131 QList<KBookmarkOwner::FutureBookmark> BookmarkManager::currentBookmarkList() const
0132 {
0133     QList<KBookmarkOwner::FutureBookmark>  list;
0134 
0135     QMapIterator<QWidget *, RemoteView *> iter(m_mainWindow->remoteViewList());
0136 
0137     while (iter.hasNext()) {
0138         RemoteView *next = iter.next().value();
0139         const QUrl url = next->url();
0140         const QString title = titleForUrl(url);
0141         KBookmarkOwner::FutureBookmark bookmark = KBookmarkOwner::FutureBookmark(title, url, QString());
0142         list.append(bookmark);
0143     }
0144 
0145     return list;
0146 }
0147 
0148 void BookmarkManager::addManualBookmark(const QUrl &url, const QString &text)
0149 {
0150     m_manager->root().addBookmark(text, url, QString());
0151     m_manager->emitChanged();
0152 }
0153 
0154 KBookmarkManager* BookmarkManager::getManager()
0155 {
0156     return m_manager;
0157 }
0158 
0159 const QStringList BookmarkManager::findBookmarkAddresses(const KBookmarkGroup &group, const QString &url)
0160 {
0161     QStringList bookmarkAddresses = QStringList();
0162     KBookmark bm = group.first();
0163     while (!bm.isNull()) {
0164         if (bm.isGroup()) {
0165             bookmarkAddresses.append(findBookmarkAddresses(bm.toGroup(), url));
0166         }
0167 
0168         if (bm.url() == QUrl::fromUserInput(url)) {
0169             bookmarkAddresses.append(bm.address());
0170         }
0171         bm = group.next(bm);
0172     }
0173     return bookmarkAddresses;
0174 }
0175 
0176 void BookmarkManager::removeByUrl(KBookmarkManager *manager, const QString &url, bool ignoreHistory, const QString &updateTitle)
0177 {
0178     const QStringList addresses = findBookmarkAddresses(manager->root(), url);
0179     for (const QString &address : addresses) {
0180         KBookmark bm = manager->findByAddress(address);
0181         if (ignoreHistory && bm.parentGroup().metaDataItem(QStringLiteral("krdc-history")) == QLatin1String("historyfolder")) {
0182             if (!updateTitle.isEmpty()) {
0183                 qCDebug(KRDC) << "Update" << bm.fullText();
0184                 bm.setFullText(updateTitle);
0185             }
0186         } else {
0187             if (!bm.isGroup()) { // please don't delete groups... happened in testing
0188                 qCDebug(KRDC) << "Delete" << bm.fullText();
0189                 bm.parentGroup().deleteBookmark(bm);
0190             }
0191         }
0192     }
0193 
0194     manager->emitChanged();
0195 }
0196 
0197 void BookmarkManager::updateTitle(KBookmarkManager *manager, const QString &url, const QString &title)
0198 {
0199     const QStringList addresses = findBookmarkAddresses(manager->root(), url);
0200     for (const QString &address : addresses) {
0201         KBookmark bm = manager->findByAddress(address);
0202         bm.setFullText(title);
0203         qCDebug(KRDC) << "Update" << bm.fullText();
0204     }
0205     manager->emitChanged();
0206 }
0207 
0208