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"