mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
Merge pull request #3213
initramfs (3): feat(profile): show warning on failure to delete profile feat(profile): add a dialog to indicate profile deletion error refactor(profile): display files that could not be deleted in prompt
This commit is contained in:
commit
4432ab6398
|
@ -42,9 +42,9 @@ void History::rename(const QString &newName)
|
||||||
db.rename(getDbPath(newName));
|
db.rename(getDbPath(newName));
|
||||||
}
|
}
|
||||||
|
|
||||||
void History::remove()
|
bool History::remove()
|
||||||
{
|
{
|
||||||
db.remove();
|
return db.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
void History::eraseHistory()
|
void History::eraseHistory()
|
||||||
|
|
|
@ -47,7 +47,7 @@ public:
|
||||||
/// Moves the database file on disk to match the new name
|
/// Moves the database file on disk to match the new name
|
||||||
void rename(const QString& newName);
|
void rename(const QString& newName);
|
||||||
/// Deletes the on-disk database file
|
/// Deletes the on-disk database file
|
||||||
void remove();
|
bool remove();
|
||||||
|
|
||||||
/// Erases all the chat history from the database
|
/// Erases all the chat history from the database
|
||||||
void eraseHistory();
|
void eraseHistory();
|
||||||
|
@ -61,11 +61,11 @@ public:
|
||||||
QList<HistMessage> getChatHistory(const QString& friendPk, const QDateTime &from, const QDateTime &to);
|
QList<HistMessage> getChatHistory(const QString& friendPk, const QDateTime &from, const QDateTime &to);
|
||||||
/// Marks a message as sent, removing it from the faux-offline pending messages list
|
/// Marks a message as sent, removing it from the faux-offline pending messages list
|
||||||
void markAsSent(qint64 id);
|
void markAsSent(qint64 id);
|
||||||
|
/// Retrieves the path to the database file for a given profile.
|
||||||
|
static QString getDbPath(const QString& profileName);
|
||||||
protected:
|
protected:
|
||||||
/// Makes sure the history tables are created
|
/// Makes sure the history tables are created
|
||||||
void init();
|
void init();
|
||||||
static QString getDbPath(const QString& profileName);
|
|
||||||
QVector<RawDatabase::Query> generateNewMessageQueries(const QString& friendPk, const QString& message,
|
QVector<RawDatabase::Query> generateNewMessageQueries(const QString& friendPk, const QString& message,
|
||||||
const QString& sender, const QDateTime &time, bool isSent, QString dispName,
|
const QString& sender, const QDateTime &time, bool isSent, QString dispName,
|
||||||
std::function<void(int64_t)> insertIdCallback={});
|
std::function<void(int64_t)> insertIdCallback={});
|
||||||
|
|
|
@ -483,16 +483,16 @@ bool Profile::isEncrypted(QString name)
|
||||||
return tox_is_data_encrypted(data);
|
return tox_is_data_encrypted(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Profile::remove()
|
QVector<QString> Profile::remove()
|
||||||
{
|
{
|
||||||
if (isRemoved)
|
if (isRemoved)
|
||||||
{
|
{
|
||||||
qWarning() << "Profile "<<name<<" is already removed!";
|
qWarning() << "Profile " << name << " is already removed!";
|
||||||
return;
|
return {};
|
||||||
}
|
}
|
||||||
isRemoved = true;
|
isRemoved = true;
|
||||||
|
|
||||||
qDebug() << "Removing profile"<<name;
|
qDebug() << "Removing profile" << name;
|
||||||
for (int i=0; i<profiles.size(); i++)
|
for (int i=0; i<profiles.size(); i++)
|
||||||
{
|
{
|
||||||
if (profiles[i] == name)
|
if (profiles[i] == name)
|
||||||
|
@ -503,16 +503,47 @@ void Profile::remove()
|
||||||
}
|
}
|
||||||
QString path = Settings::getInstance().getSettingsDirPath() + name;
|
QString path = Settings::getInstance().getSettingsDirPath() + name;
|
||||||
ProfileLocker::unlock();
|
ProfileLocker::unlock();
|
||||||
QFile::remove(path+".tox");
|
|
||||||
QFile::remove(path+".ini");
|
|
||||||
|
|
||||||
QFile::remove(HistoryKeeper::getHistoryPath(name, 0));
|
QFile profileMain {path + ".tox"};
|
||||||
QFile::remove(HistoryKeeper::getHistoryPath(name, 1));
|
QFile profileConfig {path + ".ini"};
|
||||||
|
QFile historyLegacyUnencrypted {HistoryKeeper::getHistoryPath(name, 0)};
|
||||||
|
QFile historyLegacyEncrypted {HistoryKeeper::getHistoryPath(name, 1)};
|
||||||
|
|
||||||
|
QVector<QString> ret;
|
||||||
|
|
||||||
|
if(!profileMain.remove() && profileMain.exists())
|
||||||
|
{
|
||||||
|
ret.push_back(profileMain.fileName());
|
||||||
|
qWarning() << "Could not remove file " << profileMain.fileName();
|
||||||
|
}
|
||||||
|
if(!profileConfig.remove() && profileConfig.exists())
|
||||||
|
{
|
||||||
|
ret.push_back(profileConfig.fileName());
|
||||||
|
qWarning() << "Could not remove file " << profileConfig.fileName();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!historyLegacyUnencrypted.remove() && historyLegacyUnencrypted.exists())
|
||||||
|
{
|
||||||
|
ret.push_back(historyLegacyUnencrypted.fileName());
|
||||||
|
qWarning() << "Could not remove file " << historyLegacyUnencrypted.fileName();
|
||||||
|
}
|
||||||
|
if(!historyLegacyEncrypted.remove() && historyLegacyEncrypted.exists())
|
||||||
|
{
|
||||||
|
ret.push_back(historyLegacyEncrypted.fileName());
|
||||||
|
qWarning() << "Could not remove file " << historyLegacyUnencrypted.fileName();
|
||||||
|
}
|
||||||
|
|
||||||
if (history)
|
if (history)
|
||||||
{
|
{
|
||||||
history->remove();
|
if(!history->remove() && QFile::exists(History::getDbPath(name)))
|
||||||
|
{
|
||||||
|
ret.push_back(History::getDbPath(name));
|
||||||
|
qWarning() << "Could not remove file " << History::getDbPath(name);
|
||||||
|
}
|
||||||
history.release();
|
history.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Profile::rename(QString newName)
|
bool Profile::rename(QString newName)
|
||||||
|
|
|
@ -78,7 +78,8 @@ public:
|
||||||
/// Removes the profile permanently
|
/// Removes the profile permanently
|
||||||
/// It is invalid to call loadToxSave or saveToxSave on a deleted profile
|
/// It is invalid to call loadToxSave or saveToxSave on a deleted profile
|
||||||
/// Updates the profiles vector
|
/// Updates the profiles vector
|
||||||
void remove();
|
/// Returns a vector of filenames that could not be removed.
|
||||||
|
QVector<QString> remove();
|
||||||
|
|
||||||
/// Tries to rename the profile
|
/// Tries to rename the profile
|
||||||
bool rename(QString newName);
|
bool rename(QString newName);
|
||||||
|
|
|
@ -361,7 +361,23 @@ void ProfileForm::onDeleteClicked()
|
||||||
tr("Are you sure you want to delete this profile?", "deletion confirmation text")))
|
tr("Are you sure you want to delete this profile?", "deletion confirmation text")))
|
||||||
{
|
{
|
||||||
Nexus& nexus = Nexus::getInstance();
|
Nexus& nexus = Nexus::getInstance();
|
||||||
nexus.getProfile()->remove();
|
|
||||||
|
QVector<QString> manualDeleteFiles = nexus.getProfile()->remove();
|
||||||
|
|
||||||
|
if(!manualDeleteFiles.empty())
|
||||||
|
{
|
||||||
|
QString message = tr("The following files could not be deleted:", "deletion failed text part 1") + "\n\n";
|
||||||
|
|
||||||
|
for(auto& file : manualDeleteFiles)
|
||||||
|
{
|
||||||
|
message = message + file + "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
message = message + "\n" + tr("Please manually remove them.", "deletion failed text part 2");
|
||||||
|
|
||||||
|
GUI::showError(tr("Files could not be deleted!", "deletion failed title"), message);
|
||||||
|
}
|
||||||
|
|
||||||
nexus.showLogin();
|
nexus.showLogin();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user