File indexing completed on 2024-04-28 15:40:26

0001 // SPDX-FileCopyrightText: 2003 - 2010 Jesper K. Pedersen <blackie@kde.org>
0002 // SPDX-FileCopyrightText: 2023 Alexander Lohnau <alexander.lohnau@gmx.de>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-or-later
0005 
0006 #include "UniqFilenameMapper.h"
0007 
0008 #include <QFileInfo>
0009 
0010 Utilities::UniqFilenameMapper::UniqFilenameMapper()
0011 {
0012     /* nop */
0013 }
0014 
0015 Utilities::UniqFilenameMapper::UniqFilenameMapper(const QString &target)
0016     : m_targetDirectory(target)
0017 {
0018     /* nop */
0019 }
0020 
0021 void Utilities::UniqFilenameMapper::reset()
0022 {
0023     m_uniqFiles.clear();
0024     m_origToUniq.clear();
0025 }
0026 
0027 bool Utilities::UniqFilenameMapper::fileClashes(const QString &file)
0028 {
0029     return m_uniqFiles.contains(file)
0030         || (!m_targetDirectory.isNull() && QFileInfo::exists(file));
0031 }
0032 
0033 QString Utilities::UniqFilenameMapper::uniqNameFor(const DB::FileName &filename)
0034 {
0035     if (m_origToUniq.contains(filename))
0036         return m_origToUniq[filename];
0037 
0038     const QString extension = QFileInfo(filename.absolute()).completeSuffix();
0039     QString base = QFileInfo(filename.absolute()).baseName();
0040     if (!m_targetDirectory.isNull()) {
0041         base = QString::fromUtf8("%1/%2").arg(m_targetDirectory, base);
0042     }
0043 
0044     QString uniqFile;
0045     int i = 0;
0046     do {
0047         uniqFile = (i == 0)
0048             ? QString::fromUtf8("%1.%2").arg(base, extension)
0049             : QString::fromUtf8("%1-%2.%3").arg(base).arg(i).arg(extension);
0050         ++i;
0051     } while (fileClashes(uniqFile));
0052 
0053     m_origToUniq.insert(filename, uniqFile);
0054     m_uniqFiles.insert(uniqFile);
0055     return uniqFile;
0056 }
0057 // vi:expandtab:tabstop=4 shiftwidth=4: