* Copyright 2017 Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Brian Hill
*/
#include "RepositoriesSettings.h"
#include <FindDirectory.h>
#include <StringList.h>
#include "constants.h"
const char* settingsFilename = "Repositories_settings";
RepositoriesSettings::RepositoriesSettings()
{
status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &fFilePath);
if (status == B_OK)
status = fFilePath.Append(settingsFilename);
fInitStatus = status;
}
BRect
RepositoriesSettings::GetFrame()
{
BMessage settings(_ReadFromFile());
BRect frame;
status_t status = settings.FindRect(key_frame, &frame);
if (status != B_OK)
frame.Set(-10, -10, 750, 300);
return frame;
}
void
RepositoriesSettings::SetFrame(BRect frame)
{
BMessage settings(_ReadFromFile());
settings.RemoveData(key_frame);
settings.AddRect(key_frame, frame);
_SaveToFile(settings);
}
status_t
RepositoriesSettings::GetRepositories(int32& repoCount, BStringList& nameList,
BStringList& urlList)
{
BMessage settings(_ReadFromFile());
type_code type;
int32 count;
settings.GetInfo(key_name, &type, &count);
status_t result = B_OK;
int32 index, total = 0;
BString foundName, foundUrl;
for (index = 0; index < count; index++) {
status_t result1 = settings.FindString(key_name, index, &foundName);
status_t result2 = settings.FindString(key_url, index, &foundUrl);
if (result1 == B_OK && result2 == B_OK) {
nameList.Add(foundName);
urlList.Add(foundUrl);
total++;
} else
result = B_ERROR;
}
repoCount = total;
return result;
}
void
RepositoriesSettings::SetRepositories(BStringList& nameList, BStringList& urlList)
{
BMessage settings(_ReadFromFile());
settings.RemoveName(key_name);
settings.RemoveName(key_url);
int32 index, count = nameList.CountStrings();
for (index = 0; index < count; index++) {
settings.AddString(key_name, nameList.StringAt(index));
settings.AddString(key_url, urlList.StringAt(index));
}
_SaveToFile(settings);
}
BMessage
RepositoriesSettings::_ReadFromFile()
{
BMessage settings;
status_t status = fFile.SetTo(fFilePath.Path(), B_READ_ONLY);
if (status == B_OK)
status = settings.Unflatten(&fFile);
fFile.Unset();
return settings;
}
status_t
RepositoriesSettings::_SaveToFile(BMessage settings)
{
status_t status = fFile.SetTo(fFilePath.Path(),
B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE);
if (status == B_OK)
status = settings.Flatten(&fFile);
fFile.Unset();
return status;
}