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 #include <set> 36 #include <vector> 37 #include <map> 38 #include <string> 39 #include <algorithm> 40 #include <unordered_map> 41 #include <thread> 42 43 #include <cmath> 44 #include <string> 45 46 #pragma warning(push, 0) 47 #include <websocketpp/config/asio_no_tls_client.hpp> 48 #include <websocketpp/config/asio_client.hpp> 49 #include <websocketpp/client.hpp> 50 #include <boost/filesystem.hpp> 51 #include <boost/algorithm/string/case_conv.hpp> 52 #include <boost/algorithm/string.hpp> 53 #include <nlohmann/json.hpp> 54 #include <sigslot/sigslot.h> 55 #pragma warning(pop) 56 57 #include <musikcore/config.h> 58 #include <musikcore/i18n/Locale.h> 59 #include <musikcore/audio/Buffer.h> 60 #include <musikcore/audio/Crossfader.h> 61 #include <musikcore/audio/CrossfadeTransport.h> 62 #include <musikcore/audio/GaplessTransport.h> 63 #include <musikcore/audio/IStream.h> 64 #include <musikcore/audio/ITransport.h> 65 #include <musikcore/audio/MasterTransport.h> 66 #include <musikcore/audio/Outputs.h> 67 #include <musikcore/audio/PlaybackService.h> 68 #include <musikcore/audio/Player.h> 69 #include <musikcore/audio/Stream.h> 70 #include <musikcore/audio/Streams.h> 71 #include <musikcore/audio/Visualizer.h> 72 #include <musikcore/db/Connection.h> 73 #include <musikcore/db/ScopedTransaction.h> 74 #include <musikcore/db/SqliteExtensions.h> 75 #include <musikcore/db/Statement.h> 76 #include <musikcore/debug.h> 77 #include <musikcore/io/DataStreamFactory.h> 78 #include <musikcore/io/LocalFileStream.h> 79 #include <musikcore/library/IIndexer.h> 80 #include <musikcore/library/ILibrary.h> 81 #include <musikcore/library/Indexer.h> 82 #include <musikcore/library/IQuery.h> 83 #include <musikcore/library/LibraryFactory.h> 84 #include <musikcore/library/LocalLibrary.h> 85 #include <musikcore/library/LocalLibraryConstants.h> 86 #include <musikcore/library/LocalMetadataProxy.h> 87 #include <musikcore/library/MasterLibrary.h> 88 #include <musikcore/library/metadata/MetadataMap.h> 89 #include <musikcore/library/metadata/MetadataMapList.h> 90 #include <musikcore/library/query/AlbumListQuery.h> 91 #include <musikcore/library/query/AllCategoriesQuery.h> 92 #include <musikcore/library/query/AppendPlaylistQuery.h> 93 #include <musikcore/library/query/CategoryListQuery.h> 94 #include <musikcore/library/query/CategoryTrackListQuery.h> 95 #include <musikcore/library/query/DeletePlaylistQuery.h> 96 #include <musikcore/library/query/DirectoryTrackListQuery.h> 97 #include <musikcore/library/query/GetPlaylistQuery.h> 98 #include <musikcore/library/query/LyricsQuery.h> 99 #include <musikcore/library/query/MarkTrackPlayedQuery.h> 100 #include <musikcore/library/query/NowPlayingTrackListQuery.h> 101 #include <musikcore/library/query/PersistedPlayQueueQuery.h> 102 #include <musikcore/library/query/SavePlaylistQuery.h> 103 #include <musikcore/library/query/SearchTrackListQuery.h> 104 #include <musikcore/library/query/SetTrackRatingQuery.h> 105 #include <musikcore/library/query/TrackListQueryBase.h> 106 #include <musikcore/library/query/TrackMetadataBatchQuery.h> 107 #include <musikcore/library/query/TrackMetadataQuery.h> 108 #include <musikcore/library/query/util/CategoryQueryUtil.h> 109 #include <musikcore/library/query/util/SdkWrappers.h> 110 #include <musikcore/library/query/util/Serialization.h> 111 #include <musikcore/library/query/util/TrackQueryFragments.h> 112 #include <musikcore/library/query/util/TrackSort.h> 113 #include <musikcore/library/QueryBase.h> 114 #include <musikcore/library/QueryRegistry.h> 115 #include <musikcore/library/RemoteLibrary.h> 116 #include <musikcore/library/track/IndexerTrack.h> 117 #include <musikcore/library/track/LibraryTrack.h> 118 #include <musikcore/library/track/Track.h> 119 #include <musikcore/library/track/TrackList.h> 120 #include <musikcore/net/RawWebSocketClient.h> 121 #include <musikcore/net/WebSocketClient.h> 122 #include <musikcore/plugin/PluginFactory.h> 123 #include <musikcore/plugin/Plugins.h> 124 #include <musikcore/runtime/IMessage.h> 125 #include <musikcore/runtime/IMessageQueue.h> 126 #include <musikcore/runtime/IMessageTarget.h> 127 #include <musikcore/runtime/Message.h> 128 #include <musikcore/runtime/MessageQueue.h> 129 #include <musikcore/sdk/constants.h> 130 #include <musikcore/sdk/DataBuffer.h> 131 #include <musikcore/sdk/Filesystem.h> 132 #include <musikcore/sdk/IAllocator.h> 133 #include <musikcore/sdk/IAnalyzer.h> 134 #include <musikcore/sdk/IBlockingEncoder.h> 135 #include <musikcore/sdk/IBuffer.h> 136 #include <musikcore/sdk/IBufferProvider.h> 137 #include <musikcore/sdk/IDataStream.h> 138 #include <musikcore/sdk/IDataStreamFactory.h> 139 #include <musikcore/sdk/IDebug.h> 140 #include <musikcore/sdk/IDecoder.h> 141 #include <musikcore/sdk/IDecoderFactory.h> 142 #include <musikcore/sdk/IDevice.h> 143 #include <musikcore/sdk/IDSP.h> 144 #include <musikcore/sdk/IEncoder.h> 145 #include <musikcore/sdk/IEncoderFactory.h> 146 #include <musikcore/sdk/IEnvironment.h> 147 #include <musikcore/sdk/IIndexerNotifier.h> 148 #include <musikcore/sdk/IIndexerSource.h> 149 #include <musikcore/sdk/IIndexerWriter.h> 150 #include <musikcore/sdk/IMap.h> 151 #include <musikcore/sdk/IMapList.h> 152 #include <musikcore/sdk/IMetadataProxy.h> 153 #include <musikcore/sdk/IOutput.h> 154 #include <musikcore/sdk/IPcmVisualizer.h> 155 #include <musikcore/sdk/IPlaybackRemote.h> 156 #include <musikcore/sdk/IPlaybackService.h> 157 #include <musikcore/sdk/IPlugin.h> 158 #include <musikcore/sdk/IPreferences.h> 159 #include <musikcore/sdk/IResource.h> 160 #include <musikcore/sdk/ISchema.h> 161 #include <musikcore/sdk/ISpectrumVisualizer.h> 162 #include <musikcore/sdk/IStreamingEncoder.h> 163 #include <musikcore/sdk/ITagReader.h> 164 #include <musikcore/sdk/ITagStore.h> 165 #include <musikcore/sdk/ITrack.h> 166 #include <musikcore/sdk/ITrackList.h> 167 #include <musikcore/sdk/ITrackListEditor.h> 168 #include <musikcore/sdk/IValue.h> 169 #include <musikcore/sdk/IValueList.h> 170 #include <musikcore/sdk/IVisualizer.h> 171 #include <musikcore/sdk/ReplayGain.h> 172 #include <musikcore/sdk/String.h> 173 #include <musikcore/support/Auddio.h> 174 #include <musikcore/support/Common.h> 175 #include <musikcore/support/DeleteDefaults.h> 176 #include <musikcore/support/Duration.h> 177 #include <musikcore/support/LastFm.h> 178 #include <musikcore/support/Messages.h> 179 #include <musikcore/support/NarrowCast.h> 180 #include <musikcore/support/Playback.h> 181 #include <musikcore/support/PreferenceKeys.h> 182 #include <musikcore/support/Preferences.h> 183 #include <musikcore/utfutil.h> 184 #include <musikcore/version.h>