2009年12月18日 星期五

Filter of the Internet cache - CuUrlCacheFilter

// Filter of the Internet cache

string GetCacheIconFile( string &strUrl )
{
    CuUrlCacheFilter UrlCacheFilter;
    return UrlCacheFilter.OnGetCacheFile(".ico", strUrl.c_str());
}

// CuUrlCacheFilter.h

class CuUrlCacheFilter
{
    CuUrlCacheEntry m_UrlCacheEntry;

public:
    CuUrlCacheFilter(void);
    ~CuUrlCacheFilter(void);

public:
    string OnGetCacheFile(LPCTSTR szFilter = TEXT(".jpg") , LPCTSTR szURL = TEXT("") ); 

private:
    BOOL IsFilter( LPCTSTR lpszSource, LPCTSTR lpszFilter );
    BOOL IsFilterLocalFile( INTERNET_CACHE_ENTRY_INFO * lpEntry, LPCTSTR szFilter );
    BOOL IsFilterURL(INTERNET_CACHE_ENTRY_INFO * lpEntry, LPCTSTR szURL);

};


// CuUrlCacheFilter.cpp

CuUrlCacheFilter::CuUrlCacheFilter(void)
{
    m_UrlCacheEntry.ProcessEnumCacheEntry();
}

CuUrlCacheFilter::~CuUrlCacheFilter(void)
{
}

string CuUrlCacheFilter::OnGetCacheFile(LPCTSTR szFilter , LPCTSTR szURL  )
{

    string strResult;
    INTERNET_CACHE_ENTRY_INFO* lpEntry = NULL;
    for( int i = 0 ; i < m_UrlCacheEntry.size() ; i++ )
    {
        lpEntry = m_UrlCacheEntry.at(i);
        if(  IsFilterLocalFile( lpEntry, szFilter) && IsFilterURL(lpEntry, szURL) )
        {
            strResult = lpEntry->lpszLocalFileName;
            break;
        }
    }

    return strResult;
}


BOOL CuUrlCacheFilter::IsFilter( LPCTSTR lpszSource, LPCTSTR lpszFilter )
{
    if( lpszSource == NULL )
        return FALSE;

    string strTempFile(lpszSource);
    size_t found = strTempFile.find(lpszFilter);

    return ( found != string::npos );
}

BOOL CuUrlCacheFilter::IsFilterURL(INTERNET_CACHE_ENTRY_INFO * lpEntry, LPCTSTR szURL)
{
    return IsFilter(lpEntry->lpszSourceUrlName , szURL);
}

BOOL CuUrlCacheFilter::IsFilterLocalFile( INTERNET_CACHE_ENTRY_INFO * lpEntry, LPCTSTR szFilter )
{ 
    return IsFilter(lpEntry->lpszLocalFileName , szFilter);
}

1 則留言:

  1. 單一職責原則很明顯的將列舉跟比對當做兩個工作, Filter 獨立出 CacheEntry 除了讓 CacheEntry 更容易被使用外, 也方便擴充不同類型的Filter!

    回覆刪除