feat: disable/enable

This commit is contained in:
Dr.Lt.Data 2023-05-15 17:17:31 +09:00
parent 1516dbcaa8
commit 9d20369bd3
2 changed files with 172 additions and 11 deletions

View File

@ -9,7 +9,7 @@ sys.path.append('../..')
from torchvision.datasets.utils import download_url from torchvision.datasets.utils import download_url
# ensure .js # ensure .js
print("### Loading: ComfyUI-Manager (V0.2)") print("### Loading: ComfyUI-Manager (V0.3)")
comfy_path = os.path.dirname(folder_paths.__file__) comfy_path = os.path.dirname(folder_paths.__file__)
custom_nodes_path = os.path.join(comfy_path, 'custom_nodes') custom_nodes_path = os.path.join(comfy_path, 'custom_nodes')
@ -135,7 +135,10 @@ def check_a_custom_node_installed(item):
item['installed'] = 'True' item['installed'] = 'True'
except: except:
item['installed'] = 'True' item['installed'] = 'True'
elif os.path.exists(dir_path+".disabled"):
item['installed'] = 'Disabled'
else: else:
item['installed'] = 'False' item['installed'] = 'False'
@ -145,6 +148,8 @@ def check_a_custom_node_installed(item):
file_path = os.path.join(base_path, dir_name) file_path = os.path.join(base_path, dir_name)
if os.path.exists(file_path): if os.path.exists(file_path):
item['installed'] = 'True' item['installed'] = 'True'
elif os.path.exists(file_path + ".disabled"):
item['installed'] = 'Disabled'
else: else:
item['installed'] = 'False' item['installed'] = 'False'
@ -288,19 +293,52 @@ def copy_install(files, js_path_name=None):
def copy_uninstall(files, js_path_name=None): def copy_uninstall(files, js_path_name=None):
for url in files: for url in files:
dir_name = os.path.basename(url) dir_name = os.path.basename(url)
base_path = custom_nodes_path if url.endswith('.py') else js_path base_path = custom_nodes_path if url.endswith('.py') else os.path.join(js_path, js_path_name)
file_path = os.path.join(base_path, dir_name) file_path = os.path.join(base_path, dir_name)
try: try:
os.remove(file_path) if os.path.exists(file_path):
os.remove(file_path)
elif os.path.exists(file_path+".disabled"):
os.remove(file_path+".disabled")
except Exception as e: except Exception as e:
print(f"UnInstall(copy) error: {url} / {e}") print(f"Uninstall(copy) error: {url} / {e}")
return False return False
print("Uninstallation was successful.") print("Uninstallation was successful.")
return True return True
def copy_set_active(files, is_disable, js_path_name=None):
if is_disable:
action_name = "Disable"
else:
action_name = "Enable"
for url in files:
dir_name = os.path.basename(url)
base_path = custom_nodes_path if url.endswith('.py') else os.path.join(js_path, js_path_name)
file_path = os.path.join(base_path, dir_name)
try:
if is_disable:
current_name = file_path
new_name = file_path + ".disabled"
else:
current_name = file_path + ".disabled"
new_name = file_path
os.rename(current_name, new_name)
except Exception as e:
print(f"{action_name}(copy) error: {url} / {e}")
return False
print(f"{action_name} was successful.")
return True
def gitclone_install(files): def gitclone_install(files):
print(f"install: {files}") print(f"install: {files}")
for url in files: for url in files:
@ -359,8 +397,11 @@ def gitclone_uninstall(files):
if dir_path == '/' or dir_path[1:] == ":/" or dir_path == '': if dir_path == '/' or dir_path[1:] == ":/" or dir_path == '':
print(f"Uninstall(git-clone) error: invalid path '{dir_path}' for '{url}'") print(f"Uninstall(git-clone) error: invalid path '{dir_path}' for '{url}'")
return False return False
shutil.rmtree(dir_path) if os.path.exists(dir_path):
shutil.rmtree(dir_path)
elif os.path.exists(dir_path+".disabled"):
shutil.rmtree(dir_path+".disabled")
except Exception as e: except Exception as e:
print(f"Uninstall(git-clone) error: {url} / {e}") print(f"Uninstall(git-clone) error: {url} / {e}")
return False return False
@ -369,8 +410,43 @@ def gitclone_uninstall(files):
return True return True
def gitclone_set_active(files, is_disable):
import os
if is_disable:
action_name = "Disable"
else:
action_name = "Enable"
print(f"{action_name}: {files}")
for url in files:
try:
dir_name = os.path.splitext(os.path.basename(url))[0].replace(".git", "")
dir_path = os.path.join(custom_nodes_path, dir_name)
# safey check
if dir_path == '/' or dir_path[1:] == ":/" or dir_path == '':
print(f"{action_name}(git-clone) error: invalid path '{dir_path}' for '{url}'")
return False
if is_disable:
current_path = dir_path
new_path = dir_path + ".disabled"
else:
current_path = dir_path + ".disabled"
new_path = dir_path
os.rename(current_path, new_path)
except Exception as e:
print(f"{action_name}(git-clone) error: {url} / {e}")
return False
print(f"{action_name} was successful.")
return True
def gitclone_update(files): def gitclone_update(files):
import shutil
import os import os
print(f"uninstall: {files}") print(f"uninstall: {files}")
@ -456,6 +532,28 @@ async def install_custom_node(request):
return web.Response(status=400) return web.Response(status=400)
@server.PromptServer.instance.routes.post("/customnode/toggle_active")
async def install_custom_node(request):
json_data = await request.json()
install_type = json_data['install_type']
is_disabled = json_data['installed'] == "Disabled"
print(f"Update custom node '{json_data['title']}'")
res = False
if install_type == "git-clone":
res = gitclone_set_active(json_data['files'], not is_disabled)
elif install_type == "copy":
res = copy_set_active(json_data['files'], not is_disabled)
if res:
return web.json_response({}, content_type='application/json')
return web.Response(status=400)
@server.PromptServer.instance.routes.post("/model/install") @server.PromptServer.instance.routes.post("/model/install")
async def install_model(request): async def install_model(request):
json_data = await request.json() json_data = await request.json()

View File

@ -216,20 +216,40 @@ class CustomNodesInstaller extends ComfyDialog {
var installBtn = document.createElement('button'); var installBtn = document.createElement('button');
var installBtn2 = null; var installBtn2 = null;
var installBtn3 = null;
this.install_buttons.push(installBtn); this.install_buttons.push(installBtn);
switch(data.installed) { switch(data.installed) {
case 'Disabled':
installBtn3 = document.createElement('button');
installBtn3.innerHTML = 'Enable';
installBtn3.style.backgroundColor = 'blue';
this.install_buttons.push(installBtn3);
installBtn.innerHTML = 'Uninstall';
installBtn.style.backgroundColor = 'red';
break;
case 'Update': case 'Update':
installBtn2 = document.createElement('button'); installBtn2 = document.createElement('button');
installBtn2.innerHTML = 'Update'; installBtn2.innerHTML = 'Update';
installBtn2.style.backgroundColor = 'blue'; installBtn2.style.backgroundColor = 'blue';
this.install_buttons.push(installBtn2); this.install_buttons.push(installBtn2);
installBtn3 = document.createElement('button');
installBtn3.innerHTML = 'Disable';
installBtn3.style.backgroundColor = 'MediumSlateBlue';
this.install_buttons.push(installBtn3);
installBtn.innerHTML = 'Uninstall'; installBtn.innerHTML = 'Uninstall';
installBtn.style.backgroundColor = 'red'; installBtn.style.backgroundColor = 'red';
break; break;
case 'True': case 'True':
installBtn3 = document.createElement('button');
installBtn3.innerHTML = 'Disable';
installBtn3.style.backgroundColor = 'MediumSlateBlue';
this.install_buttons.push(installBtn3);
installBtn.innerHTML = 'Uninstall'; installBtn.innerHTML = 'Uninstall';
installBtn.style.backgroundColor = 'red'; installBtn.style.backgroundColor = 'red';
break; break;
@ -239,10 +259,11 @@ class CustomNodesInstaller extends ComfyDialog {
break; break;
default: default:
installBtn.innerHTML = 'Try Install'; installBtn.innerHTML = 'Try Install';
installBtn.style.backgroundColor = 'silver'; installBtn.style.backgroundColor = 'Gray';
} }
if(installBtn2 != null) { if(installBtn2 != null) {
installBtn2.style.width = "120px";
installBtn2.addEventListener('click', function() { installBtn2.addEventListener('click', function() {
install_custom_node(data, CustomNodesInstaller.instance, 'update'); install_custom_node(data, CustomNodesInstaller.instance, 'update');
}); });
@ -250,6 +271,16 @@ class CustomNodesInstaller extends ComfyDialog {
data5.appendChild(installBtn2); data5.appendChild(installBtn2);
} }
if(installBtn3 != null) {
installBtn3.style.width = "120px";
installBtn3.addEventListener('click', function() {
install_custom_node(data, CustomNodesInstaller.instance, 'toggle_active');
});
data5.appendChild(installBtn3);
}
installBtn.style.width = "120px";
installBtn.addEventListener('click', function() { installBtn.addEventListener('click', function() {
if(this.innerHTML == 'Uninstall') { if(this.innerHTML == 'Uninstall') {
if (confirm(`Are you sure uninstall ${data.title}?`)) { if (confirm(`Are you sure uninstall ${data.title}?`)) {
@ -441,20 +472,40 @@ class AlternativesInstaller extends ComfyDialog {
if(data.custom_node) { if(data.custom_node) {
var installBtn = document.createElement('button'); var installBtn = document.createElement('button');
var installBtn2 = null; var installBtn2 = null;
var installBtn3 = null;
this.install_buttons.push(installBtn); this.install_buttons.push(installBtn);
switch(data.custom_node.installed) { switch(data.custom_node.installed) {
case 'Disabled':
installBtn3 = document.createElement('button');
installBtn3.innerHTML = 'Enable';
installBtn3.style.backgroundColor = 'blue';
this.install_buttons.push(installBtn3);
installBtn.innerHTML = 'Uninstall';
installBtn.style.backgroundColor = 'red';
break;
case 'Update': case 'Update':
installBtn2 = document.createElement('button'); installBtn2 = document.createElement('button');
installBtn2.innerHTML = 'Update'; installBtn2.innerHTML = 'Update';
installBtn2.style.backgroundColor = 'blue'; installBtn2.style.backgroundColor = 'blue';
this.install_buttons.push(installBtn2); this.install_buttons.push(installBtn2);
installBtn3 = document.createElement('button');
installBtn3.innerHTML = 'Disable';
installBtn3.style.backgroundColor = 'MediumSlateBlue';
this.install_buttons.push(installBtn3);
installBtn.innerHTML = 'Uninstall'; installBtn.innerHTML = 'Uninstall';
installBtn.style.backgroundColor = 'red'; installBtn.style.backgroundColor = 'red';
break; break;
case 'True': case 'True':
installBtn3 = document.createElement('button');
installBtn3.innerHTML = 'Disable';
installBtn3.style.backgroundColor = 'MediumSlateBlue';
this.install_buttons.push(installBtn3);
installBtn.innerHTML = 'Uninstall'; installBtn.innerHTML = 'Uninstall';
installBtn.style.backgroundColor = 'red'; installBtn.style.backgroundColor = 'red';
break; break;
@ -464,10 +515,11 @@ class AlternativesInstaller extends ComfyDialog {
break; break;
default: default:
installBtn.innerHTML = 'Try Install'; installBtn.innerHTML = 'Try Install';
installBtn.style.backgroundColor = 'silver'; installBtn.style.backgroundColor = 'Gray';
} }
if(installBtn2 != null) { if(installBtn2 != null) {
installBtn2.style.width = "120px";
installBtn2.addEventListener('click', function() { installBtn2.addEventListener('click', function() {
install_custom_node(data.custom_node, AlternativesInstaller.instance, 'update'); install_custom_node(data.custom_node, AlternativesInstaller.instance, 'update');
}); });
@ -475,6 +527,17 @@ class AlternativesInstaller extends ComfyDialog {
data6.appendChild(installBtn2); data6.appendChild(installBtn2);
} }
if(installBtn3 != null) {
installBtn3.style.width = "120px";
installBtn3.addEventListener('click', function() {
install_custom_node(data, CustomNodesInstaller.instance, 'toggle_active');
});
data6.appendChild(installBtn3);
}
installBtn.style.width = "120px";
installBtn.addEventListener('click', function() { installBtn.addEventListener('click', function() {
if(this.innerHTML == 'Uninstall') { if(this.innerHTML == 'Uninstall') {
if (confirm(`Are you sure uninstall ${data.title}?`)) { if (confirm(`Are you sure uninstall ${data.title}?`)) {