1/*
2 * Copyright 2013, Rene Gollent, rene@gollent.com.
3 * Distributed under the terms of the MIT License.
4 */
5#include "TeamFileManagerSettings.h"
6
7TeamFileManagerSettings::TeamFileManagerSettings()
8	:
9	fValues()
10{
11}
12
13
14TeamFileManagerSettings::~TeamFileManagerSettings()
15{
16}
17
18
19TeamFileManagerSettings&
20TeamFileManagerSettings::operator=(const TeamFileManagerSettings& other)
21{
22	fValues = other.fValues;
23
24	return *this;
25}
26
27
28const char*
29TeamFileManagerSettings::ID() const
30{
31	return "FileManager";
32}
33
34
35status_t
36TeamFileManagerSettings::SetTo(const BMessage& archive)
37{
38	try {
39		fValues = archive;
40	} catch (...) {
41		return B_NO_MEMORY;
42	}
43
44	return B_OK;
45}
46
47
48status_t
49TeamFileManagerSettings::WriteTo(BMessage& archive) const
50{
51	try {
52		archive = fValues;
53	} catch (...) {
54		return B_NO_MEMORY;
55	}
56
57	return B_OK;
58}
59
60
61int32
62TeamFileManagerSettings::CountSourceMappings() const
63{
64	type_code type;
65	int32 count = 0;
66
67	if (fValues.GetInfo("source:mapping", &type, &count) == B_OK)
68		return count;
69
70	return 0;
71}
72
73
74status_t
75TeamFileManagerSettings::AddSourceMapping(const BString& sourcePath,
76	const BString& locatedPath)
77{
78	BMessage mapping;
79	if (mapping.AddString("source:path", sourcePath) != B_OK
80		|| mapping.AddString("source:locatedpath", locatedPath) != B_OK
81		|| fValues.AddMessage("source:mapping", &mapping) != B_OK) {
82		return B_NO_MEMORY;
83	}
84
85	return B_OK;
86}
87
88
89status_t
90TeamFileManagerSettings::RemoveSourceMappingAt(int32 index)
91{
92	return fValues.RemoveData("source:mapping", index);
93}
94
95
96status_t
97TeamFileManagerSettings::GetSourceMappingAt(int32 index, BString& sourcePath,
98	BString& locatedPath)
99{
100	BMessage mapping;
101	status_t error = fValues.FindMessage("source:mapping", index, &mapping);
102	if (error != B_OK)
103		return error;
104
105	error = mapping.FindString("source:path", &sourcePath);
106	if (error != B_OK)
107		return error;
108
109	return mapping.FindString("source:locatedpath", &locatedPath);
110}
111
112
113TeamFileManagerSettings*
114TeamFileManagerSettings::Clone() const
115{
116	TeamFileManagerSettings* settings = new(std::nothrow)
117		TeamFileManagerSettings();
118
119	if (settings == NULL)
120		return NULL;
121
122	if (settings->SetTo(fValues) != B_OK) {
123		delete settings;
124		return NULL;
125	}
126
127	return settings;
128}
129