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"