19namespace network_manager
29 std::memcpy(mData.data(), data,
size);
34 return static_cast<int64_t
>(mData.size());
42 size_t Read(
void* buffer,
size_t maxBytes)
override
44 const size_t availableBytes = mData.size() - mOffset;
46 maxBytes =
std::min(maxBytes, availableBytes);
48 std::memcpy(buffer, mData.data() + mOffset, maxBytes);
55 bool Seek(int64_t offset,
int origin)
override
60 if (offset <= GetSize())
68 const int64_t targetOffset = offset + mOffset;
70 if (targetOffset >= 0 && targetOffset < GetSize())
72 mOffset = targetOffset;
79 const int64_t targetOffset = GetSize() + offset;
81 if (targetOffset >= 0 && targetOffset < GetSize())
83 mOffset = targetOffset;
104 : mFileName(fileName)
106 if (!fileName.FileExists())
109 XO(
"Failed to open the file for upload: %s")
110 .
Format(fileName.GetFullPath()));
113 if (!mFile.Open(fileName.GetFullPath()))
117 XO(
"Failed to open the file for upload: %s")
118 .
Format(fileName.GetFullPath()));
124 return static_cast<int64_t
>(mFileName.GetSize().GetValue());
129 return static_cast<size_t>(mFile.Tell());
132 size_t Read(
void* buffer,
size_t maxBytes)
override
134 const auto bytesRead = mFile.Read(buffer, maxBytes);
136 if (bytesRead == wxInvalidOffset)
139 return static_cast<size_t>(bytesRead);
142 bool Seek(int64_t offset,
int origin = SEEK_SET)
override
144 static constexpr wxSeekMode map[] = { wxFromStart, wxFromCurrent,
147 if (origin < SEEK_SET || origin > SEEK_END)
150 return wxInvalidOffset != mFile.Seek(offset, map[origin]);
160 const std::string& headerName,
const std::string& headerValue)
182 Add(
name, {}, value.data(), value.length());
186 std::string_view
name, std::string_view contentType,
const void* value,
189 mParts.emplace_back(std::make_unique<ByteBufferPart>(value,
size));
191 mParts.back()->SetContentDisposition(
"form-data; name=\"" + std::string(
name) +
"\"");
193 if (!contentType.empty())
194 mParts.back()->SetContentType(std::string(contentType));
198 std::string_view
name, std::string_view contentType,
199 const wxFileName& fileName)
201 mParts.emplace_back(std::make_unique<FilePart>(fileName));
203 mParts.back()->SetContentDisposition(
204 "form-data; name=\"" + std::string(
name) +
"\"; filename=\"" +
205 fileName.GetFullName().ToUTF8().data() +
"\"");
207 if (!contentType.empty())
208 mParts.back()->SetContentType(std::string(contentType));
Declare abstract class AudacityException, some often-used subclasses, and GuardedCall.
@ BadUserAction
Indicates that the user performed an action that is not allowed.
const TranslatableString name
A MessageBoxException that shows a given, unvarying string.
void SetContentType(const std::string &mimeType)
const HeadersList & GetHeaders() const
void SetContentDisposition(const std::string &disposition)
void SetHeader(const std::string &headerName, const std::string &headerValue)
void Add(std::string_view name, std::string_view value)
void AddFile(std::string_view name, std::string_view contentType, const wxFileName &fileName)
std::vector< std::unique_ptr< Part > > mParts
Part * GetPart(size_t idx)
size_t GetPartsCount() const
size_t Read(void *buffer, size_t maxBytes) override
std::vector< uint8_t > mData
ByteBufferPart(const void *data, size_t size)
int64_t GetSize() const override
size_t GetOffset() const override
bool Seek(int64_t offset, int origin) override
bool Seek(int64_t offset, int origin=SEEK_SET) override
int64_t GetSize() const override
FilePart(const wxFileName &fileName)
size_t GetOffset() const override
size_t Read(void *buffer, size_t maxBytes) override