From af5a3560e48c4d9df9181a85472e1f1805ecb623 Mon Sep 17 00:00:00 2001
From: Lukas Holecek <hluk@email.cz>
Date: Mon, 29 Mar 2021 18:53:00 +0200
Subject: [PATCH] itemsync: Clean up

---
 plugins/itemsync/filewatcher.cpp | 80 ++++++++++++++++----------------
 1 file changed, 39 insertions(+), 41 deletions(-)

diff --git a/plugins/itemsync/filewatcher.cpp b/plugins/itemsync/filewatcher.cpp
index 611fa847f..40dcfa39f 100644
--- a/plugins/itemsync/filewatcher.cpp
+++ b/plugins/itemsync/filewatcher.cpp
@@ -32,6 +32,9 @@
 #include <QRegularExpression>
 #include <QUrl>
 
+#include <array>
+#include <vector>
+
 const QLatin1String mimeExtensionMap(COPYQ_MIME_PREFIX_ITEMSYNC "mime-to-extension-map");
 const QLatin1String mimeBaseName(COPYQ_MIME_PREFIX_ITEMSYNC "basename");
 const QLatin1String mimeNoSave(COPYQ_MIME_PREFIX_ITEMSYNC "no-save");
@@ -51,15 +54,17 @@ struct Ext {
     QString format;
 };
 
+using Exts = std::vector<Ext>;
+
 struct BaseNameExtensions {
     explicit BaseNameExtensions(const QString &baseName = QString(),
-                                const QList<Ext> &exts = QList<Ext>())
+                                const Exts &exts = Exts())
         : baseName(baseName)
         , exts(exts)
         , isOwn( FileWatcher::isOwnBaseName(baseName) )
     {}
     QString baseName;
-    QList<Ext> exts;
+    Exts exts;
     bool isOwn;
 };
 
@@ -111,26 +116,22 @@ void getBaseNameAndExtension(const QString &fileName, QString *baseName, QString
     }
 }
 
-QList<Ext> fileExtensionsAndFormats()
+const std::array<Ext, 12> &fileExtensionsAndFormats()
 {
-    static QList<Ext> exts;
-
-    if ( exts.isEmpty() ) {
-        exts.append( Ext(noteFileSuffix, mimeItemNotes) );
-
-        exts.append( Ext(".bmp", "image/bmp") );
-        exts.append( Ext(".gif", "image/gif") );
-        exts.append( Ext(".html", mimeHtml) );
-        exts.append( Ext("_inkscape.svg", "image/x-inkscape-svg-compressed") );
-        exts.append( Ext(".jpg", "image/jpeg") );
-        exts.append( Ext(".jpg", "image/jpeg") );
-        exts.append( Ext(".png", "image/png") );
-        exts.append( Ext(".txt", mimeText) );
-        exts.append( Ext(".uri", mimeUriList) );
-        exts.append( Ext(".xml", "application/xml") );
-        exts.append( Ext(".svg", "image/svg+xml") );
-        exts.append( Ext(".xml", "text/xml") );
-    }
+    static const std::array<Ext, 12> exts = {
+        Ext(noteFileSuffix, mimeItemNotes),
+        Ext(".txt", mimeText),
+        Ext(".html", mimeHtml),
+        Ext(".uri", mimeUriList),
+        Ext(".png", "image/png"),
+        Ext("_inkscape.svg", "image/x-inkscape-svg-compressed"),
+        Ext(".svg", "image/svg+xml"),
+        Ext(".bmp", "image/bmp"),
+        Ext(".gif", "image/gif"),
+        Ext(".jpg", "image/jpeg"),
+        Ext(".xml", "application/xml"),
+        Ext(".xml", "text/xml"),
+    };
 
     return exts;
 }
@@ -138,9 +139,7 @@ QList<Ext> fileExtensionsAndFormats()
 QString findByFormat(const QString &format, const QList<FileFormat> &formatSettings)
 {
     // Find in default extensions.
-    const QList<Ext> &exts = fileExtensionsAndFormats();
-
-    for (const auto &ext : exts) {
+    for (const auto &ext : fileExtensionsAndFormats()) {
         if (ext.format == format)
             return ext.extension;
     }
@@ -177,9 +176,7 @@ Ext findByExtension(const QString &fileName, const QList<FileFormat> &formatSett
     }
 
     // Find in default formats.
-    const QList<Ext> &exts = fileExtensionsAndFormats();
-
-    for (const auto &ext : exts) {
+    for (const auto &ext : fileExtensionsAndFormats()) {
         if ( fileName.endsWith(ext.extension) )
             return ext;
     }
@@ -193,7 +190,7 @@ bool saveItemFile(const QString &filePath, const QByteArray &bytes,
     if ( !existingFiles->removeOne(filePath) || hashChanged ) {
         QFile f(filePath);
         if ( !f.open(QIODevice::WriteOnly) || f.write(bytes) == -1 ) {
-            log( QString("ItemSync: %1").arg(f.errorString()), LogError );
+            log( QStringLiteral("ItemSync: %1").arg(f.errorString()), LogError );
             return false;
         }
     }
@@ -203,7 +200,7 @@ bool saveItemFile(const QString &filePath, const QByteArray &bytes,
 
 bool canUseFile(const QFileInfo &info)
 {
-    return !info.isHidden() && !info.fileName().startsWith('.') && info.isReadable();
+    return !info.isHidden() && !info.fileName().startsWith(QLatin1Char('.')) && info.isReadable();
 }
 
 bool getBaseNameExtension(const QString &filePath, const QList<FileFormat> &formatSettings,
@@ -214,7 +211,7 @@ bool getBaseNameExtension(const QString &filePath, const QList<FileFormat> &form
         return false;
 
     *ext = findByExtension(filePath, formatSettings);
-    if ( ext->format.isEmpty() || ext->format == "-" )
+    if ( ext->format.isEmpty() || ext->format == QLatin1String("-") )
         return false;
 
     const QString fileName = info.fileName();
@@ -242,7 +239,7 @@ BaseNameExtensionsList listFiles(const QStringList &files,
                 if (fileList.size() >= maxItemCount)
                     break;
             } else {
-                fileList[i].exts.append(ext);
+                fileList[i].exts.push_back(ext);
             }
         }
     }
@@ -332,14 +329,15 @@ bool renameToUnique(
         const QList<FileFormat> &formatSettings)
 {
     if ( name->isEmpty() ) {
-        const auto dateFormat = "yyyyMMddhhmmsszzz";
+        const auto dateFormat = QStringLiteral("yyyyMMddhhmmsszzz");
         const auto dateTime = QDateTime::currentDateTimeUtc();
         const auto now = dateTime.toString(dateFormat);
-        *name = QString::fromLatin1("copyq_%1").arg(now);
+        *name = QStringLiteral("copyq_%1").arg(now);
     } else {
         // Replace/remove unsafe characters.
-        name->replace( QRegularExpression("/|\\\\|^\\."), QLatin1String("_") );
-        name->remove( QRegularExpression("\\n|\\r") );
+        name->replace( QRegularExpression(QLatin1String(R"(/|\\|^\.)")),
+                       QLatin1String("_") );
+        name->remove( QRegularExpression(QLatin1String(R"(\n|\r)")) );
     }
 
     const QStringList fileNames = dir.entryList();
@@ -354,7 +352,7 @@ bool renameToUnique(
     qulonglong i = 0;
     int fieldWidth = 0;
 
-    QRegularExpression re("\\d+$");
+    QRegularExpression re(QLatin1String(R"(\d+$)"));
     const auto m = re.match(baseName);
     if (m.hasMatch()) {
         const QString num = m.captured();
@@ -366,12 +364,12 @@ bool renameToUnique(
     }
 
     for (int counter = 0; counter < 99999; ++counter) {
-        *name = baseName + QString::fromLatin1("%1").arg(++i, fieldWidth, 10, QChar('0')) + ext;
+        *name = baseName + QStringLiteral("%1").arg(++i, fieldWidth, 10, QLatin1Char('0')) + ext;
         if ( isUniqueBaseName(*name, fileNames, baseNames) )
             return true;
     }
 
-    log( QString::fromLatin1(
+    log( QStringLiteral(
                 "ItemSync: Failed to find unique base name with prefix: %1")
             .arg(baseName), LogError);
     return false;
@@ -575,7 +573,7 @@ void FileWatcher::updateItems()
 
         m_lastBatchIndex = -1;
         if ( t.elapsed() > 100 )
-            log( QString("ItemSync: Files listed in %1 ms").arg(t.elapsed()) );
+            log( QStringLiteral("ItemSync: Files listed in %1 ms").arg(t.elapsed()) );
     }
 
     for ( int i = m_lastBatchIndex + 1; i < m_batchIndexData.size(); ++i ) {
@@ -610,7 +608,7 @@ void FileWatcher::updateItems()
         }
 
         if ( t.elapsed() > 20 ) {
-            COPYQ_LOG_VERBOSE( QString("ItemSync: Items updated in %1 ms, last row %2/%3")
+            COPYQ_LOG_VERBOSE( QStringLiteral("ItemSync: Items updated in %1 ms, last row %2/%3")
                  .arg(t.elapsed())
                  .arg(i + 1)
                  .arg(m_batchIndexData.size()) );
@@ -626,7 +624,7 @@ void FileWatcher::updateItems()
     insertItemsFromFiles(dir, m_fileList);
 
     if ( t.elapsed() > 100 )
-        log( QString("ItemSync: Items created in %1 ms").arg(t.elapsed()) );
+        log( QStringLiteral("ItemSync: Items created in %1 ms").arg(t.elapsed()) );
 
     m_fileList.clear();
     m_batchIndexData.clear();
-- 
GitLab