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
This commit is contained in:
parent
18bfd5000e
commit
495ecdfea8
@ -172,7 +172,7 @@ class BMailAccountSettings
|
|||||||
|
|
||||||
const BEntry& AccountFile();
|
const BEntry& AccountFile();
|
||||||
private:
|
private:
|
||||||
status_t _CreateAccountFile();
|
status_t _CreateAccountFilePath();
|
||||||
|
|
||||||
status_t fStatus;
|
status_t fStatus;
|
||||||
BEntry fAccountFile;
|
BEntry fAccountFile;
|
||||||
|
@ -335,12 +335,38 @@ BMailAccounts::BMailAccounts()
|
|||||||
BDirectory dir(path.Path());
|
BDirectory dir(path.Path());
|
||||||
if (dir.InitCheck() != B_OK)
|
if (dir.InitCheck() != B_OK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
std::vector<time_t> creationTimeList;
|
||||||
BEntry entry;
|
BEntry entry;
|
||||||
while (dir.GetNextEntry(&entry) != B_ENTRY_NOT_FOUND) {
|
while (dir.GetNextEntry(&entry) != B_ENTRY_NOT_FOUND) {
|
||||||
BMailAccountSettings* account = new BMailAccountSettings(entry);
|
BNode node(&entry);
|
||||||
if (account->InitCheck() != B_OK)
|
time_t creationTime;
|
||||||
|
if (node.GetCreationTime(&creationTime) != B_OK)
|
||||||
continue;
|
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);
|
fOutboundSettings.Save(outboundSettings);
|
||||||
settings.AddMessage("outbound", &outboundSettings);
|
settings.AddMessage("outbound", &outboundSettings);
|
||||||
|
|
||||||
BEntry oldEntry = fAccountFile;
|
status_t status = _CreateAccountFilePath();
|
||||||
status_t status = _CreateAccountFile();
|
|
||||||
if (status != B_OK)
|
if (status != B_OK)
|
||||||
return status;
|
return status;
|
||||||
oldEntry.Remove();
|
|
||||||
|
|
||||||
BPath path;
|
|
||||||
fAccountFile.GetPath(&path);
|
|
||||||
|
|
||||||
BFile file(&fAccountFile, B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
|
BFile file(&fAccountFile, B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
|
||||||
status = file.InitCheck();
|
status = file.InitCheck();
|
||||||
@ -836,7 +857,7 @@ BMailAccountSettings::AccountFile()
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
BMailAccountSettings::_CreateAccountFile()
|
BMailAccountSettings::_CreateAccountFilePath()
|
||||||
{
|
{
|
||||||
BPath path;
|
BPath path;
|
||||||
status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path);
|
status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path);
|
||||||
@ -845,6 +866,9 @@ BMailAccountSettings::_CreateAccountFile()
|
|||||||
path.Append("Mail/accounts");
|
path.Append("Mail/accounts");
|
||||||
create_directory(path.Path(), 777);
|
create_directory(path.Path(), 777);
|
||||||
|
|
||||||
|
if (fAccountFile.InitCheck() == B_OK)
|
||||||
|
return B_OK;
|
||||||
|
|
||||||
BString fileName = fAccountName;
|
BString fileName = fAccountName;
|
||||||
if (fileName == "")
|
if (fileName == "")
|
||||||
fileName << fAccountID;
|
fileName << fAccountID;
|
||||||
|
Loading…
Reference in New Issue
Block a user