From: <ad...@us...> - 2003-02-25 17:20:22
|
Update of /cvsroot/bdadev/TuneReqStore In directory sc8-pr-cvs1:/tmp/cvs-serv22837 Modified Files: TuneInfo.cpp TuneInfo.h TuneReqStore.idl TuneRequestStore.cpp TuneRequestStore.h Log Message: Fixed VB compability issues with schedule info Storage of Tuning spaces by name only Index: TuneInfo.cpp =================================================================== RCS file: /cvsroot/bdadev/TuneReqStore/TuneInfo.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** TuneInfo.cpp 21 Feb 2003 16:36:43 -0000 1.5 --- TuneInfo.cpp 25 Feb 2003 17:20:12 -0000 1.6 *************** *** 98,102 **** } ! STDMETHODIMP CTuneInfo::get_ProgramInfomation(IEnumProgramInfo **pVal) { if (pVal == NULL) --- 98,102 ---- } ! STDMETHODIMP CTuneInfo::get__NewEnum(IEnumProgramInfo **pVal) { if (pVal == NULL) *************** *** 125,128 **** --- 125,153 ---- } + STDMETHODIMP CTuneInfo::get_Item(long Index, IProgramInfo* *pVal) + { + if (pVal == NULL) + { + return E_POINTER; + } + + if(Index >= 0 && Index < m_ProgramInfos.size()) + { + *pVal = m_ProgramInfos[Index]; + (*pVal)->AddRef(); + return S_OK; + } + else + { + return E_FAIL; + } + } + + STDMETHODIMP CTuneInfo::get_Count(long *pVal) + { + *pVal = m_ProgramInfos.size(); + return S_OK; + } + void CTuneInfo::EmptyArray() { *************** *** 142,145 **** --- 167,174 ---- // // $Log$ + // Revision 1.6 2003/02/25 17:20:12 adcockj + // Fixed VB compability issues with schedule info + // Storage of Tuning spaces by name only + // // Revision 1.5 2003/02/21 16:36:43 adcockj // Added schedule functionality (untested) and some code clean up Index: TuneInfo.h =================================================================== RCS file: /cvsroot/bdadev/TuneReqStore/TuneInfo.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** TuneInfo.h 21 Feb 2003 16:36:43 -0000 1.6 --- TuneInfo.h 25 Feb 2003 17:20:13 -0000 1.7 *************** *** 56,60 **** // ITuneInfo public: ! STDMETHOD(get_ProgramInfomation)(/*[out, retval]*/ IEnumProgramInfo* *pVal); STDMETHOD(get_KeyedNumber)(/*[out, retval]*/ long *pVal); STDMETHOD(put_KeyedNumber)(/*[in]*/ long newVal); --- 56,62 ---- // ITuneInfo public: ! STDMETHOD(get__NewEnum)(/*[out, retval]*/ IEnumProgramInfo* *pVal); ! STDMETHOD(get_Item)(/*[in]*/ long Index, /*[out, retval]*/ IProgramInfo* *pVal); ! STDMETHOD(get_Count)(/*[out, retval]*/ long* pVal); STDMETHOD(get_KeyedNumber)(/*[out, retval]*/ long *pVal); STDMETHOD(put_KeyedNumber)(/*[in]*/ long newVal); Index: TuneReqStore.idl =================================================================== RCS file: /cvsroot/bdadev/TuneReqStore/TuneReqStore.idl,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** TuneReqStore.idl 25 Feb 2003 08:01:13 -0000 1.7 --- TuneReqStore.idl 25 Feb 2003 17:20:13 -0000 1.8 *************** *** 70,82 **** interface ITuneInfo : IDispatch { ! [propget, id(1), helpstring("property TuneRequest")] HRESULT TuneRequest([out, retval] ITuneRequest* *pVal); ! [propput, id(1), helpstring("property TuneRequest")] HRESULT TuneRequest([in] ITuneRequest* newVal); ! [propget, id(2), helpstring("property Description")] HRESULT Description([out, retval] BSTR *pVal); ! [propput, id(2), helpstring("property Description")] HRESULT Description([in] BSTR newVal); ! [propget, id(3), helpstring("property UniqueID")] HRESULT UniqueID([out, retval] BSTR *pVal); ! [propput, id(3), helpstring("property UniqueID")] HRESULT UniqueID([in] BSTR newVal); ! [propget, id(4), helpstring("property KeyedNumber")] HRESULT KeyedNumber([out, retval] long *pVal); ! [propput, id(4), helpstring("property KeyedNumber")] HRESULT KeyedNumber([in] long newVal); ! [propget, id(5), helpstring("property ProgramInfomation")] HRESULT ProgramInfomation([out, retval] IEnumProgramInfo* *pVal); }; --- 70,84 ---- interface ITuneInfo : IDispatch { ! [id(DISPID_NEWENUM), propget] HRESULT _NewEnum([out, retval] IEnumProgramInfo** ppUnk); ! [id(DISPID_VALUE), propget] HRESULT Item([in] long Index, [out, retval] IProgramInfo** pVal); ! [id(1), propget] HRESULT Count([out, retval] long* pVal); ! [propget, id(2), helpstring("property TuneRequest")] HRESULT TuneRequest([out, retval] ITuneRequest* *pVal); ! [propput, id(2), helpstring("property TuneRequest")] HRESULT TuneRequest([in] ITuneRequest* newVal); ! [propget, id(3), helpstring("property Description")] HRESULT Description([out, retval] BSTR *pVal); ! [propput, id(3), helpstring("property Description")] HRESULT Description([in] BSTR newVal); ! [propget, id(4), helpstring("property UniqueID")] HRESULT UniqueID([out, retval] BSTR *pVal); ! [propput, id(4), helpstring("property UniqueID")] HRESULT UniqueID([in] BSTR newVal); ! [propget, id(5), helpstring("property KeyedNumber")] HRESULT KeyedNumber([out, retval] long *pVal); ! [propput, id(5), helpstring("property KeyedNumber")] HRESULT KeyedNumber([in] long newVal); }; *************** *** 159,162 **** --- 161,168 ---- // // $Log$ + // Revision 1.8 2003/02/25 17:20:13 adcockj + // Fixed VB compability issues with schedule info + // Storage of Tuning spaces by name only + // // Revision 1.7 2003/02/25 08:01:13 adcockj // Added support for video Control Index: TuneRequestStore.cpp =================================================================== RCS file: /cvsroot/bdadev/TuneReqStore/TuneRequestStore.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** TuneRequestStore.cpp 25 Feb 2003 08:01:14 -0000 1.12 --- TuneRequestStore.cpp 25 Feb 2003 17:20:13 -0000 1.13 *************** *** 354,468 **** CHECK(node->QueryInterface(&pElem)); ! CComVariant varVT; ! CHECK(pElem->getAttribute(CComBSTR(L"vt"), &varVT)); ! CHECK(varVT.ChangeType(VT_I2)); ! VARTYPE vt = varVT.iVal; ! if (vt == VT_RECORD) ! { ! CComVariant var; ! // Get the uuid ! CHECK(GetAttributeToBSTRVariant( pElem, CComBSTR(L"uuid"), var)); ! GUID uuid; ! CHECK(CLSIDFromString(var.bstrVal, &uuid)); ! var.Clear(); ! // Get the libid ! CHECK(GetAttributeToBSTRVariant( pElem, CComBSTR(L"libid"), var)); ! GUID libid; ! CHECK(CLSIDFromString(var.bstrVal, &libid)); ! var.Clear(); ! CHECK(GetAttributeToBSTRVariant( pElem, CComBSTR(L"major"), var)); ! CHECK(var.ChangeType(VT_I2)); ! WORD wMajor = var.iVal; ! var.Clear(); ! CHECK(GetAttributeToBSTRVariant( pElem, CComBSTR(L"minor"), var)); ! CHECK(var.ChangeType(VT_I2)); ! WORD wMinor = var.iVal; ! var.Clear(); ! CHECK(GetAttributeToBSTRVariant( pElem, CComBSTR(L"lcid"), var)); ! CHECK(var.ChangeType(VT_UI4)); ! LCID lcid = var.ulVal; ! var.Clear(); ! CComPtr<IRecordInfo> pRecInfo; ! CHECK(GetRecordInfoFromGuids(libid, wMajor, wMinor, lcid, uuid, &pRecInfo)); ! void *pvRecord = pRecInfo->RecordCreate(); ! ULONG cFields; ! CHECK(pRecInfo->GetFieldNames(&cFields, 0)); ! BSTR *prgNames = new BSTR[cFields]; ! CHECK(hr = pRecInfo->GetFieldNames(&cFields, prgNames)); ! if (FAILED(hr)) { ! delete [] prgNames; ! return hr; ! } ! for (ULONG i = 0; i < cFields; i++) ! { ! if (SUCCEEDED(hr)) { - CComVariant value; - m_stackElems.push(pElem); - CHECK(hr = Read(prgNames[i], &value, pErrorLog)); - m_stackElems.pop(); if (SUCCEEDED(hr)) ! CHECK(pRecInfo->PutField(INVOKE_PROPERTYPUT, pvRecord, prgNames[i], &value)); } ! SysFreeString(prgNames[i]); ! } ! if (FAILED(hr)) { ! delete [] prgNames; ! return hr; ! } ! pVar->vt = VT_RECORD; ! pVar->pRecInfo = pRecInfo.Detach(); ! pVar->pvRecord = pvRecord; ! delete [] prgNames; ! } ! else if (vt == VT_UNKNOWN || vt == VT_DISPATCH) ! { ! CComPtr<IPersistPropertyBag> pppb; ! m_stackElems.push(pElem); ! CHECK(UnPersistObject(pErrorLog, &pppb)); ! m_stackElems.pop(); ! pVar->vt = vt; ! if (hr == S_OK) ! return pppb->QueryInterface((vt == VT_UNKNOWN ? IID_IUnknown : IID_IDispatch), (void**)&pVar->punkVal); else { ! pVar->punkVal = 0; ! return S_FALSE; } } - else if (vt == VT_BSTR) - { - CHECK(pElem->get_text(&pVar->bstrVal)); - pVar->vt = vt; - } - else - { - CComVariant textValue; - CHECK(pElem->get_text(&textValue.bstrVal)); - textValue.vt = VT_BSTR; - return VariantChangeType(pVar, &textValue, 0, vt); - } return S_OK; --- 354,478 ---- CHECK(node->QueryInterface(&pElem)); ! if(wcscmp(pwszPropNameIn, L"Tuning Space") == 0) ! { ! CComBSTR Name; ! CHECK(pElem->get_text(&Name)); ! pVar->vt = VT_DISPATCH; ! return GetTuningSpace(Name, (ITuningSpace**) &pVar->pdispVal); ! } ! else ! { ! CComVariant varVT; ! CHECK(pElem->getAttribute(CComBSTR(L"vt"), &varVT)); ! CHECK(varVT.ChangeType(VT_I2)); ! VARTYPE vt = varVT.iVal; ! if (vt == VT_RECORD) ! { ! CComVariant var; ! // Get the uuid ! CHECK(GetAttributeToBSTRVariant( pElem, CComBSTR(L"uuid"), var)); ! GUID uuid; ! CHECK(CLSIDFromString(var.bstrVal, &uuid)); ! var.Clear(); ! // Get the libid ! CHECK(GetAttributeToBSTRVariant( pElem, CComBSTR(L"libid"), var)); ! GUID libid; ! CHECK(CLSIDFromString(var.bstrVal, &libid)); ! var.Clear(); ! CHECK(GetAttributeToBSTRVariant( pElem, CComBSTR(L"major"), var)); ! CHECK(var.ChangeType(VT_I2)); ! WORD wMajor = var.iVal; ! var.Clear(); ! CHECK(GetAttributeToBSTRVariant( pElem, CComBSTR(L"minor"), var)); ! CHECK(var.ChangeType(VT_I2)); ! WORD wMinor = var.iVal; ! var.Clear(); ! CHECK(GetAttributeToBSTRVariant( pElem, CComBSTR(L"lcid"), var)); ! CHECK(var.ChangeType(VT_UI4)); ! LCID lcid = var.ulVal; ! var.Clear(); ! CComPtr<IRecordInfo> pRecInfo; ! CHECK(GetRecordInfoFromGuids(libid, wMajor, wMinor, lcid, uuid, &pRecInfo)); ! void *pvRecord = pRecInfo->RecordCreate(); ! ULONG cFields; ! CHECK(pRecInfo->GetFieldNames(&cFields, 0)); ! BSTR *prgNames = new BSTR[cFields]; ! CHECK(hr = pRecInfo->GetFieldNames(&cFields, prgNames)); ! if (FAILED(hr)) { ! delete [] prgNames; ! return hr; ! } ! for (ULONG i = 0; i < cFields; i++) { if (SUCCEEDED(hr)) ! { ! CComVariant value; ! m_stackElems.push(pElem); ! CHECK(hr = Read(prgNames[i], &value, pErrorLog)); ! m_stackElems.pop(); ! if (SUCCEEDED(hr)) ! CHECK(pRecInfo->PutField(INVOKE_PROPERTYPUT, pvRecord, prgNames[i], &value)); ! } ! SysFreeString(prgNames[i]); } ! if (FAILED(hr)) { ! delete [] prgNames; ! return hr; ! } ! pVar->vt = VT_RECORD; ! pVar->pRecInfo = pRecInfo.Detach(); ! pVar->pvRecord = pvRecord; ! delete [] prgNames; ! } ! else if (vt == VT_UNKNOWN || vt == VT_DISPATCH) ! { ! CComPtr<IPersistPropertyBag> pppb; ! m_stackElems.push(pElem); ! CHECK(UnPersistObject(pErrorLog, &pppb)); ! m_stackElems.pop(); ! pVar->vt = vt; ! if (hr == S_OK) ! return pppb->QueryInterface((vt == VT_UNKNOWN ? IID_IUnknown : IID_IDispatch), (void**)&pVar->punkVal); ! else ! { ! pVar->punkVal = 0; ! return S_FALSE; ! } ! } ! else if (vt == VT_BSTR) ! { ! CHECK(pElem->get_text(&pVar->bstrVal)); ! pVar->vt = vt; ! } else { ! CComVariant textValue; ! CHECK(pElem->get_text(&textValue.bstrVal)); ! textValue.vt = VT_BSTR; ! return VariantChangeType(pVar, &textValue, 0, vt); } } return S_OK; *************** *** 485,575 **** CHECK(m_doc->createElement(CComBSTR(pwszPropName.c_str()), &pElem)); ! CComVariant Variant(vt); ! CHECK(Variant.ChangeType(VT_BSTR)); ! ! CHECK(pElem->setAttribute(CComBSTR(L"vt"), Variant)); ! ! if (vt & VT_ARRAY) { ! return E_NOTIMPL; } ! else if (vt == VT_RECORD) { ! CComPtr<IRecordInfo> pRecInfo = pVar->pRecInfo; ! void *pvRecord = pVar->pvRecord; ! GUID guid; ! CHECK(pRecInfo->GetGuid(&guid)); ! CComBSTR bstr(guid); ! CHECK(pElem->setAttribute(CComBSTR(L"uuid"), CComVariant(bstr))); ! CComPtr<ITypeInfo> pTypeInfo; ! CHECK(pRecInfo->GetTypeInfo(&pTypeInfo)); ! CComPtr<ITypeLib> pTypeLib; ! UINT index; ! CHECK(pTypeInfo->GetContainingTypeLib(&pTypeLib, &index)); ! TLIBATTR *pattr = 0; ! CHECK(pTypeLib->GetLibAttr(&pattr)); ! CHECK(pElem->setAttribute(CComBSTR(L"libid"), CComVariant(CComBSTR(pattr->guid)))); ! CHECK(pElem->setAttribute(CComBSTR(L"major"), CComVariant(pattr->wMajorVerNum))); ! CHECK(pElem->setAttribute(CComBSTR(L"minor"), CComVariant(pattr->wMinorVerNum))); ! CHECK(pElem->setAttribute(CComBSTR(L"lcid"), CComVariant(long(pattr->lcid)))); ! pTypeLib->ReleaseTLibAttr(pattr); ! ULONG cFields; ! CHECK(pRecInfo->GetFieldNames(&cFields, 0)); ! BSTR *prgNames = new BSTR[cFields]; ! if(FAILED(hr = pRecInfo->GetFieldNames(&cFields, prgNames))) ! { ! delete [] prgNames; ! return hr; ! } ! m_stackElems.push(pElem); ! for (ULONG i = 0; i < cFields; i++) ! { ! if (SUCCEEDED(hr)) { - CComVariant value; - hr = pRecInfo->GetField(pvRecord, prgNames[i], &value); if (SUCCEEDED(hr)) { ! CHECK(Write(prgNames[i], &value)); } } ! SysFreeString(prgNames[i]); } ! delete [] prgNames; ! if (FAILED(hr)) return hr; ! m_stackElems.pop(); ! } ! else if (vt == VT_UNKNOWN || vt == VT_DISPATCH) ! { ! CComPtr<IPersistPropertyBag> pppb; ! if (pVar->punkVal) { ! CHECK(pVar->punkVal->QueryInterface(&pppb)); ! } ! m_stackElems.push(pElem); ! CHECK(PersistObject(pppb)); ! m_stackElems.pop(); ! } ! else if (vt == VT_BSTR) ! { ! CHECK(pElem->put_text(pVar->bstrVal)); ! } ! else ! { ! CComVariant value; ! CHECK(VariantChangeType(&value, pVar, 0, VT_BSTR)); ! CHECK(pElem->put_text(value.bstrVal)); } --- 495,605 ---- CHECK(m_doc->createElement(CComBSTR(pwszPropName.c_str()), &pElem)); ! if(wcscmp(pwszPropNameIn, L"Tuning Space") == 0) { ! if (vt == VT_UNKNOWN || vt == VT_DISPATCH) ! { ! CComQIPtr<ITuningSpace> TuningSpace = pVar->punkVal; ! if(TuningSpace) ! { ! CComBSTR Name; ! CHECK(TuningSpace->get_UniqueName(&Name)); ! CHECK(pElem->put_text(Name)); ! } ! } ! else ! { ! ATLTRACE("Unexpected type passed as Tuning Space"); ! } } ! else { ! CComVariant Variant(vt); ! CHECK(Variant.ChangeType(VT_BSTR)); ! CHECK(pElem->setAttribute(CComBSTR(L"vt"), Variant)); ! if (vt & VT_ARRAY) ! { ! return E_NOTIMPL; ! } ! else if (vt == VT_RECORD) ! { ! CComPtr<IRecordInfo> pRecInfo = pVar->pRecInfo; ! void *pvRecord = pVar->pvRecord; ! GUID guid; ! CHECK(pRecInfo->GetGuid(&guid)); ! CComBSTR bstr(guid); ! CHECK(pElem->setAttribute(CComBSTR(L"uuid"), CComVariant(bstr))); ! CComPtr<ITypeInfo> pTypeInfo; ! CHECK(pRecInfo->GetTypeInfo(&pTypeInfo)); ! CComPtr<ITypeLib> pTypeLib; ! UINT index; ! CHECK(pTypeInfo->GetContainingTypeLib(&pTypeLib, &index)); ! TLIBATTR *pattr = 0; ! CHECK(pTypeLib->GetLibAttr(&pattr)); ! CHECK(pElem->setAttribute(CComBSTR(L"libid"), CComVariant(CComBSTR(pattr->guid)))); ! CHECK(pElem->setAttribute(CComBSTR(L"major"), CComVariant(pattr->wMajorVerNum))); ! CHECK(pElem->setAttribute(CComBSTR(L"minor"), CComVariant(pattr->wMinorVerNum))); ! CHECK(pElem->setAttribute(CComBSTR(L"lcid"), CComVariant(long(pattr->lcid)))); ! pTypeLib->ReleaseTLibAttr(pattr); ! ULONG cFields; ! CHECK(pRecInfo->GetFieldNames(&cFields, 0)); ! ! BSTR *prgNames = new BSTR[cFields]; ! if(FAILED(hr = pRecInfo->GetFieldNames(&cFields, prgNames))) ! { ! delete [] prgNames; ! return hr; ! } ! ! m_stackElems.push(pElem); ! for (ULONG i = 0; i < cFields; i++) { if (SUCCEEDED(hr)) { ! CComVariant value; ! hr = pRecInfo->GetField(pvRecord, prgNames[i], &value); ! if (SUCCEEDED(hr)) ! { ! CHECK(Write(prgNames[i], &value)); ! } } + SysFreeString(prgNames[i]); } ! delete [] prgNames; ! if (FAILED(hr)) return hr; ! m_stackElems.pop(); } ! else if (vt == VT_UNKNOWN || vt == VT_DISPATCH) { ! CComPtr<IPersistPropertyBag> pppb; ! if (pVar->punkVal) ! { ! CHECK(pVar->punkVal->QueryInterface(&pppb)); ! } ! m_stackElems.push(pElem); ! CHECK(PersistObject(pppb)); ! m_stackElems.pop(); ! } ! else if (vt == VT_BSTR) ! { ! CHECK(pElem->put_text(pVar->bstrVal)); ! } ! else ! { ! CComVariant value; ! CHECK(VariantChangeType(&value, pVar, 0, VT_BSTR)); ! CHECK(pElem->put_text(value.bstrVal)); ! } } *************** *** 1138,1141 **** --- 1168,1195 ---- } + HRESULT CTuneRequestStore::GetTuningSpace(BSTR Name, ITuningSpace** pDisp) + { + if(m_SystemTuningSpaces == NULL) + { + CHECK(m_SystemTuningSpaces.CoCreateInstance(CLSID_SystemTuningSpaces, NULL, CLSCTX_INPROC_SERVER)); + } + + CComPtr<ITuningSpaces> TuningSpaces; + + CHECK(m_SystemTuningSpaces->TuningSpacesForName(Name, &TuningSpaces)); + + // Find the size of the returned collection. + long cCount = 0; + CHECK(TuningSpaces->get_Count(&cCount)); + if (cCount > 0) + { + CComVariant Item(0); + return TuningSpaces->get_Item(Item, pDisp); + } + else + { + return E_FAIL; + } + } ///////////////////////////////////////////////////////////////////////////// *************** *** 1143,1146 **** --- 1197,1204 ---- // // $Log$ + // Revision 1.13 2003/02/25 17:20:13 adcockj + // Fixed VB compability issues with schedule info + // Storage of Tuning spaces by name only + // // Revision 1.12 2003/02/25 08:01:14 adcockj // Added support for video Control Index: TuneRequestStore.h =================================================================== RCS file: /cvsroot/bdadev/TuneReqStore/TuneRequestStore.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** TuneRequestStore.h 25 Feb 2003 08:01:15 -0000 1.10 --- TuneRequestStore.h 25 Feb 2003 17:20:14 -0000 1.11 *************** *** 94,97 **** --- 94,99 ---- HRESULT UpdateScheduleInfo(BSTR ServiceId, BSTR ScheduleID, BSTR Title, BSTR Description, ULONG StartTime, ULONG EndTime); ITuneInfo* GetTuneInfo(BSTR ServiceId); + HRESULT GetTuningSpace(BSTR Name, ITuningSpace** pDisp); + private: typedef std::stack<xml::IXMLDOMElement*> ElementStack; *************** *** 107,110 **** --- 109,113 ---- DWORD m_GuideDataCookie; std::vector<ITuneInfo*> m_TuneInfos; + CComPtr<ITuningSpaceContainer> m_SystemTuningSpaces; bool m_UpdatePending; |