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 <musikcore/library/ILibrary.h>
38 #include <musikcore/sdk/IMetadataProxy.h>
39 
40 namespace musik { namespace core { namespace library { namespace query {
41 
42     class LocalMetadataProxy : public musik::core::sdk::IMetadataProxy {
43         public:
44             LocalMetadataProxy(musik::core::ILibraryPtr library);
45 
46             musik::core::sdk::ITrackList*
47                 QueryTracks(
48                     const char* query = "",
49                     int limit = -1,
50                     int offset = 0) override;
51 
52             musik::core::sdk::ITrack*
53                 QueryTrackById(int64_t trackId) override;
54 
55             musik::core::sdk::ITrack*
56                 QueryTrackByExternalId(const char* externalId) override;
57 
58             musik::core::sdk::ITrackList*
59                 QueryTracksByCategory(
60                     const char* categoryType,
61                     int64_t selectedId,
62                     const char* filter = "",
63                     int limit = -1,
64                     int offset = 0) override;
65 
66             musik::core::sdk::ITrackList*
67                 QueryTracksByCategories(
68                     musik::core::sdk::IValue** categories,
69                     size_t categoryCount,
70                     const char* filter = "",
71                     int limit = -1,
72                     int offset = 0) override;
73 
74             musik::core::sdk::ITrackList* QueryTracksByExternalId(
75                 const char** externalIds, size_t externalIdCount) override;
76 
77             musik::core::sdk::IValueList* ListCategories() override;
78 
79             musik::core::sdk::IValueList*
80                 QueryCategory(
81                     const char* type,
82                     const char* filter = "") override;
83 
84             musik::core::sdk::IValueList*
85                 QueryCategoryWithPredicate(
86                     const char* type,
87                     const char* predicateType,
88                     int64_t predicateId,
89                     const char* filter = "") override;
90 
91             musik::core::sdk::IValueList*
92                 QueryCategoryWithPredicates(
93                     const char* type,
94                     musik::core::sdk::IValue** predicates,
95                     size_t predicateCount,
96                     const char* filter = "") override;
97 
98             musik::core::sdk::IMapList*
99                 QueryAlbums(const char* filter = "") override;
100 
101             musik::core::sdk::IMapList* QueryAlbums(
102                 const char* categoryIdName,
103                 int64_t categoryIdValue,
104                 const char* filter = "") override;
105 
106             int64_t SavePlaylistWithIds(
107                 int64_t* trackIds,
108                 size_t trackIdCount,
109                 const char* name,
110                 const int64_t playlistId = 0) override;
111 
112             int64_t SavePlaylistWithExternalIds(
113                 const char** externalIds,
114                 size_t externalIdCount,
115                 const char* playlistName,
116                 const int64_t playlistId = 0) override;
117 
118             int64_t SavePlaylistWithTrackList(
119                 musik::core::sdk::ITrackList* trackList,
120                 const char* playlistName,
121                 const int64_t playlistId = 0) override;
122 
123             bool RenamePlaylist(
124                 const int64_t playlistId,
125                 const char* name) override;
126 
127             bool DeletePlaylist(const int64_t playlistId) override;
128 
129             bool AppendToPlaylistWithIds(
130                 const int64_t playlistId,
131                 const int64_t* trackIds,
132                 size_t trackIdCount,
133                 int offset = -1) override;
134 
135             bool AppendToPlaylistWithExternalIds(
136                 const int64_t playlistId,
137                 const char** externalIds,
138                 size_t externalIdCount,
139                 int offset = -1) override;
140 
141             bool AppendToPlaylistWithTrackList(
142                 const int64_t playlistId,
143                 musik::core::sdk::ITrackList* trackList,
144                 int offset = -1) override;
145 
146             size_t RemoveTracksFromPlaylist(
147                 const int64_t playlistId,
148                 const char** externalIds,
149                 const int* sortOrders,
150                 int count) override;
151 
152             bool SendRawQuery(
153                 const char* query,
154                 musik::core::sdk::IAllocator& allocator,
155                 char** resultData,
156                 int* resultSize) override;
157 
158             void Release() noexcept override;
159 
160         private:
161             musik::core::ILibraryPtr library;
162     };
163 
164 } } } }
165