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-logs-impl.h"
0021 #include "abstract-logger-plugin.h"
0022 #include "debug.h"
0023 
0024 PendingLoggerLogsImpl::PendingLoggerLogsImpl(const Tp::AccountPtr &account,
0025                                              const KTp::LogEntity &entity,
0026                                              const QDate &date,
0027                                              QObject* parent):
0028     PendingLoggerLogs(account, entity, date, parent)
0029 {
0030     if (plugins().isEmpty()) {
0031         emitFinished();
0032         return;
0033     }
0034 
0035     Q_FOREACH (KTp::AbstractLoggerPlugin *plugin, plugins()) {
0036         if (!plugin->handlesAccount(account)) {
0037             continue;
0038         }
0039 
0040         PendingLoggerOperation *op = plugin->queryLogs(account, entity, date);
0041         if (!op) {
0042             continue;
0043         }
0044 
0045         connect(op, SIGNAL(finished(KTp::PendingLoggerOperation*)),
0046                 this, SLOT(operationFinished(KTp::PendingLoggerOperation*)));
0047         mRunningOps << op;
0048     }
0049 }
0050 
0051 
0052 PendingLoggerLogsImpl::~PendingLoggerLogsImpl()
0053 {
0054 }
0055 
0056 void PendingLoggerLogsImpl::operationFinished(KTp::PendingLoggerOperation *op)
0057 {
0058     Q_ASSERT(mRunningOps.contains(op));
0059     mRunningOps.removeAll(op);
0060 
0061     KTp::PendingLoggerLogs *operation = qobject_cast<KTp::PendingLoggerLogs*>(op);
0062     Q_ASSERT(operation);
0063 
0064     const QList<KTp::LogMessage> newLogs = operation->logs();
0065     qCDebug(KTP_LOGGER) << "Plugin" << op->parent() << "returned" << newLogs.count() << "logs";
0066 
0067     // FIXME: Maybe handle duplicates?
0068     appendLogs(newLogs);
0069 
0070     if (mRunningOps.isEmpty()) {
0071         emitFinished();
0072     }
0073 }