C++ API: add loadFile and saveFile

test
Syping 1 year ago
parent af547bd89f
commit a396d014f7
  1. 39
      src/RagePhoto.cpp
  2. 8
      src/RagePhoto.h

@ -17,7 +17,9 @@
*****************************************************************************/
#include "RagePhoto.h"
#include <fstream>
#include <iostream>
#include <iterator>
#include <cstdlib>
#include <cstring>
@ -387,6 +389,20 @@ bool RagePhoto::load(const std::string &data)
return load(data.data(), data.size());
}
bool RagePhoto::loadFile(const std::string &filename)
{
std::ifstream ifs(filename, std::ios::in | std::ios::binary);
if (ifs.is_open()) {
std::string sdata(std::istreambuf_iterator<char>{ifs}, {});
ifs.close();
return load(sdata);
}
else {
m_data.error = static_cast<uint8_t>(Error::Uninitialised); // 0
return false;
}
}
RagePhoto::Error RagePhoto::error() const
{
return static_cast<Error>(m_data.error);
@ -676,6 +692,29 @@ const std::string RagePhoto::save(bool *ok)
return save(m_data.photoFormat, ok);
}
bool RagePhoto::saveFile(const std::string &filename, uint32_t photoFormat)
{
bool ok;
const std::string sdata = save(photoFormat, &ok);
if (ok) {
std::ofstream ofs(filename, std::ios::out | std::ios::binary | std::ios::trunc);
if (!ofs.is_open()) {
m_data.error = static_cast<uint8_t>(Error::Uninitialised); // 0
return false;
}
ofs << sdata;
ofs.close();
return true;
}
else
return false;
}
bool RagePhoto::saveFile(const std::string &filename)
{
return saveFile(filename, m_data.photoFormat);
}
inline size_t RagePhoto::saveSize(RagePhotoData *ragePhotoData, uint32_t photoFormat)
{
if (photoFormat == PhotoFormat::GTA5)

@ -86,7 +86,7 @@ public:
TitleReadError = 26, /**< Title can't be read */
UnicodeHeaderError = 5, /**< Header can't be decoded */
UnicodeInitError = 4, /**< Failed to initialise Unicode decoder */
Uninitialised = 0, /**< Uninitialised */
Uninitialised = 0, /**< Uninitialised, file access failed */
};
/** Photo Formats */
enum PhotoFormat : uint32_t {
@ -105,6 +105,10 @@ public:
* \param data Photo data
*/
bool load(const std::string &data);
/** Loads a Photo from a file.
* \param filename File to load
*/
bool loadFile(const std::string &filename);
Error error() const; /**< Returns the last error occurred. */
uint32_t format() const; /**< Returns the Photo Format (GTA V or RDR 2). */
const std::string photo() const; /**< Returns the Photo JPEG data. */
@ -132,6 +136,8 @@ public:
* \param ok \p true when saved successfully
*/
const std::string save(bool *ok = nullptr);
bool saveFile(const std::string &filename, uint32_t photoFormat); /**< Saves a Photo to a file. */
bool saveFile(const std::string &filename); /**< Saves a Photo to a file. */
static size_t saveSize(RagePhotoData *ragePhotoData, uint32_t photoFormat); /**< Returns the Photo save file size. */
static size_t saveSize(RagePhotoData *ragePhotoData); /**< Returns the Photo save file size. */
size_t saveSize(uint32_t photoFormat); /**< Returns the Photo save file size. */

Loading…
Cancel
Save