File size: 3,320 Bytes
6edc0a9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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)