Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/gui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,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
Expand Down Expand Up @@ -259,6 +262,10 @@ set(client_SRCS
integration/fileactionsmodel.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
Expand Down
2 changes: 0 additions & 2 deletions src/gui/accountsettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1275,7 +1275,6 @@ void AccountSettings::showConnectionLabel(const QString &message, QStringList er
_ui->connectLabel->setToolTip({});
_ui->connectLabel->setStyleSheet(errStyle);
}
_ui->accountStatus->setVisible(!message.isEmpty());
}

void AccountSettings::slotEnableCurrentFolder(bool terminate)
Expand Down Expand Up @@ -1372,7 +1371,6 @@ void AccountSettings::slotUpdateQuota(qint64 total, qint64 used)
const auto totalStr = Utility::octetsToString(total);
_spaceUsageText = tr("%1 of %2 in use").arg(usedStr, totalStr);
} else {
/* -1 means not computed; -2 means unknown; -3 means unlimited (#owncloud/client/issues/3940)*/
if (total == 0 || total == -1) {
_spaceUsageText.clear();
} else {
Expand Down
10 changes: 8 additions & 2 deletions src/gui/accountsettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class AccountSettings : public QWidget

public slots:
void slotOpenOC();
void slotUpdateQuota(qint64 total, qint64 used);
virtual void slotUpdateQuota(qint64 total, qint64 used);
void slotAccountStateChanged();
void slotStyleChanged();
void slotHideSelectiveSyncWidget();
Expand Down Expand Up @@ -119,6 +119,7 @@ protected slots:
const QVector<int> &roles);
void slotPossiblyUnblacklistE2EeFoldersAndRestartSync();

void checkClientSideEncryptionState();
void slotE2eEncryptionCertificateNeedMigration();

private slots:
Expand All @@ -135,9 +136,14 @@ private slots:

void setupE2eEncryption();
void forgetE2eEncryption();
void checkClientSideEncryptionState();
void removeActionFromEncryptionMessage(const QString &actionId);

protected:
Ui::AccountSettings *getUi() const
{
return _ui;
}

private:
bool event(QEvent *) override;
QAction *addActionToEncryptionMessage(const QString &actionTitle, const QString &actionId);
Expand Down
169 changes: 169 additions & 0 deletions src/gui/nmcgui/nmcaccountsettings.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
/*
* 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 "nmcgui/nmcaccountsettings.h"
#include "ui_accountsettings.h"
#include "common/utility.h"

#include <cmath>
#include <QCoreApplication>
#include <QDesktopServices>
#include <QUrl>
#include <QProgressBar>
#include <QPushButton>
#include <QLabel>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QSizePolicy>

namespace OCC {

NMCAccountSettings::NMCAccountSettings(AccountState *accountState, QWidget *parent)
: AccountSettings(accountState, parent)
, m_liveAccountButton(new CustomButton(
QCoreApplication::translate("", "ADD_LIVE_BACKUP"),
QIcon(QLatin1String(":/client/theme/NMCIcons/action-add.svg")),
this))
, m_liveTitle(new QLabel(QCoreApplication::translate("", "LIVE_BACKUPS"), this))
, m_liveDescription(new QLabel(QCoreApplication::translate("", "LIVE_DESCRIPTION"), this))
, m_folderSync(new QLabel(QCoreApplication::translate("", "YOUR_FOLDER_SYNC"), this))
, m_quotaInfoLabel(new QLabel(this))
, m_quotaProgressBar(new QProgressBar(this))
, m_quotaInfoText(new QLabel(this))
{
setDefaultSettings();
setLayout();
connect(m_liveAccountButton, &CustomButton::clicked, this, &NMCAccountSettings::slotAddFolder);
}

void NMCAccountSettings::setDefaultSettings()
{
getUi()->selectiveSyncStatus->setVisible(false);
getUi()->selectiveSyncNotification->setVisible(false);
getUi()->accountStatus->setVisible(false);
getUi()->bigFolderUi->setVisible(false);
getUi()->verticalLayout_2->setSpacing(8);
}

void NMCAccountSettings::setLayout()
{
m_folderSync->setStyleSheet("font-size: 15px; font-weight: 600; padding: 8px;");
m_folderSync->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
getUi()->verticalLayout_2->insertWidget(1, m_folderSync);

auto *liveWidget = new QWidget(this);
liveWidget->setStyleSheet("QWidget { border-radius: 4px; }");

auto *liveHLayout = new QHBoxLayout(liveWidget);
liveHLayout->setContentsMargins(8, 8, 8, 8);

auto *liveVLayout = new QVBoxLayout();

Check failure on line 71 in src/gui/nmcgui/nmcaccountsettings.cpp

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Replace the use of "new" with an operation that automatically manages the memory.

See more on https://sonarcloud.io/project/issues?id=nextmcloud_desktop&issues=AZ5kjKWCsG1uv08ofyYu&open=AZ5kjKWCsG1uv08ofyYu&pullRequest=433

liveHLayout->addLayout(liveVLayout);
liveHLayout->addStretch();

const QString styleSheet = QStringLiteral(

Check warning on line 76 in src/gui/nmcgui/nmcaccountsettings.cpp

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Replace the redundant type with "auto".

See more on https://sonarcloud.io/project/issues?id=nextmcloud_desktop&issues=AZ5kjKWCsG1uv08ofyYs&open=AZ5kjKWCsG1uv08ofyYs&pullRequest=433
"QPushButton { font-size: %5px; border: %1px solid; border-color: black; "
"border-radius: 4px; background-color: %2; color: %3; } "
"QPushButton:hover { background-color: %4; }");

m_liveAccountButton->setStyleSheet(styleSheet.arg("0", "#E20074", "white", "#c00063", "13"));
m_liveAccountButton->setFixedSize(180, 32);
m_liveAccountButton->setLeftIconMargin(4);

liveHLayout->addWidget(m_liveAccountButton);

liveVLayout->addWidget(m_liveTitle);
m_liveTitle->setStyleSheet("font-size: 15px; font-weight: 600;");

liveVLayout->addWidget(m_liveDescription);
m_liveDescription->setStyleSheet("font-size: 13px;");
m_liveDescription->setText(QCoreApplication::translate("", "LIVE_BACKUPS_DESCRIPTION"));
m_liveDescription->setWordWrap(true);
m_liveDescription->setFixedWidth(450);

getUi()->verticalLayout_2->addWidget(liveWidget);

auto *quotaWidget = new QWidget(this);
auto *magentaHLayout = new QHBoxLayout(quotaWidget);
magentaHLayout->setContentsMargins(8, 8, 8, 8);
magentaHLayout->setSpacing(32);

auto *quotaVLayout = new QVBoxLayout();

Check failure on line 103 in src/gui/nmcgui/nmcaccountsettings.cpp

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Replace the use of "new" with an operation that automatically manages the memory.

See more on https://sonarcloud.io/project/issues?id=nextmcloud_desktop&issues=AZ5kjKWCsG1uv08ofyYv&open=AZ5kjKWCsG1uv08ofyYv&pullRequest=433
quotaVLayout->setSpacing(4);
quotaVLayout->addSpacing(12);

quotaVLayout->addWidget(m_quotaInfoLabel);
m_quotaInfoLabel->setStyleSheet("QLabel { font-size: 18px; padding: 8px; font-weight: 500; }");

quotaVLayout->addWidget(m_quotaProgressBar);
m_quotaProgressBar->setRange(0, 100);
m_quotaProgressBar->setStyleSheet(
"QProgressBar { background-color: #e5e5e5; color: black; border: 1px solid black; border-radius: 4px; margin-left: 8px; } "
"QProgressBar::chunk { background-color: #E20074; }");
m_quotaProgressBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);

quotaVLayout->addWidget(m_quotaInfoText);
m_quotaInfoText->setStyleSheet("QLabel { font-size: 13px; padding: 8px; }");

magentaHLayout->addLayout(quotaVLayout);

auto *storageLinkButton = new QPushButton(QCoreApplication::translate("", "STORAGE_EXTENSION"), quotaWidget);
storageLinkButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
storageLinkButton->setStyleSheet(
"QPushButton { height: 32px; width: 180px; border: 1px solid black; background-color: #ededed; "
"color: black; font-size: 13px; border-radius: 4px; } "
"QPushButton::hover { background-color: white; }");

connect(storageLinkButton, &QPushButton::clicked, this, []() {
QDesktopServices::openUrl(QUrl(QStringLiteral("https://cloud.telekom-dienste.de/tarife")));
});

magentaHLayout->addWidget(storageLinkButton);
magentaHLayout->addStretch();

getUi()->verticalLayout_2->addWidget(quotaWidget);

getUi()->encryptionMessage->hide();
checkClientSideEncryptionState();
}

void NMCAccountSettings::slotUpdateQuota(qint64 total, qint64 used)
{
if (total > 0) {
const auto usedStr = Utility::octetsToString(used);
const auto totalStr = Utility::octetsToString(total);
const auto percent = (double(used) / double(total)) * 100.0;
const auto percentStr = Utility::compactFormatDouble(percent, 1);

const auto toolTip = tr("%1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits.")
.arg(usedStr, totalStr, percentStr);

m_quotaInfoLabel->setText(QCoreApplication::translate("", "%1_OF_%2").arg(usedStr, totalStr));
m_quotaInfoLabel->setToolTip(toolTip);

m_quotaProgressBar->setValue(static_cast<int>(std::round(percent)));
m_quotaProgressBar->setToolTip(toolTip);

m_quotaInfoText->setText(QCoreApplication::translate("", "USED_STORAGE_%1").arg(percentStr));
} else {
m_quotaInfoLabel->setText({});
m_quotaProgressBar->setValue(0);
m_quotaInfoText->setText(QCoreApplication::translate("", "USED_STORAGE_%1").arg(QString::number(0)));
}

AccountSettings::slotUpdateQuota(total, used);
}

} // namespace OCC
74 changes: 74 additions & 0 deletions src/gui/nmcgui/nmcaccountsettings.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* 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_ACCOUNTSETTINGSMAGENTA_H
#define MIRALL_ACCOUNTSETTINGSMAGENTA_H

#include <QIcon>
#include <QLabel>
#include <QProgressBar>
#include <QPushButton>

#include <accountsettings.h>

namespace OCC {

/**
* @brief Simple QPushButton with predefined icon size.
*/
class CustomButton : public QPushButton
{
Q_OBJECT

public:
explicit CustomButton(const QString &text, const QIcon &icon, QWidget *parent = nullptr)
: QPushButton(text, parent)
{
setIcon(icon);
setIconSize(QSize(24, 24));
}

void setLeftIconMargin(int) {}

Check warning on line 41 in src/gui/nmcgui/nmcaccountsettings.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

This function should be declared "const".

See more on https://sonarcloud.io/project/issues?id=nextmcloud_desktop&issues=AZ5kjKUBsG1uv08ofyYr&open=AZ5kjKUBsG1uv08ofyYr&pullRequest=433

Check failure on line 41 in src/gui/nmcgui/nmcaccountsettings.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Add a nested comment explaining why this method is empty, or complete the implementation.

See more on https://sonarcloud.io/project/issues?id=nextmcloud_desktop&issues=AZ5kjKUBsG1uv08ofyYq&open=AZ5kjKUBsG1uv08ofyYq&pullRequest=433
};

/**
* @brief Erweiterte AccountSettings-Ansicht für Magenta.
*/
class NMCAccountSettings : public AccountSettings
{
Q_OBJECT

public:
explicit NMCAccountSettings(AccountState *accountState, QWidget *parent = nullptr);
~NMCAccountSettings() override = default;

public slots:
void slotUpdateQuota(qint64 total, qint64 used) override;

private:
void setDefaultSettings();
void setLayout();

CustomButton *m_liveAccountButton = nullptr;
QLabel *m_liveTitle = nullptr;
QLabel *m_liveDescription = nullptr;
QLabel *m_folderSync = nullptr;

QLabel *m_quotaInfoLabel = nullptr;
QProgressBar *m_quotaProgressBar = nullptr;
QLabel *m_quotaInfoText = nullptr;
};

} // namespace OCC

#endif // MIRALL_ACCOUNTSETTINGSMAGENTA_H
7 changes: 4 additions & 3 deletions src/gui/settingsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "generalsettings.h"
#include "networksettings.h"
#include "accountsettings.h"
#include "nmcgui/nmcaccountsettings.h"
#include "configfile.h"
#include "progressdispatcher.h"
#include "owncloudgui.h"
Expand Down Expand Up @@ -343,8 +344,8 @@ void SettingsDialog::accountAdded(AccountState *s)
accountAction->setIconText(shortDisplayNameForSettings(s->account().data(), static_cast<int>(height * buttonSizeRatio)));
}

_toolBar->addAction(accountAction);
auto accountSettings = new AccountSettings(s, this);
_toolBar->insertAction(_toolBar->actions().at(0), accountAction);
auto accountSettings = new NMCAccountSettings(s, this);
QString objectName = QLatin1String("accountSettings_");
objectName += s->account()->displayName();
accountSettings->setObjectName(objectName);
Expand Down Expand Up @@ -418,7 +419,7 @@ void SettingsDialog::slotAccountDisplayNameChanged()
void SettingsDialog::accountRemoved(AccountState *s)
{
for (auto it = _actionGroupWidgets.begin(); it != _actionGroupWidgets.end(); ++it) {
auto as = qobject_cast<AccountSettings *>(*it);
auto as = qobject_cast<NMCAccountSettings *>(*it);
if (!as) {
continue;
}
Expand Down