mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 22:09:52 +08:00
delete notebook by deleting root directories
This commit is contained in:
parent
d330bdae0f
commit
27b0d99965
@ -111,7 +111,8 @@ void VDeleteNotebookDialog::notDeleteCheckChanged(int p_state)
|
|||||||
.arg(vconfig.c_dataTextStyle).arg(m_path));
|
.arg(vconfig.c_dataTextStyle).arg(m_path));
|
||||||
} else {
|
} else {
|
||||||
m_warningLabel->setText(tr("<span style=\"%1\">WARNING</span>: "
|
m_warningLabel->setText(tr("<span style=\"%1\">WARNING</span>: "
|
||||||
"VNote will delete <b>ANY</b> files under directory <span style=\"%2\">%3</span>! "
|
"VNote may delete <b>ANY</b> files under directory <span style=\"%2\">%3</span>! "
|
||||||
|
"VNote will try to delete all the root directories within this notebook one by one. "
|
||||||
"It may be UNRECOVERABLE!")
|
"It may be UNRECOVERABLE!")
|
||||||
.arg(vconfig.c_warningTextStyle).arg(vconfig.c_dataTextStyle).arg(m_path));
|
.arg(vconfig.c_warningTextStyle).arg(vconfig.c_dataTextStyle).arg(m_path));
|
||||||
}
|
}
|
||||||
|
@ -60,22 +60,48 @@ VNotebook *VNotebook::createNotebook(const QString &p_name, const QString &p_pat
|
|||||||
return nb;
|
return nb;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VNotebook::deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles)
|
bool VNotebook::deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles)
|
||||||
{
|
{
|
||||||
if (!p_notebook) {
|
bool ret = true;
|
||||||
return;
|
|
||||||
}
|
|
||||||
QString path = p_notebook->getPath();
|
|
||||||
|
|
||||||
|
if (!p_notebook) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_deleteFiles) {
|
||||||
|
if (!p_notebook->open()) {
|
||||||
|
qWarning() << "fail to open notebook" << p_notebook->getName()
|
||||||
|
<< "to delete";
|
||||||
|
ret = false;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
VDirectory *rootDir = p_notebook->getRootDir();
|
||||||
|
QVector<VDirectory *> subdirs = rootDir->getSubDirs();
|
||||||
|
for (auto dir : subdirs) {
|
||||||
|
rootDir->deleteSubDirectory(dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete the config file.
|
||||||
|
if (!VConfigManager::deleteDirectoryConfig(p_notebook->getPath())) {
|
||||||
|
ret = false;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it is now an empty directory, delete it.
|
||||||
|
QDir dir(p_notebook->getPath());
|
||||||
|
dir.cdUp();
|
||||||
|
if (!dir.rmdir(rootDir->getName())) {
|
||||||
|
qWarning() << "fail to delete notebook root directory" << rootDir->getName();
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
p_notebook->close();
|
p_notebook->close();
|
||||||
delete p_notebook;
|
delete p_notebook;
|
||||||
|
|
||||||
if (p_deleteFiles) {
|
return ret;
|
||||||
QDir dir(path);
|
|
||||||
if (!dir.removeRecursively()) {
|
|
||||||
qWarning() << "fail to delete" << path;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VNotebook::rename(const QString &p_name)
|
void VNotebook::rename(const QString &p_name)
|
||||||
|
@ -28,7 +28,7 @@ public:
|
|||||||
|
|
||||||
static VNotebook *createNotebook(const QString &p_name, const QString &p_path, bool p_import,
|
static VNotebook *createNotebook(const QString &p_name, const QString &p_path, bool p_import,
|
||||||
QObject *p_parent = 0);
|
QObject *p_parent = 0);
|
||||||
static void deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles);
|
static bool deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void contentChanged();
|
void contentChanged();
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
#include <QDesktopServices>
|
||||||
|
#include <QUrl>
|
||||||
#include "vnotebook.h"
|
#include "vnotebook.h"
|
||||||
#include "vconfigmanager.h"
|
#include "vconfigmanager.h"
|
||||||
#include "dialog/vnewnotebookdialog.h"
|
#include "dialog/vnewnotebookdialog.h"
|
||||||
@ -230,6 +232,8 @@ void VNotebookSelector::deleteNotebook()
|
|||||||
|
|
||||||
void VNotebookSelector::deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles)
|
void VNotebookSelector::deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles)
|
||||||
{
|
{
|
||||||
|
V_ASSERT(p_notebook);
|
||||||
|
|
||||||
int idx = indexOfNotebook(p_notebook);
|
int idx = indexOfNotebook(p_notebook);
|
||||||
|
|
||||||
m_notebooks.remove(idx);
|
m_notebooks.remove(idx);
|
||||||
@ -237,7 +241,24 @@ void VNotebookSelector::deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles
|
|||||||
|
|
||||||
removeNotebookItem(idx);
|
removeNotebookItem(idx);
|
||||||
|
|
||||||
VNotebook::deleteNotebook(p_notebook, p_deleteFiles);
|
QString name(p_notebook->getName());
|
||||||
|
QString path(p_notebook->getPath());
|
||||||
|
bool ret = VNotebook::deleteNotebook(p_notebook, p_deleteFiles);
|
||||||
|
if (!ret) {
|
||||||
|
// Notebook could not be deleted completely.
|
||||||
|
int cho = VUtils::showMessage(QMessageBox::Information, tr("Delete Notebook Folder From Disk"),
|
||||||
|
tr("Fail to delete the root folder of notebook "
|
||||||
|
"<span style=\"%1\">%2</span> from disk. You may open "
|
||||||
|
"the directory and check it manually.")
|
||||||
|
.arg(vconfig.c_dataTextStyle).arg(name), "",
|
||||||
|
QMessageBox::Open | QMessageBox::Ok,
|
||||||
|
QMessageBox::Ok, this);
|
||||||
|
if (cho == QMessageBox::Open) {
|
||||||
|
// Open the notebook location.
|
||||||
|
QUrl url = QUrl::fromLocalFile(path);
|
||||||
|
QDesktopServices::openUrl(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int VNotebookSelector::indexOfNotebook(const VNotebook *p_notebook)
|
int VNotebookSelector::indexOfNotebook(const VNotebook *p_notebook)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user