Merge pull request #26350 from jjd-uk/estuary_media_align
[xbmc.git] / xbmc / media / MediaType.cpp
blob8318aa55d15d783dbfb42f5fcff116edc16ab5a2
1 /*
2 * Copyright (C) 2013-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "MediaType.h"
11 #include "guilib/LocalizeStrings.h"
12 #include "utils/StringUtils.h"
14 #include <utility>
16 static std::map<std::string, CMediaTypes::MediaTypeInfo> fillDefaultMediaTypes()
18 std::map<std::string, CMediaTypes::MediaTypeInfo> mediaTypes;
20 // clang-format off
21 mediaTypes.insert(std::make_pair(MediaTypeMusic, CMediaTypes::MediaTypeInfo(MediaTypeMusic, MediaTypeMusic, true, 36914, 36915, 249, 249)));
22 mediaTypes.insert(std::make_pair(MediaTypeArtist, CMediaTypes::MediaTypeInfo(MediaTypeArtist, MediaTypeArtist "s", true, 36916, 36917, 557, 133)));
23 mediaTypes.insert(std::make_pair(MediaTypeAlbum, CMediaTypes::MediaTypeInfo(MediaTypeAlbum, MediaTypeAlbum "s", true, 36918, 36919, 558, 132)));
24 mediaTypes.insert(std::make_pair(MediaTypeSong, CMediaTypes::MediaTypeInfo(MediaTypeSong, MediaTypeSong "s", false, 36920, 36921, 179, 134)));
25 mediaTypes.insert(std::make_pair(MediaTypeVideo, CMediaTypes::MediaTypeInfo(MediaTypeVideo, MediaTypeVideo "s", true, 36912, 36913, 291, 3)));
26 mediaTypes.insert(std::make_pair(MediaTypeVideoCollection, CMediaTypes::MediaTypeInfo(MediaTypeVideoCollection, MediaTypeVideoCollection "s", true, 36910, 36911, 20141, 20434)));
27 mediaTypes.insert(std::make_pair(MediaTypeMusicVideo, CMediaTypes::MediaTypeInfo(MediaTypeMusicVideo, MediaTypeMusicVideo "s", false, 36908, 36909, 20391, 20389)));
28 mediaTypes.insert(std::make_pair(MediaTypeMovie, CMediaTypes::MediaTypeInfo(MediaTypeMovie, MediaTypeMovie "s", false, 36900, 36901, 20338, 20342)));
29 mediaTypes.insert(std::make_pair(MediaTypeTvShow, CMediaTypes::MediaTypeInfo(MediaTypeTvShow, MediaTypeTvShow "s", true, 36902, 36903, 36902, 36903)));
30 mediaTypes.insert(std::make_pair(MediaTypeSeason, CMediaTypes::MediaTypeInfo(MediaTypeSeason, MediaTypeSeason "s", true, 36904, 36905, 20373, 33054)));
31 mediaTypes.insert(std::make_pair(MediaTypeEpisode, CMediaTypes::MediaTypeInfo(MediaTypeEpisode, MediaTypeEpisode "s", false, 36906, 36907, 20359, 20360)));
32 mediaTypes.insert(std::make_pair(MediaTypeVideoVersion, CMediaTypes::MediaTypeInfo(MediaTypeVideoVersion, MediaTypeVideoVersion "s", false, 40010, 40011, 40012, 40013)));
33 // clang-format on
35 return mediaTypes;
38 std::map<std::string, CMediaTypes::MediaTypeInfo> CMediaTypes::m_mediaTypes = fillDefaultMediaTypes();
40 bool CMediaTypes::IsValidMediaType(const MediaType &mediaType)
42 return findMediaType(mediaType) != m_mediaTypes.end();
45 bool CMediaTypes::IsMediaType(const std::string &strMediaType, const MediaType &mediaType)
47 std::map<std::string, MediaTypeInfo>::const_iterator strMediaTypeIt = findMediaType(strMediaType);
48 std::map<std::string, MediaTypeInfo>::const_iterator mediaTypeIt = findMediaType(mediaType);
50 return strMediaTypeIt != m_mediaTypes.end() && mediaTypeIt != m_mediaTypes.end() &&
51 strMediaTypeIt->first.compare(mediaTypeIt->first) == 0;
54 MediaType CMediaTypes::FromString(const std::string &strMediaType)
56 std::map<std::string, MediaTypeInfo>::const_iterator mediaTypeIt = findMediaType(strMediaType);
57 if (mediaTypeIt == m_mediaTypes.end())
58 return MediaTypeNone;
60 return mediaTypeIt->first;
63 MediaType CMediaTypes::ToPlural(const MediaType &mediaType)
65 std::map<std::string, MediaTypeInfo>::const_iterator mediaTypeIt = findMediaType(mediaType);
66 if (mediaTypeIt == m_mediaTypes.end())
67 return MediaTypeNone;
69 return mediaTypeIt->second.plural;
72 bool CMediaTypes::IsContainer(const MediaType &mediaType)
74 std::map<std::string, MediaTypeInfo>::const_iterator mediaTypeIt = findMediaType(mediaType);
75 if (mediaTypeIt == m_mediaTypes.end())
76 return false;
78 return mediaTypeIt->second.container;
81 std::map<std::string, CMediaTypes::MediaTypeInfo>::const_iterator CMediaTypes::findMediaType(const std::string &mediaType)
83 std::string strMediaType = mediaType;
84 StringUtils::ToLower(strMediaType);
86 std::map<std::string, MediaTypeInfo>::const_iterator it = m_mediaTypes.find(strMediaType);
87 if (it != m_mediaTypes.end())
88 return it;
90 for (it = m_mediaTypes.begin(); it != m_mediaTypes.end(); ++it)
92 if (strMediaType.compare(it->second.plural) == 0)
93 return it;
96 return m_mediaTypes.end();
99 std::string CMediaTypes::GetLocalization(const MediaType &mediaType)
101 std::map<std::string, MediaTypeInfo>::const_iterator mediaTypeIt = findMediaType(mediaType);
102 if (mediaTypeIt == m_mediaTypes.end() ||
103 mediaTypeIt->second.localizationSingular <= 0)
104 return "";
106 return g_localizeStrings.Get(mediaTypeIt->second.localizationSingular);
109 std::string CMediaTypes::GetPluralLocalization(const MediaType &mediaType)
111 std::map<std::string, MediaTypeInfo>::const_iterator mediaTypeIt = findMediaType(mediaType);
112 if (mediaTypeIt == m_mediaTypes.end() ||
113 mediaTypeIt->second.localizationPlural <= 0)
114 return "";
116 return g_localizeStrings.Get(mediaTypeIt->second.localizationPlural);
119 std::string CMediaTypes::GetCapitalLocalization(const MediaType &mediaType)
121 std::map<std::string, MediaTypeInfo>::const_iterator mediaTypeIt = findMediaType(mediaType);
122 if (mediaTypeIt == m_mediaTypes.end() ||
123 mediaTypeIt->second.localizationSingular <= 0)
124 return "";
126 return g_localizeStrings.Get(mediaTypeIt->second.localizationSingularCapital);
129 std::string CMediaTypes::GetCapitalPluralLocalization(const MediaType &mediaType)
131 std::map<std::string, MediaTypeInfo>::const_iterator mediaTypeIt = findMediaType(mediaType);
132 if (mediaTypeIt == m_mediaTypes.end() ||
133 mediaTypeIt->second.localizationPlural <= 0)
134 return "";
136 return g_localizeStrings.Get(mediaTypeIt->second.localizationPluralCapital);