File indexing completed on 2024-06-23 05:07:01
0001 /* 0002 SPDX-FileCopyrightText: 2009 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "itemdeletehandler.h" 0008 0009 #include "connection.h" 0010 #include "storage/datastore.h" 0011 #include "storage/itemqueryhelper.h" 0012 #include "storage/selectquerybuilder.h" 0013 #include "storage/transaction.h" 0014 0015 #include "private/scope_p.h" 0016 0017 using namespace Akonadi; 0018 using namespace Akonadi::Server; 0019 0020 ItemDeleteHandler::ItemDeleteHandler(AkonadiServer &akonadi) 0021 : Handler(akonadi) 0022 { 0023 } 0024 0025 bool ItemDeleteHandler::parseStream() 0026 { 0027 const auto &cmd = Protocol::cmdCast<Protocol::DeleteItemsCommand>(m_command); 0028 0029 CommandContext context = connection()->context(); 0030 if (!context.setScopeContext(cmd.scopeContext())) { 0031 return failureResponse(QStringLiteral("Invalid scope context")); 0032 } 0033 0034 SelectQueryBuilder<PimItem> qb; 0035 ItemQueryHelper::scopeToQuery(cmd.items(), context, qb); 0036 0037 DataStore *store = connection()->storageBackend(); 0038 Transaction transaction(store, QStringLiteral("REMOVE")); 0039 0040 if (!qb.exec()) { 0041 return failureResponse("Unable to execute query"); 0042 } 0043 0044 const QList<PimItem> items = qb.result(); 0045 if (items.isEmpty()) { 0046 return failureResponse("No items found"); 0047 } 0048 if (!store->cleanupPimItems(items)) { 0049 return failureResponse("Deletion failed"); 0050 } 0051 0052 if (!transaction.commit()) { 0053 return failureResponse("Unable to commit transaction"); 0054 } 0055 0056 return successResponse<Protocol::DeleteItemsResponse>(); 0057 }