File indexing completed on 2024-04-21 05:45:39

0001 /*
0002  * SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "dolphinbookmarkhandler.h"
0008 #include "dolphinmainwindow.h"
0009 #include "dolphinviewcontainer.h"
0010 #include "global.h"
0011 #include <KActionCollection>
0012 #include <KBookmarkMenu>
0013 #include <QDebug>
0014 #include <QDir>
0015 #include <QStandardPaths>
0016 
0017 DolphinBookmarkHandler::DolphinBookmarkHandler(DolphinMainWindow *mainWindow, KActionCollection *collection, QMenu *menu, QObject *parent)
0018     : QObject(parent)
0019     , m_mainWindow(mainWindow)
0020 {
0021     QString bookmarksFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kfile/bookmarks.xml"));
0022     if (bookmarksFile.isEmpty()) {
0023         QString genericDataLocation = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
0024         if (genericDataLocation.isEmpty()) {
0025             qWarning() << "GenericDataLocation is empty! Bookmarks will not be saved correctly.";
0026         }
0027         bookmarksFile = QStringLiteral("%1/dolphin").arg(genericDataLocation);
0028         QDir().mkpath(bookmarksFile);
0029         bookmarksFile += QLatin1String("/bookmarks.xml");
0030     }
0031     m_bookmarkManager = std::make_unique<KBookmarkManager>(bookmarksFile);
0032     m_bookmarkMenu.reset(new KBookmarkMenu(m_bookmarkManager.get(), this, menu));
0033 
0034     collection->addAction(QStringLiteral("add_bookmark"), m_bookmarkMenu->addBookmarkAction());
0035     collection->addAction(QStringLiteral("edit_bookmarks"), m_bookmarkMenu->editBookmarksAction());
0036     collection->addAction(QStringLiteral("add_bookmarks_list"), m_bookmarkMenu->bookmarkTabsAsFolderAction());
0037 }
0038 
0039 DolphinBookmarkHandler::~DolphinBookmarkHandler()
0040 {
0041 }
0042 
0043 QString DolphinBookmarkHandler::currentTitle() const
0044 {
0045     return title(m_mainWindow->activeViewContainer());
0046 }
0047 
0048 QUrl DolphinBookmarkHandler::currentUrl() const
0049 {
0050     return url(m_mainWindow->activeViewContainer());
0051 }
0052 
0053 QString DolphinBookmarkHandler::currentIcon() const
0054 {
0055     return icon(m_mainWindow->activeViewContainer());
0056 }
0057 
0058 bool DolphinBookmarkHandler::supportsTabs() const
0059 {
0060     return true;
0061 }
0062 
0063 QList<KBookmarkOwner::FutureBookmark> DolphinBookmarkHandler::currentBookmarkList() const
0064 {
0065     const auto viewContainers = m_mainWindow->viewContainers();
0066     QList<FutureBookmark> bookmarks;
0067     bookmarks.reserve(viewContainers.size());
0068     for (const auto viewContainer : viewContainers) {
0069         bookmarks << FutureBookmark(title(viewContainer), url(viewContainer), icon(viewContainer));
0070     }
0071     return bookmarks;
0072 }
0073 
0074 bool DolphinBookmarkHandler::enableOption(KBookmarkOwner::BookmarkOption option) const
0075 {
0076     switch (option) {
0077     case BookmarkOption::ShowAddBookmark:
0078         return true;
0079     case BookmarkOption::ShowEditBookmark:
0080         return true;
0081     }
0082     return false;
0083 }
0084 
0085 void DolphinBookmarkHandler::openBookmark(const KBookmark &bookmark, Qt::MouseButtons, Qt::KeyboardModifiers)
0086 {
0087     m_mainWindow->changeUrl(bookmark.url());
0088 }
0089 
0090 void DolphinBookmarkHandler::openFolderinTabs(const KBookmarkGroup &bookmarkGroup)
0091 {
0092     m_mainWindow->openDirectories(bookmarkGroup.groupUrlList(), false);
0093 }
0094 
0095 void DolphinBookmarkHandler::openInNewTab(const KBookmark &bookmark)
0096 {
0097     m_mainWindow->openNewTab(bookmark.url());
0098 }
0099 
0100 void DolphinBookmarkHandler::openInNewWindow(const KBookmark &bookmark)
0101 {
0102     Dolphin::openNewWindow({bookmark.url()}, m_mainWindow);
0103 }
0104 
0105 QString DolphinBookmarkHandler::title(DolphinViewContainer *viewContainer)
0106 {
0107     return viewContainer->caption();
0108 }
0109 
0110 QUrl DolphinBookmarkHandler::url(DolphinViewContainer *viewContainer)
0111 {
0112     return viewContainer->url();
0113 }
0114 
0115 QString DolphinBookmarkHandler::icon(DolphinViewContainer *viewContainer)
0116 {
0117     return KIO::iconNameForUrl(viewContainer->url());
0118 }
0119 
0120 #include "moc_dolphinbookmarkhandler.cpp"