Esempio n. 1
0
void
MediaWindow::SmartNode::SetTo(const dormant_node_info* info)
{
	_FreeNode();
	if (!info)
		return;

	fNode = new media_node();
	BMediaRoster* roster = BMediaRoster::Roster();

	status_t status = B_OK;
	media_node_id node_id;
	if (roster->GetInstancesFor(info->addon, info->flavor_id, &node_id) == B_OK)
		status = roster->GetNodeFor(node_id, fNode);
	else
		status = roster->InstantiateDormantNode(*info, fNode, B_FLAVOR_IS_GLOBAL);

	if (status != B_OK) {
		fprintf(stderr, "SmartNode::SetTo error with node %" B_PRId32
			": %s\n", fNode->node, strerror(status));
	}

	status = roster->StartWatching(fMessenger, *fNode, B_MEDIA_WILDCARD);
	if (status != B_OK) {
		fprintf(stderr, "SmartNode::SetTo can't start watching for"
			" node %" B_PRId32 "\n", fNode->node);
	}
}
Esempio n. 2
0
void
MediaWindow::SmartNode::SetTo(const media_node& node)
{
	_FreeNode();
	fNode = new media_node(node);
	BMediaRoster* roster = BMediaRoster::Roster();
	roster->StartWatching(fMessenger, *fNode, B_MEDIA_WILDCARD);
}
VJSStructuredClone* VJSStructuredClone::RetainCloneForVBagArray( const XBOX::VBagArray& inBagArray, bool inUniqueElementsAreNotArrays)
{
	VJSStructuredClone *structuredClone = NULL;

	SNode *arrayNode = _VBagArrayToNode( inBagArray, inUniqueElementsAreNotArrays);
	if (arrayNode != NULL)
	{	
		arrayNode->fNextSibling = NULL;
		if ((structuredClone = new VJSStructuredClone()) != NULL)
			structuredClone->fRoot = arrayNode;
		else
			_FreeNode( arrayNode);
	}

	return structuredClone;
}
VJSStructuredClone* VJSStructuredClone::RetainCloneForVValueSingle( const XBOX::VValueSingle& inValue)
{
	VJSStructuredClone *structuredClone = NULL;

	SNode *valueNode = _VValueSingleToNode( inValue);
	if (valueNode != NULL)
	{	
		valueNode->fNextSibling = NULL;
		if ((structuredClone = new VJSStructuredClone()) != NULL)
			structuredClone->fRoot = valueNode;
		else
			_FreeNode( valueNode);
	}

	return structuredClone;
}
VJSStructuredClone* VJSStructuredClone::RetainCloneForVValueBag( const XBOX::VValueBag& inBag, bool inUniqueElementsAreNotArrays)
{
	VJSStructuredClone *structuredClone = NULL;

	SNode *bagNode = _VValueBagToNode( inBag, inUniqueElementsAreNotArrays);
	if (bagNode != NULL)
	{
		bagNode->fNextSibling = NULL;
		if ((structuredClone = new VJSStructuredClone()) != NULL)
			structuredClone->fRoot = bagNode;
		else
			_FreeNode( bagNode);
	}

	return structuredClone;

}
Esempio n. 6
0
void
MediaWindow::SmartNode::SetTo(const dormant_node_info* info)
{
	_FreeNode();
	if (!info)
		return;

	fNode = new media_node();
	BMediaRoster* roster = BMediaRoster::Roster();

	// TODO: error codes
	media_node_id node_id;
	if (roster->GetInstancesFor(info->addon, info->flavor_id, &node_id) == B_OK)
		roster->GetNodeFor(node_id, fNode);
	else
		roster->InstantiateDormantNode(*info, fNode, B_FLAVOR_IS_GLOBAL);
	roster->StartWatching(fMessenger, *fNode, B_MEDIA_WILDCARD);
}
VJSStructuredClone::SNode *VJSStructuredClone::_ValueToNode (XBOX::VJSValue inValue, std::map<JS4D::ValueRef, SNode *> *ioAlreadyCloned, std::list<SEntry> *ioToDoList)
{
	xbox_assert(ioAlreadyCloned != NULL && ioToDoList != NULL);

	SNode	*p;

	if ((p = new SNode()) == NULL)

		return NULL;

	switch (inValue.GetType()) {

		case JS4D::eTYPE_UNDEFINED: 

			p->fType = eNODE_UNDEFINED;
			break;

		case JS4D::eTYPE_NULL:

			p->fType = eNODE_NULL;
			break;

		case JS4D::eTYPE_BOOLEAN:

			p->fType = eNODE_BOOLEAN;
			if (!inValue.GetBool(&p->fValue.fBoolean)) {

				delete p;
				p = NULL;

			}
			break;
    	
		case JS4D::eTYPE_NUMBER:

			p->fType = eNODE_NUMBER;
			if (!inValue.GetReal(&p->fValue.fNumber)) {

				delete p;
				p = NULL;

			}
			break;

		case JS4D::eTYPE_STRING: {

			XBOX::VString	string;

			p->fType = eNODE_STRING;
			if (!inValue.GetString(string) || (p->fValue.fString = new XBOX::VString(string)) == NULL) {

				delete p;
				p = NULL;

			}

			break;

		}

		case JS4D::eTYPE_OBJECT: {

			std::vector<VJSValue>	emptyArgument;	
			XBOX::VString			string;

			if (inValue.IsInstanceOf("Boolean")) {

				p->fType = eNODE_BOOLEAN_OBJECT;
				if (!inValue.GetObject().CallMemberFunction("valueOf", &emptyArgument, &inValue, NULL)
				|| !inValue.GetBool(&p->fValue.fBoolean)) {

					delete p;
					p = NULL;

				}

			} else if (inValue.IsInstanceOf("Number")) {

				p->fType = eNODE_NUMBER_OBJECT;
				if (!inValue.GetObject().CallMemberFunction("valueOf", &emptyArgument, &inValue, NULL)
				|| !inValue.GetReal(&p->fValue.fNumber)) {

					delete p;
					p = NULL;

				}

			} else if (inValue.IsInstanceOf("String")) {

				p->fType = eNODE_STRING_OBJECT;
				if (!inValue.GetObject().CallMemberFunction("valueOf", &emptyArgument, &inValue, NULL)
				|| !inValue.GetString(string)
				|| (p->fValue.fString = new XBOX::VString(string)) == NULL) {
			
					delete p;
					p = NULL;

				}

			} else if (inValue.IsInstanceOf("Date")) {

				// getTime() will return the date as milliseconds since 1-01-1970 (UNIX time).

				p->fType = eNODE_DATE_OBJECT;
				if (!inValue.GetObject().CallMemberFunction("getTime", &emptyArgument, &inValue, NULL)
				|| !inValue.GetReal(&p->fValue.fNumber)) {
			
					delete p;
					p = NULL;

				}

			} else if (inValue.IsInstanceOf("RegExp")) {

				// toString() will return the "complete" (along with modifier flag(s)) regular expression. 
			
				p->fType = eNODE_REG_EXP_OBJECT;
				if (!inValue.GetObject().CallMemberFunction("toString", &emptyArgument, &inValue, NULL)
				|| !inValue.GetString(string)
				|| (p->fValue.fString = new XBOX::VString(string)) == NULL) {
			
					delete p;
					p = NULL;

				}
				
			} else if (_IsSerializable(inValue)) {
				
				// Serialize object if possible.
				
				p->fType = eNODE_SERIALIZABLE;
				if ((p->fValue.fSerializationData.fConstructorName = new XBOX::VString()) == NULL) {
					
					delete p;
					p = NULL;
				
				} else if ((p->fValue.fSerializationData.fJSON = new XBOX::VString()) == NULL) {
					
					delete p->fValue.fSerializationData.fConstructorName;
					delete p;
					p = NULL;
				
				} else {
					
					if (!inValue.GetObject().GetPropertyAsString("constructorName", NULL, *p->fValue.fSerializationData.fConstructorName)
					|| !inValue.GetObject().CallMemberFunction("serialize", &emptyArgument, &inValue, NULL)
					|| !inValue.GetString(*p->fValue.fSerializationData.fJSON)) {
					
						_FreeNode(p);
						p = NULL;
						
					}					
					
				}				

			} else if (inValue.IsFunction()) {

				delete p;
				p = NULL;

			} else {

				// Object or Array.

				std::map<JS4D::ValueRef, SNode *>::iterator	j;	

				if ((j = ioAlreadyCloned->find(inValue.GetValueRef())) != ioAlreadyCloned->end()) {

					// Already cloned.

					xbox_assert(inValue.IsObject());

					p->fType = eNODE_REFERENCE;
					p->fValue.fReference = j->second;

				} else {

					SEntry	entry;

					p->fType = inValue.IsArray() ? eNODE_ARRAY : eNODE_OBJECT;
					p->fValue.fFirstChild = NULL;
			
					// Mark as already cloned and add to "todo" list.
			
					(*ioAlreadyCloned)[inValue.GetValueRef()] = p;

					entry.fValueRef = inValue.GetValueRef();
					entry.fNode = p;
					ioToDoList->push_back(entry);

				}
	
			}
			break;

		}

		default:

			xbox_assert(false);
			break;

	}

	return p;
}
VJSStructuredClone::~VJSStructuredClone ()
{
	if (fRoot != NULL)

		_FreeNode(fRoot);
}
USING_TOOLBOX_NAMESPACE

VJSStructuredClone *VJSStructuredClone::RetainClone (XBOX::VJSValue inValue)
{	
	std::map<JS4D::ValueRef, SNode *>	alreadyCreated;
	std::list<SEntry>					toDoList;
	SNode								*root;

	if ((root = _ValueToNode(inValue, &alreadyCreated, &toDoList)) == NULL)

		return NULL;

	while (!toDoList.empty()) {

		// Property iterator will also iterate Array object indexes (they are converted into string).

		XBOX::VJSValue				value(inValue.GetContext(), toDoList.front().fValueRef);
		XBOX::VJSPropertyIterator	i(value.GetObject());
		SNode						*p, *q, *r;

		p = toDoList.front().fNode;
		xbox_assert(p->fType == eNODE_OBJECT || p->fType == eNODE_ARRAY);
		
		toDoList.pop_front();

		// Object or Array with no attributes?

		if (!i.IsValid()) 

			continue;

		// Get prototype and dump its attribute names.

		XBOX::VJSObject	prototypeObject	= value.GetObject().GetPrototype(inValue.GetContext());
		bool			hasPrototype	= prototypeObject.IsObject();

		// Iterate child(s).

		for ( ; i.IsValid(); ++i) {

			XBOX::VString	name;

			i.GetPropertyName(name);
	
			// Check attribute name: If it is part of prototype, do not clone it.

			if (hasPrototype && prototypeObject.HasProperty(name))

				continue;

			value = i.GetProperty();
			if ((r = _ValueToNode(value, &alreadyCreated, &toDoList)) == NULL) 

				break;

			else if (p->fValue.fFirstChild != NULL) 
				
				q->fNextSibling = r;
						
			else
				
				p->fValue.fFirstChild = r;

			r->fName = name;
			q = r;

		}

		if (p->fValue.fFirstChild != NULL) 

			q->fNextSibling = NULL;

		if (i.IsValid()) {

			_FreeNode(root);
			root = NULL;
			break;

		} 	

	}

	if (root != NULL) {

		VJSStructuredClone	*structuredClone;

		if ((structuredClone = new VJSStructuredClone()) != NULL)

			structuredClone->fRoot = root;

		else

			_FreeNode(root);

		return structuredClone;

	} else

		return NULL;
}
Esempio n. 10
0
MediaWindow::SmartNode::~SmartNode()
{
	_FreeNode();
}
USING_TOOLBOX_NAMESPACE

VJSStructuredClone *VJSStructuredClone::RetainClone (XBOX::VJSValue inValue)
{	
	std::map<JS4D::ValueRef, SNode *>	alreadyCreated;
	std::list<SEntry>					toDoList;
	SNode								*root;

	if ((root = _ValueToNode(inValue, &alreadyCreated, &toDoList)) == NULL)

		return NULL;

	while (!toDoList.empty()) {

		// Property iterator will also iterate Array object indexes (they are converted into string).

		XBOX::VJSValue				value(inValue.GetContext(), toDoList.front().fValueRef);
		XBOX::VJSPropertyIterator	i(value.GetObject());
		SNode						*p, *q;

		p = toDoList.front().fNode;
		xbox_assert(p->fType == eNODE_OBJECT || p->fType == eNODE_ARRAY);
		
		toDoList.pop_front();

		// Object or Array with no attributes?

		if (!i.IsValid()) 

			continue;

		// Set first child.

		value = i.GetProperty();
		if ((p->fValue.fFirstChild = _ValueToNode(value, &alreadyCreated, &toDoList)) == NULL) {

			_FreeNode(root);
			root = NULL;			
			break;

		} 		
		q = p->fValue.fFirstChild;
		i.GetPropertyName(q->fName);		
		++i;

		// Iterate sibling(s).

		for ( ; i.IsValid(); ++i) {

			value = i.GetProperty();
			if ((p = _ValueToNode(value, &alreadyCreated, &toDoList)) == NULL) 

				break;

			else {

				q = q->fNextSibling = p;
				i.GetPropertyName(p->fName);

			}

		}

		q->fNextSibling = NULL;
		if (i.IsValid()) {

			_FreeNode(root);
			root = NULL;
			break;

		} 	

	}

	if (root != NULL) {

		VJSStructuredClone	*structuredClone;

		if ((structuredClone = new VJSStructuredClone()) != NULL)

			structuredClone->fRoot = root;

		else

			_FreeNode(root);

		return structuredClone;

	} else

		return NULL;
}