Replace boolean fields in MediaFileInfo with flag enums
This commit is contained in:
parent
0e29c98b9f
commit
32cd02217b
|
@ -85,7 +85,8 @@ MediaFileInfo::MediaFileInfo(std::string &&path)
|
|||
, m_containerParsingStatus(ParsingStatus::NotParsedYet)
|
||||
, m_containerFormat(ContainerFormat::Unknown)
|
||||
, m_containerOffset(0)
|
||||
, m_actualExistingId3v1Tag(false)
|
||||
, m_paddingSize(0)
|
||||
, m_fileStructureFlags(MediaFileStructureFlags::None)
|
||||
, m_tracksParsingStatus(ParsingStatus::NotParsedYet)
|
||||
, m_tagsParsingStatus(ParsingStatus::NotParsedYet)
|
||||
, m_chaptersParsingStatus(ParsingStatus::NotParsedYet)
|
||||
|
@ -95,10 +96,8 @@ MediaFileInfo::MediaFileInfo(std::string &&path)
|
|||
, m_preferredPadding(0)
|
||||
, m_tagPosition(ElementPosition::BeforeData)
|
||||
, m_indexPosition(ElementPosition::BeforeData)
|
||||
, m_forceFullParse(MEDIAINFO_CPP_FORCE_FULL_PARSE)
|
||||
, m_forceRewrite(true)
|
||||
, m_forceTagPosition(true)
|
||||
, m_forceIndexPosition(true)
|
||||
, m_fileHandlingFlags((MEDIAINFO_CPP_FORCE_FULL_PARSE ? MediaFileHandlingFlags::ForceFullParse : MediaFileHandlingFlags::None)
|
||||
| MediaFileHandlingFlags::ForceRewrite | MediaFileHandlingFlags::ForceTagPosition | MediaFileHandlingFlags::ForceIndexPosition)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -238,7 +237,7 @@ startParsingSignature:
|
|||
} else if (container->documentType() == "webm") {
|
||||
m_containerFormat = ContainerFormat::Webm;
|
||||
}
|
||||
if (m_forceFullParse) {
|
||||
if (isForcingFullParse()) {
|
||||
// validating the element structure of Matroska files takes too long when
|
||||
// parsing big files so do this only when explicitely desired
|
||||
container->validateElementStructure(diag, progress, &m_paddingSize);
|
||||
|
@ -255,7 +254,7 @@ startParsingSignature:
|
|||
case ContainerFormat::Ogg:
|
||||
// Ogg is handled by OggContainer instance
|
||||
m_container = make_unique<OggContainer>(*this, m_containerOffset);
|
||||
static_cast<OggContainer *>(m_container.get())->setChecksumValidationEnabled(m_forceFullParse);
|
||||
static_cast<OggContainer *>(m_container.get())->setChecksumValidationEnabled(isForcingFullParse());
|
||||
break;
|
||||
case ContainerFormat::Unknown:
|
||||
// check for magic numbers at odd offsets
|
||||
|
@ -387,7 +386,7 @@ void MediaFileInfo::parseTags(Diagnostics &diag, AbortableProgressFeedback &prog
|
|||
try {
|
||||
stream().seekg(-128, ios_base::end);
|
||||
m_id3v1Tag->parse(stream(), diag);
|
||||
m_actualExistingId3v1Tag = true;
|
||||
m_fileStructureFlags += MediaFileStructureFlags::ActualExistingId3v1Tag;
|
||||
} catch (const NoDataFoundException &) {
|
||||
m_id3v1Tag.reset();
|
||||
} catch (const OperationAbortedException &) {
|
||||
|
@ -1331,7 +1330,7 @@ void MediaFileInfo::clearParsingResults()
|
|||
m_id3v1Tag.reset();
|
||||
m_id3v2Tags.clear();
|
||||
m_actualId3v2TagOffsets.clear();
|
||||
m_actualExistingId3v1Tag = false;
|
||||
m_fileStructureFlags = MediaFileStructureFlags::None;
|
||||
m_container.reset();
|
||||
m_singleTrack.reset();
|
||||
}
|
||||
|
@ -1540,7 +1539,7 @@ void MediaFileInfo::makeMp3File(Diagnostics &diag, AbortableProgressFeedback &pr
|
|||
// alter ID3v1 tag
|
||||
if (!m_id3v1Tag) {
|
||||
// remove ID3v1 tag
|
||||
if (!m_actualExistingId3v1Tag) {
|
||||
if (!(m_fileStructureFlags & MediaFileStructureFlags::ActualExistingId3v1Tag)) {
|
||||
diag.emplace_back(DiagLevel::Information, "Nothing to be changed.", context);
|
||||
return;
|
||||
}
|
||||
|
@ -1555,7 +1554,7 @@ void MediaFileInfo::makeMp3File(Diagnostics &diag, AbortableProgressFeedback &pr
|
|||
return;
|
||||
} else {
|
||||
// add or update ID3v1 tag
|
||||
if (m_actualExistingId3v1Tag) {
|
||||
if (m_fileStructureFlags & MediaFileStructureFlags::ActualExistingId3v1Tag) {
|
||||
progress.updateStep("Updating existing ID3v1 tag ...");
|
||||
// ensure the file is still open / not readonly
|
||||
open();
|
||||
|
@ -1740,7 +1739,7 @@ void MediaFileInfo::makeMp3File(Diagnostics &diag, AbortableProgressFeedback &pr
|
|||
// copy / skip actual stream data
|
||||
// -> determine media data size
|
||||
std::uint64_t mediaDataSize = size() - streamOffset;
|
||||
if (m_actualExistingId3v1Tag) {
|
||||
if (m_fileStructureFlags & MediaFileStructureFlags::ActualExistingId3v1Tag) {
|
||||
mediaDataSize -= 128;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
#include <unordered_set>
|
||||
#include <vector>
|
||||
|
||||
#include <c++utilities/misc/flagenumclass.h>
|
||||
|
||||
namespace TagParser {
|
||||
|
||||
class Tag;
|
||||
|
@ -42,6 +44,33 @@ enum class ParsingStatus : std::uint8_t {
|
|||
CriticalFailure /**< tried to parse the part, but critical errors occurred */
|
||||
};
|
||||
|
||||
/*!
|
||||
* \brief The MediaFileStructureFlags enum specifies flags which describing the structure of a media file.
|
||||
*/
|
||||
enum class MediaFileStructureFlags : std::uint64_t {
|
||||
None, /**< all flags disabled */
|
||||
ActualExistingId3v1Tag = (1 << 0), /**< whether an ID3v1 tag was found when parsing the file */
|
||||
};
|
||||
|
||||
/*!
|
||||
* \brief The MediaFileHandlingFlags enum specifies flags which controls the behavior of MediaFileInfo objects.
|
||||
*/
|
||||
enum class MediaFileHandlingFlags : std::uint64_t {
|
||||
None, /**< all flags disabled */
|
||||
ForceFullParse
|
||||
= (1 << 0), /**< causes the parser to analyse the file strucutre as deep as possible; might cause long loading times for big files */
|
||||
ForceRewrite = (1 << 1), /**< enforces a re-write of the file when applying changes */
|
||||
ForceTagPosition = (1 << 2), /**< enforces the tag position when applying changes, see remarks of MediaFileInfo::setTagPosition() */
|
||||
ForceIndexPosition = (1 << 3), /**< enforces the index position when applying changes, see remarks of MediaFileInfo::setIndexPosition() */
|
||||
};
|
||||
|
||||
} // namespace TagParser
|
||||
|
||||
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(TagParser, TagParser::MediaFileStructureFlags)
|
||||
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(TagParser, TagParser::MediaFileHandlingFlags)
|
||||
|
||||
namespace TagParser {
|
||||
|
||||
class TAG_PARSER_EXPORT MediaFileInfo : public BasicFileInfo {
|
||||
public:
|
||||
// constructor, destructor
|
||||
|
@ -164,9 +193,9 @@ private:
|
|||
ContainerFormat m_containerFormat;
|
||||
std::streamoff m_containerOffset;
|
||||
std::uint64_t m_paddingSize;
|
||||
bool m_actualExistingId3v1Tag;
|
||||
std::vector<std::streamoff> m_actualId3v2TagOffsets;
|
||||
std::unique_ptr<AbstractContainer> m_container;
|
||||
MediaFileStructureFlags m_fileStructureFlags;
|
||||
|
||||
// fields related to the tracks
|
||||
ParsingStatus m_tracksParsingStatus;
|
||||
|
@ -190,10 +219,7 @@ private:
|
|||
std::size_t m_preferredPadding;
|
||||
ElementPosition m_tagPosition;
|
||||
ElementPosition m_indexPosition;
|
||||
bool m_forceFullParse;
|
||||
bool m_forceRewrite;
|
||||
bool m_forceTagPosition;
|
||||
bool m_forceIndexPosition;
|
||||
MediaFileHandlingFlags m_fileHandlingFlags;
|
||||
};
|
||||
|
||||
/*!
|
||||
|
@ -454,7 +480,7 @@ inline AbstractContainer *MediaFileInfo::container() const
|
|||
*/
|
||||
inline bool MediaFileInfo::isForcingFullParse() const
|
||||
{
|
||||
return m_forceFullParse;
|
||||
return m_fileHandlingFlags & MediaFileHandlingFlags::ForceFullParse;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -464,7 +490,7 @@ inline bool MediaFileInfo::isForcingFullParse() const
|
|||
*/
|
||||
inline void MediaFileInfo::setForceFullParse(bool forceFullParse)
|
||||
{
|
||||
m_forceFullParse = forceFullParse;
|
||||
CppUtilities::modFlagEnum(m_fileHandlingFlags, MediaFileHandlingFlags::ForceFullParse, forceFullParse);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -472,7 +498,7 @@ inline void MediaFileInfo::setForceFullParse(bool forceFullParse)
|
|||
*/
|
||||
inline bool MediaFileInfo::isForcingRewrite() const
|
||||
{
|
||||
return m_forceRewrite;
|
||||
return m_fileHandlingFlags & MediaFileHandlingFlags::ForceRewrite;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -480,7 +506,7 @@ inline bool MediaFileInfo::isForcingRewrite() const
|
|||
*/
|
||||
inline void MediaFileInfo::setForceRewrite(bool forceRewrite)
|
||||
{
|
||||
m_forceRewrite = forceRewrite;
|
||||
CppUtilities::modFlagEnum(m_fileHandlingFlags, MediaFileHandlingFlags::ForceRewrite, forceRewrite);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -591,7 +617,7 @@ inline void MediaFileInfo::setTagPosition(ElementPosition tagPosition)
|
|||
*/
|
||||
inline bool MediaFileInfo::forceTagPosition() const
|
||||
{
|
||||
return m_forceTagPosition;
|
||||
return m_fileHandlingFlags & MediaFileHandlingFlags::ForceTagPosition;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -601,7 +627,7 @@ inline bool MediaFileInfo::forceTagPosition() const
|
|||
*/
|
||||
inline void MediaFileInfo::setForceTagPosition(bool forceTagPosition)
|
||||
{
|
||||
m_forceTagPosition = forceTagPosition;
|
||||
CppUtilities::modFlagEnum(m_fileHandlingFlags, MediaFileHandlingFlags::ForceTagPosition, forceTagPosition);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -631,7 +657,7 @@ inline void MediaFileInfo::setIndexPosition(ElementPosition indexPosition)
|
|||
*/
|
||||
inline bool MediaFileInfo::forceIndexPosition() const
|
||||
{
|
||||
return m_forceIndexPosition;
|
||||
return m_fileHandlingFlags & MediaFileHandlingFlags::ForceIndexPosition;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -641,7 +667,7 @@ inline bool MediaFileInfo::forceIndexPosition() const
|
|||
*/
|
||||
inline void MediaFileInfo::setForceIndexPosition(bool forceIndexPosition)
|
||||
{
|
||||
m_forceIndexPosition = forceIndexPosition;
|
||||
CppUtilities::modFlagEnum(m_fileHandlingFlags, MediaFileHandlingFlags::ForceIndexPosition, forceIndexPosition);
|
||||
}
|
||||
|
||||
} // namespace TagParser
|
||||
|
|
Loading…
Reference in New Issue