Asset: Merge asset library/list refresh operators

In rBdcdbaf89bd11, I introduced a new operator
(`file.asset_library_refresh()`) to handle Asset Browser refreshing more
separate from File Browser refreshing. However, there already was
`asset.asset_list_refresh()`, which at this point only works for asset
view templates, but was intended to cover the Asset Browser case in
future too. This would happen once the Asset Browser uses the asset list
design of the asset view template.

So rather than having two operators for refreshing asset library data,
have one that just handles both cases, until they converge into one.
This avoids changes to the Python API in future (deprecating/changing
operators).

Differential Revision: https://developer.blender.org/D13239
This commit is contained in:
Julian Eisel 2021-11-23 18:40:31 +01:00
parent 60befc8f02
commit ea93e5df6c
10 changed files with 43 additions and 56 deletions

View File

@ -2147,7 +2147,7 @@ def km_file_browser(params):
("file.next", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True}, None),
# The two refresh operators have polls excluding each other (so only one is available depending on context).
("file.refresh", {"type": 'R', "value": 'PRESS'}, None),
("file.asset_library_refresh", {"type": 'R', "value": 'PRESS'}, None),
("asset.library_refresh", {"type": 'R', "value": 'PRESS'}, None),
("file.parent", {"type": 'P', "value": 'PRESS'}, None),
("file.previous", {"type": 'BACK_SPACE', "value": 'PRESS'}, None),
("file.next", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True}, None),

View File

@ -1229,7 +1229,7 @@ def km_file_browser(params):
("file.next", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True}, None),
# The two refresh operators have polls excluding each other (so only one is available depending on context).
("file.refresh", {"type": 'R', "value": 'PRESS', "ctrl": True}, None),
("file.asset_library_refresh", {"type": 'R', "value": 'PRESS', "ctrl": True}, None),
("asset.library_refresh", {"type": 'R', "value": 'PRESS', "ctrl": True}, None),
("file.previous", {"type": 'BACK_SPACE', "value": 'PRESS'}, None),
("file.next", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True}, None),
("wm.context_toggle", {"type": 'H', "value": 'PRESS'},
@ -1276,7 +1276,7 @@ def km_file_browser_main(params):
("file.mouse_execute", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None),
# The two refresh operators have polls excluding each other (so only one is available depending on context).
("file.refresh", {"type": 'R', "value": 'PRESS', "ctrl": True}, None),
("file.asset_library_refresh", {"type": 'R', "value": 'PRESS', "ctrl": True}, None),
("asset.library_refresh", {"type": 'R', "value": 'PRESS', "ctrl": True}, None),
("file.select", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None),
("file.select", {"type": 'LEFTMOUSE', "value": 'CLICK'},
{"properties": [("open", False), ("deselect_all", True)]}),

View File

@ -142,14 +142,8 @@ class ASSET_OT_open_containing_blend_file(Operator):
if returncode:
self.report({'WARNING'}, "Blender sub-process exited with error code %d" % returncode)
# TODO(Sybren): Replace this with a generic "reload assets" operator
# that can run outside of the Asset Browser context.
if bpy.ops.file.refresh.poll():
bpy.ops.file.refresh()
if bpy.ops.asset.list_refresh.poll():
bpy.ops.asset.list_refresh()
if bpy.ops.file.asset_library_refresh.poll():
bpy.ops.file.asset_library_refresh()
if bpy.ops.asset.library_refresh.poll():
bpy.ops.asset.library_refresh()
self.cancel(context)
return {'FINISHED'}

View File

@ -793,7 +793,7 @@ class ASSETBROWSER_MT_context_menu(AssetBrowserMenu, Menu):
st = context.space_data
params = st.params
layout.operator("file.asset_library_refresh")
layout.operator("asset.library_refresh")
layout.separator()

View File

@ -30,7 +30,10 @@
#include "BLI_fileops.h"
#include "BLI_fnmatch.h"
#include "BLI_path_util.h"
#include "ED_asset.h"
#include "ED_asset_catalog.hh"
#include "ED_screen.h"
#include "ED_util.h"
/* XXX needs access to the file list, should all be done via the asset system in future. */
#include "ED_fileselect.h"
@ -388,8 +391,14 @@ static void ASSET_OT_clear(wmOperatorType *ot)
/* -------------------------------------------------------------------- */
static bool asset_list_refresh_poll(bContext *C)
static bool asset_library_refresh_poll(bContext *C)
{
if (ED_operator_asset_browsing_active(C)) {
return true;
}
/* While not inside an Asset Browser, check if there's a asset list stored for the active asset
* library (stored in the workspace, obtained via context). */
const AssetLibraryReference *library = CTX_wm_asset_library_ref(C);
if (!library) {
return false;
@ -398,23 +407,38 @@ static bool asset_list_refresh_poll(bContext *C)
return ED_assetlist_storage_has_list_for_library(library);
}
static int asset_list_refresh_exec(bContext *C, wmOperator *UNUSED(unused))
static int asset_library_refresh_exec(bContext *C, wmOperator *UNUSED(unused))
{
const AssetLibraryReference *library = CTX_wm_asset_library_ref(C);
ED_assetlist_clear(library, C);
/* Execution mode #1: Inside the Asset Browser. */
if (ED_operator_asset_browsing_active(C)) {
SpaceFile *sfile = CTX_wm_space_file(C);
ED_fileselect_clear(CTX_wm_manager(C), sfile);
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
}
else {
/* Execution mode #2: Outside the Asset Browser, use the asset list. */
const AssetLibraryReference *library = CTX_wm_asset_library_ref(C);
ED_assetlist_clear(library, C);
}
return OPERATOR_FINISHED;
}
static void ASSET_OT_list_refresh(struct wmOperatorType *ot)
/**
* This operator currently covers both cases, the File/Asset Browser file list and the asset list
* used for the asset-view template. Once the asset list design is used by the Asset Browser, this
* can be simplified to just that case.
*/
static void ASSET_OT_library_refresh(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Refresh Asset List";
ot->description = "Trigger a reread of the assets";
ot->idname = "ASSET_OT_list_refresh";
ot->name = "Refresh Asset Library";
ot->description = "Reread assets and asset catalogs from the asset library on disk";
ot->idname = "ASSET_OT_library_refresh";
/* api callbacks */
ot->exec = asset_list_refresh_exec;
ot->poll = asset_list_refresh_poll;
ot->exec = asset_library_refresh_exec;
ot->poll = asset_library_refresh_poll;
}
/* -------------------------------------------------------------------- */
@ -901,5 +925,5 @@ void ED_operatortypes_asset(void)
WM_operatortype_append(ASSET_OT_catalog_undo_push);
WM_operatortype_append(ASSET_OT_bundle_install);
WM_operatortype_append(ASSET_OT_list_refresh);
WM_operatortype_append(ASSET_OT_library_refresh);
}

View File

@ -227,7 +227,7 @@ void uiTemplateAssetView(uiLayout *layout,
if ((display_flags & UI_TEMPLATE_ASSET_DRAW_NO_LIBRARY) == 0) {
uiItemFullR(row, asset_library_dataptr, asset_library_prop, RNA_NO_INDEX, 0, 0, "", 0);
if (asset_library_ref.type != ASSET_LIBRARY_LOCAL) {
uiItemO(row, "", ICON_FILE_REFRESH, "ASSET_OT_list_refresh");
uiItemO(row, "", ICON_FILE_REFRESH, "ASSET_OT_library_refresh");
}
}

View File

@ -79,7 +79,6 @@ void FILE_OT_directory_new(struct wmOperatorType *ot);
void FILE_OT_previous(struct wmOperatorType *ot);
void FILE_OT_next(struct wmOperatorType *ot);
void FILE_OT_refresh(struct wmOperatorType *ot);
void FILE_OT_asset_library_refresh(struct wmOperatorType *ot);
void FILE_OT_filenum(struct wmOperatorType *ot);
void FILE_OT_delete(struct wmOperatorType *ot);
void FILE_OT_rename(struct wmOperatorType *ot);

View File

@ -1955,35 +1955,6 @@ void FILE_OT_refresh(struct wmOperatorType *ot)
/** \} */
/* -------------------------------------------------------------------- */
/** \name Refresh Asset Library Operator
* \{ */
static int file_asset_library_refresh_exec(bContext *C, wmOperator *UNUSED(unused))
{
wmWindowManager *wm = CTX_wm_manager(C);
SpaceFile *sfile = CTX_wm_space_file(C);
ED_fileselect_clear(wm, sfile);
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
return OPERATOR_FINISHED;
}
void FILE_OT_asset_library_refresh(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Refresh Asset Library";
ot->description = "Reread assets and asset catalogs from the asset library on disk";
ot->idname = "FILE_OT_asset_library_refresh";
/* api callbacks */
ot->exec = file_asset_library_refresh_exec;
ot->poll = ED_operator_asset_browsing_active;
}
/** \} */
/* -------------------------------------------------------------------- */
/** \name Navigate Parent Operator
* \{ */

View File

@ -261,7 +261,7 @@ static void file_panel_asset_catalog_buttons_draw(const bContext *C, Panel *pane
CTX_free(mutable_ctx);
}
else {
uiItemO(row, "", ICON_FILE_REFRESH, "FILE_OT_asset_library_refresh");
uiItemO(row, "", ICON_FILE_REFRESH, "ASSET_OT_library_refresh");
}
uiItemS(col);

View File

@ -688,7 +688,6 @@ static void file_operatortypes(void)
WM_operatortype_append(FILE_OT_previous);
WM_operatortype_append(FILE_OT_next);
WM_operatortype_append(FILE_OT_refresh);
WM_operatortype_append(FILE_OT_asset_library_refresh);
WM_operatortype_append(FILE_OT_bookmark_add);
WM_operatortype_append(FILE_OT_bookmark_delete);
WM_operatortype_append(FILE_OT_bookmark_cleanup);