Esempio n. 1
0
/*
	GetFileTime()

	Ricava la data/ora UTC del file (assolute, in formato GMT). Se il secondo parametro e' TRUE,
	converte da GMT a local time, aggiungendo o sottraendo la differenza oraria rispetto a GMT:

	- data/ora assolute del file (UTC=GMT): Sun, 06 Nov 1994 08:49:37 GMT (0000)
	- zona oraria locale: GMT +1 (+0100)

	bConvertToLocalTime = FALSE -> Sun, 06 Nov 1994 08:49:37 GMT
	bConvertToLocalTime = TRUE  -> Sun, 06 Nov 1994 09:49:37 +0100
*/
BOOL CBinFile::GetFileTime(CDateTime& datetime,BOOL bConvertToLocalTime/* = FALSE*/)
{
	BOOL bGet = FALSE;

	if(m_hHandle!=INVALID_HANDLE_VALUE)
	{
		FILETIME   gmtfiletime = {0};
		FILETIME   filetime = {0};
		SYSTEMTIME systemtime = {0};

		// ricava la data/ora UTC del file (ossia assolute, GMT)
		if(::GetFileTime(m_hHandle,NULL,NULL,&gmtfiletime))
		{
			if(bConvertToLocalTime)
				::FileTimeToLocalFileTime(&gmtfiletime,&filetime); // converte in locale (aggiunge o sottrae la differenza rispetto a GMT)
			else
				memcpy(&filetime,&gmtfiletime,sizeof(FILETIME)); // nessuna conversione, data/ora assolute (UTC)

			// converte in formato di sistema
			::FileTimeToSystemTime(&filetime,&systemtime);
			
			// formatta la data/ora del file (Day, dd Mon yyyy hh:mm:ss [GMT])
			datetime.SetDateFormat(bConvertToLocalTime ? GMT : GMT_SHORT);
			datetime.SetYear(systemtime.wYear);
			datetime.SetMonth(systemtime.wMonth);
			datetime.SetDay(systemtime.wDay);
			datetime.SetHour(systemtime.wHour);
			datetime.SetMin(systemtime.wMinute);
			datetime.SetSec(systemtime.wSecond);
			
			bGet = TRUE;
		}
	}

	return(bGet);
}
/*
	Update()
*/
BOOL CUrlDatabaseService::Update(	LPCSTR	lpcszUrl,
							LPCSTR	lpcszEndTime,
							double	dlTotalTime,
							double	dlDownloadTime,
							CUrlStatus::URL_STATUS nStat,
							UINT		nID,
							LPCSTR	lpcszReportName,
							CUrlTable* pHttptable
							)
{
	BOOL bInserted = FALSE;

	if(m_bIsValid)
	{
		// sincronizza gli accessi
		if(m_pUrlDatabaseTable->Lock(SYNC_5_SECS_TIMEOUT))
		{
			strcpyn(m_szUrl,lpcszUrl,sizeof(m_szUrl));

			// scorre il database per ricavare i totali
			double dlTotBytes = 0.0f;
			UINT nUrls = 0;
			UINT nDownloadedUrls = 0;
			UINT nDownloadedItems = 0;
			UINT nTotalPict = 0;
			if(pHttptable)
			{
				pHttptable->SetIndex(URL_IDX_ID);

				if(pHttptable->GoTop())
				{
					do
					{
						pHttptable->ScatterMemvars();
						
						nUrls++;
						
						if((CUrlStatus::URL_STATUS)pHttptable->GetField_Stat()==CUrlStatus::URL_STATUS_DOWNLOADED)
						{
							nDownloadedUrls++;
							dlTotBytes += pHttptable->GetField_Size();
						}
						
						m_Url.SplitUrl(pHttptable->GetField_Url(),&m_stUrl);

						if(CImage::IsImageFile(m_stUrl.file) || CImage::IsImageFile(m_stUrl.cgi))
						{
							nTotalPict++;
							if((CUrlStatus::URL_STATUS)pHttptable->GetField_Stat()==CUrlStatus::URL_STATUS_DOWNLOADED)
								nDownloadedItems++;
						}
						
						pHttptable->GetNext();
					
					} while(!pHttptable->Eof());
				}
			}

			CDateTime* pDate = NULL;
			CDateTime* pTime = NULL;
			CDateTime Date;
			CDateTime Time;
			CString cData = "";
			BOOL bFound = FALSE;

			if(m_pUrlDatabaseTable->Seek(m_szUrl,URLDATABASE_IDX_URL))
			{
				m_pUrlDatabaseTable->ScatterMemvars();
				
				pDate = m_pUrlDatabaseTable->GetField_Date();
				pTime = m_pUrlDatabaseTable->GetField_StartTime();
				Date.SetYear(pDate->GetYear());
				Date.SetMonth(pDate->GetMonth());
				Date.SetDay(pDate->GetDay());
				Time.SetHour(pTime->GetHour());
				Time.SetMin(pTime->GetMin());
				Time.SetSec(pTime->GetSec());
				cData = m_pUrlDatabaseTable->GetField_DataTable();
				
				m_pUrlDatabaseTable->Delete();

				bFound = TRUE;
			}
			
			if(bFound)
			{
				m_pUrlDatabaseTable->ResetMemvars();
				
				m_pUrlDatabaseTable->PutField_Url			(	m_szUrl			);
				m_pUrlDatabaseTable->PutField_Date			(	&Date			);
				m_pUrlDatabaseTable->PutField_StartTime		(	&Time			);
				m_DateTime.ConvertTime(HHMMSS_GMT,HHMMSS,lpcszEndTime,NULL);
				m_pUrlDatabaseTable->PutField_EndTime		(	&m_DateTime		);
				m_pUrlDatabaseTable->PutField_TotalTime		(	dlTotalTime		);
				m_pUrlDatabaseTable->PutField_DownloadTime	(	dlDownloadTime		);
				m_pUrlDatabaseTable->PutField_Downloaded	(	dlTotBytes		);
				m_pUrlDatabaseTable->PutField_TotalUrls		(	nUrls			);
				m_pUrlDatabaseTable->PutField_TotalPict		(	nTotalPict		);
				m_pUrlDatabaseTable->PutField_DownloadedUrls	(	nDownloadedUrls	);
				m_pUrlDatabaseTable->PutField_DownloadedItems(	nDownloadedItems	);
				m_pUrlDatabaseTable->PutField_DataTable		(	cData			);
				m_pUrlDatabaseTable->PutField_Report		(	lpcszReportName	);
				m_pUrlDatabaseTable->PutField_Status		(	(short int)nStat	);
				m_pUrlDatabaseTable->PutField_Id			(	nID				);
				
				m_pUrlDatabaseTable->GatherMemvars();
				
				bInserted = m_pUrlDatabaseTable->Insert();
			}

			m_pUrlDatabaseTable->Unlock();
		}
	}

	return(bInserted);
}