2 * IUpdateDownloader implementation
4 * Copyright 2008 Hans Leidekker
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include "wuapi_private.h"
23 typedef struct _update_downloader
25 IUpdateDownloader IUpdateDownloader_iface
;
29 static inline update_downloader
*impl_from_IUpdateDownloader( IUpdateDownloader
*iface
)
31 return CONTAINING_RECORD(iface
, update_downloader
, IUpdateDownloader_iface
);
34 static ULONG WINAPI
update_downloader_AddRef(
35 IUpdateDownloader
*iface
)
37 update_downloader
*update_downloader
= impl_from_IUpdateDownloader( iface
);
38 return InterlockedIncrement( &update_downloader
->refs
);
41 static ULONG WINAPI
update_downloader_Release(
42 IUpdateDownloader
*iface
)
44 update_downloader
*update_downloader
= impl_from_IUpdateDownloader( iface
);
45 LONG refs
= InterlockedDecrement( &update_downloader
->refs
);
48 TRACE("destroying %p\n", update_downloader
);
49 HeapFree( GetProcessHeap(), 0, update_downloader
);
54 static HRESULT WINAPI
update_downloader_QueryInterface(
55 IUpdateDownloader
*iface
,
59 update_downloader
*This
= impl_from_IUpdateDownloader( iface
);
61 TRACE("%p %s %p\n", This
, debugstr_guid( riid
), ppvObject
);
63 if ( IsEqualGUID( riid
, &IID_IUpdateDownloader
) ||
64 IsEqualGUID( riid
, &IID_IDispatch
) ||
65 IsEqualGUID( riid
, &IID_IUnknown
) )
71 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
74 IUpdateDownloader_AddRef( iface
);
78 static HRESULT WINAPI
update_downloader_GetTypeInfoCount(
79 IUpdateDownloader
*iface
,
86 static HRESULT WINAPI
update_downloader_GetTypeInfo(
87 IUpdateDownloader
*iface
,
96 static HRESULT WINAPI
update_downloader_GetIDsOfNames(
97 IUpdateDownloader
*iface
,
108 static HRESULT WINAPI
update_downloader_Invoke(
109 IUpdateDownloader
*iface
,
114 DISPPARAMS
*pDispParams
,
116 EXCEPINFO
*pExcepInfo
,
123 static HRESULT WINAPI
update_downloader_get_IsForced(
124 IUpdateDownloader
*This
,
125 VARIANT_BOOL
*retval
)
131 static HRESULT WINAPI
update_downloader_put_IsForced(
132 IUpdateDownloader
*This
,
135 FIXME("%p, %d\n", This
, value
);
139 static HRESULT WINAPI
update_downloader_get_ClientApplicationID(
140 IUpdateDownloader
*This
,
147 static HRESULT WINAPI
update_downloader_put_ClientApplicationID(
148 IUpdateDownloader
*This
,
151 FIXME("%p, %s\n", This
, debugstr_w(value
));
155 static HRESULT WINAPI
update_downloader_get_Priority(
156 IUpdateDownloader
*This
,
157 DownloadPriority
*retval
)
163 static HRESULT WINAPI
update_downloader_put_Priority(
164 IUpdateDownloader
*This
,
165 DownloadPriority value
)
171 static HRESULT WINAPI
update_downloader_get_Updates(
172 IUpdateDownloader
*This
,
173 IUpdateCollection
**retval
)
179 static HRESULT WINAPI
update_downloader_put_Updates(
180 IUpdateDownloader
*This
,
181 IUpdateCollection
*value
)
187 static HRESULT WINAPI
update_downloader_BeginDownload(
188 IUpdateDownloader
*This
,
189 IUnknown
*onProgressChanged
,
190 IUnknown
*onCompleted
,
192 IDownloadJob
**retval
)
198 static HRESULT WINAPI
update_downloader_Download(
199 IUpdateDownloader
*This
,
200 IDownloadResult
**retval
)
206 static HRESULT WINAPI
update_downloader_EndDownload(
207 IUpdateDownloader
*This
,
209 IDownloadResult
**retval
)
215 static const struct IUpdateDownloaderVtbl update_downloader_vtbl
=
217 update_downloader_QueryInterface
,
218 update_downloader_AddRef
,
219 update_downloader_Release
,
220 update_downloader_GetTypeInfoCount
,
221 update_downloader_GetTypeInfo
,
222 update_downloader_GetIDsOfNames
,
223 update_downloader_Invoke
,
224 update_downloader_get_ClientApplicationID
,
225 update_downloader_put_ClientApplicationID
,
226 update_downloader_get_IsForced
,
227 update_downloader_put_IsForced
,
228 update_downloader_get_Priority
,
229 update_downloader_put_Priority
,
230 update_downloader_get_Updates
,
231 update_downloader_put_Updates
,
232 update_downloader_BeginDownload
,
233 update_downloader_Download
,
234 update_downloader_EndDownload
237 HRESULT
UpdateDownloader_create( LPVOID
*ppObj
)
239 update_downloader
*downloader
;
241 TRACE("(%p)\n", ppObj
);
243 downloader
= HeapAlloc( GetProcessHeap(), 0, sizeof(*downloader
) );
244 if (!downloader
) return E_OUTOFMEMORY
;
246 downloader
->IUpdateDownloader_iface
.lpVtbl
= &update_downloader_vtbl
;
247 downloader
->refs
= 1;
249 *ppObj
= &downloader
->IUpdateDownloader_iface
;
251 TRACE("returning iface %p\n", *ppObj
);