1 //////////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2004-2021 musikcube team
4 //
5 // All rights reserved.
6 //
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions are met:
9 //
10 //    * Redistributions of source code must retain the above copyright notice,
11 //      this list of conditions and the following disclaimer.
12 //
13 //    * Redistributions in binary form must reproduce the above copyright
14 //      notice, this list of conditions and the following disclaimer in the
15 //      documentation and/or other materials provided with the distribution.
16 //
17 //    * Neither the name of the author nor the names of other contributors may
18 //      be used to endorse or promote products derived from this software
19 //      without specific prior written permission.
20 //
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 // POSSIBILITY OF SUCH DAMAGE.
32 //
33 //////////////////////////////////////////////////////////////////////////////
34 
35 #pragma once
36 
37 #include "ITrackList.h"
38 #include "IValueList.h"
39 #include "IMapList.h"
40 #include "ITrack.h"
41 #include "IAllocator.h"
42 
43 namespace musik { namespace core { namespace sdk {
44 
45     class IMetadataProxy {
46         public:
47             virtual ITrackList* QueryTracks(
48                 const char* query = nullptr,
49                 int limit = -1,
50                 int offset = 0) = 0;
51 
52             virtual ITrack* QueryTrackById(int64_t trackId) = 0;
53 
54             virtual ITrack* QueryTrackByExternalId(const char* externalId) = 0;
55 
56             virtual ITrackList* QueryTracksByCategory(
57                 const char* categoryType,
58                 int64_t selectedId,
59                 const char* filter = "",
60                 int limit = -1,
61                 int offset = 0) = 0;
62 
63             virtual ITrackList* QueryTracksByCategories(
64                 IValue** categories,
65                 size_t categoryCount,
66                 const char* filter = "",
67                 int limit = -1,
68                 int offset = 0) = 0;
69 
70             virtual ITrackList* QueryTracksByExternalId(
71                 const char** externalIds, size_t externalIdCount) = 0;
72 
73             virtual IValueList* ListCategories() = 0;
74 
75             virtual IValueList* QueryCategory(
76                 const char* type,
77                 const char* filter = "") = 0;
78 
79             virtual IValueList* QueryCategoryWithPredicate(
80                 const char* type,
81                 const char* predicateType,
82                 int64_t predicateId,
83                 const char* filter = "") = 0;
84 
85             virtual IValueList* QueryCategoryWithPredicates(
86                 const char* type,
87                 IValue** predicates,
88                 size_t predicateCount,
89                 const char* filter = "") = 0;
90 
91             virtual IMapList* QueryAlbums(const char* filter = "") = 0;
92 
93             virtual IMapList* QueryAlbums(
94                 const char* categoryIdName,
95                 int64_t categoryIdValue,
96                 const char* filter = "") = 0;
97 
98             virtual int64_t SavePlaylistWithIds(
99                 int64_t* trackIds,
100                 size_t trackIdCount,
101                 const char* playlistName,
102                 const int64_t playlistId = 0) = 0;
103 
104             virtual int64_t SavePlaylistWithExternalIds(
105                 const char** externalIds,
106                 size_t externalIdCount,
107                 const char* playlistName,
108                 const int64_t playlistId = 0) = 0;
109 
110             virtual int64_t SavePlaylistWithTrackList(
111                 ITrackList* trackList,
112                 const char* playlistName,
113                 const int64_t playlistId = 0) = 0;
114 
115             virtual bool RenamePlaylist(
116                 const int64_t playlistId,
117                 const char* playlistName) = 0;
118 
119             virtual bool DeletePlaylist(const int64_t playlistId) = 0;
120 
121             virtual bool AppendToPlaylistWithIds(
122                 const int64_t playlistId,
123                 const int64_t* trackIds,
124                 size_t trackIdCount,
125                 int offset = -1) = 0;
126 
127             virtual bool AppendToPlaylistWithExternalIds(
128                 const int64_t playlistId,
129                 const char** externalTrackIds,
130                 size_t externalTrackIdCount,
131                 int offset = -1) = 0;
132 
133             virtual bool AppendToPlaylistWithTrackList(
134                 const int64_t playlistId,
135                 ITrackList* trackList,
136                 int offset = -1) = 0;
137 
138             virtual size_t RemoveTracksFromPlaylist(
139                 const int64_t playlistId,
140                 const char** externalIds,
141                 const int* sortOrders,
142                 int count) = 0;
143 
144             virtual bool SendRawQuery(
145                 const char* query,
146                 IAllocator& allocator,
147                 char** resultData,
148                 int* resultSize) = 0;
149 
150             virtual void Release() = 0;
151     };
152 
153 } } }
154 
155