forked from stuerp/foo_uie_webview
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathHostObjectImpl.h
More file actions
257 lines (181 loc) · 10.1 KB
/
HostObjectImpl.h
File metadata and controls
257 lines (181 loc) · 10.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
/** HostObjectImpl.h: Copyright (c) P. Stuer, J. Cassis **/
#pragma once
#include <HostObject_h.h>
#include "Configuration.h"
#include <sdk/album_art.h>
#include <sdk/playback_control.h>
#include <sdk/playlist.h>
class HostObject : public Microsoft::WRL::RuntimeClass<Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>, IHostObject, IDispatch>
{
public:
HostObject(const HostObject&) = delete;
HostObject(const HostObject&&) = delete;
HostObject& operator=(const HostObject&) = delete;
HostObject& operator=(HostObject&&) = delete;
virtual ~HostObject() {};
typedef std::function<void(void)> Callback;
typedef std::function<void(Callback)> RunCallbackAsync;
HostObject(RunCallbackAsync runCallbackAsync);
void SetConfiguration(const configuration_t* configuration) noexcept
{
_Configuration = configuration;
}
#pragma region IHostObject
STDMETHODIMP get_componentVersion(__int32* version) override;
STDMETHODIMP get_componentVersionText(BSTR* versionText) override;
STDMETHODIMP get_lastErrorNumber(__int32* errorNumber) override;
STDMETHODIMP get_lastErrorMessage(BSTR* errorMessage) override;
STDMETHODIMP print(BSTR text) override;
/* Playback Control **/
STDMETHODIMP stop() override;
STDMETHODIMP play(VARIANT_BOOL paused) override;
STDMETHODIMP pause(VARIANT_BOOL paused) override;
STDMETHODIMP previous() override;
STDMETHODIMP next() override;
STDMETHODIMP random() override;
STDMETHODIMP togglePause() override;
STDMETHODIMP toggleMute() override;
STDMETHODIMP toggleStopAfterCurrent() override;
STDMETHODIMP volumeUp() override;
STDMETHODIMP volumeDown() override;
STDMETHODIMP seek(double time) override;
STDMETHODIMP seekDelta(double delta) override;
STDMETHODIMP get_isPlaying(VARIANT_BOOL* value) override;
STDMETHODIMP get_isPaused(VARIANT_BOOL* value) override;
STDMETHODIMP get_stopAfterCurrent(VARIANT_BOOL* value) override;
STDMETHODIMP put_stopAfterCurrent(VARIANT_BOOL value) override;
STDMETHODIMP get_length(double* value) override;
STDMETHODIMP get_position(double* value) override;
STDMETHODIMP get_canSeek(VARIANT_BOOL* value) override;
STDMETHODIMP get_volume(double* value) override;
STDMETHODIMP put_volume(double value) override;
STDMETHODIMP get_isMuted(VARIANT_BOOL* value) override;
STDMETHODIMP getFormattedText(BSTR text, BSTR* formattedText) override;
STDMETHODIMP getArtwork(BSTR type, BSTR* image) override;
/* Files */
STDMETHODIMP readAllText(BSTR filePath, __int32 codePage, BSTR* text) override;
STDMETHODIMP readImage(BSTR filePath, BSTR* image) override;
STDMETHODIMP readDirectory(BSTR filePath, BSTR searchPattern, BSTR* json) override;
/* Playlists */
STDMETHODIMP get_playlistCount(int* playlistCount) override;
STDMETHODIMP get_activePlaylist(int* playlistIndex) override;
STDMETHODIMP put_activePlaylist(int playlistIndex) override;
STDMETHODIMP get_playingPlaylist(int* playlistIndex) override;
STDMETHODIMP put_playingPlaylist(int playlistIndex) override;
STDMETHODIMP getPlaylistName(int playlistIndex, BSTR* name) override;
STDMETHODIMP setPlaylistName(int playlistIndex, BSTR name) override;
STDMETHODIMP findPlaylist(BSTR name, int* playlistIndex) override;
STDMETHODIMP getPlaylistItemCount(int playlistIndex, int* itemCount) override;
STDMETHODIMP getSelectedPlaylistItemCount(int playlistIndex, int maxItems, int* itemCount) override;
STDMETHODIMP getFocusedPlaylistItem(int playlistIndex, int* itemIndex) override;
STDMETHODIMP setFocusedPlaylistItem(int playlistIndex, int itemIndex) override;
STDMETHODIMP ensurePlaylistItemVisible(int playlistIndex, int itemIndex) override;
STDMETHODIMP executePlaylistDefaultAction(int playlistIndex, int itemIndex) override;
STDMETHODIMP isPlaylistItemSelected(int playlistIndex, int itemIndex, VARIANT_BOOL* result) override;
STDMETHODIMP createPlaylist(int playlistIndex, BSTR name, int* newPlaylistIndex) override;
STDMETHODIMP addPath(int playlistIndex, int itemIndex, BSTR filePath, VARIANT_BOOL selectAddedItems) override;
STDMETHODIMP duplicatePlaylist(int playlistIndex, BSTR name, int* newPlaylistIndex) override;
STDMETHODIMP clearPlaylist(int playlistIndex) override;
STDMETHODIMP getPlaylistItems(int playlistIndex, BSTR* json) override;
STDMETHODIMP selectPlaylistItem(int playlistIndex, int itemIndex) override;
STDMETHODIMP deselectPlaylistItem(int playlistIndex, int itemIndex) override;
STDMETHODIMP getSelectedPlaylistItems(int playlistIndex, BSTR* json) override;
STDMETHODIMP clearPlaylistSelection(int playlistIndex) override;
STDMETHODIMP removeSelectedPlaylistItems(int playlistIndex) override;
STDMETHODIMP removeUnselectedPlaylistItems(int playlistIndex) override;
STDMETHODIMP removePlaylistItem(int playlistIndex, int itemIndex) override;
STDMETHODIMP deletePlaylist(int playlistIndex) override;
/* Auto Playlists */
STDMETHODIMP createAutoPlaylist(int playlistIndex, BSTR name, BSTR query, BSTR sort, uint32_t flags, int* newPlaylistIndex) override;
STDMETHODIMP isAutoPlaylist(int playlistIndex, VARIANT_BOOL* result) override;
/* Playback Order */
STDMETHODIMP get_playbackOrder(int* playlistIndex) override;
STDMETHODIMP put_playbackOrder(int playlistIndex) override;
/* OS */
STDMETHODIMP execute(BSTR filePath, BSTR parameters, BSTR directoryPath, BSTR operation, int showMode) override;
/* Media Library */
STDMETHODIMP get_isLibraryEnabled(VARIANT_BOOL* value) override;
STDMETHODIMP showLibraryPreferences() override;
STDMETHODIMP searchLibrary(BSTR query, __int64* list) override;
STDMETHODIMP showSearchUI(BSTR query) override;
STDMETHODIMP getMetaDBHandleListCount(__int64 list, __int64* count) override;
STDMETHODIMP getMetaDBHandleListItem(__int64 list, __int64 index, __int64* metaDBHandle) override;
STDMETHODIMP cloneMetaDBHandleList(__int64 list, __int64* clone) override;
STDMETHODIMP clearMetaDBHandleList(__int64 list) override;
STDMETHODIMP addMetaDBHandleList(__int64 from, __int64 to) override;
STDMETHODIMP releaseMetaDBHandleList(__int64 list) override;
STDMETHODIMP sortMetaDBHandleListByFormat(__int64 list, BSTR text) override;
STDMETHODIMP sortMetaDBHandleListByPath(__int64 list) override;
STDMETHODIMP sortMetaDBHandleListByRelativePath(__int64 list) override;
STDMETHODIMP removeMetaDBHandleListDuplicates(__int64 list) override;
STDMETHODIMP calculateMetaDBHandleListDuration(__int64 list, double* duration) override;
/* MetaDB Handle Auto Pointer */
STDMETHODIMP createMetaDBHandlePtr(BSTR filePath, unsigned __int32 subSongIndex, __int64* metaDBHandlePtr) override;
STDMETHODIMP deleteMetaDBHandlePtr(__int64 metaDBHandlePtr) override;
STDMETHODIMP getHandleFromMetaDBHandlePtr(__int64 metaDBHandlePtr, __int64* metaDBHandle) override;
/* MetaDB Handle */
STDMETHODIMP getMetaDBHandlePath(__int64 metaDBHandle, BSTR* path) override;
STDMETHODIMP getMetaDBHandleRelativePath(__int64 metaDBHandle, BSTR* path) override;
STDMETHODIMP getMetaDBHandleLength(__int64 metaDBHandle, double* length) override;
STDMETHODIMP formatMetaDBHandleTitle(__int64 metaDBHandle, BSTR script, BSTR* path) override;
/* Permissions */
STDMETHODIMP get_canReadFiles(VARIANT_BOOL* value) override;
STDMETHODIMP get_canReadDirectories(VARIANT_BOOL* value) override;
STDMETHODIMP get_canExecuteShellOperations(VARIANT_BOOL* value) override;
#pragma endregion
#pragma region IDispatch
STDMETHODIMP GetTypeInfoCount(UINT* typeInfoCount) override;
STDMETHODIMP GetTypeInfo(UINT typeInfoIndex, LCID lcid, ITypeInfo** typeInfo) override;
STDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR* names, UINT nameCount, LCID lcid, DISPID* dispIds) override;
STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD flags, DISPPARAMS* dispParams, VARIANT* result, EXCEPINFO* excepInfo, UINT* argErr) override;
#pragma endregion
private:
static HRESULT GetTrackIndex(size_t& playlistIndex, size_t& itemIndex) noexcept;
static HRESULT GetTypeLibFilePath(std::wstring& filePath) noexcept;
static void NormalizeIndexes(int& playlistIndex, int& itemIndex) noexcept
{
auto Manager = playlist_manager_v6::get();
if (playlistIndex == -1)
playlistIndex = (int)Manager->get_active_playlist();
if (itemIndex == -1)
itemIndex = (int)Manager->playlist_get_item_count((size_t)playlistIndex) - 1;
}
HRESULT SetLastError(HRESULT hResult)
{
return (_LastError = hResult);
}
const configuration_t* _Configuration;
HRESULT _LastError;
wil::com_ptr<ITypeLib> _TypeLibrary;
wil::com_ptr<IDispatch> _Callback;
RunCallbackAsync _RunCallbackAsync;
service_ptr_t<playback_control> _PlaybackControl;
/// <summary>
/// Represents an Album Art Manager configuration to allow overriding the default configuration in this component (see album_art_manager_v3::open_v3)
/// </summary>
class album_art_manager_config_t : public album_art_manager_config
{
public:
album_art_manager_config_t() {};
album_art_manager_config_t(const album_art_manager_config_t&) = delete;
album_art_manager_config_t(const album_art_manager_config_t&&) = delete;
album_art_manager_config_t& operator=(const album_art_manager_config_t&) = delete;
album_art_manager_config_t& operator=(album_art_manager_config_t&&) = delete;
virtual ~album_art_manager_config_t() {};
virtual bool get_external_pattern(pfc::string_base& out, const GUID& albumArtType) override
{
UNREFERENCED_PARAMETER(out);
UNREFERENCED_PARAMETER(albumArtType);
return false;
}
virtual bool use_embedded_pictures() override
{
return true;
}
virtual bool use_fallbacks() override
{
return true;
}
};
service_ptr_t<album_art_manager_config_t> _AlbumArtManagerConfig = new service_impl_t<album_art_manager_config_t>;
};