mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 22:09:52 +08:00
confirm when cleaning up unused images
Add config confirm_images_clean_up.
This commit is contained in:
parent
cdcab4884a
commit
2b78711eb4
163
src/dialog/vconfirmdeletiondialog.cpp
Normal file
163
src/dialog/vconfirmdeletiondialog.cpp
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
#include "vconfirmdeletiondialog.h"
|
||||||
|
|
||||||
|
#include <QtWidgets>
|
||||||
|
|
||||||
|
#include "utils/vutils.h"
|
||||||
|
#include "vconfigmanager.h"
|
||||||
|
|
||||||
|
extern VConfigManager *g_config;
|
||||||
|
|
||||||
|
class ConfirmItemWidget : public QWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit ConfirmItemWidget(QWidget *p_parent = NULL)
|
||||||
|
: QWidget(p_parent)
|
||||||
|
{
|
||||||
|
setupUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfirmItemWidget(bool p_checked, const QString &p_file, QWidget *p_parent = NULL)
|
||||||
|
: QWidget(p_parent)
|
||||||
|
{
|
||||||
|
setupUI();
|
||||||
|
|
||||||
|
m_checkBox->setChecked(p_checked);
|
||||||
|
m_fileLabel->setText(p_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isChecked() const
|
||||||
|
{
|
||||||
|
return m_checkBox->isChecked();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString getFile() const
|
||||||
|
{
|
||||||
|
return m_fileLabel->text();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setupUI()
|
||||||
|
{
|
||||||
|
m_checkBox = new QCheckBox;
|
||||||
|
m_fileLabel = new QLabel;
|
||||||
|
QHBoxLayout *mainLayout = new QHBoxLayout;
|
||||||
|
mainLayout->addWidget(m_checkBox);
|
||||||
|
mainLayout->addWidget(m_fileLabel);
|
||||||
|
mainLayout->addStretch();
|
||||||
|
mainLayout->setContentsMargins(3, 0, 0, 0);
|
||||||
|
|
||||||
|
setLayout(mainLayout);
|
||||||
|
}
|
||||||
|
|
||||||
|
QCheckBox *m_checkBox;
|
||||||
|
QLabel *m_fileLabel;
|
||||||
|
};
|
||||||
|
|
||||||
|
VConfirmDeletionDialog::VConfirmDeletionDialog(const QString &p_title,
|
||||||
|
const QString &p_info,
|
||||||
|
const QVector<QString> &p_files,
|
||||||
|
QWidget *p_parent)
|
||||||
|
: QDialog(p_parent)
|
||||||
|
{
|
||||||
|
setupUI(p_title, p_info);
|
||||||
|
|
||||||
|
initFileItems(p_files);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VConfirmDeletionDialog::setupUI(const QString &p_title, const QString &p_info)
|
||||||
|
{
|
||||||
|
QLabel *infoLabel = new QLabel(p_info);
|
||||||
|
m_listWidget = new QListWidget();
|
||||||
|
connect(m_listWidget, &QListWidget::currentRowChanged,
|
||||||
|
this, &VConfirmDeletionDialog::currentFileChanged);
|
||||||
|
|
||||||
|
m_previewer = new QLabel();
|
||||||
|
|
||||||
|
m_askAgainCB = new QCheckBox(tr("Just delete them and do not ask for confirmation again"));
|
||||||
|
m_askAgainCB->setChecked(!g_config->getConfirmImagesCleanUp());
|
||||||
|
|
||||||
|
// Ok is the default button.
|
||||||
|
m_btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
||||||
|
connect(m_btnBox, &QDialogButtonBox::accepted,
|
||||||
|
this, [this]() {
|
||||||
|
g_config->setConfirmImagesCleanUp(!m_askAgainCB->isChecked());
|
||||||
|
QDialog::accept();
|
||||||
|
});
|
||||||
|
connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
||||||
|
|
||||||
|
QHBoxLayout *midLayout = new QHBoxLayout;
|
||||||
|
midLayout->addWidget(m_listWidget);
|
||||||
|
midLayout->addStretch();
|
||||||
|
midLayout->addWidget(m_previewer);
|
||||||
|
midLayout->addStretch();
|
||||||
|
|
||||||
|
QVBoxLayout *mainLayout = new QVBoxLayout;
|
||||||
|
mainLayout->addWidget(infoLabel);
|
||||||
|
mainLayout->addWidget(m_askAgainCB);
|
||||||
|
mainLayout->addWidget(m_btnBox);
|
||||||
|
mainLayout->addLayout(midLayout);
|
||||||
|
|
||||||
|
setLayout(mainLayout);
|
||||||
|
setWindowTitle(p_title);
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<QString> VConfirmDeletionDialog::getConfirmedFiles() const
|
||||||
|
{
|
||||||
|
QVector<QString> files;
|
||||||
|
|
||||||
|
for (int i = 0; i < m_listWidget->count(); ++i) {
|
||||||
|
ConfirmItemWidget *widget = getItemWidget(m_listWidget->item(i));
|
||||||
|
if (widget->isChecked()) {
|
||||||
|
files.push_back(widget->getFile());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VConfirmDeletionDialog::initFileItems(const QVector<QString> &p_files)
|
||||||
|
{
|
||||||
|
m_listWidget->clear();
|
||||||
|
|
||||||
|
for (int i = 0; i < p_files.size(); ++i) {
|
||||||
|
ConfirmItemWidget *itemWidget = new ConfirmItemWidget(true,
|
||||||
|
p_files[i],
|
||||||
|
this);
|
||||||
|
QListWidgetItem *item = new QListWidgetItem();
|
||||||
|
QSize size = itemWidget->sizeHint();
|
||||||
|
size.setHeight(size.height() * 2);
|
||||||
|
item->setSizeHint(size);
|
||||||
|
|
||||||
|
m_listWidget->addItem(item);
|
||||||
|
m_listWidget->setItemWidget(item, itemWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_listWidget->setMinimumSize(m_listWidget->sizeHint());
|
||||||
|
m_listWidget->setCurrentRow(-1);
|
||||||
|
m_listWidget->setCurrentRow(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VConfirmDeletionDialog::currentFileChanged(int p_row)
|
||||||
|
{
|
||||||
|
bool succeed = false;
|
||||||
|
if (p_row > -1) {
|
||||||
|
ConfirmItemWidget *widget = getItemWidget(m_listWidget->item(p_row));
|
||||||
|
if (widget) {
|
||||||
|
QPixmap image(widget->getFile());
|
||||||
|
if (!image.isNull()) {
|
||||||
|
int width = 512 * VUtils::calculateScaleFactor();
|
||||||
|
QSize previewSize(width, width);
|
||||||
|
m_previewer->setPixmap(image.scaled(previewSize));
|
||||||
|
succeed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_previewer->setVisible(succeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfirmItemWidget *VConfirmDeletionDialog::getItemWidget(QListWidgetItem *p_item) const
|
||||||
|
{
|
||||||
|
QWidget *wid = m_listWidget->itemWidget(p_item);
|
||||||
|
return dynamic_cast<ConfirmItemWidget *>(wid);
|
||||||
|
}
|
42
src/dialog/vconfirmdeletiondialog.h
Normal file
42
src/dialog/vconfirmdeletiondialog.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#ifndef VCONFIRMDELETIONDIALOG_H
|
||||||
|
#define VCONFIRMDELETIONDIALOG_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QVector>
|
||||||
|
|
||||||
|
class QLabel;
|
||||||
|
class QPushButton;
|
||||||
|
class QDialogButtonBox;
|
||||||
|
class QListWidget;
|
||||||
|
class QListWidgetItem;
|
||||||
|
class ConfirmItemWidget;
|
||||||
|
class QCheckBox;
|
||||||
|
|
||||||
|
class VConfirmDeletionDialog : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
VConfirmDeletionDialog(const QString &p_title,
|
||||||
|
const QString &p_info,
|
||||||
|
const QVector<QString> &p_files,
|
||||||
|
QWidget *p_parent = 0);
|
||||||
|
|
||||||
|
QVector<QString> getConfirmedFiles() const;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void currentFileChanged(int p_row);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setupUI(const QString &p_title, const QString &p_info);
|
||||||
|
|
||||||
|
void initFileItems(const QVector<QString> &p_files);
|
||||||
|
|
||||||
|
ConfirmItemWidget *getItemWidget(QListWidgetItem *p_item) const;
|
||||||
|
|
||||||
|
QListWidget *m_listWidget;
|
||||||
|
QLabel *m_previewer;
|
||||||
|
QDialogButtonBox *m_btnBox;
|
||||||
|
QCheckBox *m_askAgainCB;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // VCONFIRMDELETIONDIALOG_H
|
@ -2,6 +2,7 @@
|
|||||||
#include <QValidator>
|
#include <QValidator>
|
||||||
#include <QRegExp>
|
#include <QRegExp>
|
||||||
#include "vinsertimagedialog.h"
|
#include "vinsertimagedialog.h"
|
||||||
|
#include "utils/vutils.h"
|
||||||
|
|
||||||
VInsertImageDialog::VInsertImageDialog(const QString &title, const QString &defaultImageTitle,
|
VInsertImageDialog::VInsertImageDialog(const QString &title, const QString &defaultImageTitle,
|
||||||
const QString &defaultPath, QWidget *parent)
|
const QString &defaultPath, QWidget *parent)
|
||||||
@ -112,7 +113,8 @@ void VInsertImageDialog::handleBrowseBtnClicked()
|
|||||||
void VInsertImageDialog::setImage(const QImage &image)
|
void VInsertImageDialog::setImage(const QImage &image)
|
||||||
{
|
{
|
||||||
Q_ASSERT(!image.isNull());
|
Q_ASSERT(!image.isNull());
|
||||||
QSize previewSize(256, 256);
|
int width = 512 * VUtils::calculateScaleFactor();
|
||||||
|
QSize previewSize(width, width);
|
||||||
if (!this->image) {
|
if (!this->image) {
|
||||||
this->image = new QImage(image);
|
this->image = new QImage(image);
|
||||||
} else {
|
} else {
|
||||||
|
@ -45,6 +45,8 @@ void VNewFileDialog::setupUI()
|
|||||||
topLayout->addRow(nameLabel, nameEdit);
|
topLayout->addRow(nameLabel, nameEdit);
|
||||||
topLayout->addWidget(m_insertTitleCB);
|
topLayout->addWidget(m_insertTitleCB);
|
||||||
|
|
||||||
|
nameEdit->setMinimumWidth(m_insertTitleCB->sizeHint().width());
|
||||||
|
|
||||||
m_warnLabel = new QLabel();
|
m_warnLabel = new QLabel();
|
||||||
m_warnLabel->setWordWrap(true);
|
m_warnLabel->setWordWrap(true);
|
||||||
m_warnLabel->hide();
|
m_warnLabel->hide();
|
||||||
@ -54,9 +56,6 @@ void VNewFileDialog::setupUI()
|
|||||||
connect(m_btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
connect(m_btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
||||||
connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
||||||
|
|
||||||
QPushButton *okBtn = m_btnBox->button(QDialogButtonBox::Ok);
|
|
||||||
nameEdit->setMinimumWidth(okBtn->sizeHint().width() * 3);
|
|
||||||
|
|
||||||
QVBoxLayout *mainLayout = new QVBoxLayout();
|
QVBoxLayout *mainLayout = new QVBoxLayout();
|
||||||
if (infoLabel) {
|
if (infoLabel) {
|
||||||
mainLayout->addWidget(infoLabel);
|
mainLayout->addWidget(infoLabel);
|
||||||
|
@ -11,7 +11,7 @@ VNewNotebookDialog::VNewNotebookDialog(const QString &title, const QString &info
|
|||||||
const QString &defaultName, const QString &defaultPath,
|
const QString &defaultName, const QString &defaultPath,
|
||||||
const QVector<VNotebook *> &p_notebooks,
|
const QVector<VNotebook *> &p_notebooks,
|
||||||
QWidget *parent)
|
QWidget *parent)
|
||||||
: QDialog(parent), infoLabel(NULL),
|
: QDialog(parent),
|
||||||
title(title), info(info), defaultName(defaultName), defaultPath(defaultPath),
|
title(title), info(info), defaultName(defaultName), defaultPath(defaultPath),
|
||||||
m_importNotebook(false), m_manualPath(false), m_manualName(false),
|
m_importNotebook(false), m_manualPath(false), m_manualName(false),
|
||||||
m_notebooks(p_notebooks)
|
m_notebooks(p_notebooks)
|
||||||
@ -27,12 +27,13 @@ VNewNotebookDialog::VNewNotebookDialog(const QString &title, const QString &info
|
|||||||
|
|
||||||
void VNewNotebookDialog::setupUI()
|
void VNewNotebookDialog::setupUI()
|
||||||
{
|
{
|
||||||
|
QLabel *infoLabel = NULL;
|
||||||
if (!info.isEmpty()) {
|
if (!info.isEmpty()) {
|
||||||
infoLabel = new QLabel(info);
|
infoLabel = new QLabel(info);
|
||||||
infoLabel->setWordWrap(true);
|
infoLabel->setWordWrap(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
nameLabel = new QLabel(tr("Notebook &name:"));
|
QLabel *nameLabel = new QLabel(tr("Notebook &name:"));
|
||||||
nameEdit = new QLineEdit(defaultName);
|
nameEdit = new QLineEdit(defaultName);
|
||||||
nameLabel->setBuddy(nameEdit);
|
nameLabel->setBuddy(nameEdit);
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
class QLabel;
|
class QLabel;
|
||||||
class QLineEdit;
|
class QLineEdit;
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
class QString;
|
|
||||||
class QDialogButtonBox;
|
class QDialogButtonBox;
|
||||||
class VNotebook;
|
class VNotebook;
|
||||||
|
|
||||||
@ -49,8 +48,6 @@ private:
|
|||||||
// Returns true if name or path is modified.
|
// Returns true if name or path is modified.
|
||||||
bool autoComplete();
|
bool autoComplete();
|
||||||
|
|
||||||
QLabel *infoLabel;
|
|
||||||
QLabel *nameLabel;
|
|
||||||
QLineEdit *nameEdit;
|
QLineEdit *nameEdit;
|
||||||
QLineEdit *pathEdit;
|
QLineEdit *pathEdit;
|
||||||
QPushButton *browseBtn;
|
QPushButton *browseBtn;
|
||||||
|
@ -110,6 +110,9 @@ markdownit_opt_linkify=true
|
|||||||
; Default name of the recycle bin of notebook
|
; Default name of the recycle bin of notebook
|
||||||
recycle_bin_folder=_v_recycle_bin
|
recycle_bin_folder=_v_recycle_bin
|
||||||
|
|
||||||
|
; Confirm before deleting unused images
|
||||||
|
confirm_images_clean_up=true
|
||||||
|
|
||||||
[session]
|
[session]
|
||||||
tools_dock_checked=true
|
tools_dock_checked=true
|
||||||
|
|
||||||
|
@ -73,7 +73,8 @@ SOURCES += main.cpp\
|
|||||||
dialog/vupdater.cpp \
|
dialog/vupdater.cpp \
|
||||||
dialog/vorphanfileinfodialog.cpp \
|
dialog/vorphanfileinfodialog.cpp \
|
||||||
vtextblockdata.cpp \
|
vtextblockdata.cpp \
|
||||||
utils/vpreviewutils.cpp
|
utils/vpreviewutils.cpp \
|
||||||
|
dialog/vconfirmdeletiondialog.cpp
|
||||||
|
|
||||||
HEADERS += vmainwindow.h \
|
HEADERS += vmainwindow.h \
|
||||||
vdirectorytree.h \
|
vdirectorytree.h \
|
||||||
@ -134,7 +135,8 @@ HEADERS += vmainwindow.h \
|
|||||||
dialog/vupdater.h \
|
dialog/vupdater.h \
|
||||||
dialog/vorphanfileinfodialog.h \
|
dialog/vorphanfileinfodialog.h \
|
||||||
vtextblockdata.h \
|
vtextblockdata.h \
|
||||||
utils/vpreviewutils.h
|
utils/vpreviewutils.h \
|
||||||
|
dialog/vconfirmdeletiondialog.h
|
||||||
|
|
||||||
RESOURCES += \
|
RESOURCES += \
|
||||||
vnote.qrc \
|
vnote.qrc \
|
||||||
|
@ -200,6 +200,9 @@ void VConfigManager::initialize()
|
|||||||
|
|
||||||
m_recycleBinFolder = getConfigFromSettings("global",
|
m_recycleBinFolder = getConfigFromSettings("global",
|
||||||
"recycle_bin_folder").toString();
|
"recycle_bin_folder").toString();
|
||||||
|
|
||||||
|
m_confirmImagesCleanUp = getConfigFromSettings("global",
|
||||||
|
"confirm_images_clean_up").toBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VConfigManager::readPredefinedColorsFromSettings()
|
void VConfigManager::readPredefinedColorsFromSettings()
|
||||||
|
@ -266,6 +266,9 @@ public:
|
|||||||
|
|
||||||
const QString &getRecycleBinFolder() const;
|
const QString &getRecycleBinFolder() const;
|
||||||
|
|
||||||
|
bool getConfirmImagesCleanUp() const;
|
||||||
|
void setConfirmImagesCleanUp(bool p_enabled);
|
||||||
|
|
||||||
// Return the configured key sequence of @p_operation.
|
// Return the configured key sequence of @p_operation.
|
||||||
// Return empty if there is no corresponding config.
|
// Return empty if there is no corresponding config.
|
||||||
QString getShortcutKeySequence(const QString &p_operation) const;
|
QString getShortcutKeySequence(const QString &p_operation) const;
|
||||||
@ -536,6 +539,9 @@ private:
|
|||||||
// Default name of the recycle bin folder of notebook.
|
// Default name of the recycle bin folder of notebook.
|
||||||
QString m_recycleBinFolder;
|
QString m_recycleBinFolder;
|
||||||
|
|
||||||
|
// Confirm before deleting unused images.
|
||||||
|
bool m_confirmImagesCleanUp;
|
||||||
|
|
||||||
// The name of the config file in each directory, obsolete.
|
// The name of the config file in each directory, obsolete.
|
||||||
// Use c_dirConfigFile instead.
|
// Use c_dirConfigFile instead.
|
||||||
static const QString c_obsoleteDirConfigFile;
|
static const QString c_obsoleteDirConfigFile;
|
||||||
@ -1387,4 +1393,20 @@ inline const QString &VConfigManager::getRecycleBinFolder() const
|
|||||||
return m_recycleBinFolder;
|
return m_recycleBinFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool VConfigManager::getConfirmImagesCleanUp() const
|
||||||
|
{
|
||||||
|
return m_confirmImagesCleanUp;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void VConfigManager::setConfirmImagesCleanUp(bool p_enabled)
|
||||||
|
{
|
||||||
|
if (m_confirmImagesCleanUp == p_enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_confirmImagesCleanUp = p_enabled;
|
||||||
|
setConfigToSettings("global",
|
||||||
|
"confirm_images_clean_up",
|
||||||
|
m_confirmImagesCleanUp);
|
||||||
|
}
|
||||||
#endif // VCONFIGMANAGER_H
|
#endif // VCONFIGMANAGER_H
|
||||||
|
@ -176,9 +176,6 @@ bool VEdit::isModified() const
|
|||||||
void VEdit::setModified(bool p_modified)
|
void VEdit::setModified(bool p_modified)
|
||||||
{
|
{
|
||||||
document()->setModified(p_modified);
|
document()->setModified(p_modified);
|
||||||
if (m_file) {
|
|
||||||
m_file->setModified(p_modified);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VEdit::insertImage()
|
void VEdit::insertImage()
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "utils/veditutils.h"
|
#include "utils/veditutils.h"
|
||||||
#include "utils/vpreviewutils.h"
|
#include "utils/vpreviewutils.h"
|
||||||
#include "dialog/vselectdialog.h"
|
#include "dialog/vselectdialog.h"
|
||||||
|
#include "dialog/vconfirmdeletiondialog.h"
|
||||||
#include "vimagepreviewer.h"
|
#include "vimagepreviewer.h"
|
||||||
#include "vtextblockdata.h"
|
#include "vtextblockdata.h"
|
||||||
|
|
||||||
@ -238,6 +239,8 @@ void VMdEdit::clearUnusedImages()
|
|||||||
QVector<ImageLink> images = VUtils::fetchImagesFromMarkdownFile(m_file,
|
QVector<ImageLink> images = VUtils::fetchImagesFromMarkdownFile(m_file,
|
||||||
ImageLink::LocalRelativeInternal);
|
ImageLink::LocalRelativeInternal);
|
||||||
|
|
||||||
|
QVector<QString> unusedImages;
|
||||||
|
|
||||||
if (!m_insertedImages.isEmpty()) {
|
if (!m_insertedImages.isEmpty()) {
|
||||||
for (int i = 0; i < m_insertedImages.size(); ++i) {
|
for (int i = 0; i < m_insertedImages.size(); ++i) {
|
||||||
const ImageLink &link = m_insertedImages[i];
|
const ImageLink &link = m_insertedImages[i];
|
||||||
@ -255,11 +258,7 @@ void VMdEdit::clearUnusedImages()
|
|||||||
|
|
||||||
// This inserted image is no longer in the file.
|
// This inserted image is no longer in the file.
|
||||||
if (j == images.size()) {
|
if (j == images.size()) {
|
||||||
if (!VUtils::deleteFile(m_file->getNotebook(), link.m_path, false)) {
|
unusedImages.push_back(link.m_path);
|
||||||
qWarning() << "fail to delete unused inserted image" << link.m_path;
|
|
||||||
} else {
|
|
||||||
qDebug() << "delete unused inserted image" << link.m_path;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,10 +279,31 @@ void VMdEdit::clearUnusedImages()
|
|||||||
|
|
||||||
// Original local relative image is no longer in the file.
|
// Original local relative image is no longer in the file.
|
||||||
if (j == images.size()) {
|
if (j == images.size()) {
|
||||||
if (!VUtils::deleteFile(m_file->getNotebook(), link.m_path, false)) {
|
unusedImages.push_back(link.m_path);
|
||||||
qWarning() << "fail to delete unused original image" << link.m_path;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!unusedImages.isEmpty()) {
|
||||||
|
if (g_config->getConfirmImagesCleanUp()) {
|
||||||
|
QString info = tr("Following images seems not to be used in this note anymore. "
|
||||||
|
"Please confirm the deletion of these images.<br>"
|
||||||
|
"Click \"Cancel\" to leave them untouched.");
|
||||||
|
VConfirmDeletionDialog dialog(tr("Confirm Cleaning Up Unused Images"),
|
||||||
|
info,
|
||||||
|
unusedImages,
|
||||||
|
this);
|
||||||
|
if (dialog.exec()) {
|
||||||
|
unusedImages = dialog.getConfirmedFiles();
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "delete unused original image" << link.m_path;
|
unusedImages.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < unusedImages.size(); ++i) {
|
||||||
|
if (!VUtils::deleteFile(m_file->getNotebook(), unusedImages[i], false)) {
|
||||||
|
qWarning() << "fail to delete unused original image" << unusedImages[i];
|
||||||
|
} else {
|
||||||
|
qDebug() << "delete unused image" << unusedImages[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user