/*
 *
 * @APPLE_LICENSE_HEADER_START@
 *
 * Copyright (c) 1999-2001 Apple Computer, Inc.  All Rights Reserved. The
 * contents of this file constitute Original Code as defined in and are
 * subject to the Apple Public Source License Version 1.2 (the 'License').
 * You may not use this file except in compliance with the License.  Please
 * obtain a copy of the License at http://www.apple.com/publicsource and
 * read it before using this file.
 *
 * This Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
 * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.  Please
 * see the License for the specific language governing rights and
 * limitations under the License.
 *
 *
 * @APPLE_LICENSE_HEADER_END@
 *
 */
/*
	File:		NetInfoPrefsSource.cpp

	Contains:	Implements object defined in NetInfoPrefsSource.h.

	Written by:	Denis Serenyi

	Change History (most recent first):

	

*/

#include "nilib2.h"

#include "NetInfoPrefsSource.h"

static char* gQTSSPropertiesPath = "/services/QuickTimeStreamingServer";

NetInfoPrefsSource::NetInfoPrefsSource()
{}

int NetInfoPrefsSource::GetValue(const char* inKey, char* ioValue)
{
	return this->GetValueByIndex(inKey, 0, ioValue);
}

int NetInfoPrefsSource::GetValueByIndex(const char* inKey, UInt32 inIndex, char* ioValue)
{
	ni_status status = NI_OK;
	ni_namelist nameList = {};
	void* localDomain = NULL;
	ni_id qtssDir = {};	
	
	ioValue[0] = '\0';

	status = ni_open(NULL, ".", &localDomain);
	if (status != NI_OK)
		return false;
		
	if (status == NI_OK)
		status = ni_pathsearch(localDomain, &qtssDir, gQTSSPropertiesPath);
		
	if (status == NI_OK)
		status = ni_lookupprop(localDomain, &qtssDir, inKey, &nameList);

	if (status == NI_OK)
	{
		if (nameList.ni_namelist_len > inIndex)
			strcpy(ioValue, nameList.ni_namelist_val[inIndex]);
		else
			status = NI_BADID;
		ni_namelist_free(&nameList);
	}
	
	ni_free(localDomain);
	
	return (status == NI_OK);
}

void NetInfoPrefsSource::SetValue(char* inKey, char* inValue)
{
	this->SetValueByIndex(inKey, inValue, NI_INDEX_NULL);
}

void NetInfoPrefsSource::SetValueByIndex(char* inKey, char* inValue, UInt32 inIndex)
{
	void* localDomain = NULL;
	ni_status status = NI_OK;
	ni_namelist nameList = {};

	//ni_namelist_insert(&nameList, (char*)inValue, NI_INDEX_NULL);
	ni_namelist_insert(&nameList, inValue, inIndex);

	status = ni_open(NULL, ".", &localDomain);

	if (status == NI_OK)
	{
		//create the path if it doesn't already exist
		status = ni2_create(localDomain, gQTSSPropertiesPath);

		if (status == NI_OK)
			status = ni2_appendprop(localDomain, gQTSSPropertiesPath, inKey, nameList);
	}
	ni_namelist_free(&nameList);
	ni_free(localDomain);
}
