Tag Parser 12.1.0
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
Loading...
Searching...
No Matches
abstractattachment.h
Go to the documentation of this file.
1#ifndef TAG_PARSER_ABSTRACTATTACHMENT_H
2#define TAG_PARSER_ABSTRACTATTACHMENT_H
3
4#include "./diagnostics.h"
5
6#include <functional>
7#include <iostream>
8#include <memory>
9#include <string>
10
11namespace TagParser {
12
13class AbortableProgressFeedback;
14class MediaFileInfo;
15
17public:
18 StreamDataBlock(const std::function<std::istream &()> &stream, uint64_t startOffset = 0, std::ios_base::seekdir startDir = std::ios_base::beg,
19 uint64_t endOffset = 0, std::ios_base::seekdir endDir = std::ios_base::end);
20 virtual ~StreamDataBlock();
21
22 std::istream &stream() const;
23 std::uint64_t startOffset() const;
24 std::uint64_t endOffset() const;
25 std::uint64_t size() const;
26 const std::unique_ptr<char[]> &buffer() const;
27 void makeBuffer() const;
28 void discardBuffer();
29 void copyTo(std::ostream &stream) const;
30
31protected:
33
34 std::function<std::istream &()> m_stream;
35 std::uint64_t m_startOffset;
36 std::uint64_t m_endOffset;
37 mutable std::unique_ptr<char[]> m_buffer;
38};
39
45inline std::istream &StreamDataBlock::stream() const
46{
47 return m_stream();
48}
49
53inline std::uint64_t StreamDataBlock::startOffset() const
54{
55 return m_startOffset;
56}
57
61inline std::uint64_t StreamDataBlock::endOffset() const
62{
63 return m_endOffset;
64}
65
69inline std::uint64_t StreamDataBlock::size() const
70{
72}
73
77inline const std::unique_ptr<char[]> &StreamDataBlock::buffer() const
78{
79 return m_buffer;
80}
81
86{
87 m_buffer.reset();
88}
89
91public:
92 FileDataBlock(std::string_view path, Diagnostics &diag, AbortableProgressFeedback &progress);
94 const MediaFileInfo *fileInfo() const;
95
96private:
97 std::unique_ptr<MediaFileInfo> m_fileInfo;
98};
99
101{
102 return m_fileInfo.get();
103}
104
106
108public:
109 const std::string &description() const;
110 void setDescription(std::string_view description);
111 const std::string &name() const;
112 void setName(std::string_view name);
113 const std::string &mimeType() const;
114 void setMimeType(std::string_view mimeType);
115 std::uint64_t id() const;
116 void setId(std::uint64_t id);
117 const StreamDataBlock *data() const;
118 void setData(std::unique_ptr<StreamDataBlock> &&data);
119 void setFile(std::string_view path, Diagnostics &diag, AbortableProgressFeedback &progress);
120 bool isDataFromFile() const;
121 std::string label() const;
122 void clear();
123 bool isIgnored() const;
124 void setIgnored(bool ignored);
125 bool isEmpty() const;
126
127protected:
128 explicit AbstractAttachment();
129 virtual ~AbstractAttachment();
130
131private:
132 std::string m_description;
133 std::string m_name;
134 std::string m_mimeType;
135 std::uint64_t m_id;
136 std::unique_ptr<StreamDataBlock> m_data;
137 std::unique_ptr<AbstractAttachmentPrivate> m_p;
138 bool m_isDataFromFile;
139 bool m_ignored;
140};
141
145inline const std::string &AbstractAttachment::description() const
146{
147 return m_description;
148}
149
153inline void AbstractAttachment::setDescription(std::string_view description)
154{
155 m_description = description;
156}
157
161inline const std::string &AbstractAttachment::name() const
162{
163 return m_name;
164}
165
169inline void AbstractAttachment::setName(std::string_view name)
170{
171 m_name = name;
172}
173
177inline const std::string &AbstractAttachment::mimeType() const
178{
179 return m_mimeType;
180}
181
185inline void AbstractAttachment::setMimeType(std::string_view mimeType)
186{
187 m_mimeType = mimeType;
188}
189
193inline std::uint64_t AbstractAttachment::id() const
194{
195 return m_id;
196}
197
201inline void AbstractAttachment::setId(uint64_t id)
202{
203 m_id = id;
204}
205
214{
215 return m_data.get();
216}
217
223inline void AbstractAttachment::setData(std::unique_ptr<StreamDataBlock> &&data)
224{
225 m_data = std::move(data);
226 m_isDataFromFile = false;
227}
228
233{
234 return m_isDataFromFile;
235}
236
244{
245 return m_ignored;
246}
247
253inline void AbstractAttachment::setIgnored(bool ignored)
254{
255 m_ignored = ignored;
256}
257
263{
264 return m_description.empty() && m_name.empty() && !m_mimeType.empty() && !m_data;
265}
266
267} // namespace TagParser
268
269#endif // TAG_PARSER_ABSTRACTATTACHMENT_H
The AbortableProgressFeedback class provides feedback about an ongoing operation via callbacks.
The AbstractAttachment class parses and stores attachment information.
bool isEmpty() const
Returns whether the attachment is empty (no data and no meta-data assigned).
void setDescription(std::string_view description)
Sets a description of the attachment.
const std::string & mimeType() const
Returns the MIME-type of the attachment.
const std::string & description() const
Returns a description of the attachment.
void setData(std::unique_ptr< StreamDataBlock > &&data)
Sets the data for the attachment.
const std::string & name() const
Returns the (file) name of the attachment.
std::uint64_t id() const
Returns the ID of the attachment.
bool isDataFromFile() const
Returns whether the assigned data has been assigned using the setFile() method.
void setName(std::string_view name)
Sets the (file) name of the attachment.
void setIgnored(bool ignored)
Sets whether the attachment is ignored/omitted when rewriting the container.
bool isIgnored() const
Returns whether the attachment is ignored/omitted when rewriting the container.
void setId(std::uint64_t id)
Sets the ID of the attachment.
const StreamDataBlock * data() const
Returns a reference to the data of the attachment.
void setMimeType(std::string_view mimeType)
Sets the MIME-type of the attachment.
The Diagnostics class is a container for DiagMessage.
The FileDataBlock class is a reference to a certain data block of a file stream.
const MediaFileInfo * fileInfo() const
The MediaFileInfo class allows to read and write tag information providing a container/tag format ind...
The StreamDataBlock class is a reference to a certain data block of a stream.
std::unique_ptr< char[]> m_buffer
const std::unique_ptr< char[]> & buffer() const
Returns the data buffered via makeBuffer().
std::uint64_t startOffset() const
Returns the absolute start offset of the data block in the stream.
std::uint64_t size() const
Returns the size of the data block.
StreamDataBlock(const std::function< std::istream &()> &stream, uint64_t startOffset=0, std::ios_base::seekdir startDir=std::ios_base::beg, uint64_t endOffset=0, std::ios_base::seekdir endDir=std::ios_base::end)
std::istream & stream() const
Returns the associated stream.
void discardBuffer()
Discards buffered data.
std::uint64_t endOffset() const
Returns the absolute end offset of the data block in the stream.
std::function< std::istream &()> m_stream
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
Definition global.h:13
Contains all classes and functions of the TagInfo library.
Definition aaccodebook.h:10
The AbstractAttachmentPrivate struct contains private fields of the AbstractAttachment class.