File indexing completed on 2024-06-23 05:19:20

0001 /*
0002   SPDX-FileCopyrightText: 2023 Daniel Vrátil <dvratil@kde.org>
0003 
0004   SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "compositememento.h"
0008 #include <QEventLoop>
0009 
0010 using namespace MimeTreeParser;
0011 
0012 CompositeMemento::~CompositeMemento()
0013 {
0014     for (auto *memento : mMementos) {
0015         memento->detach();
0016         delete memento;
0017     }
0018     mMementos.clear();
0019 }
0020 
0021 bool CompositeMemento::start()
0022 {
0023     mRunningMementos = 0;
0024     for (auto *memento : mMementos) {
0025         connect(memento, &CryptoBodyPartMemento::update, this, &CompositeMemento::subMementoFinished);
0026         ++mRunningMementos;
0027         memento->start();
0028     }
0029 
0030     return true;
0031 }
0032 
0033 void CompositeMemento::exec()
0034 {
0035     int counter = 0;
0036     QEventLoop el;
0037     for (auto *memento : mMementos) {
0038         connect(memento, &CryptoBodyPartMemento::update, this, [&el, &counter]() {
0039             --counter;
0040             if (counter == 0) {
0041                 el.quit();
0042             }
0043         });
0044         memento->start();
0045         ++counter;
0046     }
0047     el.exec();
0048 }
0049 
0050 void CompositeMemento::addMemento(CryptoBodyPartMemento *memento)
0051 {
0052     mMementos.push_back(memento);
0053 }
0054 
0055 void CompositeMemento::subMementoFinished()
0056 {
0057     --mRunningMementos;
0058     if (mRunningMementos == 0) {
0059         notify();
0060     }
0061 }
0062 
0063 #include "moc_compositememento.cpp"