Replace all manual isntancesof adding trailing slash with use of utility method
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 10 Jul 2023 09:51:24 +0000 (17:51 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 4 Aug 2023 09:40:42 +0000 (17:40 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
15 files changed:
src/common/syncjournaldb.cpp
src/gui/accountsettings.cpp
src/gui/folderstatusmodel.cpp
src/gui/folderwatcher_win.h
src/gui/owncloudsetupwizard.cpp
src/gui/selectivesyncdialog.cpp
src/gui/socketapi/socketuploadjob.cpp
src/gui/wizard/webviewpage.cpp
src/libsync/configfile.cpp
src/libsync/discovery.cpp
src/libsync/discoveryphase.cpp
src/libsync/owncloudpropagator.h
src/libsync/syncengine.cpp
src/libsync/theme.cpp
test/syncenginetestutils.cpp

index c58bd695e2e607eabea2e47d527fa131b64d5df9..03719c6d2bf8a2e49d93d1f000e473b144d9a282 100644 (file)
@@ -1985,10 +1985,7 @@ QStringList SyncJournalDb::getSelectiveSyncList(SyncJournalDb::SelectiveSyncList
         if (!next.hasData)
             break;
 
-        auto entry = query->stringValue(0);
-        if (!entry.endsWith(QLatin1Char('/'))) {
-            entry.append(QLatin1Char('/'));
-        }
+        const auto entry = Utility::trailingSlashPath(query->stringValue(0));
         result.append(entry);
     }
     *ok = true;
index 2009412d69a7da4e5ba74e929c807cebea15d4df..cc300174d5067c15df338e09b01fdc1b58d02ac4 100644 (file)
@@ -1514,7 +1514,7 @@ void AccountSettings::refreshSelectiveSyncStatus()
             // FIXME: add the folder alias in a hoover hint.
             // folder->alias() + QLatin1String("/")
 
-            const auto folderTrailingSlash = it.endsWith('/') ? it : it + QChar('/');
+            const auto folderTrailingSlash = Utility::trailingSlashPath(it);
             const auto folderWithoutTrailingSlash = it.endsWith('/') ? it.left(it.length() - 1) : it;
             const auto escapedFolderString = Utility::escape(folderWithoutTrailingSlash);
             const auto escapedFolderName = Utility::escape(folder->alias());
index 8a92b291ab678d99b1d10ab36b5bf8433cfd7dbe..061efc8624b0f8a023426bb51fdfbeb3beb9055e 100644 (file)
  */
 
 #include "folderstatusmodel.h"
-#include "folderman.h"
 #include "accountstate.h"
 #include "common/asserts.h"
-#include <theme.h>
-#include <account.h>
+#include "common/utility.h"
+#include "folderman.h"
 #include "folderstatusdelegate.h"
+#include <account.h>
+#include <theme.h>
 
 #include <QFileIconProvider>
 #include <QVarLengthArray>
@@ -703,9 +704,7 @@ void FolderStatusModel::slotUpdateDirectories(const QStringList &list)
     parentInfo->_fetched = true;
 
     QUrl url = parentInfo->_folder->remoteUrl();
-    QString pathToRemove = url.path();
-    if (!pathToRemove.endsWith('/'))
-        pathToRemove += '/';
+    const auto pathToRemove = Utility::trailingSlashPath(url.path());
 
     QStringList selectiveSyncBlackList;
     bool ok1 = true;
index d72665f0607d0e8bb9fd60599b564f18c0845a73..6c4a261e0e05b757ea05b4918f8a7b1055a6a63f 100644 (file)
@@ -15,8 +15,9 @@
 #ifndef MIRALL_FOLDERWATCHER_WIN_H
 #define MIRALL_FOLDERWATCHER_WIN_H
 
-#include <QThread>
+#include "common/utility.h"
 #include <QAtomicInt>
+#include <QThread>
 #include <windows.h>
 
 namespace OCC {
@@ -33,7 +34,7 @@ class WatcherThread : public QThread
 public:
     WatcherThread(const QString &path)
         : QThread()
-        , _path(path + (path.endsWith(QLatin1Char('/')) ? QString() : QStringLiteral("/")))
+        , _path(Utility::trailingSlashPath(path))
         , _directory(0)
         , _resultEvent(0)
         , _stopEvent(0)
index 551fc487dc72788790cd4e03f89a36c2df63c0cc..b0354b58e03b0b003f63fd6c7bc29a9d5015ddd3 100644 (file)
 #include <QDesktopServices>
 #include <QApplication>
 
-#include "wizard/owncloudwizardcommon.h"
-#include "wizard/owncloudwizard.h"
-#include "owncloudsetupwizard.h"
-#include "configfile.h"
-#include "folderman.h"
 #include "accessmanager.h"
 #include "account.h"
-#include "networkjobs.h"
-#include "sslerrordialog.h"
 #include "accountmanager.h"
 #include "clientproxy.h"
+#include "common/utility.h"
+#include "configfile.h"
 #include "filesystem.h"
+#include "folderman.h"
+#include "networkjobs.h"
 #include "owncloudgui.h"
+#include "owncloudsetupwizard.h"
+#include "sslerrordialog.h"
+#include "wizard/owncloudwizard.h"
+#include "wizard/owncloudwizardcommon.h"
 
 #include "creds/credentialsfactory.h"
 #include "creds/abstractcredentials.h"
@@ -125,13 +126,7 @@ void OwncloudSetupWizard::startWizard()
     }
 
     // remember the local folder to compare later if it changed, but clean first
-    QString lf = QDir::fromNativeSeparators(localFolder);
-    if (!lf.endsWith(QLatin1Char('/'))) {
-        lf.append(QLatin1Char('/'));
-    }
-
-    _initLocalFolder = lf;
-
+    _initLocalFolder = Utility::trailingSlashPath(QDir::fromNativeSeparators(localFolder));
     _ocWizard->setRemoteFolder(_remoteFolder);
 
     const auto isEnforcedServerSetup =
index 4f4ca1ec1fc2d8312e9576bfe832ca165c80b7ca..d83d1b9cdf7b5ff8e7e7183c8cc29a95c5a4aee4 100644 (file)
  * for more details.
  */
 #include "selectivesyncdialog.h"
-#include "folder.h"
 #include "account.h"
+#include "common/utility.h"
+#include "configfile.h"
+#include "folder.h"
+#include "folderman.h"
 #include "networkjobs.h"
 #include "theme.h"
-#include "folderman.h"
-#include "configfile.h"
 #include <QDialogButtonBox>
-#include <QVBoxLayout>
-#include <QTreeWidget>
-#include <qpushbutton.h>
 #include <QFileIconProvider>
 #include <QHeaderView>
-#include <QSettings>
+#include <QLabel>
 #include <QScopedValueRollback>
+#include <QSettings>
+#include <QTreeWidget>
 #include <QTreeWidgetItem>
-#include <QLabel>
 #include <QVBoxLayout>
+#include <qpushbutton.h>
 
 namespace OCC {
 
@@ -203,10 +203,7 @@ void SelectiveSyncWidget::slotUpdateDirectories(QStringList list)
     auto *root = dynamic_cast<SelectiveSyncTreeViewItem *>(_folderTree->topLevelItem(0));
 
     QUrl url = _account->davUrl();
-    QString pathToRemove = url.path();
-    if (!pathToRemove.endsWith('/')) {
-        pathToRemove.append('/');
-    }
+    auto pathToRemove = Utility::trailingSlashPath(url.path());
     pathToRemove.append(_folderPath);
     if (!_folderPath.isEmpty())
         pathToRemove.append('/');
index b8ee787a114594a87e033d8efe320c5108bcceae..6e4ebc96890991dee7166796819f47616f3b0e31 100644 (file)
@@ -13,6 +13,7 @@
  */
 
 #include "socketuploadjob.h"
+#include "common/utility.h"
 #include "socketapi_p.h"
 
 #include "accountmanager.h"
@@ -55,7 +56,7 @@ SocketUploadJob::SocketUploadJob(const QSharedPointer<SocketApiJobV2> &job)
     SyncOptions opt;
     opt.fillFromEnvironmentVariables();
     opt.verifyChunkSizes();
-    _engine = new SyncEngine(account->account(), _localPath.endsWith(QLatin1Char('/')) ? _localPath : _localPath + QLatin1Char('/'), opt, _remotePath, _db);
+    _engine = new SyncEngine(account->account(), Utility::trailingSlashPath(_localPath), opt, _remotePath, _db);
     _engine->setParent(_db);
 
     connect(_engine, &OCC::SyncEngine::itemCompleted, this, [this](const OCC::SyncFileItemPtr item) {
index 0b5ccd9ca59f4b74577cb200686eab519ce5f2d1..8e492ea276050628eb77212301eb0ac96498ec57 100644 (file)
@@ -6,10 +6,11 @@
 #include <QNetworkProxyFactory>
 #include <QScreen>
 
-#include "owncloudwizard.h"
+#include "account.h"
+#include "common/utility.h"
 #include "creds/webflowcredentials.h"
+#include "owncloudwizard.h"
 #include "webview.h"
-#include "account.h"
 
 namespace OCC {
 
@@ -46,11 +47,7 @@ void WebViewPage::initializePage() {
     if (_ocWizard->registration()) {
         url = "https://nextcloud.com/register";
     } else {
-        url = _ocWizard->ocUrl();
-        if (!url.endsWith('/')) {
-            url += "/";
-        }
-        url += "index.php/login/flow";
+        url = Utility::trailingSlashPath(_ocWizard->ocUrl()) + "index.php/login/flow";
     }
     qCInfo(lcWizardWebiewPage()) << "Url to auth at: " << url;
     _webView->setUrl(QUrl(url));
index 86e39d95617220f74581416aadd9163c415c4854..5bbcc817d345126e0980ce32bda9e820824f6b45 100644 (file)
@@ -363,11 +363,8 @@ QString ConfigFile::configPath() const
             _confDir = newLocation;
         }
     }
-    QString dir = _confDir;
 
-    if (!dir.endsWith(QLatin1Char('/')))
-        dir.append(QLatin1Char('/'));
-    return dir;
+    return Utility::trailingSlashPath(_confDir);
 }
 
 static const QLatin1String exclFile("sync-exclude.lst");
index 9361930944fe6c94b49f2a13f3ac71c134770c03..8d24b56f633a87b0ee76365ada681d2372faf8ca 100644 (file)
@@ -437,7 +437,7 @@ void ProcessDirectoryJob::checkAndUpdateSelectiveSyncListsForE2eeFolders(const Q
 {
     bool ok = false;
 
-    const auto pathWithTrailingSpace = path.endsWith(QLatin1Char('/')) ? path : path + QLatin1Char('/');
+    const auto pathWithTrailingSpace = Utility::trailingSlashPath(path);
 
     auto blackListSet = _discoveryData->_statedb->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, &ok).toSet();
     blackListSet.insert(pathWithTrailingSpace);
index e992159a9331bd80dd0868982674d38befe3ccf3..9034da4b094c0a2143d9efd886986b0392fcc97f 100644 (file)
@@ -13,6 +13,7 @@
  */
 
 #include "discoveryphase.h"
+#include "common/utility.h"
 #include "configfile.h"
 #include "discovery.h"
 #include "helpers.h"
@@ -122,8 +123,7 @@ void DiscoveryPhase::checkSelectiveSyncNewFolder(const QString &path,
         }
 
         // it is not too big, put it in the white list (so we will not do more query for the children) and and do not block.
-        static const auto slash = QLatin1Char('/');
-        const auto sanitisedPath = path.endsWith(slash) ? path : path + slash;
+        const auto sanitisedPath = Utility::trailingSlashPath(path);
         _selectiveSyncWhiteList.insert(std::upper_bound(_selectiveSyncWhiteList.begin(), _selectiveSyncWhiteList.end(), sanitisedPath), sanitisedPath);
         return callback(false);
     });
index f38291b1ed468d685208b0a01a75e60ff4eb3ee0..e837641a49bda017bfba0d81a7255275656d9a68 100644 (file)
 #include <QMutex>
 #include <QNetworkReply>
 
+#include "accountfwd.h"
+#include "bandwidthmanager.h"
+#include "common/syncjournaldb.h"
+#include "common/utility.h"
 #include "csync.h"
+#include "progressdispatcher.h"
 #include "syncfileitem.h"
-#include "common/syncjournaldb.h"
-#include "bandwidthmanager.h"
-#include "accountfwd.h"
 #include "syncoptions.h"
-#include "progressdispatcher.h"
 
 #include <deque>
 
@@ -416,15 +417,13 @@ public:
     bool _finishedEmited = false; // used to ensure that finished is only emitted once
 
 public:
-    OwncloudPropagator(AccountPtr account, const QString &localDir,
-                       const QString &remoteFolder, SyncJournalDb *progressDb,
-                       QSet<QString> &bulkUploadBlackList)
+    OwncloudPropagator(AccountPtr account, const QString &localDir, const QString &remoteFolder, SyncJournalDb *progressDb, QSet<QString> &bulkUploadBlackList)
         : _journal(progressDb)
         , _bandwidthManager(this)
         , _chunkSize(10 * 1000 * 1000) // 10 MB, overridden in setSyncOptions
         , _account(account)
-        , _localDir((localDir.endsWith(QChar('/'))) ? localDir : localDir + '/')
-        , _remoteFolder((remoteFolder.endsWith(QChar('/'))) ? remoteFolder : remoteFolder + '/')
+        , _localDir(Utility::trailingSlashPath(localDir))
+        , _remoteFolder(Utility::trailingSlashPath(remoteFolder))
         , _bulkUploadBlackList(bulkUploadBlackList)
     {
         qRegisterMetaType<PropagatorJob::AbortType>("PropagatorJob::AbortType");
index b4fadc45399d7523fc2c78d4df1e878f7318450a..52985fd4454ab82081472adc7d1ada27c65cfc16 100644 (file)
@@ -617,12 +617,8 @@ void SyncEngine::startSync()
         _discoveryPhase->_excludes->reloadExcludeFiles();
     }
     _discoveryPhase->_statedb = _journal;
-    _discoveryPhase->_localDir = _localPath;
-    if (!_discoveryPhase->_localDir.endsWith('/'))
-        _discoveryPhase->_localDir+='/';
-    _discoveryPhase->_remoteFolder = _remotePath;
-    if (!_discoveryPhase->_remoteFolder.endsWith('/'))
-        _discoveryPhase->_remoteFolder+='/';
+    _discoveryPhase->_localDir = Utility::trailingSlashPath(_localPath);
+    _discoveryPhase->_remoteFolder = Utility::trailingSlashPath(_remotePath);
     _discoveryPhase->_syncOptions = _syncOptions;
     _discoveryPhase->_shouldDiscoverLocaly = [this](const QString &path) {
         const auto result = shouldDiscoverLocally(path);
index a8bcd127365b00133a4d0cfdd1df242c95ea2e7d..fb589c29d601cc257f4784446f8cbde14d422fd3 100644 (file)
@@ -408,12 +408,12 @@ QString Theme::helpUrl() const
 
 QString Theme::conflictHelpUrl() const
 {
-    auto baseUrl = helpUrl();
-    if (baseUrl.isEmpty())
+    const auto baseUrl = helpUrl();
+    if (baseUrl.isEmpty()) {
         return QString();
-    if (!baseUrl.endsWith('/'))
-        baseUrl.append('/');
-    return baseUrl + QStringLiteral("conflicts.html");
+    }
+
+    return Utility::trailingSlashPath(baseUrl) + QStringLiteral("conflicts.html");
 }
 
 QString Theme::overrideServerUrl() const
index 15c7f5a489245b6652c808028e7bc4d05207d979..76617d7518ad91a9b23c46a4441c5abcc2c467d9 100644 (file)
@@ -6,9 +6,10 @@
  */
 
 #include "syncenginetestutils.h"
-#include "httplogger.h"
 #include "accessmanager.h"
+#include "common/utility.h"
 #include "gui/sharepermissions.h"
+#include "httplogger.h"
 
 #include <QJsonDocument>
 #include <QJsonArray>
@@ -285,11 +286,7 @@ QString FileInfo::path() const
 
 QString FileInfo::absolutePath() const
 {
-    if (parentPath.endsWith(QLatin1Char('/'))) {
-        return parentPath + name;
-    } else {
-        return parentPath + QLatin1Char('/') + name;
-    }
+    return OCC::Utility::trailingSlashPath(parentPath) + name;
 }
 
 void FileInfo::fixupParentPathRecursively()
@@ -339,10 +336,7 @@ FakePropfindReply::FakePropfindReply(FileInfo &remoteRootFileInfo, QNetworkAcces
     auto writeFileResponse = [&](const FileInfo &fileInfo) {
         xml.writeStartElement(davUri, QStringLiteral("response"));
 
-        auto url = QString::fromUtf8(QUrl::toPercentEncoding(fileInfo.absolutePath(), "/"));
-        if (!url.endsWith(QChar('/'))) {
-            url.append(QChar('/'));
-        }
+        const auto url = OCC::Utility::trailingSlashPath(QString::fromUtf8(QUrl::toPercentEncoding(fileInfo.absolutePath(), "/")));
         const auto href = OCC::Utility::concatUrlPath(prefix, url).path();
         xml.writeTextElement(davUri, QStringLiteral("href"), href);
         xml.writeStartElement(davUri, QStringLiteral("propstat"));
@@ -1178,9 +1172,7 @@ FileInfo FakeFolder::currentLocalState()
 QString FakeFolder::localPath() const
 {
     // SyncEngine wants a trailing slash
-    if (_tempDir.path().endsWith(QLatin1Char('/')))
-        return _tempDir.path();
-    return _tempDir.path() + QLatin1Char('/');
+    return OCC::Utility::trailingSlashPath(_tempDir.path());
 }
 
 void FakeFolder::scheduleSync()