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

0001 /*
0002   SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004   SPDX-License-Identifier: LGPL-2.0-or-later
0005 
0006 */
0007 
0008 #include "attachmenttemporaryfilesdirs.h"
0009 
0010 #include <QDir>
0011 #include <QFile>
0012 #include <QTimer>
0013 
0014 using namespace MimeTreeParser;
0015 
0016 class MimeTreeParser::AttachmentTemporaryFilesDirsPrivate
0017 {
0018 public:
0019     AttachmentTemporaryFilesDirsPrivate() = default;
0020 
0021     QStringList mTempFiles;
0022     QStringList mTempDirs;
0023     int mDelayRemoveAll = 10000;
0024 };
0025 
0026 AttachmentTemporaryFilesDirs::AttachmentTemporaryFilesDirs(QObject *parent)
0027     : QObject(parent)
0028     , d(new AttachmentTemporaryFilesDirsPrivate)
0029 {
0030 }
0031 
0032 AttachmentTemporaryFilesDirs::~AttachmentTemporaryFilesDirs() = default;
0033 
0034 void AttachmentTemporaryFilesDirs::setDelayRemoveAllInMs(int ms)
0035 {
0036     d->mDelayRemoveAll = (ms < 0) ? 0 : ms;
0037 }
0038 
0039 void AttachmentTemporaryFilesDirs::removeTempFiles()
0040 {
0041     QTimer::singleShot(d->mDelayRemoveAll, this, &AttachmentTemporaryFilesDirs::slotRemoveTempFiles);
0042 }
0043 
0044 void AttachmentTemporaryFilesDirs::forceCleanTempFiles()
0045 {
0046     QStringList::ConstIterator end = d->mTempFiles.constEnd();
0047     for (QStringList::ConstIterator it = d->mTempFiles.constBegin(); it != end; ++it) {
0048         QFile::remove(*it);
0049     }
0050     d->mTempFiles.clear();
0051     end = d->mTempDirs.constEnd();
0052     for (QStringList::ConstIterator it = d->mTempDirs.constBegin(); it != end; ++it) {
0053         QDir(*it).rmdir(*it);
0054     }
0055     d->mTempDirs.clear();
0056 }
0057 
0058 void AttachmentTemporaryFilesDirs::slotRemoveTempFiles()
0059 {
0060     forceCleanTempFiles();
0061     // Delete it after cleaning
0062     deleteLater();
0063 }
0064 
0065 void AttachmentTemporaryFilesDirs::addTempFile(const QString &file)
0066 {
0067     if (!d->mTempFiles.contains(file)) {
0068         d->mTempFiles.append(file);
0069     }
0070 }
0071 
0072 void AttachmentTemporaryFilesDirs::addTempDir(const QString &dir)
0073 {
0074     if (!d->mTempDirs.contains(dir)) {
0075         d->mTempDirs.append(dir);
0076     }
0077 }
0078 
0079 QStringList AttachmentTemporaryFilesDirs::temporaryFiles() const
0080 {
0081     return d->mTempFiles;
0082 }
0083 
0084 QStringList AttachmentTemporaryFilesDirs::temporaryDirs() const
0085 {
0086     return d->mTempDirs;
0087 }
0088 
0089 #include "moc_attachmenttemporaryfilesdirs.cpp"