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 }