Spaces:
Running
on
Zero
Running
on
Zero
File size: 4,116 Bytes
1397f77 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
import os, sys, shutil
import json
import gradio as gr
import zipfile
import subprocess
from assets.i18n.i18n import I18nAuto
i18n = I18nAuto()
now_dir = os.getcwd()
sys.path.append(now_dir)
from tabs.settings.restart import restart_applio
plugins_path = os.path.join(now_dir, "tabs", "plugins", "installed")
if not os.path.exists(plugins_path):
os.makedirs(plugins_path)
json_file_path = os.path.join(now_dir, "assets", "config.json")
current_folders = os.listdir(plugins_path)
def get_existing_folders():
if os.path.exists(json_file_path):
with open(json_file_path, "r") as file:
config = json.load(file)
return config["plugins"]
else:
return []
def save_existing_folders(existing_folders):
with open(json_file_path, "r") as file:
config = json.load(file)
config["plugins"] = existing_folders
with open(json_file_path, "w") as file:
json.dump(config, file, indent=2)
def save_plugin_dropbox(dropbox):
if "zip" not in dropbox:
raise gr.Error(
message="The file you dropped is not a valid plugin.zip. Please try again."
)
else:
file_name = os.path.basename(dropbox)
folder_name = file_name.split(".zip")[0]
folder_path = os.path.join(plugins_path, folder_name)
zip_file_path = os.path.join(plugins_path, file_name)
if os.path.exists(folder_name):
os.remove(folder_name)
shutil.move(dropbox, os.path.join(plugins_path, file_name))
print("Proceeding with the extraction...")
with zipfile.ZipFile(zip_file_path, "r") as zip_ref:
zip_ref.extractall(plugins_path)
os.remove(zip_file_path)
if os.path.exists(os.path.join(folder_path, "requirements.txt")):
if os.name == "nt":
subprocess.run(
[
os.path.join("env", "python.exe"),
"-m",
"pip",
"install",
"-r",
os.path.join(folder_path, "requirements.txt"),
]
)
else:
subprocess.run(
[
"python",
"-m",
"pip",
"install",
"-r",
os.path.join(folder_path, "requirements.txt"),
]
)
else:
print("No requirements.txt file found in the plugin folder.")
save_existing_folders(get_existing_folders() + [folder_name])
print(
f"{folder_name} plugin installed in {plugins_path}! Restarting applio to apply the changes."
)
gr.Info(
f"{folder_name} plugin installed in {plugins_path}! Restarting applio to apply the changes."
)
restart_applio()
return None
def check_new_folders():
existing_folders = get_existing_folders()
new_folders = set(current_folders) - set(existing_folders)
save_existing_folders(current_folders)
if new_folders:
for new_folder in new_folders:
complete_path = os.path.join(plugins_path, new_folder)
print(f"New plugin {new_folder} found, installing it...")
if os.path.exists(os.path.join(complete_path, "requirements.txt")):
subprocess.run(
[
os.path.join("env", "python.exe"),
"-m",
"pip",
"install",
"-r",
os.path.join(complete_path, "requirements.txt"),
]
)
else:
print("No requirements.txt file found in the plugin folder.")
print("Plugins checked and installed! Restarting applio to apply the changes.")
restart_applio()
|