|
|
#include "stdafx.h"
#pragma hdrstop
// This function checks if a given URL already has a subscription.
// Returns TRUE: if it aleady has a subscription
// FALSE: Otherwise.
//
BOOL CheckForExistingSubscription(LPCTSTR lpcszURL) { HRESULT hr; ISubscriptionMgr *psm; BOOL fRet = FALSE; //Assume failure.
//Create the subscription Manager.
hr = CoCreateInstance(CLSID_SubscriptionMgr, NULL, CLSCTX_INPROC_SERVER, IID_ISubscriptionMgr, (void**)&psm);
if (SUCCEEDED(hr)) { BSTR bstrURL = SysAllocStringT(lpcszURL); if (bstrURL) { psm->IsSubscribed(bstrURL, &fRet); SysFreeString(bstrURL); }
psm->Release(); }
return(fRet); }
BOOL DeleteFromSubscriptionList(LPCTSTR pszURL) { BOOL fRet = FALSE; HRESULT hr; ISubscriptionMgr *psm;
hr = CoCreateInstance(CLSID_SubscriptionMgr, NULL, CLSCTX_INPROC_SERVER, IID_ISubscriptionMgr, (void**)&psm);
if (SUCCEEDED(hr)) { BSTR bstrURL = SysAllocStringT(pszURL); // Call TSTR version
if (bstrURL) { // Looks like all code paths going through this has already
// put up some UI.
if (SUCCEEDED(psm->DeleteSubscription(bstrURL, NULL))) { fRet = TRUE; }
SysFreeString(bstrURL); }
psm->Release(); }
return(fRet); }
BOOL UpdateSubscription(LPCTSTR pszURL) { BOOL fRet = FALSE; HRESULT hr; ISubscriptionMgr *psm;
hr = CoCreateInstance(CLSID_SubscriptionMgr, NULL, CLSCTX_INPROC_SERVER, IID_ISubscriptionMgr, (void**)&psm);
if (SUCCEEDED(hr)) { BSTR bstrURL = SysAllocStringT(pszURL); // Call TSTR version
if (bstrURL) { if (SUCCEEDED(psm->UpdateSubscription(bstrURL))) { fRet = TRUE; }
SysFreeString(bstrURL); }
psm->Release(); }
return(fRet); }
//
//
// This function enumerates the URLs of all the desktop components and then
// calls webcheck to see if they are subcribed to and if so asks webcheck to
// deliver those subscriptions right now.
//
//
BOOL UpdateAllDesktopSubscriptions(IADesktopP2 *padp2) { IActiveDesktop *pActiveDesktop; ISubscriptionMgr *psm; int iCount; //Count of components.
HRESULT hres; BOOL fRet = TRUE; //Assume success!
if(padp2 == NULL) //Are we provided a pointer already?
{ if(FAILED(hres = CActiveDesktop_InternalCreateInstance((LPUNKNOWN *)&pActiveDesktop, IID_IActiveDesktop))) { TraceMsg(TF_WARNING, "Could not instantiate CActiveDesktop COM object"); return FALSE; } } else { if(FAILED(hres = (padp2->QueryInterface(IID_PPV_ARG(IActiveDesktop, &pActiveDesktop))))) { TraceMsg(TF_WARNING, "Could not get IActiveDesktop * from IADesktopP2 *"); return FALSE; } }
pActiveDesktop->GetDesktopItemCount(&iCount, 0);
if(iCount <= 0) { TraceMsg(DM_TRACE, "No desktop components to update!"); return TRUE; //No components to enumerate!
}
//Create the subscription Manager.
hres = CoCreateInstance(CLSID_SubscriptionMgr, NULL, CLSCTX_INPROC_SERVER, IID_ISubscriptionMgr, (void**)&psm);
if(SUCCEEDED(hres)) { int iIndex; BSTR bstrURL;
//Enumerate the desktop components one by one.
for(iIndex = 0; iIndex < iCount; iIndex++) { COMPONENT Comp; //We are using the public structure here.
Comp.dwSize = sizeof(COMPONENT); if(SUCCEEDED(pActiveDesktop->GetDesktopItem(iIndex, &Comp, 0)) && Comp.fChecked) //Is this component enabled?
{ BOOL fSubscribed;
fSubscribed = FALSE; //Assume that it is NOT subscribed!
bstrURL = SysAllocString(Comp.wszSubscribedURL); if(!bstrURL) { fRet = FALSE; break; //Out of memory!
}
psm->IsSubscribed(bstrURL, &fSubscribed);
if(fSubscribed) psm->UpdateSubscription(bstrURL);
SysFreeString(bstrURL); } else TraceMsg(TF_WARNING, "Component# %d either failed or not enabled!", iIndex); } psm->Release(); } else { TraceMsg(TF_WARNING, "Could not create CLSID_SubscriptionMgr"); } pActiveDesktop->Release();
return fRet; }
|