windows-nt/Source/XPSP1/NT/multimedia/dshow/guidestore/scheduleentry.cpp

234 lines
4.5 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
// ScheduleEntry.cpp : Implementation of CScheduleEntry
#include "stdafx.h"
#include "ScheduleEntry.h"
#include "Property.h"
/////////////////////////////////////////////////////////////////////////////
// CScheduleEntry
/////////////////////////////////////////////////////////////////////////////
// CScheduleEntries
STDMETHODIMP CScheduleEntries::get_ItemWithServiceAtTime(IService *pservice, DATE dt, IScheduleEntry **ppschedentry)
{
ENTER_API
{
HRESULT hr;
ValidateInPtr<IService>(pservice);
ValidateOutPtr<IScheduleEntry>(ppschedentry, NULL);
CComPtr<IScheduleEntries> pschedentries;
hr = get_ItemsWithService(pservice, &pschedentries);
if (FAILED(hr))
return hr;
long cItems;
hr = pschedentries->get_Count(&cItems);
if (FAILED(hr))
return hr;
if (cItems == 0)
return E_INVALIDARG;
CComQIPtr<IObjects> pobjs(pschedentries);
CComPtr<IObjects> pobjs2;
hr = pobjs->get_ItemsInTimeRange(dt, dt, &pobjs2);
if (FAILED(hr))
return hr;
hr = pobjs2->get_Count(&cItems);
if (FAILED(hr))
return hr;
if (cItems == 0)
return E_INVALIDARG;
CComPtr<IUnknown> punk;
hr = pobjs2->get_Item(_variant_t(0L), &punk);
if (FAILED(hr))
return hr;
return punk->QueryInterface(__uuidof(IScheduleEntry), (void **) ppschedentry);
}
LEAVE_API
}
STDMETHODIMP CScheduleEntries::get_ItemsWithService(IService *pservice, IScheduleEntries **ppschedentries)
{
ENTER_API
{
ValidateInPtr<IService>(pservice);
ValidateOutPtr<IScheduleEntries>(ppschedentries, NULL);
CComQIPtr<CObjects> pobjs(GetControllingUnknown());
CComPtr<IObjects> pobjsT;
HRESULT hr;
hr = pobjs->get_ItemsInverseRelatedToBy(pservice,
m_pdb->ScheduleEntryPropSet::ServiceMetaPropertyType(), &pobjsT);
if (FAILED(hr))
return hr;
return pobjsT->QueryInterface(__uuidof(IScheduleEntries), (void **) ppschedentries);
}
LEAVE_API
}
STDMETHODIMP CScheduleEntries::get_AddNew(DATE dtStart, DATE dtEnd, IService *pservice, IProgram *pprog, IScheduleEntry **ppschedentry)
{
ENTER_API
{
ValidateInPtr<IService>(pservice);
ValidateOutPtr<IScheduleEntry>(ppschedentry, NULL);
HRESULT hr;
hr = _get_AddNew(ppschedentry);
if (FAILED(hr))
return hr;
(*ppschedentry)->putref_Service(pservice);
(*ppschedentry)->putref_Program(pprog);
(*ppschedentry)->put_StartTime(dtStart);
(*ppschedentry)->put_EndTime(dtEnd);
return hr;
}
LEAVE_API
}
STDMETHODIMP CScheduleEntry::get_Service(IService **ppservice)
{
ENTER_API
{
ValidateOutPtr<IService>(ppservice, NULL);
HRESULT hr;
if (m_pservice == NULL)
{
hr = _get_ItemRelatedBy(m_pdb->ScheduleEntryPropSet::ServiceMetaPropertyType(), (IService **) &m_pservice);
if (hr == S_FALSE || FAILED(hr))
return hr;
}
m_pservice.CopyTo(ppservice);
return S_OK;
}
LEAVE_API
}
STDMETHODIMP CScheduleEntry::putref_Service(IService *pservice)
{
ENTER_API
{
ValidateInPtr<IService>(pservice);
m_pservice = pservice;
return _put_ItemRelatedBy(m_pdb->ScheduleEntryPropSet::ServiceMetaPropertyType(),
(IService *) m_pservice);
}
LEAVE_API
}
STDMETHODIMP CScheduleEntry::get_Program(IProgram **ppprog)
{
ENTER_API
{
ValidateOutPtr<IProgram>(ppprog, NULL);
HRESULT hr;
if (m_pprog == NULL)
{
hr = _get_ItemRelatedBy(m_pdb->ScheduleEntryPropSet::ProgramMetaPropertyType(),
(IProgram **) &m_pprog);
if (FAILED(hr))
return hr;
}
m_pprog.CopyTo(ppprog);
return S_OK;
}
LEAVE_API
}
STDMETHODIMP CScheduleEntry::putref_Program(IProgram *pprog)
{
ENTER_API
{
ValidateInPtr<IProgram>(pprog);
m_pprog = pprog;
return _put_ItemRelatedBy(m_pdb->ScheduleEntryPropSet::ProgramMetaPropertyType(),
(IProgram *) m_pprog);
}
LEAVE_API
}
STDMETHODIMP CScheduleEntry::get_StartTime(DATE *pdtStart)
{
ENTER_API
{
ValidateOut<DATE>(pdtStart);
return m_pdb->_get_Start((IScheduleEntry *) this, pdtStart);
}
LEAVE_API
}
STDMETHODIMP CScheduleEntry::put_StartTime(DATE dtStart)
{
ENTER_API
{
return m_pdb->_put_Start((IScheduleEntry *) this, dtStart);
}
LEAVE_API
}
STDMETHODIMP CScheduleEntry::get_EndTime(DATE *pdtEnd)
{
ENTER_API
{
ValidateOut<DATE>(pdtEnd);
return m_pdb->_get_End((IScheduleEntry *) this, pdtEnd);
}
LEAVE_API
}
STDMETHODIMP CScheduleEntry::put_EndTime(DATE dtEnd)
{
ENTER_API
{
return m_pdb->_put_End((IScheduleEntry *) this, dtEnd);
}
LEAVE_API
}
STDMETHODIMP CScheduleEntry::get_Length(long *plSecs)
{
ENTER_API
{
ValidateOut<long>(plSecs, 0);
// UNDONE: Test
DATE dtStart;
DATE dtEnd;
HRESULT hr;
hr = get_StartTime(&dtStart);
if (FAILED(hr))
return hr;
hr = get_EndTime(&dtEnd);
if (FAILED(hr))
return hr;
*plSecs = (long) ((dtEnd - dtStart)*86400.0); // 86400 = 24*60*60
return S_OK;
}
LEAVE_API
}