From b3cbf499fb4375663dc6e29d351748c6caae1f0d Mon Sep 17 00:00:00 2001 From: memurats Date: Mon, 27 Oct 2025 11:32:53 +0100 Subject: [PATCH 1/8] general settings dialog changes --- src/gui/CMakeLists.txt | 7 + src/gui/generalsettings.h | 6 + src/gui/nmcgui/nmcgeneralsettings.cpp | 194 +++++++++++++++++++++++ src/gui/nmcgui/nmcgeneralsettings.h | 66 ++++++++ src/gui/settingsdialog.cpp | 3 +- src/libsync/CMakeLists.txt | 4 + src/libsync/configfile.h | 4 +- src/libsync/nmclibsync/nmcconfigfile.cpp | 47 ++++++ src/libsync/nmclibsync/nmcconfigfile.h | 64 ++++++++ 9 files changed, 392 insertions(+), 3 deletions(-) create mode 100644 src/gui/nmcgui/nmcgeneralsettings.cpp create mode 100644 src/gui/nmcgui/nmcgeneralsettings.h create mode 100644 src/libsync/nmclibsync/nmcconfigfile.cpp create mode 100644 src/libsync/nmclibsync/nmcconfigfile.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 66a73d7e912e4..4ea6198768076 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -6,6 +6,9 @@ find_package(Qt${QT_MAJOR_VERSION} REQUIRED COMPONENTS Widgets Svg Qml Quick Qui find_package(KF6Archive REQUIRED) find_package(KF6GuiAddons) +#NMC customization: needed to find the ui file in a different location than the header file +set(CMAKE_AUTOUIC_SEARCH_PATHS "${CMAKE_SOURCE_DIR}/src/gui") + if(CMAKE_BUILD_TYPE MATCHES Debug) add_definitions(-DQT_QML_DEBUG) endif() @@ -260,6 +263,10 @@ set(client_SRCS wizard/wizardproxysettingsdialog.cpp ) +file(GLOB NMC_FILES "nmcgui/*") +set(NMC_SRCS ${NMC_FILES}) +list(APPEND client_SRCS ${NMC_SRCS}) + if (NOT DISABLE_ACCOUNT_MIGRATION) list(APPEND client_SRCS legacyaccountselectiondialog.h diff --git a/src/gui/generalsettings.h b/src/gui/generalsettings.h index b62a7b3c07476..96761f25c0559 100644 --- a/src/gui/generalsettings.h +++ b/src/gui/generalsettings.h @@ -34,6 +34,12 @@ class GeneralSettings : public QWidget ~GeneralSettings() override; [[nodiscard]] QSize sizeHint() const override; +protected: + Ui::GeneralSettings *getUi() const + { + return _ui; + } + public slots: void slotStyleChanged(); #if defined(BUILD_UPDATER) diff --git a/src/gui/nmcgui/nmcgeneralsettings.cpp b/src/gui/nmcgui/nmcgeneralsettings.cpp new file mode 100644 index 0000000000000..f2335ff114f6e --- /dev/null +++ b/src/gui/nmcgui/nmcgeneralsettings.cpp @@ -0,0 +1,194 @@ +/* + * Copyright (C) by Eugen Fischer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "nmcgeneralsettings.h" +#include "generalsettings.h" +#include "nmclibsync/nmcconfigfile.h" +#include "ui_generalsettings.h" +#include "theme.h" + + +namespace OCC { + +NMCGeneralSettings::NMCGeneralSettings(QWidget *parent) + : GeneralSettings(parent) +{ + setDefaultSettings(); + setNMCLayout(); +} + +void NMCGeneralSettings::setDefaultSettings() +{ + //Set default settings + //General settings + getUi()->autostartCheckBox->setCheckState(Qt::Checked); + getUi()->monoIconsCheckBox->setCheckState(Qt::Unchecked); + getUi()->serverNotificationsCheckBox->setCheckState(Qt::Unchecked); + getUi()->callNotificationsCheckBox->setCheckState(Qt::Unchecked); + //Advanced settings + getUi()->newFolderLimitCheckBox->setCheckState(Qt::Unchecked); + //Info settings + getUi()->aboutAndUpdatesGroupBox->setTitle(tr("Update")); + //Hide unsupported settings + //General settings + getUi()->monoIconsCheckBox->setVisible(false); + getUi()->callNotificationsCheckBox->setVisible(false); + //Advanced settings + getUi()->groupBox->setVisible(false); + //Info settings + getUi()->aboutAndUpdatesGroupBox->setVisible(false); +} + +void NMCGeneralSettings::setNMCLayout() +{ + // General settings + auto generalSettingsLabel = new QLabel(QCoreApplication::translate("", "GENERAL_SETTINGS")); + generalSettingsLabel->setStyleSheet("font-size: 12px; font-weight: bold;"); + getUi()->chatNotificationsCheckBox->hide(); + getUi()->generalGroupBox->layout()->removeWidget(getUi()->chatNotificationsCheckBox); + getUi()->generalGroupBox->layout()->removeWidget(getUi()->serverNotificationsCheckBox); + getUi()->generalGroupBox->layout()->removeWidget(getUi()->autostartCheckBox); + getUi()->generalGroupBox->setTitle({}); + static_cast(getUi()->generalGroupBox->layout())->addWidget(generalSettingsLabel, 0, 0); + static_cast(getUi()->generalGroupBox->layout())->addWidget(getUi()->autostartCheckBox, 1, 0); + static_cast(getUi()->generalGroupBox->layout())->addWidget(getUi()->serverNotificationsCheckBox, 2, 0); + getUi()->generalGroupBox->layout()->setContentsMargins(16, 16, 16, 16); + getUi()->generalGroupBox->layout()->setSpacing(8); + getUi()->generalGroupBox->setStyleSheet("border-radius: 4px;"); + getUi()->generalGroupBox->setStyleSheet(getUi()->generalGroupBox->styleSheet()); + + getUi()->autostartCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + getUi()->serverNotificationsCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + + // Advanced settings + auto advancedSettingsLabel = new QLabel(QCoreApplication::translate("", "ADVANCED_SETTINGS")); + advancedSettingsLabel->setStyleSheet("font-size: 12px; font-weight: bold;"); + QGroupBox *advancedSettingsBox = new QGroupBox(this); + advancedSettingsBox->setTitle(""); + advancedSettingsBox->setLayout(new QVBoxLayout); + advancedSettingsBox->layout()->setContentsMargins(16, 16, 16, 16); + advancedSettingsBox->layout()->setSpacing(8); + advancedSettingsBox->setStyleSheet("border-radius: 4px;"); + + getUi()->horizontalLayout_10->removeWidget(getUi()->showInExplorerNavigationPaneCheckBox); + getUi()->horizontalLayout->removeWidget(getUi()->moveFilesToTrashCheckBox); + getUi()->horizontalLayout_4->removeWidget(getUi()->ignoredFilesButton); + + getUi()->ignoredFilesButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + getUi()->ignoredFilesButton->setFocusPolicy(Qt::NoFocus); + getUi()->ignoredFilesButton->setStyleSheet(R"( + QPushButton { + min-height: 32px; + min-width: 200px; + border: 1px solid black; + color: black; + background-color: #ededed; + font-size: 13px; + border-radius: 4px; + } + QPushButton:hover { + background-color: white; + } + )"); + + advancedSettingsBox->layout()->addWidget(advancedSettingsLabel); + advancedSettingsBox->layout()->addWidget(getUi()->showInExplorerNavigationPaneCheckBox); + advancedSettingsBox->layout()->addWidget(getUi()->moveFilesToTrashCheckBox); + advancedSettingsBox->layout()->addItem(new QSpacerItem(1, 8, QSizePolicy::Fixed, QSizePolicy::Fixed)); + advancedSettingsBox->layout()->addWidget(getUi()->ignoredFilesButton); + getUi()->showInExplorerNavigationPaneCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + getUi()->moveFilesToTrashCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + + getUi()->gridLayout_3->addWidget(advancedSettingsBox, 2, 0); + + //Datenschutz + auto updatesLabel = new QLabel(QCoreApplication::translate("", "UPDATES_SETTINGS")); + updatesLabel->setStyleSheet("font-size: 12px; font-weight: bold;"); + QGroupBox *dataProtectionBox = new QGroupBox(this); + dataProtectionBox->setTitle(""); + dataProtectionBox->setLayout(new QVBoxLayout); + dataProtectionBox->layout()->setContentsMargins(16, 16, 16, 16); + dataProtectionBox->layout()->setSpacing(8); + dataProtectionBox->setStyleSheet("border-radius: 4px;"); + dataProtectionBox->setStyleSheet(dataProtectionBox->styleSheet()); + + auto *dataAnalysisCheckBox = new QCheckBox(this); + dataAnalysisCheckBox->setText(QCoreApplication::translate("", "DATA_ANALYSIS")); + dataAnalysisCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + getUi()->autoCheckForUpdatesCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + + dataProtectionBox->layout()->addWidget(updatesLabel); + dataProtectionBox->layout()->addWidget(getUi()->autoCheckForUpdatesCheckBox); + dataProtectionBox->layout()->addWidget(dataAnalysisCheckBox); + + connect(dataAnalysisCheckBox, &QAbstractButton::toggled, this, [](bool toggle){ + NMCConfigFile cfgFile; + cfgFile.setTransferUsageData(toggle, QString()); + }); + NMCConfigFile cfgFile; + dataAnalysisCheckBox->setChecked(cfgFile.transferUsageData()); + + dataProtectionBox->layout()->addItem(new QSpacerItem(1,8,QSizePolicy::Fixed,QSizePolicy::Fixed)); + + auto *dataAnalysisImpressum = new QLabel(this); + dataAnalysisImpressum->setText(QString("%1").arg(QCoreApplication::translate("", "IMPRESSUM"))); + dataAnalysisImpressum->setTextFormat(Qt::RichText); + dataAnalysisImpressum->setTextInteractionFlags(Qt::TextBrowserInteraction); + dataAnalysisImpressum->setOpenExternalLinks(true); + dataAnalysisImpressum->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + dataAnalysisImpressum->setStyleSheet("font-size: 13px"); + dataProtectionBox->layout()->addWidget(dataAnalysisImpressum); + + auto *dataAnalysisData = new QLabel(this); + dataAnalysisData->setText(QString("%1").arg(QCoreApplication::translate("", "DATA_PROTECTION"))); + dataAnalysisData->setTextFormat(Qt::RichText); + dataAnalysisData->setTextInteractionFlags(Qt::TextBrowserInteraction); + dataAnalysisData->setOpenExternalLinks(true); + dataAnalysisData->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + dataAnalysisData->setStyleSheet("font-size: 13px"); + dataProtectionBox->layout()->addWidget(dataAnalysisData); + + auto *dataAnalysisOpenSource = new QLabel(this); + dataAnalysisOpenSource->setText(QString("%1").arg(QCoreApplication::translate("", "LICENCE"))); + dataAnalysisOpenSource->setTextFormat(Qt::RichText); + dataAnalysisOpenSource->setTextInteractionFlags(Qt::TextBrowserInteraction); + dataAnalysisOpenSource->setOpenExternalLinks(true); + dataAnalysisOpenSource->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + dataAnalysisOpenSource->setStyleSheet("font-size: 13px"); + dataProtectionBox->layout()->addWidget(dataAnalysisOpenSource); + + auto *dataAnalysisFurtherInfo = new QLabel(this); + dataAnalysisFurtherInfo->setText(QString("%1").arg(QCoreApplication::translate("", "FURTHER_INFO"))); + dataAnalysisFurtherInfo->setTextFormat(Qt::RichText); + dataAnalysisFurtherInfo->setTextInteractionFlags(Qt::TextBrowserInteraction); + dataAnalysisFurtherInfo->setOpenExternalLinks(true); + dataAnalysisFurtherInfo->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + dataAnalysisFurtherInfo->setStyleSheet("font-size: 13px"); + dataProtectionBox->layout()->addWidget(dataAnalysisFurtherInfo); + + dataProtectionBox->layout()->addItem(new QSpacerItem(1,8,QSizePolicy::Fixed,QSizePolicy::Fixed)); + + auto *currentVersion = new QLabel(this); + currentVersion->setText(Theme::instance()->about()); + currentVersion->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + //Todo, set current version + dataProtectionBox->layout()->addWidget(currentVersion); + + getUi()->gridLayout_3->addWidget(dataProtectionBox, 3, 0); + + auto *vExpandSpacer = new QSpacerItem(1,1,QSizePolicy::Fixed,QSizePolicy::Expanding); + getUi()->gridLayout_3->layout()->addItem(vExpandSpacer); +} + +} // namespace OCC \ No newline at end of file diff --git a/src/gui/nmcgui/nmcgeneralsettings.h b/src/gui/nmcgui/nmcgeneralsettings.h new file mode 100644 index 0000000000000..e3dcc7c755762 --- /dev/null +++ b/src/gui/nmcgui/nmcgeneralsettings.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) by Eugen Fischer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#ifndef MIRALL_GENERALSETTINGSMAGENTA_H +#define MIRALL_GENERALSETTINGSMAGENTA_H + +#include "generalsettings.h" + +namespace OCC { + +/** + * @brief The NMCGeneralSettings class + * + * This class represents the Magenta-specific implementation of general settings + * for a graphical user interface. It inherits from the base class GeneralSettings. + * + * @ingroup gui + */ +class NMCGeneralSettings : public GeneralSettings +{ + Q_OBJECT + +public: + /** + * @brief Constructor for NMCGeneralSettings + * + * Creates an instance of NMCGeneralSettings with the specified parent widget. + * + * @param parent The parent widget (default is nullptr). + */ + explicit NMCGeneralSettings(QWidget *parent = nullptr); + + /** + * @brief Destructor for NMCGeneralSettings + */ + ~NMCGeneralSettings() = default; + +protected: + /** + * @brief Set default settings + * + * Sets the default values for Magenta-specific general settings. + */ + void setDefaultSettings(); + + /** + * @brief Set layout + * + * Sets the layout for the Magenta-specific general settings user interface. + */ + void setNMCLayout(); +}; + +} // namespace OCC +#endif // MIRALL_GENERALSETTINGSMAGENTA_H \ No newline at end of file diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index dc6ab9cb802ca..033c555f7309d 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -10,6 +10,7 @@ #include "folderman.h" #include "theme.h" #include "generalsettings.h" +#include "nmcgui/nmcgeneralsettings.h" #include "networksettings.h" #include "accountsettings.h" #include "configfile.h" @@ -114,7 +115,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/settings.svg"), tr("General")); _actionGroup->addAction(generalAction); _toolBar->addAction(generalAction); - auto *generalSettings = new GeneralSettings; + auto *generalSettings = new NMCGeneralSettings; _ui->stack->addWidget(generalSettings); // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching) diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index 5829eabdcfe70..c3eaef7d28061 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -166,6 +166,10 @@ set(libsync_SRCS caseclashconflictsolver.cpp ) +file(GLOB NMC_FILES "nmclibsync/*") +set(NMC_SRCS ${NMC_FILES}) +list(APPEND libsync_SRCS ${NMC_SRCS}) + if (WIN32) # to fix warnings from ntstatus.h add_definitions(-DUMDF_USING_NTSTATUS) diff --git a/src/libsync/configfile.h b/src/libsync/configfile.h index 927daa11377e8..6e5ec46e03683 100644 --- a/src/libsync/configfile.h +++ b/src/libsync/configfile.h @@ -319,10 +319,10 @@ class OWNCLOUDSYNC_EXPORT ConfigFile [[nodiscard]] QVariant retrieveData(const QString &group, const QString &key) const; void removeData(const QString &group, const QString &key); [[nodiscard]] bool dataExists(const QString &group, const QString &key) const; - -private: [[nodiscard]] QVariant getValue(const QString ¶m, const QString &group = QString(), const QVariant &defaultValue = QVariant()) const; + +private: void setValue(const QString &key, const QVariant &value); [[nodiscard]] QString keychainProxyPasswordKey() const; diff --git a/src/libsync/nmclibsync/nmcconfigfile.cpp b/src/libsync/nmclibsync/nmcconfigfile.cpp new file mode 100644 index 0000000000000..48eb0a77dd0be --- /dev/null +++ b/src/libsync/nmclibsync/nmcconfigfile.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (C) by Eugen Fischer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "nmcconfigfile.h" + +namespace OCC { + +bool NMCConfigFile::transferUsageData(const QString &connection) const +{ + QString con(connection); + if (connection.isEmpty()) + { + con = defaultConnection(); + } + QVariant fallback = getValue(m_transferUsageData, con, false); + fallback = getValue(m_transferUsageData, QString(), fallback); + + QVariant value = getPolicySetting(m_transferUsageData, fallback); + return value.toBool(); +} + +void NMCConfigFile::setTransferUsageData(bool usageData, const QString &connection) +{ + QString con(connection); + if (connection.isEmpty()) + { + con = defaultConnection(); + } + QSettings settings(configFile(), QSettings::IniFormat); + settings.beginGroup(con); + + settings.setValue(m_transferUsageData, QVariant(usageData)); + settings.sync(); +} + +} // namespace OCC \ No newline at end of file diff --git a/src/libsync/nmclibsync/nmcconfigfile.h b/src/libsync/nmclibsync/nmcconfigfile.h new file mode 100644 index 0000000000000..1c8f66f6d9921 --- /dev/null +++ b/src/libsync/nmclibsync/nmcconfigfile.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) by Eugen Fischer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#ifndef MIRALL_NMCCONFIGFILE_H +#define MIRALL_NMCCONFIGFILE_H + +#include "configfile.h" + +namespace OCC { + +/** + * @brief The NMCConfigFile class. + * @ingroup lib + * + * Subclass of ConfigFile representing the configuration file for NMC (MagentaCustomization) in the OwnCloud Sync library. + */ +class OWNCLOUDSYNC_EXPORT NMCConfigFile : public ConfigFile +{ +public: + /** + * @brief Default constructor for NMCConfigFile. + */ + explicit NMCConfigFile() = default; + + /** + * @brief Default destructor for NMCConfigFile. + */ + ~NMCConfigFile() = default; + + /** + * @brief Check if transferring usage data is enabled. + * + * @param connection Optional parameter specifying the connection; default is an empty string. + * @return True if transferring usage data is enabled, false otherwise. + */ + [[nodiscard]] bool transferUsageData(const QString &connection = QString()) const; + + /** + * @brief Set the status of transferring usage data. + * + * @param usageData True to enable transferring usage data, false to disable. + * @param connection Optional parameter specifying the connection; default is an empty string. + */ + void setTransferUsageData(bool usageData, const QString &connection); + +private: + QString m_transferUsageData = "TransferUsageData"; ///< Configuration key for storing the status of transferring usage data. +}; + + + +} // namespace OCC +#endif // MIRALL_NMCCONFIGFILE_H \ No newline at end of file From bed4c6078d2a2a86864dbebf60331c72012baf0a Mon Sep 17 00:00:00 2001 From: memurats Date: Mon, 27 Oct 2025 14:50:25 +0100 Subject: [PATCH 2/8] updated gui cmake file --- src/gui/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 4ea6198768076..c51255c5fa731 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -6,9 +6,6 @@ find_package(Qt${QT_MAJOR_VERSION} REQUIRED COMPONENTS Widgets Svg Qml Quick Qui find_package(KF6Archive REQUIRED) find_package(KF6GuiAddons) -#NMC customization: needed to find the ui file in a different location than the header file -set(CMAKE_AUTOUIC_SEARCH_PATHS "${CMAKE_SOURCE_DIR}/src/gui") - if(CMAKE_BUILD_TYPE MATCHES Debug) add_definitions(-DQT_QML_DEBUG) endif() @@ -26,6 +23,9 @@ endif() configure_file(${CMAKE_SOURCE_DIR}/theme.qrc.in ${CMAKE_SOURCE_DIR}/theme.qrc) set(theme_dir ${CMAKE_SOURCE_DIR}/theme) +#NMC customization: needed to find the ui file in a different location than the header file +set(CMAKE_AUTOUIC_SEARCH_PATHS "${CMAKE_SOURCE_DIR}/src/gui") + set(client_UI_SRCS accountsettings.ui conflictdialog.ui From 8d85c5d5445d8dea4a9060d5a12413f4fcf92ee6 Mon Sep 17 00:00:00 2001 From: memurats Date: Tue, 28 Oct 2025 09:23:12 +0100 Subject: [PATCH 3/8] remove quota warning checkbox --- src/gui/nmcgui/nmcgeneralsettings.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/nmcgui/nmcgeneralsettings.cpp b/src/gui/nmcgui/nmcgeneralsettings.cpp index f2335ff114f6e..3652f822704fe 100644 --- a/src/gui/nmcgui/nmcgeneralsettings.cpp +++ b/src/gui/nmcgui/nmcgeneralsettings.cpp @@ -59,6 +59,7 @@ void NMCGeneralSettings::setNMCLayout() getUi()->generalGroupBox->layout()->removeWidget(getUi()->chatNotificationsCheckBox); getUi()->generalGroupBox->layout()->removeWidget(getUi()->serverNotificationsCheckBox); getUi()->generalGroupBox->layout()->removeWidget(getUi()->autostartCheckBox); + getUi()->generalGroupBox->layout()->removeWidget(getUi()->quotaWarningNotificationsCheckBox); getUi()->generalGroupBox->setTitle({}); static_cast(getUi()->generalGroupBox->layout())->addWidget(generalSettingsLabel, 0, 0); static_cast(getUi()->generalGroupBox->layout())->addWidget(getUi()->autostartCheckBox, 1, 0); From 55e2d9fbacb3c64e1e69fcc3dd9946b3113190d6 Mon Sep 17 00:00:00 2001 From: memurats Date: Tue, 28 Oct 2025 09:25:52 +0100 Subject: [PATCH 4/8] set new default settings --- src/gui/nmcgui/nmcgeneralsettings.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/nmcgui/nmcgeneralsettings.cpp b/src/gui/nmcgui/nmcgeneralsettings.cpp index 3652f822704fe..9280a62677c4b 100644 --- a/src/gui/nmcgui/nmcgeneralsettings.cpp +++ b/src/gui/nmcgui/nmcgeneralsettings.cpp @@ -36,6 +36,7 @@ void NMCGeneralSettings::setDefaultSettings() getUi()->monoIconsCheckBox->setCheckState(Qt::Unchecked); getUi()->serverNotificationsCheckBox->setCheckState(Qt::Unchecked); getUi()->callNotificationsCheckBox->setCheckState(Qt::Unchecked); + getUi()->quotaWarningNotificationsCheckBox->setCheckState(Qt::Unchecked); //Advanced settings getUi()->newFolderLimitCheckBox->setCheckState(Qt::Unchecked); //Info settings @@ -44,6 +45,7 @@ void NMCGeneralSettings::setDefaultSettings() //General settings getUi()->monoIconsCheckBox->setVisible(false); getUi()->callNotificationsCheckBox->setVisible(false); + getUi()->quotaWarningNotificationsCheckBox->setVisible(false); //Advanced settings getUi()->groupBox->setVisible(false); //Info settings From 4fad7191af94aebfa54e6c98f9b2d5d1e647ad9c Mon Sep 17 00:00:00 2001 From: memurats Date: Fri, 14 Nov 2025 12:41:27 +0100 Subject: [PATCH 5/8] ignore editor changes --- src/gui/ignorelisteditor.ui | 4 ++-- src/gui/nmcgui/nmcgeneralsettings.cpp | 2 +- translations/client_de.ts | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/gui/ignorelisteditor.ui b/src/gui/ignorelisteditor.ui index 3ebdf524938c0..7c4a50f04c02a 100644 --- a/src/gui/ignorelisteditor.ui +++ b/src/gui/ignorelisteditor.ui @@ -17,7 +17,7 @@ - Global Ignore Settings + @@ -33,7 +33,7 @@ - Files Ignored by Patterns + diff --git a/src/gui/nmcgui/nmcgeneralsettings.cpp b/src/gui/nmcgui/nmcgeneralsettings.cpp index 9280a62677c4b..7f41dd344683f 100644 --- a/src/gui/nmcgui/nmcgeneralsettings.cpp +++ b/src/gui/nmcgui/nmcgeneralsettings.cpp @@ -194,4 +194,4 @@ void NMCGeneralSettings::setNMCLayout() getUi()->gridLayout_3->layout()->addItem(vExpandSpacer); } -} // namespace OCC \ No newline at end of file +} // namespace OCC diff --git a/translations/client_de.ts b/translations/client_de.ts index e227bd688b888..0b0ea4ab0bed3 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -3150,7 +3150,6 @@ Ein Downgrade von Versionen ist nicht sofort möglich: Der Wechsel von Beta auf Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data. Dateien oder Ordner, die diesem Muster entsprechen, werden nicht synchronisiert. - Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn diese das Entfernen eines Ordners verhindern würden. Dies ist für Metadaten nützlich. From 9cb9f9814923e2e6ae471be981ae327993ac2c8b Mon Sep 17 00:00:00 2001 From: memurats Date: Mon, 26 Jan 2026 11:27:41 +0100 Subject: [PATCH 6/8] fix connection error --- src/libsync/nmclibsync/nmcconfigfile.cpp | 31 ++++++++++++------------ 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/libsync/nmclibsync/nmcconfigfile.cpp b/src/libsync/nmclibsync/nmcconfigfile.cpp index 48eb0a77dd0be..f482a165f38b0 100644 --- a/src/libsync/nmclibsync/nmcconfigfile.cpp +++ b/src/libsync/nmclibsync/nmcconfigfile.cpp @@ -13,35 +13,36 @@ */ #include "nmcconfigfile.h" +#include "theme.h" namespace OCC { bool NMCConfigFile::transferUsageData(const QString &connection) const { - QString con(connection); - if (connection.isEmpty()) - { - con = defaultConnection(); - } - QVariant fallback = getValue(m_transferUsageData, con, false); + const QString group = + connection.isEmpty() + ? Theme::instance()->appName() + : connection; + + QVariant fallback = getValue(m_transferUsageData, group, false); fallback = getValue(m_transferUsageData, QString(), fallback); - QVariant value = getPolicySetting(m_transferUsageData, fallback); + const QVariant value = getPolicySetting(m_transferUsageData, fallback); return value.toBool(); } void NMCConfigFile::setTransferUsageData(bool usageData, const QString &connection) { - QString con(connection); - if (connection.isEmpty()) - { - con = defaultConnection(); - } + const QString group = + connection.isEmpty() + ? Theme::instance()->appName() + : connection; + QSettings settings(configFile(), QSettings::IniFormat); - settings.beginGroup(con); + settings.beginGroup(group); - settings.setValue(m_transferUsageData, QVariant(usageData)); + settings.setValue(m_transferUsageData, usageData); settings.sync(); } -} // namespace OCC \ No newline at end of file +} // namespace OCC From 01033defa690650a418208bbccf86e28889ae86b Mon Sep 17 00:00:00 2001 From: memurats Date: Thu, 29 Jan 2026 08:30:06 +0100 Subject: [PATCH 7/8] fix error --- src/libsync/nmclibsync/nmcconfigfile.cpp | 4 ++++ src/libsync/nmclibsync/nmcconfigfile.h | 28 ++++++++++-------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/libsync/nmclibsync/nmcconfigfile.cpp b/src/libsync/nmclibsync/nmcconfigfile.cpp index f482a165f38b0..067539828884d 100644 --- a/src/libsync/nmclibsync/nmcconfigfile.cpp +++ b/src/libsync/nmclibsync/nmcconfigfile.cpp @@ -14,9 +14,13 @@ #include "nmcconfigfile.h" #include "theme.h" +#include namespace OCC { +const QString NMCConfigFile::m_transferUsageData = + QStringLiteral("TransferUsageData"); + bool NMCConfigFile::transferUsageData(const QString &connection) const { const QString group = diff --git a/src/libsync/nmclibsync/nmcconfigfile.h b/src/libsync/nmclibsync/nmcconfigfile.h index 1c8f66f6d9921..78faad9873ebe 100644 --- a/src/libsync/nmclibsync/nmcconfigfile.h +++ b/src/libsync/nmclibsync/nmcconfigfile.h @@ -16,6 +16,7 @@ #define MIRALL_NMCCONFIGFILE_H #include "configfile.h" +#include namespace OCC { @@ -23,25 +24,19 @@ namespace OCC { * @brief The NMCConfigFile class. * @ingroup lib * - * Subclass of ConfigFile representing the configuration file for NMC (MagentaCustomization) in the OwnCloud Sync library. + * Subclass of ConfigFile representing the configuration file for + * NMC (MagentaCustomization) in the OwnCloud Sync library. */ class OWNCLOUDSYNC_EXPORT NMCConfigFile : public ConfigFile { public: - /** - * @brief Default constructor for NMCConfigFile. - */ explicit NMCConfigFile() = default; - - /** - * @brief Default destructor for NMCConfigFile. - */ - ~NMCConfigFile() = default; + ~NMCConfigFile() override = default; /** * @brief Check if transferring usage data is enabled. * - * @param connection Optional parameter specifying the connection; default is an empty string. + * @param connection Optional parameter specifying the connection. * @return True if transferring usage data is enabled, false otherwise. */ [[nodiscard]] bool transferUsageData(const QString &connection = QString()) const; @@ -49,16 +44,15 @@ class OWNCLOUDSYNC_EXPORT NMCConfigFile : public ConfigFile /** * @brief Set the status of transferring usage data. * - * @param usageData True to enable transferring usage data, false to disable. - * @param connection Optional parameter specifying the connection; default is an empty string. + * @param usageData True to enable transferring usage data, false otherwise. + * @param connection Optional parameter specifying the connection. */ - void setTransferUsageData(bool usageData, const QString &connection); + void setTransferUsageData(bool usageData, const QString &connection = QString()); private: - QString m_transferUsageData = "TransferUsageData"; ///< Configuration key for storing the status of transferring usage data. + static const QString m_transferUsageData; }; - - } // namespace OCC -#endif // MIRALL_NMCCONFIGFILE_H \ No newline at end of file + +#endif // MIRALL_NMCCONFIGFILE_H From 66188c93def95a1687ed2b514c57f02eefbc6417 Mon Sep 17 00:00:00 2001 From: memurats Date: Thu, 29 Jan 2026 08:44:15 +0100 Subject: [PATCH 8/8] fix error --- src/libsync/nmclibsync/nmcconfigfile.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libsync/nmclibsync/nmcconfigfile.h b/src/libsync/nmclibsync/nmcconfigfile.h index 78faad9873ebe..bd47e1418fca8 100644 --- a/src/libsync/nmclibsync/nmcconfigfile.h +++ b/src/libsync/nmclibsync/nmcconfigfile.h @@ -30,8 +30,8 @@ namespace OCC { class OWNCLOUDSYNC_EXPORT NMCConfigFile : public ConfigFile { public: - explicit NMCConfigFile() = default; - ~NMCConfigFile() override = default; + NMCConfigFile() = default; + ~NMCConfigFile() = default; /** * @brief Check if transferring usage data is enabled.