Tag Parser  6.5.1
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
abstractattachment.h
Go to the documentation of this file.
1 #ifndef MEDIA_ABSTRACTATTACHMENT_H
2 #define MEDIA_ABSTRACTATTACHMENT_H
3 
4 #include "./statusprovider.h"
5 
6 #include <string>
7 #include <iostream>
8 #include <functional>
9 #include <memory>
10 
11 namespace Media {
12 
13 class MediaFileInfo;
14 
16 {
17 public:
18  StreamDataBlock(const std::function<std::istream & ()> &stream,
19  std::istream::off_type startOffset = 0, std::ios_base::seekdir startDir = std::ios_base::beg,
20  std::istream::off_type endOffset = 0, std::ios_base::seekdir endDir = std::ios_base::end);
21 
22  std::istream &stream() const;
23  std::istream::pos_type startOffset() const;
24  std::istream::pos_type endOffset() const;
25  std::istream::pos_type 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 
31 protected:
33 
34  std::function<std::istream & ()> m_stream;
35  std::istream::pos_type m_startOffset;
36  std::istream::pos_type m_endOffset;
37  mutable std::unique_ptr<char[]> m_buffer;
38 };
39 
45 inline std::istream &StreamDataBlock::stream() const
46 {
47  return m_stream();
48 }
49 
53 inline std::istream::pos_type StreamDataBlock::startOffset() const
54 {
55  return m_startOffset;
56 }
57 
61 inline std::istream::pos_type StreamDataBlock::endOffset() const
62 {
63  return m_endOffset;
64 }
65 
69 inline std::istream::pos_type StreamDataBlock::size() const
70 {
71  return m_endOffset - m_startOffset;
72 }
73 
77 inline const std::unique_ptr<char[]> &StreamDataBlock::buffer() const
78 {
79  return m_buffer;
80 }
81 
86 {
87  m_buffer.reset();
88 }
89 
91 {
92 public:
93  FileDataBlock(const std::string &path);
94  const MediaFileInfo *fileInfo() const;
95 
96 private:
97  std::unique_ptr<MediaFileInfo> m_fileInfo;
98 };
99 
101 {
102  return m_fileInfo.get();
103 }
104 
106 {
107 public:
108  const std::string &description() const;
109  void setDescription(const std::string &description);
110  const std::string &name() const;
111  void setName(const std::string &name);
112  const std::string &mimeType() const;
113  void setMimeType(const std::string &mimeType);
114  uint64 id() const;
115  void setId(const uint64 &id);
116  const StreamDataBlock *data() const;
117  void setData(std::unique_ptr<StreamDataBlock> &&data);
118  void setFile(const std::string &path);
119  bool isDataFromFile() const;
120  std::string label() const;
121  void clear();
122  bool isIgnored() const;
123  void setIgnored(bool ignored);
124  bool isEmpty() const;
125 
126 protected:
128 
129 private:
130  std::string m_description;
131  std::string m_name;
132  std::string m_mimeType;
133  uint64 m_id;
134  std::unique_ptr<StreamDataBlock> m_data;
135  bool m_isDataFromFile;
136  bool m_ignored;
137 };
138 
143  m_id(0),
144  m_isDataFromFile(false),
145  m_ignored(false)
146 {}
147 
151 inline const std::string &AbstractAttachment::description() const
152 {
153  return m_description;
154 }
155 
159 inline void AbstractAttachment::setDescription(const std::string &description)
160 {
161  m_description = description;
162 }
163 
167 inline const std::string &AbstractAttachment::name() const
168 {
169  return m_name;
170 }
171 
175 inline void AbstractAttachment::setName(const std::string &name)
176 {
177  m_name = name;
178 }
179 
183 inline const std::string &AbstractAttachment::mimeType() const
184 {
185  return m_mimeType;
186 }
187 
191 inline void AbstractAttachment::setMimeType(const std::string &mimeType)
192 {
193  m_mimeType = mimeType;
194 }
195 
199 inline uint64 AbstractAttachment::id() const
200 {
201  return m_id;
202 }
203 
207 inline void AbstractAttachment::setId(const uint64 &id)
208 {
209  m_id = id;
210 }
211 
220 {
221  return m_data.get();
222 }
223 
229 inline void AbstractAttachment::setData(std::unique_ptr<StreamDataBlock> &&data)
230 {
231  m_data = std::move(data);
232  m_isDataFromFile = false;
233 }
234 
239 {
240  return m_isDataFromFile;
241 }
242 
249 inline bool AbstractAttachment::isIgnored() const
250 {
251  return m_ignored;
252 }
253 
259 inline void AbstractAttachment::setIgnored(bool ignored)
260 {
261  m_ignored = ignored;
262 }
263 
268 inline bool AbstractAttachment::isEmpty() const
269 {
270  return m_description.empty() && m_name.empty() && !m_mimeType.empty() && !m_data;
271 }
272 
273 } // namespace Media
274 
275 #endif // MEDIA_ABSTRACTATTACHMENT_H
std::istream::pos_type endOffset() const
Returns the absolute end offset of the data block in the stream.
const std::string & mimeType() const
Returns the MIME-type of the attachment.
std::istream::pos_type m_startOffset
bool isIgnored() const
Returns whether the attachment is ignored/omitted when rewriting the container.
bool isEmpty() const
Returns whether the attachment is empty (no data and no meta-data assigned).
const MediaFileInfo * fileInfo() const
const StreamDataBlock * data() const
Returns a reference to the data of the attachment.
void setId(const uint64 &id)
Sets the ID of the attachment.
The StreamDataBlock class is a reference to a certain data block of a stream.
std::unique_ptr< char[]> m_buffer
std::istream::pos_type startOffset() const
Returns the absolute start offset of the data block in the stream.
void setIgnored(bool ignored)
Sets whether the attachment is ignored/omitted when rewriting the container.
The AbstractAttachment class parses and stores attachment information.
const std::string & description() const
Returns a description of the attachment.
The MediaFileInfo class allows to read and write tag information providing a container/tag format ind...
Definition: mediafileinfo.h:53
const std::unique_ptr< char[]> & buffer() const
Returns the data buffered via makeBuffer().
TAG_PARSER_EXPORT const char * description()
std::istream::pos_type m_endOffset
const std::string & name() const
Returns the (file) name of the attachment.
std::istream & stream() const
Returns the associated stream.
void setName(const std::string &name)
Sets the (file) name of the attachment.
void setMimeType(const std::string &mimeType)
Sets the MIME-type of the attachment.
uint64 id() const
Returns the ID of the attachment.
bool isDataFromFile() const
Returns whether the assigned data has been assigned using the setFile() method.
void discardBuffer()
Discards buffered data.
Contains all classes and functions of the TagInfo library.
Definition: exceptions.h:9
std::istream::pos_type size() const
Returns the size of the data block.
void setData(std::unique_ptr< StreamDataBlock > &&data)
Sets the data for the attachment.
The StatusProvider class acts as a base class for objects providing status information.
AbstractAttachment()
Constructs a new attachment.
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
std::function< std::istream &()> m_stream
void setDescription(const std::string &description)
Sets a description of the attachment.
The FileDataBlock class is a reference to a certain data block of a file stream.