Skip to content

Commit

Permalink
Update ResourceData
Browse files Browse the repository at this point in the history
  • Loading branch information
sammycage committed Jun 17, 2024
1 parent 8dfdd1f commit d10c62c
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 32 deletions.
97 changes: 87 additions & 10 deletions include/plutobook.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,43 +183,120 @@ constexpr float px = PLUTOBOOK_UNITS_PX;

class PLUTOBOOK_API ResourceData {
public:
/**
* @brief createWithCopy
* @param content
* @param contentLength
* @param mimeType
* @param textEncoding
* @return
*/
static ResourceData createWithCopy(const char* content, size_t contentLength, const std::string& mimeType, const std::string& textEncoding);

/**
* @brief createWithoutCopy
* @param content
* @param contentLength
* @param mimeType
* @param textEncoding
* @param destroyCallback
* @param closure
* @return
*/
static ResourceData createWithoutCopy(const char* content, size_t contentLength, const std::string& mimeType, const std::string& textEncoding, plutobook_resource_destroy_callback_t destroyCallback, void* closure);

ResourceData() : m_data(nullptr) {}
ResourceData(std::nullptr_t) : m_data(nullptr) {}
/**
* @brief ResourceData
*/
ResourceData() = default;

/**
* @brief ResourceData
* @param data
*/
explicit ResourceData(plutobook_resource_data_t* data) : m_data(data) {}

/**
* @brief ResourceData
* @param resource
*/
ResourceData(ResourceData&& resource) : m_data(resource.release()) {}

/**
* @brief ResourceData
* @param resource
*/
ResourceData(const ResourceData& resource);

/**
* @brief ~ResourceData
*/
~ResourceData();

/**
* @brief get
* @brief Copy assignment operator
* @param resource
* @return
*/
plutobook_resource_data_t* get() const { return m_data; }
ResourceData& operator=(const ResourceData& resource);

/**
* @brief release
* @brief Move assignment operator
* @param resource
* @return
*/
plutobook_resource_data_t* release();

ResourceData& operator=(std::nullptr_t);
ResourceData& operator=(const ResourceData& resource);
ResourceData& operator=(ResourceData&& resource);

/**
* @brief swap
* @param resource
*/
void swap(ResourceData& resource);

/**
* @brief content
* @return
*/
const char* content() const;

/**
* @brief contentLength
* @return
*/
size_t contentLength() const;

/**
* @brief mimeType
* @return
*/
std::string_view mimeType() const;

/**
* @brief textEncoding
* @return
*/
std::string_view textEncoding() const;

/**
* @brief release
* @return
*/
plutobook_resource_data_t* release();

/**
* @brief data
* @return
*/
plutobook_resource_data_t* data() const { return m_data; }

/**
* @brief isNull
* @return
*/
bool isNull() const { return m_data == nullptr; }

private:
plutobook_resource_data_t* m_data;
plutobook_resource_data_t* m_data{nullptr};
};

/**
Expand Down
22 changes: 8 additions & 14 deletions source/plutobook.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ ResourceData ResourceData::createWithoutCopy(const char* content, size_t content
}

ResourceData::ResourceData(const ResourceData& resource)
: m_data(plutobook_resource_data_reference(resource.get()))
: m_data(plutobook_resource_data_reference(resource.data()))
{
}

Expand All @@ -259,19 +259,6 @@ ResourceData::~ResourceData()
plutobook_resource_data_destroy(m_data);
}

plutobook_resource_data_t* ResourceData::release()
{
auto data = m_data;
m_data = nullptr;
return data;
}

ResourceData& ResourceData::operator=(std::nullptr_t)
{
ResourceData(nullptr).swap(*this);
return *this;
}

ResourceData& ResourceData::operator=(const ResourceData& resource)
{
ResourceData(resource).swap(*this);
Expand Down Expand Up @@ -309,6 +296,13 @@ std::string_view ResourceData::textEncoding() const
return plutobook_resource_data_get_text_encoding(m_data);
}

plutobook_resource_data_t* ResourceData::release()
{
auto data = m_data;
m_data = nullptr;
return data;
}

Book::Book(const PageSize& size, const PageMargins& margins, MediaType media)
: m_pageSize(size)
, m_pageMargins(margins)
Expand Down
15 changes: 7 additions & 8 deletions source/resource/resource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,7 @@ static ResourceData loadDataUrl(std::string_view input)
input.remove_prefix(5);
auto headerEnd = input.find(',');
if(headerEnd == std::string_view::npos)
return nullptr;

return ResourceData();
auto header = input.substr(0, headerEnd);
auto mediaTypeEnd = header.rfind(';');
if(mediaTypeEnd == std::string_view::npos) {
Expand All @@ -166,14 +165,14 @@ static ResourceData loadDataUrl(std::string_view input)
stripLeadingAndTrailingSpaces(formatType);
}

if(equals(formatType, "base64", false)) {
if(!equals(formatType, "base64", false)) {
content->reserve(input.length());
content->assign(input.begin(), input.end());
} else {
if(!base64Decode(input, *content)) {
ByteArrayDestroy(content);
return nullptr;
return ResourceData();
}
} else {
content->reserve(input.length());
content->assign(input.begin(), input.end());
}

return ResourceData::createWithoutCopy(content->data(), content->size(), mimeType, textEncoding, ByteArrayDestroy, content);
Expand Down Expand Up @@ -267,7 +266,7 @@ ResourceData DefaultResourceFetcher::loadUrl(const std::string& url)
return ResourceData::createWithoutCopy(content->data(), content->size(), mimeType, textEncoding, ByteArrayDestroy, content);
delete content;
spdlog::error("curl error: {}", curl_easy_strerror(response));
return nullptr;
return ResourceData();
}

#else
Expand Down

0 comments on commit d10c62c

Please sign in to comment.