File indexing completed on 2024-06-16 05:25:08
0001 /* 0002 This file is part of the Okteta Kasten module, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2009 Friedrich W. H. Kossebau <kossebau@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "externalbookmarkstorage.hpp" 0010 0011 // lib 0012 #include "bytearraydocument.hpp" 0013 // Okteta core 0014 #include <Okteta/Bookmarkable> 0015 #include <Okteta/BookmarksConstIterator> 0016 #include <Okteta/Bookmark> 0017 #include <Okteta/AbstractByteArrayModel> 0018 // KF 0019 #include <KBookmarkManager> 0020 // Qt 0021 #include <QStandardPaths> 0022 0023 namespace Kasten { 0024 0025 ExternalBookmarkStorage::ExternalBookmarkStorage() 0026 { 0027 const QString bookmarksFileName = 0028 QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/okteta/bookmarks.xml"); 0029 mBookmarkManager = KBookmarkManager::managerForFile(bookmarksFileName, QStringLiteral("okteta")); 0030 } 0031 0032 ExternalBookmarkStorage::~ExternalBookmarkStorage() = default; 0033 0034 void ExternalBookmarkStorage::readBookmarks(ByteArrayDocument* document, const QUrl& url) 0035 { 0036 Okteta::AbstractByteArrayModel* byteArray = document->content(); 0037 Okteta::Bookmarkable* bookmarkable = qobject_cast<Okteta::Bookmarkable*>(byteArray); 0038 0039 bookmarkable->removeAllBookmarks(); 0040 0041 const QString urlString = url.toDisplayString(QUrl::PrettyDecoded | QUrl::PreferLocalFile); 0042 0043 KBookmarkGroup root = mBookmarkManager->root(); 0044 0045 for (KBookmark bm = root.first(); !bm.isNull(); bm = root.next(bm)) { 0046 if (bm.isSeparator() || !bm.isGroup()) { 0047 continue; 0048 } 0049 0050 if (bm.fullText() == urlString) { 0051 KBookmarkGroup bmGroup = bm.toGroup(); 0052 0053 QVector<Okteta::Bookmark> bookmarksToBeCreated; 0054 Okteta::Bookmark bookmark; 0055 for (bm = bmGroup.first(); !bm.isNull(); bm = bmGroup.next(bm)) { 0056 if (bm.isSeparator() || bm.isGroup()) { 0057 continue; 0058 } 0059 0060 bookmark.setOffset(bm.url().fragment().toULongLong()); 0061 bookmark.setName(bm.fullText()); 0062 0063 bookmarksToBeCreated.append(bookmark); 0064 } 0065 0066 bookmarkable->addBookmarks(bookmarksToBeCreated); 0067 0068 break; 0069 } 0070 } 0071 } 0072 0073 void ExternalBookmarkStorage::writeBookmarks(ByteArrayDocument* document, const QUrl& url) 0074 { 0075 Okteta::AbstractByteArrayModel* byteArray = document->content(); 0076 Okteta::Bookmarkable* bookmarkable = qobject_cast<Okteta::Bookmarkable*>(byteArray); 0077 0078 if (!bookmarkable) { 0079 return; 0080 } 0081 0082 const QString urlString = url.toDisplayString(QUrl::PrettyDecoded | QUrl::PreferLocalFile); 0083 0084 KBookmarkGroup root = mBookmarkManager->root(); 0085 0086 // rm old bookmarkable 0087 KBookmark bm = root.first(); 0088 while (!bm.isNull()) { 0089 if (bm.isSeparator() || !bm.isGroup()) { 0090 continue; 0091 } 0092 0093 if (bm.fullText() == urlString) { 0094 root.deleteBookmark(bm); 0095 break; 0096 } 0097 0098 bm = root.next(bm); 0099 } 0100 0101 // store current bookmarks 0102 KBookmarkGroup bookmarkGroup = root.createNewFolder(urlString); 0103 Okteta::BookmarksConstIterator bit = bookmarkable->createBookmarksConstIterator(); 0104 while (bit.hasNext()) { 0105 const Okteta::Bookmark& bookmark = bit.next(); 0106 QUrl bookmarkUrl = url; 0107 bookmarkUrl.setFragment(QString::number(bookmark.offset())); 0108 bookmarkGroup.addBookmark(bookmark.name(), bookmarkUrl, QString()); 0109 } 0110 0111 mBookmarkManager->save(false); 0112 } 0113 0114 }