Chat-O-Matic/application/ProtocolSettings.cpp

187 lines
3.6 KiB
C++
Raw Permalink Normal View History

/*
2011-12-03 16:38:03 -06:00
* Copyright 2009-2011, Pier Luigi Fiorini. All rights reserved.
* Copyright 2003-2009, IM Kit Team. All rights reserved.
* Copyright 2021, Jaidyn Levesque. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Michael Davidson, slaad@bong.com.au
* Pier Luigi Fiorini, pierluigi.fiorini@gmail.com
* Jaidyn Levesque, jadedctrl@teknik.io
*/
#include "ProtocolSettings.h"
#include <Directory.h>
#include <File.h>
#include <Message.h>
#include <ObjectList.h>
#include <Path.h>
2021-06-20 12:44:20 -05:00
#include "ChatProtocolAddOn.h"
#include "Utils.h"
2021-06-20 12:44:20 -05:00
ProtocolSettings::ProtocolSettings(ChatProtocolAddOn* addOn)
2010-05-19 17:28:26 -05:00
:
fTemplate(addOn->Protocol(), "account"),
fAddOn(addOn)
{
}
status_t
ProtocolSettings::InitCheck() const
{
return fStatus;
}
2021-06-20 12:44:20 -05:00
ChatProtocolAddOn*
ProtocolSettings::AddOn() const
2010-05-08 14:35:28 -05:00
{
return fAddOn;
2010-05-08 14:35:28 -05:00
}
BObjectList<BString>
ProtocolSettings::Accounts() const
{
BObjectList<BString> list(true);
2010-05-08 14:35:28 -05:00
BPath path = AccountPath(fAddOn->Signature(), fAddOn->ProtoSignature());
if (path.InitCheck() != B_OK)
2010-05-08 14:35:28 -05:00
return list;
BDirectory dir(path.Path());
BEntry entry;
while (dir.GetNextEntry(&entry) == B_OK) {
BFile file(&entry, B_READ_ONLY);
BMessage msg;
if (msg.Unflatten(&file) == B_OK) {
char buffer[B_PATH_NAME_LENGTH];
2010-05-08 14:35:28 -05:00
if (entry.GetName(buffer) == B_OK)
list.AddItem(new BString(buffer));
}
}
return list;
}
status_t
2010-05-08 14:35:28 -05:00
ProtocolSettings::Load(const char* account, BView* parent)
{
2010-05-08 14:35:28 -05:00
BMessage* settings = NULL;
if (account) {
status_t ret = Load(account, &settings);
2010-05-08 14:35:28 -05:00
if (ret != B_OK)
return ret;
}
return fTemplate.Load(parent, settings);
}
status_t
ProtocolSettings::Load(const char* account, BMessage** settings)
{
if (!account || !settings)
return B_BAD_VALUE;
status_t ret = B_ERROR;
// Find user's settings path
BPath path = AccountPath(fAddOn->Signature(), fAddOn->ProtoSignature());
if ((ret = path.InitCheck()) != B_OK)
return ret;
// Load settings file
path.Append(account);
BFile file(path.Path(), B_READ_ONLY);
BMessage* msg = new BMessage();
ret = msg->Unflatten(&file);
*settings = msg;
return ret;
}
status_t
2021-06-18 12:49:30 -05:00
ProtocolSettings::Save(const char* account, BView* parent, BString* errorText)
{
if (!parent)
debugger("Couldn't save protocol's settings GUI on a NULL parent!");
BMessage settings;
2021-06-18 12:49:30 -05:00
status_t status = fTemplate.Save(parent, &settings, errorText);
2021-06-18 12:49:30 -05:00
if (status != B_OK)
return status;
return Save(account, settings);
}
status_t
ProtocolSettings::Save(const char* account, BMessage settings)
{
// Find user's settings path
BPath path = AccountPath(fAddOn->Signature(), fAddOn->ProtoSignature());
status_t ret;
if ((ret = path.InitCheck()) != B_OK)
return ret;
// Load settings file
path.Append(account);
BFile file(path.Path(), B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY);
return settings.Flatten(&file);
2010-05-08 14:35:28 -05:00
}
status_t
ProtocolSettings::Rename(const char* from, const char* to)
{
status_t ret = B_ERROR;
// Find user's settings path
BPath path = AccountPath(fAddOn->Signature(), fAddOn->ProtoSignature());
if ((ret = path.InitCheck()) != B_OK)
return ret;
path.Append(from);
// Delete settings file
BEntry entry(path.Path());
if ((ret = entry.Rename(to)) != B_OK)
return ret;
return B_OK;
}
2010-05-08 14:35:28 -05:00
status_t
ProtocolSettings::Delete(const char* account)
{
status_t ret = B_ERROR;
// Find user's settings path
BPath path = AccountPath(fAddOn->Signature(), fAddOn->ProtoSignature());
if ((ret = path.InitCheck()) != B_OK)
2010-05-08 14:35:28 -05:00
return ret;
path.Append(account);
// Delete settings file
BEntry entry(path.Path());
if ((ret = entry.Remove()) != B_OK)
return ret;
return B_OK;
}