File indexing completed on 2025-03-09 04:47:27

0001 /*
0002     SPDX-FileCopyrightText: 2011-2013 Daniel Vrátil <dvratil@redhat.com>
0003     SPDX-FileCopyrightText: 2020 Igor Pobiko <igor.poboiko@gmail.com>
0004     SPDX-FileCopyrightText: 2022-2023 Claudio Cambra <claudio.cambra@kde.org>
0005 
0006     SPDX-License-Identifier: GPL-3.0-or-later
0007 */
0008 
0009 #pragma once
0010 
0011 #include "generichandler.h"
0012 #include <KGAPI/People/Person>
0013 #include <KGAPI/Types>
0014 
0015 class PersonHandler : public GenericHandler
0016 {
0017     Q_OBJECT
0018 public:
0019     using GenericHandler::GenericHandler;
0020 
0021     QString mimeType() override;
0022     bool canPerformTask(const Akonadi::Item &item) override;
0023     bool canPerformTask(const Akonadi::Item::List &items) override;
0024 
0025     void retrieveCollections(const Akonadi::Collection &rootCollection) override;
0026     void retrieveItems(const Akonadi::Collection &collection) override;
0027 
0028     void itemAdded(const Akonadi::Item &item, const Akonadi::Collection &collection) override;
0029     void itemChanged(const Akonadi::Item &item, const QSet<QByteArray> &partIdentifiers) override;
0030     void itemsRemoved(const Akonadi::Item::List &items) override;
0031     void itemsMoved(const Akonadi::Item::List &items, const Akonadi::Collection &collectionSource, const Akonadi::Collection &collectionDestination) override;
0032     void itemsLinked(const Akonadi::Item::List &items, const Akonadi::Collection &collection) override;
0033     void itemsUnlinked(const Akonadi::Item::List &items, const Akonadi::Collection &collection) override;
0034 
0035     void collectionAdded(const Akonadi::Collection &collection, const Akonadi::Collection &parent) override;
0036     void collectionChanged(const Akonadi::Collection &collection) override;
0037     void collectionRemoved(const Akonadi::Collection &collection) override;
0038 
0039 private Q_SLOTS:
0040     void sendModifyJob(const Akonadi::Item::List &items, const KGAPI2::People::PersonList &people);
0041     void sendModifyJob(const Akonadi::Item &item, const KGAPI2::People::PersonPtr &person);
0042 
0043     void slotItemsRetrieved(KGAPI2::Job *job);
0044     void slotPersonCreateJobFinished(KGAPI2::Job *job);
0045     void slotKGAPIModifyJobFinished(KGAPI2::Job *job);
0046     void processUpdatedPeople(KGAPI2::Job *job, const KGAPI2::ObjectsList &updatedPeople);
0047     void updatePersonItem(const Akonadi::Item &originalItem, const KGAPI2::People::PersonPtr &person);
0048 
0049     void updateContactGroupCollection(const Akonadi::Collection &collection, const KGAPI2::People::ContactGroupPtr &group);
0050 
0051 private:
0052     [[nodiscard]] static Akonadi::Collection collectionFromContactGroup(const KGAPI2::People::ContactGroupPtr &group);
0053     [[nodiscard]] static QString addresseeMimeType();
0054 
0055     QMap<QString, Akonadi::Collection> m_collections;
0056     QSet<QString> m_pendingPeoplePhotoUpdate;
0057 };