//helper functions
bool OXMLi_ListenerState_Image::addImage(const std::string & id)
{
	UT_Error err = UT_OK;
	FG_ConstGraphicPtr pFG;
		
	OXMLi_PackageManager * mgr = OXMLi_PackageManager::getInstance();
	UT_ConstByteBufPtr imageData = mgr->parseImageStream(id.c_str());

	if (!imageData)
		return false;

	err = IE_ImpGraphic::loadGraphic(imageData, IEGFT_Unknown, pFG);
	if ((err != UT_OK) || !pFG)
	{
		UT_DEBUGMSG(("FRT:OpenXML importer can't import the picture with id:%s\n", id.c_str()));
		return false;
	}

	OXML_Document * doc = OXML_Document::getInstance();
	if(!doc)
		return false;

	OXML_Image* img = new OXML_Image();
	img->setId(id.c_str());
	img->setGraphic(std::move(pFG));

	OXML_SharedImage shrImg(img);

	return doc->addImage(shrImg) == UT_OK;
}
UT_Error IE_Exp_OpenXML_Listener::addImages()
{
	UT_Error err = UT_OK;

	const char* szName = NULL;
    std::string mimeType;
	const UT_ByteBuf* pByteBuf = NULL;

	UT_uint32 k = 0;
	while (pdoc->enumDataItems (k, 0, &szName, &pByteBuf, &mimeType))
	{
		k++;

		if(!(szName && *szName && !mimeType.empty() && pByteBuf && pByteBuf->getLength()))
		{
			szName = NULL;
			mimeType.clear();
			pByteBuf = NULL;
			continue;
		}

		if(!((mimeType == "image/png") || (mimeType == "image/jpeg") || (mimeType == "image/svg+xml")))
		{
			// If you add a mime type, make sure to update the extension code in
			// PD_Document::getDataItemFileExtension()
			UT_DEBUGMSG(("OpenXML export: unhandled/ignored mime type: %s\n", 
                         mimeType.c_str()));

			szName = NULL;
			mimeType.clear();
			pByteBuf = NULL;
			continue;
		}

		OXML_Image* image = new OXML_Image();
		const OXML_SharedImage shared_image(image);			

		image->setId(szName);
		image->setMimeType(mimeType);
		image->setData(pByteBuf);

		err = document->addImage(shared_image);
		if(err != UT_OK)
			return err;
		
		szName = NULL;
		mimeType.clear();
		pByteBuf = NULL;
	}

	return UT_OK;
}