Fix T87621: Win32 Do Not Create Preview Thumbnails for Offline Files
This patch turns off the creation of file thumbnails for files that are offline and therefore not fully-present on the file system. These types of files - typically cloud-based or stored on slower backup media - only have their contents available when actually accessed, at which point there will be a short delay. If we allow thumbnail creation in this state then all offline files in a folder will be downloaded just to view a listing, which can take a long time. Files in this state will instead get a more generic thumbnail that still indicates file type (icon in center) and that shows offline state will a special icon at the bottom-left. Although this currently only affects Windows users, most of this patch is platform-agnostic. So other platforms inherit this behavior if they only add FILE_ATTR_OFFLINE attribute to files in this state. See D11101 for more information. Differential Revision: https://developer.blender.org/D11101 Reviewed by Julian Eisel
This commit is contained in:
parent
0fa4286ade
commit
ee5ad46a0e
Notes:
blender-bot
2023-03-24 17:05:22 +01:00
Referenced by issue #87621, The Blender File Open dialog triggers OneDrive Files On-Demand downloads
|
@ -87,7 +87,7 @@ typedef enum eFileAttributes {
|
|||
FILE_ATTR_RESTRICTED = 1 << 6, /* Protected by OS. */
|
||||
FILE_ATTR_TEMPORARY = 1 << 7, /* Used for temporary storage. */
|
||||
FILE_ATTR_SPARSE_FILE = 1 << 8, /* Sparse File. */
|
||||
FILE_ATTR_OFFLINE = 1 << 9, /* Data is not immediately available. */
|
||||
FILE_ATTR_OFFLINE = 1 << 9, /* Contents available after a short delay. */
|
||||
FILE_ATTR_ALIAS = 1 << 10, /* Mac Alias or Windows LNK. File-based redirection. */
|
||||
FILE_ATTR_REPARSE_POINT = 1 << 11, /* File has associated re-parse point. */
|
||||
FILE_ATTR_SYMLINK = 1 << 12, /* Reference to another file. */
|
||||
|
|
|
@ -266,7 +266,8 @@ eFileAttributes BLI_file_attributes(const char *path)
|
|||
if (attr & FILE_ATTRIBUTE_SPARSE_FILE) {
|
||||
ret |= FILE_ATTR_SPARSE_FILE;
|
||||
}
|
||||
if (attr & FILE_ATTRIBUTE_OFFLINE) {
|
||||
if (attr & FILE_ATTRIBUTE_OFFLINE || attr & FILE_ATTRIBUTE_RECALL_ON_OPEN ||
|
||||
attr & FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS) {
|
||||
ret |= FILE_ATTR_OFFLINE;
|
||||
}
|
||||
if (attr & FILE_ATTRIBUTE_REPARSE_POINT) {
|
||||
|
|
|
@ -323,6 +323,7 @@ static void file_draw_preview(uiBlock *block,
|
|||
int ex, ey;
|
||||
bool show_outline = !is_icon &&
|
||||
(file->typeflag & (FILE_TYPE_IMAGE | FILE_TYPE_MOVIE | FILE_TYPE_BLENDER));
|
||||
const bool is_offline = (file->attributes & FILE_ATTR_OFFLINE);
|
||||
|
||||
BLI_assert(imb != NULL);
|
||||
|
||||
|
@ -419,14 +420,14 @@ static void file_draw_preview(uiBlock *block,
|
|||
icon_x, icon_y, icon, icon_aspect / U.dpi_fac, icon_opacity, 0.0f, icon_color, false);
|
||||
}
|
||||
|
||||
if (is_link) {
|
||||
/* Arrow icon to indicate it is a shortcut, link, or alias. */
|
||||
if (is_link || is_offline) {
|
||||
/* Icon at bottom to indicate it is a shortcut, link, alias, or offline. */
|
||||
float icon_x, icon_y;
|
||||
icon_x = xco + (2.0f * UI_DPI_FAC);
|
||||
icon_y = yco + (2.0f * UI_DPI_FAC);
|
||||
const int arrow = ICON_LOOP_FORWARDS;
|
||||
const int arrow = is_link ? ICON_LOOP_FORWARDS : ICON_URL;
|
||||
if (!is_icon) {
|
||||
/* Arrow at very bottom-left if preview style. */
|
||||
/* At very bottom-left if preview style. */
|
||||
const uchar dark[4] = {0, 0, 0, 255};
|
||||
const uchar light[4] = {255, 255, 255, 255};
|
||||
UI_icon_draw_ex(icon_x + 1, icon_y - 1, arrow, 1.0f / U.dpi_fac, 0.2f, 0.0f, dark, false);
|
||||
|
|
|
@ -1601,6 +1601,11 @@ static void filelist_cache_previews_push(FileList *filelist, FileDirEntry *entry
|
|||
|
||||
BLI_assert(cache->flags & FLC_PREVIEWS_ACTIVE);
|
||||
|
||||
if (!entry->preview_icon_id && (entry->attributes & FILE_ATTR_OFFLINE)) {
|
||||
entry->flags |= FILE_ENTRY_INVALID_PREVIEW;
|
||||
return;
|
||||
}
|
||||
|
||||
if (entry->preview_icon_id) {
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue