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