1 /*
2  *  Copyright (C) 2013-2018 Team Kodi
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: GPL-2.0-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include <map>
12 #include <set>
13 #include <string>
14 
15 using MediaType = std::string;
16 
17 #define MediaTypeNone             ""
18 #define MediaTypeMusic            "music"
19 #define MediaTypeArtist           "artist"
20 #define MediaTypeAlbum            "album"
21 #define MediaTypeSong             "song"
22 #define MediaTypeVideo            "video"
23 #define MediaTypeVideoCollection  "set"
24 #define MediaTypeMusicVideo       "musicvideo"
25 #define MediaTypeMovie            "movie"
26 #define MediaTypeTvShow           "tvshow"
27 #define MediaTypeSeason           "season"
28 #define MediaTypeEpisode          "episode"
29 
30 class CMediaTypes
31 {
32 public:
33   static bool IsValidMediaType(const MediaType &mediaType);
34   static bool IsMediaType(const std::string &strMediaType, const MediaType &mediaType);
35   static MediaType FromString(const std::string &strMediaType);
36   static MediaType ToPlural(const MediaType &mediaType);
37 
38   static bool IsContainer(const MediaType &mediaType);
39 
40   static std::string GetLocalization(const MediaType &mediaType);
41   static std::string GetPluralLocalization(const MediaType &mediaType);
42   static std::string GetCapitalLocalization(const MediaType &mediaType);
43   static std::string GetCapitalPluralLocalization(const MediaType &mediaType);
44 
45   typedef struct MediaTypeInfo {
MediaTypeInfoMediaTypeInfo46     MediaTypeInfo(const MediaType &mediaType, const std::string &plural, bool container,
47                   int localizationSingular, int localizationPlural,
48                   int localizationSingularCapital, int localizationPluralCapital)
49       : mediaType(mediaType),
50         plural(plural),
51         container(container),
52         localizationSingular(localizationSingular),
53         localizationPlural(localizationPlural),
54         localizationSingularCapital(localizationSingularCapital),
55         localizationPluralCapital(localizationPluralCapital)
56     { }
57 
58     MediaType mediaType;
59     std::string plural;
60     bool container;
61     int localizationSingular;
62     int localizationPlural;
63     int localizationSingularCapital;
64     int localizationPluralCapital;
65   } MediaTypeInfo;
66 
67 private:
68   static std::map<std::string, MediaTypeInfo>::const_iterator findMediaType(const std::string &mediaType);
69 
70   static std::map<std::string, MediaTypeInfo> m_mediaTypes;
71 };
72