2020-11-26 16:30:34 +01:00
|
|
|
# THIS FILE IS A PART OF VCStudio
|
|
|
|
# PYTHON 3
|
|
|
|
|
|
|
|
import os
|
|
|
|
w, h = os.get_terminal_size()
|
|
|
|
|
|
|
|
from settings import settings
|
|
|
|
from settings import talk
|
|
|
|
from troubleshooter import fix
|
|
|
|
|
|
|
|
commands = []
|
|
|
|
def completer(text, state):
|
|
|
|
options = [i for i in commands if i.startswith(text)]
|
|
|
|
if state < len(options):
|
|
|
|
return options[state]
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
|
|
|
|
try:
|
|
|
|
import readline
|
|
|
|
readline.parse_and_bind("tab: complete")
|
|
|
|
readline.set_completer(completer)
|
|
|
|
except:
|
|
|
|
print("NO TABS, SORRY!")
|
|
|
|
|
|
|
|
|
|
|
|
def cls():
|
|
|
|
#cleaning the terminal
|
|
|
|
os.system("clear")
|
|
|
|
|
|
|
|
global w
|
|
|
|
global h
|
|
|
|
|
|
|
|
w, h = os.get_terminal_size()
|
|
|
|
if (w % 2) == 0:
|
|
|
|
w = w - 1
|
|
|
|
|
|
|
|
|
|
|
|
def output(form, text=""):
|
|
|
|
#Basically a fancy print() function
|
|
|
|
while len(text) < w:
|
|
|
|
text = text + " "
|
|
|
|
|
|
|
|
print(form + text)
|
|
|
|
|
|
|
|
# COFIGURING LANGUAGE
|
|
|
|
def lang_setting():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
title = "TYPE YOUR LANGUAGE AND HIT ENTER"
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
|
|
|
cls()
|
|
|
|
|
|
|
|
#getting the configuration
|
|
|
|
language = settings.read("Language")
|
|
|
|
|
|
|
|
# Testing if I cal load the language file.
|
|
|
|
try:
|
|
|
|
open("settings/languages/"+language+".data")
|
|
|
|
return
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
|
|
|
talk.alert("Select Language. Look in console.")
|
|
|
|
|
|
|
|
# Getting list of available languages
|
|
|
|
all_langs = settings.list_languages()
|
|
|
|
|
|
|
|
# Make them auto-comelitable
|
|
|
|
global commands
|
|
|
|
commands = []
|
|
|
|
for lang in all_langs:
|
|
|
|
commands.append(lang)
|
|
|
|
|
|
|
|
# Counting them
|
|
|
|
len_langs = len(all_langs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
output("\033[1;44m")
|
|
|
|
|
|
|
|
#Title
|
|
|
|
|
|
|
|
output("\033[1;44m", \
|
|
|
|
" " * int(round((w-len(title))/2)) \
|
|
|
|
+ title + \
|
|
|
|
" " * int((w-len(title))/2) \
|
|
|
|
)
|
|
|
|
|
|
|
|
output("\033[1;44m")
|
|
|
|
|
|
|
|
for raws in range(int((h-5-len_langs)/2)):
|
|
|
|
output("\033[1;40m")
|
|
|
|
|
|
|
|
for lang in all_langs:
|
|
|
|
|
|
|
|
output("\033[1;40m", \
|
|
|
|
" " * int(round((w-len(lang))/2)) \
|
|
|
|
+ lang + \
|
|
|
|
" " * int((w-len(lang))/2) \
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
for raws in range(int((h-5-len_langs)/2)):
|
|
|
|
output("\033[1;40m")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\033[1;m")
|
|
|
|
|
|
|
|
# Trying to write language setting.
|
|
|
|
command = input(":")
|
|
|
|
if command != "":
|
|
|
|
if command not in all_langs:
|
|
|
|
title = "THERE IS NO " + command + " FILE"
|
|
|
|
else:
|
|
|
|
settings.write("Language",command)
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
lang_setting()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def modules_test(Modules, title, setting):
|
|
|
|
|
|
|
|
|
|
|
|
# TESTING THAT MODULES ARE INSTALLED CORRECTLY
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cls()
|
|
|
|
|
|
|
|
import time # IK it's crazy but user needs to understand what's
|
|
|
|
# going on. So there be some delay between them.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
title = talk.text(title)
|
|
|
|
|
|
|
|
|
|
|
|
def drawmodules():
|
|
|
|
|
|
|
|
cls()
|
|
|
|
|
|
|
|
|
|
|
|
output("\033[1;44m")
|
|
|
|
|
|
|
|
output("\033[1;44m", \
|
|
|
|
" " * int((w-len(title))/2) \
|
|
|
|
+ title + \
|
|
|
|
" " * int((w-len(title))/2) \
|
|
|
|
)
|
|
|
|
|
|
|
|
output("\033[1;44m")
|
|
|
|
|
|
|
|
for raws in range(int((h-5-len(Modules))/2)):
|
|
|
|
output("\033[1;40m")
|
|
|
|
|
|
|
|
for mod2 in Modules:
|
|
|
|
|
|
|
|
if Modules[mod2] == None:
|
|
|
|
|
|
|
|
ans = mod2
|
|
|
|
|
|
|
|
output("\033[1;40m", " "+ans)
|
|
|
|
|
|
|
|
elif Modules[mod2] == True:
|
|
|
|
ans = mod2 + " "*int(w/2-len(mod2)) + talk.text("checked")
|
|
|
|
|
|
|
|
output("\033[1;42m", " "+ans)
|
|
|
|
else:
|
|
|
|
|
|
|
|
ans = mod2 + " "*int(w/2-len(mod2)) + talk.text("failed")
|
|
|
|
|
|
|
|
output("\033[1;41m", " "+ans)
|
|
|
|
|
|
|
|
|
|
|
|
for raws in range(int((h-6-len(Modules))/2)):
|
|
|
|
output("\033[1;40m")
|
|
|
|
|
|
|
|
errors = 0
|
|
|
|
for mod in Modules:
|
|
|
|
|
|
|
|
drawmodules()
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
|
|
|
|
exec( "import " + mod)
|
|
|
|
Modules[mod] = True
|
|
|
|
|
|
|
|
except:
|
|
|
|
Modules[mod] = False
|
|
|
|
errors = errors + 1
|
|
|
|
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
time.sleep(0.1)
|
|
|
|
|
|
|
|
|
|
|
|
drawmodules()
|
|
|
|
|
|
|
|
if errors:
|
|
|
|
|
|
|
|
global commands
|
|
|
|
commands = ["Fix"]
|
|
|
|
|
|
|
|
talk.alert(talk.text("missingmodulenotification"))
|
|
|
|
|
|
|
|
title = str(errors)+" "+talk.text("missingmoduleserror")
|
|
|
|
|
|
|
|
output("\033[1;40m\033[1;31m", \
|
|
|
|
" " * int((w-len(title))/2) \
|
|
|
|
+ title + \
|
|
|
|
" " * int((w-len(title))/2) \
|
|
|
|
)
|
|
|
|
|
|
|
|
#fix thing
|
|
|
|
print("\033[1;m")
|
|
|
|
command = input(":")
|
|
|
|
|
|
|
|
if command == "Fix":
|
|
|
|
fix.autofix(Modules)
|
|
|
|
|
|
|
|
else:
|
|
|
|
#if no errors
|
|
|
|
settings.write(setting, "Checked-by-troubleshooter")
|
|
|
|
|
|
|
|
print("\033[1;m")
|
|
|
|
|
|
|
|
|
|
|
|
if not settings.read("Python-is-good"):
|
|
|
|
|
|
|
|
Modules = {
|
|
|
|
"os":None,
|
|
|
|
"gi":None,
|
|
|
|
"gi.repository.Gtk":None,
|
|
|
|
"gi.repository.GLib":None,
|
|
|
|
"cairo":None,
|
|
|
|
"PIL":None,
|
|
|
|
"PIL.Image":None,
|
|
|
|
"subprocess":None,
|
|
|
|
"datetime":None,
|
|
|
|
"sys":None,
|
|
|
|
"urllib":None,
|
|
|
|
"urllib3":None,
|
|
|
|
"socket":None,
|
2020-12-10 23:04:12 +01:00
|
|
|
"readline":None,
|
|
|
|
"json":None,
|
|
|
|
"threading":None
|
2020-11-26 16:30:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
modules_test(Modules, "checkingpythonmodules", "Python-is-good")
|
|
|
|
|
|
|
|
if not settings.read("VCStudio-is-good"):
|
2020-12-10 23:04:12 +01:00
|
|
|
|
|
|
|
missing = []
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
# Let's get the list of files that supposed to be in here.
|
|
|
|
|
|
|
|
udata = open("settings/update.data")
|
|
|
|
udata = udata.read()
|
|
|
|
udata = udata.split("\n")
|
|
|
|
|
|
|
|
# Let's parse it
|
|
|
|
|
|
|
|
files = []
|
|
|
|
|
|
|
|
for f in udata:
|
|
|
|
if f and not f.startswith("VERSION") and not f.startswith("[") \
|
|
|
|
and not f.startswith("#") and f not in files:
|
|
|
|
files.append(f)
|
|
|
|
|
|
|
|
Modules = {}
|
|
|
|
num = 1
|
|
|
|
for f in sorted(files):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if num == h-5:
|
|
|
|
modules_test(Modules, "checkingpartsoftheprogramm", "VCStudio-is-good")
|
|
|
|
Modules = {}
|
|
|
|
num = 1
|
|
|
|
|
|
|
|
try:
|
|
|
|
test = open(f)
|
|
|
|
test = test.read()
|
|
|
|
|
|
|
|
if f.endswith(".py") and not "import bpy" in test\
|
|
|
|
and "-" not in f and f != "run.py":
|
|
|
|
Modules[f.replace("/", ".")[:-3]] = None
|
|
|
|
num += 1
|
|
|
|
except:
|
|
|
|
if not os.path.exists(os.getcwd()+"/"+f):
|
|
|
|
missing.append(f)
|
|
|
|
|
|
|
|
modules_test(Modules, "checkingpartsoftheprogramm", "VCStudio-is-good")
|
|
|
|
|
|
|
|
except:
|
|
|
|
i = "settings/update.data"
|
|
|
|
ans = i + " "*int(w/2-len(i)) + talk.text("failed")
|
|
|
|
|
|
|
|
output("\033[1;41m", " "+ans)
|
|
|
|
|
|
|
|
for i in missing:
|
|
|
|
ans = i + " "*int(w/2-len(i)) + talk.text("failed")
|
|
|
|
|
|
|
|
output("\033[1;41m", " "+ans)
|
2020-11-26 16:30:34 +01:00
|
|
|
|
|
|
|
|
2020-12-10 23:04:12 +01:00
|
|
|
desktop = """[Desktop Entry]
|
|
|
|
Name=VCStudio
|
|
|
|
GenericName=Blender-Organizer
|
|
|
|
Path="""+os.getcwd()+"""
|
|
|
|
Exec=python3 run.py
|
|
|
|
Icon="""+os.getcwd()+"""/tinyicon.png
|
|
|
|
Terminal=false
|
|
|
|
Type=Application
|
|
|
|
Categories=Graphics;3DGraphics;Office
|
2020-11-26 16:30:34 +01:00
|
|
|
|
2020-12-10 23:04:12 +01:00
|
|
|
"""
|
|
|
|
if os.path.exists(os.environ['HOME']+"/.local/share/applications") \
|
|
|
|
and not os.path.exists(os.environ['HOME']+"/.local/share/applications/VCStudio.desktop"):
|
|
|
|
o = open(os.environ['HOME']+"/.local/share/applications/VCStudio.desktop", "w")
|
|
|
|
o.write(desktop)
|
|
|
|
o.close()
|
|
|
|
output("\033[1;42m", talk.text("desktopcreated"))
|
2020-11-26 16:30:34 +01:00
|
|
|
|
|
|
|
|
2020-12-10 23:04:12 +01:00
|
|
|
print("\033[1;m")
|
2020-11-26 16:30:34 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|