From 495ecdfea8aa1599071ce4c1dd8cdbdb518594c2 Mon Sep 17 00:00:00 2001 From: Clemens Zeidler Date: Thu, 17 Mar 2011 00:45:30 +0000 Subject: [PATCH] Do not recreate the account file when saving the settings. This fix alternating account names (once AccountName_1 the other time just AccountName). Sort accounts by creation time. This fix the order in mail preferences. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40983 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/mail/MailSettings.h | 2 +- src/kits/mail/MailSettings.cpp | 44 ++++++++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/headers/os/mail/MailSettings.h b/headers/os/mail/MailSettings.h index 29eb5a3e24..fa8834fd80 100644 --- a/headers/os/mail/MailSettings.h +++ b/headers/os/mail/MailSettings.h @@ -172,7 +172,7 @@ class BMailAccountSettings const BEntry& AccountFile(); private: - status_t _CreateAccountFile(); + status_t _CreateAccountFilePath(); status_t fStatus; BEntry fAccountFile; diff --git a/src/kits/mail/MailSettings.cpp b/src/kits/mail/MailSettings.cpp index 87c5cd1276..4ba7027a9b 100644 --- a/src/kits/mail/MailSettings.cpp +++ b/src/kits/mail/MailSettings.cpp @@ -335,12 +335,38 @@ BMailAccounts::BMailAccounts() BDirectory dir(path.Path()); if (dir.InitCheck() != B_OK) return; + + std::vector creationTimeList; BEntry entry; while (dir.GetNextEntry(&entry) != B_ENTRY_NOT_FOUND) { - BMailAccountSettings* account = new BMailAccountSettings(entry); - if (account->InitCheck() != B_OK) + BNode node(&entry); + time_t creationTime; + if (node.GetCreationTime(&creationTime) != B_OK) continue; - fAccounts.AddItem(account); + + BMailAccountSettings* account = new BMailAccountSettings(entry); + if (account->InitCheck() != B_OK) { + delete account; + continue; + } + + // sort by creation time + int insertIndex = -1; + for (unsigned int i = 0; i < creationTimeList.size(); i++) { + if (creationTimeList[i] > creationTime) { + insertIndex = i; + break; + } + } + if (insertIndex < 0) { + fAccounts.AddItem(account); + creationTimeList.push_back(creationTime); + } else { + fAccounts.AddItem(account, insertIndex); + creationTimeList.insert(creationTimeList.begin() + insertIndex, + creationTime); + } + } } @@ -793,14 +819,9 @@ BMailAccountSettings::Save() fOutboundSettings.Save(outboundSettings); settings.AddMessage("outbound", &outboundSettings); - BEntry oldEntry = fAccountFile; - status_t status = _CreateAccountFile(); + status_t status = _CreateAccountFilePath(); if (status != B_OK) return status; - oldEntry.Remove(); - - BPath path; - fAccountFile.GetPath(&path); BFile file(&fAccountFile, B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE); status = file.InitCheck(); @@ -836,7 +857,7 @@ BMailAccountSettings::AccountFile() status_t -BMailAccountSettings::_CreateAccountFile() +BMailAccountSettings::_CreateAccountFilePath() { BPath path; status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path); @@ -845,6 +866,9 @@ BMailAccountSettings::_CreateAccountFile() path.Append("Mail/accounts"); create_directory(path.Path(), 777); + if (fAccountFile.InitCheck() == B_OK) + return B_OK; + BString fileName = fAccountName; if (fileName == "") fileName << fAccountID;