File indexing completed on 2024-05-19 04:36:07

0001 /* SPDX-FileCopyrightText: 2023 Noah Davis <noahadvs@gmail.com>
0002  * SPDX-License-Identifier: LGPL-2.0-or-later
0003  */
0004 
0005 #include "ConfigUtils.h"
0006 #include <KConfigGroup>
0007 #include <KSharedConfig>
0008 #include <QRegularExpression>
0009 
0010 using namespace Qt::StringLiterals;
0011 
0012 const ValueMap oldNewMap{
0013     {u"%Y"_s, u"<yyyy>"_s},
0014     {u"%y"_s, u"<yy>"_s},
0015     {u"%M"_s, u"<MM>"_s},
0016     {u"%n"_s, u"<MMM>"_s},
0017     {u"%N"_s, u"<MMMM>"_s},
0018     {u"%D"_s, u"<dd>"_s},
0019     {u"%H"_s, u"<HH>"_s},
0020     {u"%m"_s, u"<mm>"_s},
0021     {u"%S"_s, u"<ss>"_s},
0022     {u"%t"_s, u"<t>"_s},
0023     {u"%T"_s, u"<title>"_s},
0024 };
0025 
0026 inline QString changedFormat(QString filenameTemplate)
0027 {
0028     for (auto it = oldNewMap.cbegin(); it != oldNewMap.cend(); ++it) {
0029         filenameTemplate.replace(it.key(), it.value());
0030     }
0031 
0032     QRegularExpression sequenceRE(u"%(\\d*)d"_s);
0033     auto it = sequenceRE.globalMatch(filenameTemplate);
0034     while (it.hasNext()) {
0035         auto match = it.next();
0036         int padding = 0;
0037         if (!match.captured(1).isEmpty()) {
0038             padding = match.captured(1).toInt();
0039         }
0040         auto newValue = u"<%1>"_s.arg(u"#"_s, padding, u'#');
0041         filenameTemplate.replace(match.captured(), newValue);
0042     }
0043 
0044     return filenameTemplate;
0045 }
0046 
0047 int main()
0048 {
0049     const auto fileName = u"spectaclerc"_s;
0050     if (!continueUpdate(fileName, u"2024-02-28T00:00:00Z"_s)) {
0051         return 0;
0052     }
0053 
0054     // We only need to read spectaclerc, so we use SimpleConfig.
0055     auto spectaclerc = KSharedConfig::openConfig(fileName, KConfig::SimpleConfig);
0056 
0057     auto imageSaveGroup = spectaclerc->group(QStringLiteral("ImageSave"));
0058     if (!isEntryDefault(imageSaveGroup, "imageFilenameTemplate")) {
0059         auto value = imageSaveGroup.readEntry("imageFilenameTemplate");
0060         imageSaveGroup.writeEntry("imageFilenameTemplate", changedFormat(value));
0061     }
0062 
0063     auto videoSaveGroup = spectaclerc->group(QStringLiteral("VideoSave"));
0064     if (!isEntryDefault(videoSaveGroup, "videoFilenameTemplate")) {
0065         auto value = videoSaveGroup.readEntry("videoFilenameTemplate");
0066         videoSaveGroup.writeEntry("videoFilenameTemplate", changedFormat(value));
0067     }
0068 
0069     return spectaclerc->sync() ? 0 : 1;
0070 }