mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-20 10:46:35 +01:00
SessionManager: Make it possible to restore backups again
This commit is contained in:
parent
93d4d66054
commit
26eb3753c0
@ -72,7 +72,7 @@ void SessionManager::sessionsDirectoryChanged()
|
||||
m_sessionsMetaDataList.clear();
|
||||
}
|
||||
|
||||
void SessionManager::openSession(QString sessionFilePath, bool switchSession)
|
||||
void SessionManager::openSession(QString sessionFilePath, SessionFlags flags)
|
||||
{
|
||||
if (sessionFilePath.isEmpty()) {
|
||||
QAction* action = qobject_cast<QAction*>(sender());
|
||||
@ -93,7 +93,7 @@ void SessionManager::openSession(QString sessionFilePath, bool switchSession)
|
||||
return;
|
||||
|
||||
BrowserWindow* window = mApp->getWindow();
|
||||
if (switchSession) {
|
||||
if (flags.testFlag(SwitchSession)) {
|
||||
writeCurrentSession(m_lastActiveSessionPath);
|
||||
|
||||
window = mApp->createWindow(Qz::BW_OtherRestoredWindow);
|
||||
@ -102,14 +102,16 @@ void SessionManager::openSession(QString sessionFilePath, bool switchSession)
|
||||
win->close();
|
||||
}
|
||||
|
||||
if (!flags.testFlag(ReplaceSession)) {
|
||||
m_lastActiveSessionPath = QFileInfo(sessionFilePath).canonicalFilePath();
|
||||
m_sessionsMetaDataList.clear();
|
||||
}
|
||||
}
|
||||
|
||||
mApp->openSession(window, sessionData);
|
||||
}
|
||||
|
||||
void SessionManager::renameSession(QString sessionFilePath, bool clone)
|
||||
void SessionManager::renameSession(QString sessionFilePath, SessionFlags flags)
|
||||
{
|
||||
if (sessionFilePath.isEmpty()) {
|
||||
QAction* action = qobject_cast<QAction*>(sender());
|
||||
@ -120,8 +122,8 @@ void SessionManager::renameSession(QString sessionFilePath, bool clone)
|
||||
}
|
||||
|
||||
bool ok;
|
||||
const QString suggestedName = QFileInfo(sessionFilePath).baseName() + (clone ? tr("_cloned") : tr("_renamed"));
|
||||
QString newName = QInputDialog::getText(mApp->activeWindow(), (clone ? tr("Clone Session") : tr("Rename Session")),
|
||||
const QString suggestedName = QFileInfo(sessionFilePath).baseName() + (flags.testFlag(CloneSession) ? tr("_cloned") : tr("_renamed"));
|
||||
QString newName = QInputDialog::getText(mApp->activeWindow(), (flags.testFlag(CloneSession) ? tr("Clone Session") : tr("Rename Session")),
|
||||
tr("Please enter a new name:"), QLineEdit::Normal,
|
||||
suggestedName, &ok);
|
||||
|
||||
@ -131,11 +133,11 @@ void SessionManager::renameSession(QString sessionFilePath, bool clone)
|
||||
const QString newSessionPath = QString("%1/%2.dat").arg(DataPaths::path(DataPaths::Sessions)).arg(newName);
|
||||
if (QFile::exists(newSessionPath)) {
|
||||
QMessageBox::information(mApp->activeWindow(), tr("Error!"), tr("The session file \"%1\" exists. Please enter another name.").arg(newName));
|
||||
renameSession(sessionFilePath, clone);
|
||||
renameSession(sessionFilePath, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
if (clone) {
|
||||
if (flags.testFlag(CloneSession)) {
|
||||
if (!QFile::copy(sessionFilePath, newSessionPath)) {
|
||||
QMessageBox::information(mApp->activeWindow(), tr("Error!"), tr("An error occurred when cloning session file."));
|
||||
return;
|
||||
@ -172,14 +174,23 @@ void SessionManager::saveSession()
|
||||
writeCurrentSession(filePath);
|
||||
}
|
||||
|
||||
void SessionManager::replaceSession(const QString &filePath)
|
||||
{
|
||||
QMessageBox::StandardButton result = QMessageBox::information(mApp->activeWindow(), tr("Restore Backup"), tr("Are you sure you want to replace current session?"),
|
||||
QMessageBox::Yes | QMessageBox::No);
|
||||
if (result == QMessageBox::Yes) {
|
||||
openSession(filePath, ReplaceSession);
|
||||
}
|
||||
}
|
||||
|
||||
void SessionManager::switchToSession(const QString &filePath)
|
||||
{
|
||||
openSession(filePath, /*switchSession*/ true);
|
||||
openSession(filePath, SwitchSession);
|
||||
}
|
||||
|
||||
void SessionManager::cloneSession(const QString &filePath)
|
||||
{
|
||||
renameSession(filePath, /*clone*/ true);
|
||||
renameSession(filePath, CloneSession);
|
||||
}
|
||||
|
||||
void SessionManager::deleteSession(const QString &filePath)
|
||||
@ -228,14 +239,14 @@ QList<SessionManager::SessionMetaData> SessionManager::sessionMetaData(bool with
|
||||
|
||||
if (withBackups && QFile::exists(m_firstBackupSession)) {
|
||||
SessionMetaData data;
|
||||
data.name = tr("First Backup");
|
||||
data.name = tr("Backup 1");
|
||||
data.filePath = m_firstBackupSession;
|
||||
data.isBackup = true;
|
||||
out.append(data);
|
||||
}
|
||||
if (withBackups && QFile::exists(m_secondBackupSession)) {
|
||||
SessionMetaData data;
|
||||
data.name = tr("Second Backup");
|
||||
data.name = tr("Backup 2");
|
||||
data.filePath = m_secondBackupSession;
|
||||
data.isBackup = true;
|
||||
out.append(data);
|
||||
|
@ -29,8 +29,6 @@ class QUPZILLA_EXPORT SessionManager : public QObject
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit SessionManager(QObject* parent = 0);
|
||||
|
||||
struct SessionMetaData {
|
||||
QString name;
|
||||
QString filePath;
|
||||
@ -39,6 +37,15 @@ public:
|
||||
bool isBackup = false;
|
||||
};
|
||||
|
||||
enum SessionFlag {
|
||||
SwitchSession = 1,
|
||||
CloneSession = 2,
|
||||
ReplaceSession = SwitchSession | 4
|
||||
};
|
||||
Q_DECLARE_FLAGS(SessionFlags, SessionFlag)
|
||||
|
||||
explicit SessionManager(QObject* parent = 0);
|
||||
|
||||
void loadSettings();
|
||||
void saveSettings();
|
||||
|
||||
@ -59,10 +66,11 @@ public slots:
|
||||
private slots:
|
||||
void aboutToShowSessionsMenu();
|
||||
void sessionsDirectoryChanged();
|
||||
void openSession(QString sessionFilePath = QString(), bool switchSession = false);
|
||||
void renameSession(QString sessionFilePath = QString(), bool clone = false);
|
||||
void openSession(QString sessionFilePath = QString(), SessionFlags flags = nullptr);
|
||||
void renameSession(QString sessionFilePath = QString(), SessionFlags flags = nullptr);
|
||||
void saveSession();
|
||||
|
||||
void replaceSession(const QString &filePath);
|
||||
void switchToSession(const QString &filePath);
|
||||
void cloneSession(const QString &filePath);
|
||||
void deleteSession(const QString &filePath);
|
||||
@ -84,4 +92,6 @@ private:
|
||||
friend class SessionManagerDialog;
|
||||
};
|
||||
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(SessionManager::SessionFlags)
|
||||
|
||||
#endif // SESSIONMANAGER_H
|
||||
|
@ -98,9 +98,12 @@ void SessionManagerDialog::switchToSession()
|
||||
}
|
||||
const QString filePath = item->data(0, SessionFileRole).toString();
|
||||
if (!filePath.isEmpty()) {
|
||||
close();
|
||||
if (item->data(0, IsBackupSessionRole).toBool()) {
|
||||
mApp->sessionManager()->replaceSession(filePath);
|
||||
} else {
|
||||
mApp->sessionManager()->switchToSession(filePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SessionManagerDialog::refresh()
|
||||
@ -133,7 +136,8 @@ void SessionManagerDialog::updateButtons()
|
||||
ui->renameButton->setEnabled(item && !isDefault && !isBackup);
|
||||
ui->cloneButton->setEnabled(item && !isBackup);
|
||||
ui->deleteButton->setEnabled(item && !isBackup && !isDefault && !isActive);
|
||||
ui->switchToButton->setEnabled(item && !isActive && !isBackup);
|
||||
ui->switchToButton->setEnabled(item && !isActive);
|
||||
ui->switchToButton->setText(isBackup ? tr("Restore") : tr("Switch To"));
|
||||
}
|
||||
|
||||
void SessionManagerDialog::updateItem(QTreeWidgetItem *item)
|
||||
|
Loading…
Reference in New Issue
Block a user