int IColumnProvider.GetItemData(ref ShellColumnId columnId, ref ShellColumnData columnData, object data) { Debug.WriteLine("[{0}] ColumnProviderBase.IColumnProvider.GetItemData, columnId.FormatId={1}, columnId.PropertyId={2}", Id, columnId.FormatId, columnId.PropertyId); if (!initialized) { throw new COMException("Initialize was not called"); } if (!IsSupportedItem(ref columnData)) { ////VariantInit(pvarData); // must initialise out args as we return a success code. return(HResults.False); } bool flushCache = columnData.Flags.HasFlag(ShellColumnDataOptions.UpdateItem); var fileName = Path.GetFileName(columnData.File); object info = null; if (!flushCache) { // User of this interface (explorer.exe) are expected to ask // all active item data per file. info = FindInLastUsedCache(fileName); } if (info == null) { info = GetAndCacheFileInfo(fileName, columnData.File, flushCache); } ////pvarData->bstrVal = (*pCachedInfo)[GetIndex(*pscid)].AllocSysString(); ////pvarData->vt = VT_BSTR; return(HResults.Ok); }
private bool IsSupportedItem(ref ShellColumnData columnData) { // Check file mask and file extension. return(!columnData.FileAttributes.HasFlag(GetFileAttributeMask()) && extensions.Contains(columnData.FileNameExtension.ToLowerInvariant())); }