void RemoveThumbnail(DisplayState& ds) { if (!HasThumbnail(ds)) return; ScopedMem<WCHAR> bmpPath(GetThumbnailPath(ds.filePath)); if (bmpPath) file::Delete(bmpPath); delete ds.thumbnail; ds.thumbnail = NULL; }
void RemoveThumbnail(DisplayState& ds) { if (!HasThumbnail(ds)) { return; } AutoFreeW bmpPath(GetThumbnailPath(ds.filePath)); if (bmpPath) { file::Delete(bmpPath); } delete ds.thumbnail; ds.thumbnail = nullptr; }
void SaveThumbnail(DisplayState& ds) { if (!ds.thumbnail) return; ScopedMem<WCHAR> bmpPath(GetThumbnailPath(ds.filePath)); if (!bmpPath) return; ScopedMem<WCHAR> thumbsPath(path::GetDir(bmpPath)); if (dir::Create(thumbsPath)) SaveRenderedBitmap(ds.thumbnail, bmpPath); }
static bool LoadThumbnail(DisplayState& ds) { if (ds.thumbnail) delete ds.thumbnail; ds.thumbnail = NULL; ScopedMem<WCHAR> bmpPath(GetThumbnailPath(ds.filePath)); if (!bmpPath) return false; ds.thumbnail = LoadRenderedBitmap(bmpPath); return ds.thumbnail != NULL; }
// removes thumbnails that don't belong to any frequently used item in file history void CleanUpThumbnailCache(FileHistory& fileHistory) { ScopedMem<WCHAR> thumbsPath(AppGenDataFilename(THUMBNAILS_DIR_NAME)); if (!thumbsPath) return; ScopedMem<WCHAR> pattern(path::Join(thumbsPath, L"*.png")); WStrVec files; WIN32_FIND_DATA fdata; HANDLE hfind = FindFirstFile(pattern, &fdata); if (INVALID_HANDLE_VALUE == hfind) return; do { if (!(fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) files.Append(str::Dup(fdata.cFileName)); } while (FindNextFile(hfind, &fdata)); FindClose(hfind); Vec<DisplayState *> list; fileHistory.GetFrequencyOrder(list); for (size_t i = 0; i < list.Count() && i < FILE_HISTORY_MAX_FREQUENT * 2; i++) { ScopedMem<WCHAR> bmpPath(GetThumbnailPath(list.At(i)->filePath)); if (!bmpPath) continue; int idx = files.Find(path::GetBaseName(bmpPath)); if (idx != -1) { CrashIf(idx < 0 || files.Count() <= (size_t)idx); WCHAR *fileName = files.At(idx); files.RemoveAt(idx); free(fileName); } } for (size_t i = 0; i < files.Count(); i++) { ScopedMem<WCHAR> bmpPath(path::Join(thumbsPath, files.At(i))); file::Delete(bmpPath); } }
// Get the image to show in the user tile HRESULT Credential::GetBitmapValue( __in DWORD dwFieldID, __out HBITMAP* phbmp ) { HRESULT hr; if ((SFI_TILEIMAGE == dwFieldID) && phbmp) { // Build the path to the bmp in this dll's folder wchar_t* pwszDllPath = new wchar_t[260]; GetModuleFileName(HINST_THISDLL, pwszDllPath, 260); std::wstring bmpPath(pwszDllPath); delete[]pwszDllPath; bmpPath.replace(bmpPath.end()-3,bmpPath.end(),L"bmp"); // Look for the filesystem bitmap first HBITMAP hbmp = (HBITMAP)LoadImage( NULL, bmpPath.c_str(), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE ); if (hbmp != NULL) { debug << "using filesystem bitmap" << std::endl; hr = S_OK; *phbmp = hbmp; } else { // Use the resource bitmap as a backup hbmp = LoadBitmap(HINST_THISDLL, MAKEINTRESOURCE(IDB_BITMAP1)); if (hbmp != NULL) { debug << "using default bitmap" << std::endl; hr = S_OK; *phbmp = hbmp; } else { hr = HRESULT_FROM_WIN32(GetLastError()); } } } else { hr = E_INVALIDARG; } return hr; }
void SaveThumbnail(DisplayState& ds) { if (!ds.thumbnail) { return; } AutoFreeW bmpPath(GetThumbnailPath(ds.filePath)); if (!bmpPath) { return; } AutoFreeW thumbsPath(path::GetDir(bmpPath)); if (dir::Create(thumbsPath)) { CrashIf(!str::EndsWithI(bmpPath, L".png")); Bitmap bmp(ds.thumbnail->GetBitmap(), nullptr); CLSID tmpClsid = GetEncoderClsid(L"image/png"); bmp.Save(bmpPath.Get(), &tmpClsid, nullptr); } }
bool LoadThumbnail(DisplayState& ds) { delete ds.thumbnail; ds.thumbnail = nullptr; AutoFreeW bmpPath(GetThumbnailPath(ds.filePath)); if (!bmpPath) { return false; } RenderedBitmap* bmp = LoadRenderedBitmap(bmpPath); if (!bmp || bmp->Size().IsEmpty()) { delete bmp; return false; } ds.thumbnail = bmp; return true; }
bool HasThumbnail(DisplayState& ds) { if (!ds.thumbnail && !LoadThumbnail(ds)) return false; ScopedMem<WCHAR> bmpPath(GetThumbnailPath(ds.filePath)); if (!bmpPath) return true; FILETIME bmpTime = file::GetModificationTime(bmpPath); FILETIME fileTime = file::GetModificationTime(ds.filePath); // delete the thumbnail if the file is newer than the thumbnail if (FileTimeDiffInSecs(fileTime, bmpTime) > 0) { delete ds.thumbnail; ds.thumbnail = NULL; } return ds.thumbnail != NULL; }
bool HasThumbnail(DisplayState& ds) { if (!ds.thumbnail && !LoadThumbnail(ds)) { return false; } AutoFreeW bmpPath(GetThumbnailPath(ds.filePath)); if (!bmpPath) { return true; } FILETIME bmpTime = file::GetModificationTime(bmpPath); FILETIME fileTime = file::GetModificationTime(ds.filePath); // delete the thumbnail if the file is newer than the thumbnail if (FileTimeDiffInSecs(fileTime, bmpTime) > 0) { delete ds.thumbnail; ds.thumbnail = nullptr; } return ds.thumbnail != nullptr; }