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>