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