|
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) |
|
|
|
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, "tabs", "plugins", "installed_list.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: |
|
return json.load(file) |
|
else: |
|
return [] |
|
|
|
|
|
def save_existing_folders(existing_folders): |
|
with open(json_file_path, "w") as file: |
|
json.dump(existing_folders, file) |
|
|
|
|
|
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")): |
|
subprocess.run( |
|
[ |
|
os.path.join("env", "python.exe"), |
|
"-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}! Restart applio to see the changes." |
|
) |
|
gr.Info( |
|
f"{folder_name} plugin installed in {plugins_path}! Restart applio to see the changes." |
|
) |
|
return None |
|
|
|
|
|
def check_new_folders(): |
|
existing_folders = get_existing_folders() |
|
new_folders = set(current_folders) - set(existing_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! Restart applio to see the changes.") |
|
save_existing_folders(current_folders) |
|
|