| 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")): | |
| if os.name == "nt": | |
| subprocess.run( | |
| [ | |
| os.path.join("env", "python.exe"), | |
| "-m", | |
| "pip", | |
| "install", | |
| "-r", | |
| os.path.join(complete_path, "requirements.txt"), | |
| ] | |
| ) | |
| else: | |
| subprocess.run( | |
| [ | |
| "python", | |
| "-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() | |