diff --git a/ext/libstrawberry-tagreader/tagreadermessages.proto b/ext/libstrawberry-tagreader/tagreadermessages.proto index 2eca21a3d..dadaf3a05 100644 --- a/ext/libstrawberry-tagreader/tagreadermessages.proto +++ b/ext/libstrawberry-tagreader/tagreadermessages.proto @@ -23,6 +23,8 @@ message SongMetadata { DSDIFF = 15; PCM = 16; APE = 17; + MOD = 18; + S3M = 19; CDDA = 90; STREAM = 91; } diff --git a/ext/libstrawberry-tagreader/tagreadertaglib.cpp b/ext/libstrawberry-tagreader/tagreadertaglib.cpp index f83e13a0e..f2bc6d335 100644 --- a/ext/libstrawberry-tagreader/tagreadertaglib.cpp +++ b/ext/libstrawberry-tagreader/tagreadertaglib.cpp @@ -67,6 +67,8 @@ #include #include #include +#include +#include #ifdef HAVE_TAGLIB_DSFFILE # include #endif @@ -163,6 +165,8 @@ spb::tagreader::SongMetadata_FileType TagReaderTagLib::GuessFileType(TagLib::Fil if (dynamic_cast(fileref->file())) return spb::tagreader::SongMetadata_FileType_MPC; if (dynamic_cast(fileref->file())) return spb::tagreader::SongMetadata_FileType_TRUEAUDIO; if (dynamic_cast(fileref->file())) return spb::tagreader::SongMetadata_FileType_APE; + if (dynamic_cast(fileref->file())) return spb::tagreader::SongMetadata_FileType_MOD; + if (dynamic_cast(fileref->file())) return spb::tagreader::SongMetadata_FileType_S3M; #ifdef HAVE_TAGLIB_DSFFILE if (dynamic_cast(fileref->file())) return spb::tagreader::SongMetadata_FileType_DSF; #endif diff --git a/src/core/song.cpp b/src/core/song.cpp index a1cab39d5..5e5de2896 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -598,6 +598,8 @@ QString Song::TextForFiletype(FileType filetype) { case Song::FileType_DSDIFF: return "DSDIFF"; case Song::FileType_PCM: return "PCM"; case Song::FileType_APE: return "Monkey's Audio"; + case Song::FileType_MOD: return "Module Music Format"; + case Song::FileType_S3M: return "Module Music Format"; case Song::FileType_CDDA: return "CDDA"; case Song::FileType_Stream: return "Stream"; case Song::FileType_Unknown: @@ -625,6 +627,8 @@ QString Song::ExtensionForFiletype(FileType filetype) { case Song::FileType_DSF: return "dsf"; case Song::FileType_DSDIFF: return "dsd"; case Song::FileType_APE: return "ape"; + case Song::FileType_MOD: return "mod"; + case Song::FileType_S3M: return "s3m"; case Song::FileType_Unknown: default: return "dat"; } @@ -651,6 +655,8 @@ QIcon Song::IconForFiletype(FileType filetype) { case Song::FileType_DSDIFF: return IconLoader::Load("dsd"); case Song::FileType_PCM: return IconLoader::Load("pcm"); case Song::FileType_APE: return IconLoader::Load("ape"); + case Song::FileType_MOD: return IconLoader::Load("mod"); + case Song::FileType_S3M: return IconLoader::Load("s3m"); case Song::FileType_CDDA: return IconLoader::Load("cd"); case Song::FileType_Stream: return IconLoader::Load("applications-internet"); case Song::FileType_Unknown: @@ -695,6 +701,9 @@ Song::FileType Song::FiletypeByMimetype(const QString &mimetype) { else if (mimetype.compare("audio/x-dsf", Qt::CaseInsensitive) == 0) return Song::FileType_DSF; else if (mimetype.compare("audio/x-dsd", Qt::CaseInsensitive) == 0) return Song::FileType_DSDIFF; else if (mimetype.compare("audio/x-ape", Qt::CaseInsensitive) == 0 || mimetype.compare("application/x-ape", Qt::CaseInsensitive) == 0 || mimetype.compare("audio/x-ffmpeg-parsed-ape", Qt::CaseInsensitive) == 0) return Song::FileType_APE; + else if (mimetype.compare("audio/x-mod", Qt::CaseInsensitive) == 0) return Song::FileType_MOD; + else if (mimetype.compare("audio/x-s3m", Qt::CaseInsensitive) == 0) return Song::FileType_S3M; + else return Song::FileType_Unknown; } @@ -715,6 +724,8 @@ Song::FileType Song::FiletypeByDescription(const QString &text) { else if (text.compare("audio/x-dsf", Qt::CaseInsensitive) == 0) return Song::FileType_DSF; else if (text.compare("audio/x-dsd", Qt::CaseInsensitive) == 0) return Song::FileType_DSDIFF; else if (text.compare("audio/x-ffmpeg-parsed-ape", Qt::CaseInsensitive) == 0) return Song::FileType_APE; + else if (text.compare("Module Music Format (MOD)", Qt::CaseInsensitive) == 0) return Song::FileType_MOD; + else if (text.compare("Module Music Format (MOD)", Qt::CaseInsensitive) == 0) return Song::FileType_S3M; else return Song::FileType_Unknown; } @@ -735,6 +746,12 @@ Song::FileType Song::FiletypeByExtension(const QString &ext) { else if (ext.compare("dsf", Qt::CaseInsensitive) == 0) return Song::FileType_DSF; else if (ext.compare("dsd", Qt::CaseInsensitive) == 0 || ext.compare("dff", Qt::CaseInsensitive) == 0) return Song::FileType_DSDIFF; else if (ext.compare("ape", Qt::CaseInsensitive) == 0) return Song::FileType_APE; + else if (ext.compare("mod", Qt::CaseInsensitive) == 0 || + ext.compare("module", Qt::CaseInsensitive) == 0 || + ext.compare("nst", Qt::CaseInsensitive) == 0|| + ext.compare("wow", Qt::CaseInsensitive) == 0) return Song::FileType_MOD; + else if (ext.compare("s3m", Qt::CaseInsensitive) == 0) return Song::FileType_S3M; + else return Song::FileType_Unknown; } diff --git a/src/core/song.h b/src/core/song.h index 5c82daf0d..6771d7255 100644 --- a/src/core/song.h +++ b/src/core/song.h @@ -102,6 +102,8 @@ class Song { FileType_DSDIFF = 15, FileType_PCM = 16, FileType_APE = 17, + FileType_MOD = 18, + FileType_S3M = 19, FileType_CDDA = 90, FileType_Stream = 91, };