⛏️ index : haiku.git

/*
 * Copyright 2013, Rene Gollent, rene@gollent.com.
 * Distributed under the terms of the MIT License.
 */
#include "TeamFileManagerSettings.h"

TeamFileManagerSettings::TeamFileManagerSettings()
	:
	fValues()
{
}


TeamFileManagerSettings::~TeamFileManagerSettings()
{
}


TeamFileManagerSettings&
TeamFileManagerSettings::operator=(const TeamFileManagerSettings& other)
{
	fValues = other.fValues;

	return *this;
}


const char*
TeamFileManagerSettings::ID() const
{
	return "FileManager";
}


status_t
TeamFileManagerSettings::SetTo(const BMessage& archive)
{
	try {
		fValues = archive;
	} catch (...) {
		return B_NO_MEMORY;
	}

	return B_OK;
}


status_t
TeamFileManagerSettings::WriteTo(BMessage& archive) const
{
	try {
		archive = fValues;
	} catch (...) {
		return B_NO_MEMORY;
	}

	return B_OK;
}


int32
TeamFileManagerSettings::CountSourceMappings() const
{
	type_code type;
	int32 count = 0;

	if (fValues.GetInfo("source:mapping", &type, &count) == B_OK)
		return count;

	return 0;
}


status_t
TeamFileManagerSettings::AddSourceMapping(const BString& sourcePath,
	const BString& locatedPath)
{
	BMessage mapping;
	if (mapping.AddString("source:path", sourcePath) != B_OK
		|| mapping.AddString("source:locatedpath", locatedPath) != B_OK
		|| fValues.AddMessage("source:mapping", &mapping) != B_OK) {
		return B_NO_MEMORY;
	}

	return B_OK;
}


status_t
TeamFileManagerSettings::RemoveSourceMappingAt(int32 index)
{
	return fValues.RemoveData("source:mapping", index);
}


status_t
TeamFileManagerSettings::GetSourceMappingAt(int32 index, BString& sourcePath,
	BString& locatedPath)
{
	BMessage mapping;
	status_t error = fValues.FindMessage("source:mapping", index, &mapping);
	if (error != B_OK)
		return error;

	error = mapping.FindString("source:path", &sourcePath);
	if (error != B_OK)
		return error;

	return mapping.FindString("source:locatedpath", &locatedPath);
}


TeamFileManagerSettings*
TeamFileManagerSettings::Clone() const
{
	TeamFileManagerSettings* settings = new(std::nothrow)
		TeamFileManagerSettings();

	if (settings == NULL)
		return NULL;

	if (settings->SetTo(fValues) != B_OK) {
		delete settings;
		return NULL;
	}

	return settings;
}