Extensions: support custom-directory for system repositories
While this is reasonably obscure, not supporting this caused the UI to be confusing and there is no strong reason not to support this.
This commit is contained in:
parent
0838e99979
commit
554b3c5bd9
@ -267,7 +267,7 @@ def repos_to_notify():
|
||||
bl_extension_ops.RepoItem(
|
||||
name=repo_item.name,
|
||||
directory=repo_directory,
|
||||
source="" if repo_item.use_custom_directory else repo_item.source,
|
||||
source="" if repo_item.use_remote_url else repo_item.source,
|
||||
remote_url=remote_url,
|
||||
module=repo_item.module,
|
||||
use_cache=repo_item.use_cache,
|
||||
|
@ -254,7 +254,7 @@ def repo_iter_valid_local_only(context, *, exclude_system):
|
||||
if not repo_item.enabled:
|
||||
continue
|
||||
if exclude_system:
|
||||
if (not repo_item.use_custom_directory) and (repo_item.source == 'SYSTEM'):
|
||||
if (not repo_item.use_remote_url) and (repo_item.source == 'SYSTEM'):
|
||||
continue
|
||||
# Ignore repositories that have invalid settings.
|
||||
directory, remote_url = repo_paths_or_none(repo_item)
|
||||
@ -520,7 +520,7 @@ def extension_repos_read_index(index, *, include_disabled=False):
|
||||
return RepoItem(
|
||||
name=repo_item.name,
|
||||
directory=directory,
|
||||
source="" if repo_item.use_custom_directory else repo_item.source,
|
||||
source="" if repo_item.use_remote_url else repo_item.source,
|
||||
remote_url=remote_url,
|
||||
module=repo_item.module,
|
||||
use_cache=repo_item.use_cache,
|
||||
@ -558,7 +558,7 @@ def extension_repos_read(*, include_disabled=False, use_active_only=False):
|
||||
result.append(RepoItem(
|
||||
name=repo_item.name,
|
||||
directory=directory,
|
||||
source="" if repo_item.use_custom_directory else repo_item.source,
|
||||
source="" if repo_item.use_remote_url else repo_item.source,
|
||||
remote_url=remote_url,
|
||||
module=repo_item.module,
|
||||
use_cache=repo_item.use_cache,
|
||||
|
@ -2145,7 +2145,7 @@ class USERPREF_MT_extensions_active_repo_remove(Menu):
|
||||
except IndexError:
|
||||
active_repo = None
|
||||
|
||||
is_system_repo = (active_repo.use_custom_directory is False) and (active_repo.source == 'SYSTEM')
|
||||
is_system_repo = (active_repo.use_remote_url is False) and (active_repo.source == 'SYSTEM')
|
||||
|
||||
props = layout.operator("preferences.extension_repo_remove", text="Remove Repository")
|
||||
props.index = active_repo_index
|
||||
@ -2203,7 +2203,8 @@ class USERPREF_PT_extensions_repos(Panel):
|
||||
# For now it can be accessed from Python if someone is.
|
||||
# `layout.prop(active_repo, "use_remote_url", text="Use Remote URL")`
|
||||
|
||||
if active_repo.use_remote_url:
|
||||
use_remote_url = active_repo.use_remote_url
|
||||
if use_remote_url:
|
||||
row = layout.row()
|
||||
split = row.split(factor=0.936)
|
||||
if active_repo.remote_url == "":
|
||||
@ -2244,15 +2245,13 @@ class USERPREF_PT_extensions_repos(Panel):
|
||||
# valid UTF-8 which will raise a Python exception when passed in as text.
|
||||
sub.prop(active_repo, "directory", text="")
|
||||
|
||||
row = layout_panel.row()
|
||||
row.active = not use_custom_directory
|
||||
row.prop(active_repo, "source")
|
||||
|
||||
if active_repo.use_remote_url:
|
||||
if use_remote_url:
|
||||
row = layout_panel.row(align=True, heading="Authentication")
|
||||
row.prop(active_repo, "use_access_token")
|
||||
|
||||
layout_panel.prop(active_repo, "use_cache")
|
||||
else:
|
||||
layout_panel.prop(active_repo, "source")
|
||||
|
||||
layout_panel.separator()
|
||||
|
||||
|
@ -279,7 +279,12 @@ size_t BKE_preferences_extension_repo_dirpath_get(const bUserExtensionRepo *repo
|
||||
|
||||
std::optional<std::string> path = std::nullopt;
|
||||
|
||||
switch (repo->source) {
|
||||
uint8_t source = repo->source;
|
||||
if (repo->flag & USER_EXTENSION_REPO_FLAG_USE_REMOTE_URL) {
|
||||
source = USER_EXTENSION_REPO_SOURCE_USER;
|
||||
}
|
||||
|
||||
switch (source) {
|
||||
case USER_EXTENSION_REPO_SOURCE_SYSTEM: {
|
||||
path = BKE_appdir_folder_id(BLENDER_SYSTEM_EXTENSIONS, nullptr);
|
||||
break;
|
||||
|
@ -604,7 +604,7 @@ static int preferences_extension_repo_remove_invoke(bContext *C,
|
||||
}
|
||||
|
||||
if (remove_files) {
|
||||
if ((repo->flag & USER_EXTENSION_REPO_FLAG_USE_CUSTOM_DIRECTORY) == 0) {
|
||||
if ((repo->flag & USER_EXTENSION_REPO_FLAG_USE_REMOTE_URL) == 0) {
|
||||
if (repo->source == USER_EXTENSION_REPO_SOURCE_SYSTEM) {
|
||||
remove_files = false;
|
||||
}
|
||||
@ -649,7 +649,7 @@ static int preferences_extension_repo_remove_exec(bContext *C, wmOperator *op)
|
||||
BKE_callback_exec_null(bmain, BKE_CB_EVT_EXTENSION_REPOS_UPDATE_PRE);
|
||||
|
||||
if (remove_files) {
|
||||
if ((repo->flag & USER_EXTENSION_REPO_FLAG_USE_CUSTOM_DIRECTORY) == 0) {
|
||||
if ((repo->flag & USER_EXTENSION_REPO_FLAG_USE_REMOTE_URL) == 0) {
|
||||
if (repo->source == USER_EXTENSION_REPO_SOURCE_SYSTEM) {
|
||||
/* The UI doesn't show this option, if it's accessed disallow it. */
|
||||
BKE_report(op->reports, RPT_WARNING, "Unable to remove files for \"System\" repositories");
|
||||
|
@ -669,7 +669,7 @@ typedef enum eUserExtensionRepo_Flag {
|
||||
|
||||
/**
|
||||
* The source to use (User or System), only valid when the
|
||||
* #USER_EXTENSION_REPO_FLAG_USE_CUSTOM_DIRECTORY flag isn't set.
|
||||
* #USER_EXTENSION_REPO_FLAG_USE_REMOTE_URL flag isn't set.
|
||||
*/
|
||||
typedef enum eUserExtensionRepo_Source {
|
||||
USER_EXTENSION_REPO_SOURCE_USER = 0,
|
||||
|
Loading…
Reference in New Issue
Block a user