Beispiel #1
0
int xmlelement_set_attribute(struct xmldoc *doc,
                             struct xmlelement *element,
                             const char *name,
                             const char *value)
{
	int result = -1;
	assert(doc != NULL);
	assert(element != NULL);
	assert(name != NULL);
	assert(value != NULL);
#ifdef HAVE_LIBUPNP
	ixmlElement_setAttribute(element->element, name, value);
	result = 0;
#endif
	return result;
}
struct xmlelement *xmldoc_new_topelement(struct xmldoc *doc,
                                         const char *elementName,
                                         const char *xmlns)
{
	assert(doc != NULL);
	assert(elementName != NULL);
	IXML_Element *element;
	if (xmlns) {
		element = ixmlDocument_createElementNS(to_idoc(doc), xmlns,
                                                       elementName);
                ixmlElement_setAttribute(element, "xmlns", xmlns);
	} else {
		element = ixmlDocument_createElement(to_idoc(doc), elementName);
	}
	ixmlNode_appendChild((IXML_Node *)(to_idoc(doc)),(IXML_Node *)element);
	return (struct xmlelement *) element;
}
Beispiel #3
0
IXML_Node* xmldb_putMetaVariable(IXML_Element* element,
                                 const char* name,
                                 const char* value)
{
    int error;
    IXML_Element* meta = xmldb_getMetaInfo(element);
    if (meta == NULL)
    {
        // create a new meta tag
        meta = ixmlElement_createChildElementWithLog(element, OBIX_META);
        if (meta == NULL)
        {
            log_error("Unable to create meta tag.");
            return NULL;
        }
    }

    // create new meta item
    IXML_Element* metaItem =
        ixmlElement_createChildElementWithLog(meta, name);
    if (metaItem == NULL)
    {
        log_error("Unable to create meta item.");
        return NULL;
    }

    // set meta item value
    error = ixmlElement_setAttribute(metaItem, OBIX_ATTR_VAL, value);
    if (error != IXML_SUCCESS)
    {
        log_error("Unable to create meta item. "
                  "ixmlElement_setAttribute() returned %d.", error);
        return NULL;
    }

    // return link to the created attribute
    return ixmlAttr_getNode(
               ixmlElement_getAttributeNode(metaItem, OBIX_ATTR_VAL));
}
Beispiel #4
0
/**
 * Checks for all href attributes in the provided piece of XML and inserts
 * @a /obix prefix if necessary to all URI's which are absolute.
 */
static void insertDefaultUriPrefix(IXML_Node* node)
{
    if (node == NULL)
        return;	// exit point for the recursion

    // if this node is element and has 'href' attribute than check it:
    IXML_Element* element = ixmlNode_convertToElement(node);
    if (element != NULL)
    {
        const char* href = ixmlElement_getAttribute(element, OBIX_ATTR_HREF);
        if ((href != NULL) && (*href == '/'))
        {
            // href attribute points to the server root
            // check whether it starts with /obix/
            if (strncmp(href,
                        DEFAULT_URI_PREFIX,
                        DEFAULT_URI_PREFIX_LENGTH) != 0)
            {
                // let's add /obix prefix
                char newHref[strlen(href) + DEFAULT_URI_PREFIX_LENGTH + 1];
                strcpy(newHref, DEFAULT_URI_PREFIX);
                strcpy(newHref + DEFAULT_URI_PREFIX_LENGTH, href);
                int error = ixmlElement_setAttribute(element,
                                                     OBIX_ATTR_HREF,
                                                     newHref);
                if (error != IXML_SUCCESS)
                {
                    log_warning("Unable to update \"%s\" attribute of the object "
                                "before storing it: ixmlElement_setAttribute "
                                "returned %d.", OBIX_ATTR_HREF, error);
                }
            }
        }
    }

    // search also in child and neighbor tags
    insertDefaultUriPrefix(ixmlNode_getFirstChild(node));
    insertDefaultUriPrefix(ixmlNode_getNextSibling(node));
}
Beispiel #5
0
int WriteID3Tag(char *ptrPath,ZDB_METATRACK *trackMeta)
{
    IXML_Document *dom = NULL;
    IXML_Element *elementCmd = NULL;
    IXML_Element *element = NULL;
    IXML_Node *node = NULL;
    char *ptrXml = NULL;
    char *result = NULL;

    if((dom = ixmlDocument_createDocument()) == NULL)
        return ZAPP_FAILED;

    /*cmd node*/
    if((elementCmd = ixmlDocument_createElement(dom, "cmd")) == NULL)
        goto errOut;

    /*op = WriteMetadata*/
    ixmlElement_setAttribute(elementCmd,"op","WriteMetadata");
    ixmlNode_appendChild(&dom->n, (IXML_Node *)elementCmd);

    //FileName node
    if((element = ixmlDocument_createElement(dom, "FileName")) == NULL)
        goto errOut;
    if((node = ixmlDocument_createTextNode(dom, ptrPath)) == NULL)
    {
        ixmlElement_free(element);
        goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //artFile node
    if((element = ixmlDocument_createElement(dom, "artFile")) == NULL)
         goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->albumArtURI)) == NULL)
    {
       ixmlElement_free(element);
       goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //title node
    if((element = ixmlDocument_createElement(dom, "title")) == NULL)
       goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->trackTitle)) == NULL)
    {
       ixmlElement_free(element);
       goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //album node
    if((element = ixmlDocument_createElement(dom, "album")) == NULL)
        goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->albumname)) == NULL)
    {
        ixmlElement_free(element);
        goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //artistname node
    if((element = ixmlDocument_createElement(dom, "artist")) == NULL)
        goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->artistname)) == NULL)
    {
       ixmlElement_free(element);
       goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //genre node
    if((element = ixmlDocument_createElement(dom, "genre")) == NULL)
        goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->genrename)) == NULL)
    {
        ixmlElement_free(element);
        goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //year node
    if((element = ixmlDocument_createElement(dom, "year")) == NULL)
        goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->releaseDate)) == NULL)
    {
       ixmlElement_free(element);
       goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //trackNum node
    if((element = ixmlDocument_createElement(dom, "trackNum")) == NULL)
       goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->trackNo)) == NULL)
    {
       ixmlElement_free(element);
       goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);
    ptrXml = ixmlPrintDocument(dom);
    result = Call3rdPartyCommand("zxtract", ptrXml, strlen(ptrXml),32);

errOut:
    if(result)
    {
       free(result);
    }

    ixmlDocument_free(dom);
    if(ptrXml != NULL)
    {
        free(ptrXml);
    }
    return ZAPP_SUCCESS;
}