Simply look at the filesystem to get the list of sessions.

Instead of maintaining a list of sessions in our settings, simply list
all the files that we find.
Note: This will probably ressurect a few lost sessions for some people.

Task-Nr: 255140
This commit is contained in:
dt
2009-06-18 11:36:39 +02:00
parent 44d02a652b
commit 69d04bc069
2 changed files with 21 additions and 23 deletions

View File

@@ -991,18 +991,23 @@ QString SessionManager::activeSession() const
QStringList SessionManager::sessions() const QStringList SessionManager::sessions() const
{ {
QStringList result = m_core->settings()->value("Sessions").toStringList(); if (m_sessions.isEmpty()) {
// We aren't yet initalized, so do that now
if (!result.contains("default")) QDirIterator dirIter(QFileInfo(m_core->settings()->fileName()).path() + "/qtcreator/");
result.prepend("default"); while (dirIter.hasNext()) {
dirIter.next();
return result; const QFileInfo &fileInfo = dirIter.fileInfo();
if (fileInfo.suffix() == "qws" && fileInfo.completeBaseName() != "default")
m_sessions << fileInfo.completeBaseName();
}
m_sessions.prepend("default");
}
return m_sessions;
} }
QString SessionManager::sessionNameToFileName(const QString &session) QString SessionManager::sessionNameToFileName(const QString &session)
{ {
QString sn = session; return QFileInfo(m_core->settings()->fileName()).path() + "/qtcreator/" + session + ".qws";
return QFileInfo(m_core->settings()->fileName()).path() + "/qtcreator/" + sn + ".qws";
} }
void SessionManager::createAndLoadNewDefaultSession() void SessionManager::createAndLoadNewDefaultSession()
@@ -1015,19 +1020,15 @@ bool SessionManager::createSession(const QString &session)
{ {
if (sessions().contains(session)) if (sessions().contains(session))
return false; return false;
QStringList list = m_core->settings()->value("Sessions").toStringList(); m_sessions.append(session);
list.append(session);
m_core->settings()->setValue("Sessions", list);
return true; return true;
} }
bool SessionManager::deleteSession(const QString &session) bool SessionManager::deleteSession(const QString &session)
{ {
QStringList list = m_core->settings()->value("Sessions").toStringList(); if (!m_sessions.contains(session))
if (!list.contains(session))
return false; return false;
list.removeOne(session); m_sessions.removeOne(session);
m_core->settings()->setValue("Sessions", list);
QFile fi(sessionNameToFileName(session)); QFile fi(sessionNameToFileName(session));
if (fi.exists()) if (fi.exists())
return fi.remove(); return fi.remove();
@@ -1036,17 +1037,13 @@ bool SessionManager::deleteSession(const QString &session)
bool SessionManager::cloneSession(const QString &original, const QString &clone) bool SessionManager::cloneSession(const QString &original, const QString &clone)
{ {
QStringList list = m_core->settings()->value("Sessions").toStringList(); if (!m_sessions.contains(original))
list.append(clone);
if (!sessions().contains(original))
return false; return false;
QFile fi(sessionNameToFileName(original)); QFile fi(sessionNameToFileName(original));
// If the file does not exist, we can still clone // If the file does not exist, we can still clone
if (!fi.exists() || fi.copy(sessionNameToFileName(clone))) { if (!fi.exists() || fi.copy(sessionNameToFileName(clone))) {
m_core->settings()->setValue("Sessions", list); m_sessions.append(clone);
return true; return true;
} }
return false; return false;

View File

@@ -189,8 +189,9 @@ private:
QString m_displayName; QString m_displayName;
QString m_sessionName; QString m_sessionName;
mutable mutable QStringList m_sessions;
QHash<Project *, QStringList> m_projectFileCache;
mutable QHash<Project *, QStringList> m_projectFileCache;
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer