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

View File

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