File indexing completed on 2024-04-28 03:55:13

0001 /* -*- c++ -*-
0002     SPDX-FileCopyrightText: 2000 Waldo Bastian <bastian@kde.org>
0003 
0004     SPDX-License-Identifier: BSD-2-Clause
0005 */
0006 
0007 #include "krecentdirs.h"
0008 #include <KConfig>
0009 #include <KConfigGroup>
0010 #include <KSharedConfig>
0011 #include <QDebug>
0012 
0013 static constexpr int s_maxDirHistory = 3;
0014 
0015 static KConfigGroup recentdirs_readList(QString &key, QStringList &result)
0016 {
0017     KConfigGroup cg(KSharedConfig::openConfig(), QStringLiteral("Recent Dirs"));
0018     if ((key.length() < 2) || (key[0] != QLatin1Char(':'))) {
0019         key = QStringLiteral(":default");
0020     }
0021     if (key[1] == QLatin1Char(':')) {
0022     } else {
0023         key.remove(0, 1);
0024     }
0025 
0026     result = cg.readPathEntry(key, QStringList());
0027     if (result.isEmpty()) {
0028         result.append(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
0029     }
0030     return cg;
0031 }
0032 
0033 QStringList KRecentDirs::list(const QString &fileClass)
0034 {
0035     QString key = fileClass;
0036     QStringList result;
0037     recentdirs_readList(key, result).sync();
0038     return result;
0039 }
0040 
0041 QString KRecentDirs::dir(const QString &fileClass)
0042 {
0043     const QStringList result = list(fileClass);
0044     return result[0];
0045 }
0046 
0047 void KRecentDirs::add(const QString &fileClass, const QString &directory)
0048 {
0049     QString key = fileClass;
0050     QStringList result;
0051     KConfigGroup config = recentdirs_readList(key, result);
0052     // make sure the dir is first in history
0053     result.removeAll(directory);
0054     result.prepend(directory);
0055     if (result.size() > s_maxDirHistory) {
0056         result.erase(result.begin() + s_maxDirHistory, result.end());
0057     }
0058 
0059     config.writePathEntry(key, result);
0060     config.sync();
0061 }