void GMApp::SaveState() { JString homeDir; if (JGetHomeDirectory(&homeDir)) { JAppendDirSeparator(&homeDir); JString session = homeDir + kStateFileName; if (JFileExists(session)) { JRemoveFile(session); } JFileArray* fileArray; JError err = JFileArray::Create(session, kStateFileSignature, &fileArray); if (!err.OK()) { if (JFileExists(session)) { JRemoveFile(session); } delete fileArray; return; } fileArray->SetVersion(kCurrentSessionVersion); JSize count; { std::ostringstream dataStream; count = itsTableDirs->GetElementCount(); dataStream << count; fileArray->AppendElement(dataStream); } JFAID_t id = 2; for (JSize i = 1; i <= count; i++) { JFileArray* embed; err = JFileArray::Create(fileArray, id, &embed); itsTableDirs->NthElement(i)->GetData()->Save(); itsTableDirs->NthElement(i)->SaveState(*embed); delete embed; id ++; } for (JSize i = itsEditDirs->GetElementCount(); i >= 1; i--) { itsEditDirs->NthElement(i)->CheckForPendingMessage(); } { std::ostringstream dataStream; count = itsEditDirs->GetElementCount(); dataStream << count; fileArray->AppendElement(dataStream); } for (JSize i = 1; i <= count; i++) { std::ostringstream dataStream; itsEditDirs->NthElement(i)->SaveState(dataStream); fileArray->AppendElement(dataStream); } { std::ostringstream dataStream; GGetInboxMgr()->SaveState(dataStream); fileArray->AppendElement(dataStream); } delete fileArray; } }