linking: api: use JsonWriter
Change-Id: If5bf1897f1aef8db1672789cbee14b90cb96dc08 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151959 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Szymon Kłos <szymon.klos@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154378 Tested-by: Jenkins
This commit is contained in:
parent
52d265c0d2
commit
6086d89618
@ -410,7 +410,7 @@ std::vector<beans::PropertyValue> desktop::jsonToPropertyValuesVector(const char
|
||||
return aArguments;
|
||||
}
|
||||
|
||||
static bool extractLinks(const uno::Reference< container::XNameAccess >& xLinks, bool subcontent, OUStringBuffer& jsonText)
|
||||
static void extractLinks(const uno::Reference< container::XNameAccess >& xLinks, bool subcontent, tools::JsonWriter& aJson)
|
||||
{
|
||||
const uno::Sequence< OUString > aNames( xLinks->getElementNames() );
|
||||
|
||||
@ -451,47 +451,27 @@ static bool extractLinks(const uno::Reference< container::XNameAccess >& xLinks,
|
||||
|
||||
if (subcontent)
|
||||
{
|
||||
jsonText.append("\"");
|
||||
jsonText.append(aStrDisplayname);
|
||||
jsonText.append("\": \"");
|
||||
jsonText.append(aLink);
|
||||
jsonText.append("\"");
|
||||
if (i < nLinks-1)
|
||||
{
|
||||
jsonText.append(", ");
|
||||
}
|
||||
aJson.put(aStrDisplayname, aLink);
|
||||
}
|
||||
else
|
||||
{
|
||||
uno::Reference< lang::XServiceInfo > xSI( xTarget, uno::UNO_QUERY );
|
||||
bIsTarget = xSI->supportsService( aProp_LinkTarget );
|
||||
if (i != 0)
|
||||
{
|
||||
if (!bIsTarget)
|
||||
jsonText.append("}");
|
||||
if (i < nLinks)
|
||||
{
|
||||
jsonText.append(", ");
|
||||
}
|
||||
}
|
||||
jsonText.append("\"");
|
||||
jsonText.append(aStrDisplayname);
|
||||
jsonText.append("\": ");
|
||||
|
||||
if (bIsTarget)
|
||||
{
|
||||
jsonText.append("\"");
|
||||
jsonText.append(aLink);
|
||||
jsonText.append("\"");
|
||||
aJson.put(aStrDisplayname, aLink);
|
||||
continue;
|
||||
}
|
||||
jsonText.append("{");
|
||||
}
|
||||
else
|
||||
{
|
||||
std::unique_ptr<char[], o3tl::free_delete> pName(convertOUString(aStrDisplayname));
|
||||
auto aNode = aJson.startNode(pName.get());
|
||||
|
||||
uno::Reference< document::XLinkTargetSupplier > xLTS( xTarget, uno::UNO_QUERY );
|
||||
if( xLTS.is() )
|
||||
{
|
||||
extractLinks(xLTS->getLinks(), true, jsonText);
|
||||
uno::Reference< document::XLinkTargetSupplier > xLTS( xTarget, uno::UNO_QUERY );
|
||||
if( xLTS.is() )
|
||||
extractLinks(xLTS->getLinks(), true, aJson);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(...)
|
||||
@ -500,7 +480,6 @@ static bool extractLinks(const uno::Reference< container::XNameAccess >& xLinks,
|
||||
}
|
||||
}
|
||||
}
|
||||
return bIsTarget;
|
||||
}
|
||||
|
||||
static void unoAnyToJson(tools::JsonWriter& rJson, std::string_view pNodeName, const uno::Any& anyItem)
|
||||
@ -3145,14 +3124,12 @@ static char* lo_extractRequest(LibreOfficeKit* /*pThis*/, const char* pFilePath)
|
||||
|
||||
if( xLTS.is() )
|
||||
{
|
||||
OUStringBuffer jsonText("{ \"Targets\": { ");
|
||||
bool lastParentheses = extractLinks(xLTS->getLinks(), false, jsonText);
|
||||
jsonText.append("} }");
|
||||
if (!lastParentheses)
|
||||
jsonText.append(" }");
|
||||
|
||||
OUString res(jsonText.makeStringAndClear());
|
||||
return convertOUString(res);
|
||||
tools::JsonWriter aJson;
|
||||
{
|
||||
auto aNode = aJson.startNode("Targets");
|
||||
extractLinks(xLTS->getLinks(), false, aJson);
|
||||
}
|
||||
return strdup(aJson.finishAndGetAsOString().getStr());
|
||||
}
|
||||
xComp->dispose();
|
||||
}
|
||||
|
@ -52,6 +52,8 @@ public:
|
||||
[[nodiscard]] ScopedJsonWriterArray startArray(std::string_view);
|
||||
[[nodiscard]] ScopedJsonWriterStruct startStruct();
|
||||
|
||||
void put(std::u16string_view pPropName, const OUString& rPropValue);
|
||||
|
||||
void put(std::string_view pPropName, const OUString& rPropValue);
|
||||
// Assumes utf-8 property value encoding
|
||||
void put(std::string_view pPropName, std::string_view rPropValue);
|
||||
|
@ -225,6 +225,26 @@ void JsonWriter::writeEscapedOUString(const OUString& rPropVal)
|
||||
validate();
|
||||
}
|
||||
|
||||
void JsonWriter::put(std::u16string_view pPropName, const OUString& rPropVal)
|
||||
{
|
||||
auto nPropNameLength = pPropName.length();
|
||||
// But values can be any UTF-8,
|
||||
// if the string only contains of 0x2028, it will be expanded 6 times (see writeEscapedSequence)
|
||||
auto nWorstCasePropValLength = rPropVal.getLength() * 6;
|
||||
ensureSpace(nPropNameLength + nWorstCasePropValLength + 8);
|
||||
|
||||
addCommaBeforeField();
|
||||
|
||||
writeEscapedOUString(OUString(pPropName));
|
||||
|
||||
memcpy(mPos, ": ", 2);
|
||||
mPos += 2;
|
||||
|
||||
writeEscapedOUString(rPropVal);
|
||||
|
||||
validate();
|
||||
}
|
||||
|
||||
void JsonWriter::put(std::string_view pPropName, const OUString& rPropVal)
|
||||
{
|
||||
// Values can be any UTF-8,
|
||||
|
Loading…
x
Reference in New Issue
Block a user