[PVR][Estuary] Timer settings dialog: Show client name in timer type selection dialog...
[xbmc.git] / xbmc / utils / DatabaseUtils.h
blobc9bf6a6fa24efda7e31bc5ec9762076925308f5b
1 /*
2 * Copyright (C) 2012-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 #pragma once
11 #include "media/MediaType.h"
13 #include <map>
14 #include <memory>
15 #include <set>
16 #include <string>
17 #include <vector>
19 class CVariant;
20 enum class VideoDbContentType;
22 namespace dbiplus
24 class Dataset;
25 class field_value;
28 typedef enum
30 // special fields used during sorting
31 FieldUnknown = -1,
32 FieldNone = 0,
33 FieldSort, // used to store the string to use for sorting
34 FieldSortSpecial, // whether the item needs special handling (0 = no, 1 = sort on top, 2 = sort on bottom)
35 FieldLabel,
36 FieldFolder,
37 FieldMediaType,
38 FieldRow, // the row number in a dataset
40 // special fields not retrieved from the database
41 FieldSize,
42 FieldDate,
43 FieldDriveType,
44 FieldStartOffset,
45 FieldEndOffset,
46 FieldProgramCount,
47 FieldBitrate,
48 FieldListeners,
49 FieldPlaylist,
50 FieldVirtualFolder,
51 FieldRandom,
52 FieldDateTaken,
53 FieldAudioCount,
54 FieldSubtitleCount,
56 FieldInstallDate,
57 FieldLastUpdated,
58 FieldLastUsed,
60 // fields retrievable from the database
61 FieldId,
62 FieldGenre,
63 FieldAlbum,
64 FieldDiscTitle,
65 FieldIsBoxset,
66 FieldTotalDiscs,
67 FieldOrigYear,
68 FieldOrigDate,
69 FieldArtist,
70 FieldArtistSort,
71 FieldAlbumArtist,
72 FieldTitle,
73 FieldSortTitle,
74 FieldOriginalTitle,
75 FieldYear,
76 FieldTime,
77 FieldTrackNumber,
78 FieldFilename,
79 FieldPath,
80 FieldPlaycount,
81 FieldLastPlayed,
82 FieldInProgress,
83 FieldRating,
84 FieldComment,
85 FieldRole,
86 FieldDateAdded,
87 FieldDateModified,
88 FieldDateNew,
89 FieldTvShowTitle,
90 FieldPlot,
91 FieldPlotOutline,
92 FieldTagline,
93 FieldTvShowStatus,
94 FieldVotes,
95 FieldDirector,
96 FieldActor,
97 FieldStudio,
98 FieldCountry,
99 FieldMPAA,
100 FieldTop250,
101 FieldSet,
102 FieldNumberOfEpisodes,
103 FieldNumberOfWatchedEpisodes,
104 FieldWriter,
105 FieldAirDate,
106 FieldEpisodeNumber,
107 FieldUniqueId,
108 FieldSeason,
109 FieldEpisodeNumberSpecialSort,
110 FieldSeasonSpecialSort,
111 FieldReview,
112 FieldThemes,
113 FieldMoods,
114 FieldStyles,
115 FieldAlbumType,
116 FieldMusicLabel,
117 FieldCompilation,
118 FieldSource,
119 FieldTrailer,
120 FieldVideoResolution,
121 FieldVideoAspectRatio,
122 FieldVideoCodec,
123 FieldAudioChannels,
124 FieldAudioCodec,
125 FieldAudioLanguage,
126 FieldSubtitleLanguage,
127 FieldProductionCode,
128 FieldTag,
129 FieldChannelName,
130 FieldChannelNumber,
131 FieldInstruments,
132 FieldBiography,
133 FieldArtistType,
134 FieldGender,
135 FieldDisambiguation,
136 FieldBorn,
137 FieldBandFormed,
138 FieldDisbanded,
139 FieldDied,
140 FieldStereoMode,
141 FieldUserRating,
142 FieldRelevance, // Used for actors' appearances
143 FieldClientChannelOrder,
144 FieldBPM,
145 FieldMusicBitRate,
146 FieldSampleRate,
147 FieldNoOfChannels,
148 FieldAlbumStatus,
149 FieldAlbumDuration,
150 FieldHdrType,
151 FieldProvider,
152 FieldUserPreference,
153 FieldMax
154 } Field;
156 typedef std::set<Field> Fields;
157 typedef std::vector<Field> FieldList;
159 typedef enum {
160 DatabaseQueryPartSelect,
161 DatabaseQueryPartWhere,
162 DatabaseQueryPartOrderBy,
163 } DatabaseQueryPart;
165 typedef std::map<Field, CVariant> DatabaseResult;
166 typedef std::vector<DatabaseResult> DatabaseResults;
168 class DatabaseUtils
170 public:
171 static MediaType MediaTypeFromVideoContentType(VideoDbContentType videoContentType);
173 static std::string GetField(Field field, const MediaType &mediaType, DatabaseQueryPart queryPart);
174 static int GetField(Field field, const MediaType &mediaType);
175 static int GetFieldIndex(Field field, const MediaType &mediaType);
176 static bool GetSelectFields(const Fields &fields, const MediaType &mediaType, FieldList &selectFields);
178 static bool GetFieldValue(const dbiplus::field_value &fieldValue, CVariant &variantValue);
179 static bool GetDatabaseResults(const MediaType &mediaType, const FieldList &fields, const std::unique_ptr<dbiplus::Dataset> &dataset, DatabaseResults &results);
181 static std::string BuildLimitClause(int end, int start = 0);
182 static std::string BuildLimitClauseOnly(int end, int start = 0);
183 static size_t GetLimitCount(int end, int start);
185 private:
186 static int GetField(Field field, const MediaType &mediaType, bool asIndex);