File indexing completed on 2023-12-03 08:28:33

0001 /*
0002  * Copyright (C) 2013  Daniel Vrátil <dvratil@redhat.com>
0003  *
0004  * This library is free software; you can redistribute it and/or
0005  * modify it under the terms of the GNU Lesser General Public
0006  * License as published by the Free Software Foundation; either
0007  * version 2.1 of the License, or (at your option) any later version.
0008  *
0009  * This library is distributed in the hope that it will be useful,
0010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012  * Lesser General Public License for more details.
0013  *
0014  * You should have received a copy of the GNU Lesser General Public
0015  * License along with this library; if not, write to the Free Software
0016  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
0017  *
0018  */
0019 
0020 #include "pending-logger-entities-impl.h"
0021 #include "abstract-logger-plugin.h"
0022 #include "debug.h"
0023 
0024 PendingLoggerEntitiesImpl::PendingLoggerEntitiesImpl(const Tp::AccountPtr &account,
0025                                                      QObject* parent):
0026     PendingLoggerEntities(account, parent)
0027 {
0028     if (plugins().isEmpty()) {
0029         emitFinished();
0030         return;
0031     }
0032 
0033     Q_FOREACH (KTp::AbstractLoggerPlugin *plugin, plugins()) {
0034         if (!plugin->handlesAccount(account)) {
0035             continue;
0036         }
0037 
0038         PendingLoggerOperation *op = plugin->queryEntities(account);
0039         if (!op) {
0040             continue;
0041         }
0042 
0043         connect(op, SIGNAL(finished(KTp::PendingLoggerOperation*)),
0044                 this, SLOT(operationFinished(KTp::PendingLoggerOperation*)));
0045         mRunningOps << op;
0046     }
0047 }
0048 
0049 PendingLoggerEntitiesImpl::~PendingLoggerEntitiesImpl()
0050 {
0051 }
0052 
0053 void PendingLoggerEntitiesImpl::operationFinished(KTp::PendingLoggerOperation* op)
0054 {
0055     Q_ASSERT(mRunningOps.contains(op));
0056     mRunningOps.removeAll(op);
0057 
0058     KTp::PendingLoggerEntities *operation = qobject_cast<KTp::PendingLoggerEntities*>(op);
0059     Q_ASSERT(operation);
0060 
0061     const QList<KTp::LogEntity> newEntities = operation->entities();
0062     qCDebug(KTP_LOGGER) << "Plugin" << op->parent() << "returned" << newEntities.count() << "entities";
0063     Q_FOREACH (const KTp::LogEntity &entity, newEntities) {
0064         if (!entities().contains(entity)) {
0065             appendEntity(entity);
0066         }
0067     }
0068 
0069     if (mRunningOps.isEmpty()) {
0070         emitFinished();
0071     }
0072 }