Enforce video/audio extension by mime type.

This commit is contained in:
John Preston 2024-04-16 12:49:10 +04:00
parent abcf55c498
commit 49c9e08b6c
2 changed files with 21 additions and 2 deletions

View file

@ -484,13 +484,13 @@ void DocumentData::setattributes(
|| type == AnimatedDocument || type == AnimatedDocument
|| type == RoundVideoDocument || type == RoundVideoDocument
|| isAnimation()) { || isAnimation()) {
if (_nameType != Type::Video) { if (!enforceNameType(Type::Video)) {
type = FileDocument; type = FileDocument;
_additional = nullptr; _additional = nullptr;
} }
} }
if (type == SongDocument || type == VoiceDocument || isAudioFile()) { if (type == SongDocument || type == VoiceDocument || isAudioFile()) {
if (_nameType != Type::Audio) { if (!enforceNameType(Type::Audio)) {
type = FileDocument; type = FileDocument;
_additional = nullptr; _additional = nullptr;
} }
@ -951,6 +951,24 @@ void DocumentData::setFileName(const QString &remoteFileName) {
_nameType = Core::DetectNameType(_filename); _nameType = Core::DetectNameType(_filename);
} }
bool DocumentData::enforceNameType(Core::NameType nameType) {
if (_nameType == nameType) {
return true;
}
const auto base = _filename.isEmpty() ? u"file"_q : _filename;
const auto mime = Core::MimeTypeForName(mimeString());
const auto patterns = mime.globPatterns();
for (const auto &pattern : mime.globPatterns()) {
const auto now = base + QString(pattern).replace('*', QString());
if (Core::DetectNameType(now) == nameType) {
_filename = now;
_nameType = nameType;
return true;
}
}
return false;
}
void DocumentData::setLoadedInMediaCacheLocation() { void DocumentData::setLoadedInMediaCacheLocation() {
_location = Core::FileLocation(); _location = Core::FileLocation();
_flags |= Flag::LoadedInMediaCache; _flags |= Flag::LoadedInMediaCache;

View file

@ -341,6 +341,7 @@ private:
void setMaybeSupportsStreaming(bool supports); void setMaybeSupportsStreaming(bool supports);
void setLoadedInMediaCacheLocation(); void setLoadedInMediaCacheLocation();
void setFileName(const QString &remoteFileName); void setFileName(const QString &remoteFileName);
bool enforceNameType(Core::NameType nameType);
void finishLoad(); void finishLoad();
void handleLoaderUpdates(); void handleLoaderUpdates();