File indexing completed on 2024-05-05 05:13:10

0001 /*
0002     This file is part of Akregator.
0003 
0004     SPDX-FileCopyrightText: 2008 Frank Osterfeld <osterfeld@kde.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0007 */
0008 
0009 #include "subscriptionlistjobs.h"
0010 #include "feedlist.h"
0011 #include "folder.h"
0012 #include "kernel.h"
0013 #include "treenode.h"
0014 
0015 #include <KLocalizedString>
0016 
0017 #include <QTimer>
0018 #include <chrono>
0019 
0020 using namespace std::chrono_literals;
0021 
0022 using namespace Akregator;
0023 
0024 MoveSubscriptionJob::MoveSubscriptionJob(QObject *parent)
0025     : KJob(parent)
0026     , m_id(0)
0027     , m_destFolderId(0)
0028     , m_afterId(0)
0029     , m_feedList(Kernel::self()->feedList())
0030 {
0031 }
0032 
0033 void MoveSubscriptionJob::setSubscriptionId(uint id)
0034 {
0035     m_id = id;
0036 }
0037 
0038 void MoveSubscriptionJob::setDestination(uint folder, uint afterChild)
0039 {
0040     m_destFolderId = folder;
0041     m_afterId = afterChild;
0042 }
0043 
0044 void MoveSubscriptionJob::start()
0045 {
0046     QTimer::singleShot(20ms, this, &MoveSubscriptionJob::doMove);
0047 }
0048 
0049 void MoveSubscriptionJob::doMove()
0050 {
0051     const QSharedPointer<FeedList> feedList = m_feedList.lock();
0052 
0053     if (!feedList) {
0054         setErrorText(i18n("Feed list was deleted"));
0055         emitResult();
0056         return;
0057     }
0058 
0059     TreeNode *const node = feedList->findByID(m_id);
0060     auto const destFolder = qobject_cast<Folder *>(feedList->findByID(m_destFolderId));
0061     TreeNode *const after = feedList->findByID(m_afterId);
0062 
0063     if (!node || !destFolder) {
0064         setErrorText(i18n("Node or destination folder not found"));
0065         emitResult();
0066         return;
0067     }
0068     const Folder *const asFolder = qobject_cast<Folder *>(node);
0069 
0070     if (asFolder && asFolder->subtreeContains(destFolder)) {
0071         setErrorText(i18n("Cannot move folder %1 to its own subfolder %2", asFolder->title(), destFolder->title()));
0072         emitResult();
0073         return;
0074     }
0075 
0076     node->parent()->removeChild(node);
0077     if (after) {
0078         destFolder->insertChild(node, after);
0079     } else {
0080         destFolder->appendChild(node);
0081     }
0082     emitResult();
0083 }
0084 
0085 RenameSubscriptionJob::RenameSubscriptionJob(QObject *parent)
0086     : KJob(parent)
0087     , m_id(0)
0088     , m_feedList(Kernel::self()->feedList())
0089 {
0090 }
0091 
0092 void RenameSubscriptionJob::setSubscriptionId(uint id)
0093 {
0094     m_id = id;
0095 }
0096 
0097 void RenameSubscriptionJob::setName(const QString &name)
0098 {
0099     m_name = name;
0100 }
0101 
0102 void RenameSubscriptionJob::start()
0103 {
0104     QTimer::singleShot(20ms, this, &RenameSubscriptionJob::doRename);
0105 }
0106 
0107 void RenameSubscriptionJob::doRename()
0108 {
0109     if (m_id != 0) {
0110         TreeNode *const node = m_feedList->findByID(m_id);
0111         if (node) {
0112             node->setTitle(m_name);
0113         }
0114     }
0115     emitResult();
0116 }
0117 
0118 DeleteSubscriptionJob::DeleteSubscriptionJob(QObject *parent)
0119     : KJob(parent)
0120     , m_id(0)
0121     , m_feedList(Kernel::self()->feedList())
0122 {
0123 }
0124 
0125 void DeleteSubscriptionJob::setSubscriptionId(uint id)
0126 {
0127     m_id = id;
0128 }
0129 
0130 void DeleteSubscriptionJob::start()
0131 {
0132     QTimer::singleShot(20ms, this, &DeleteSubscriptionJob::doDelete);
0133 }
0134 
0135 void DeleteSubscriptionJob::doDelete()
0136 {
0137     const QSharedPointer<FeedList> feedList = m_feedList.lock();
0138     if (feedList) {
0139         delete feedList->findByID(m_id);
0140     }
0141     emitResult();
0142 }
0143 
0144 #include "moc_subscriptionlistjobs.cpp"