Skip to content

Commit

Permalink
Issue warning before allowing large attachments
Browse files Browse the repository at this point in the history
Fixes #3782
  • Loading branch information
Prabesh Paudel authored and droidmonkey committed May 23, 2020
1 parent 98566fe commit e729330
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 4 deletions.
37 changes: 33 additions & 4 deletions src/gui/entry/EntryAttachmentsWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,15 +141,17 @@ void EntryAttachmentsWidget::insertAttachments()
defaultDirPath = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first();
}

const QStringList filenames = fileDialog()->getOpenFileNames(this, tr("Select files"), defaultDirPath);
const auto filenames = fileDialog()->getOpenFileNames(this, tr("Select files"), defaultDirPath);
if (filenames.isEmpty()) {
return;
}

const auto confirmedFileNames = confirmLargeAttachments(filenames);
if (confirmedFileNames.isEmpty()) {
return;
}
config()->set(Config::LastAttachmentDir, QFileInfo(filenames.first()).absolutePath());

QString errorMessage;
if (!insertAttachments(filenames, errorMessage)) {
if (!insertAttachments(confirmedFileNames, errorMessage)) {
errorOccurred(errorMessage);
}
emit widgetUpdated();
Expand Down Expand Up @@ -353,6 +355,33 @@ bool EntryAttachmentsWidget::openAttachment(const QModelIndex& index, QString& e
return true;
}

QStringList EntryAttachmentsWidget::confirmLargeAttachments(const QStringList& filenames)
{
const QString confirmation(tr("%1 is a big file (%2 MB).\nYour database may get very large and reduce "
"performance.\n\nAre you sure to add this file?"));
QStringList confirmedFileNames;
for (const auto& file : filenames) {
QFileInfo fileInfo(file);
double size = fileInfo.size() / (1024.0 * 1024.0);
// Ask for confirmation before adding files over 5 MB in size
if (size > 5.0) {
auto fileName = fileInfo.fileName();
auto result = MessageBox::question(this,
tr("Confirm Attachment"),
confirmation.arg(fileName, QString::number(size, 'f', 1)),
MessageBox::Yes | MessageBox::No,
MessageBox::No);
if (result == MessageBox::Yes) {
confirmedFileNames << file;
}
} else {
confirmedFileNames << file;
}
}

return confirmedFileNames;
}

bool EntryAttachmentsWidget::eventFilter(QObject* watched, QEvent* e)
{
if (watched == m_ui->attachmentsView->viewport() && !isReadOnly()) {
Expand Down
2 changes: 2 additions & 0 deletions src/gui/entry/EntryAttachmentsWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ private slots:
bool insertAttachments(const QStringList& fileNames, QString& errorMessage);
bool openAttachment(const QModelIndex& index, QString& errorMessage);

QStringList confirmLargeAttachments(const QStringList& filenames);

bool eventFilter(QObject* watched, QEvent* event) override;

QScopedPointer<Ui::EntryAttachmentsWidget> m_ui;
Expand Down

0 comments on commit e729330

Please sign in to comment.