Refactored the UI for remote downloader window.

This commit is contained in:
Victorious Children Studios 2023-12-21 20:33:35 +02:00
parent 89e5d35768
commit 81a8068c41
5 changed files with 195 additions and 120 deletions

View file

@ -23,6 +23,7 @@ import cairo
# Own modules # Own modules
from settings import settings from settings import settings
from settings import fileformats
from settings import talk from settings import talk
from project_manager import pm_project from project_manager import pm_project
@ -117,7 +118,7 @@ def down(win, website, filename, fsize=100000):
savef.write(unz) savef.write(unz)
savef.close() savef.close()
def download_missing_changed(win, cur): def download_missing_changed(win, cur, call):
# This function downloads files from remote server using the # This function downloads files from remote server using the
# remote-folder-data data. # remote-folder-data data.
@ -140,6 +141,7 @@ def download_missing_changed(win, cur):
pass pass
win.current["remote-folder-data"][cur]["downloading"] = False win.current["remote-folder-data"][cur]["downloading"] = False
win.current["calls"][call]["var"] = False
def get_folder_info(win, folders, cur): def get_folder_info(win, folders, cur):
@ -599,7 +601,7 @@ def prompt_layer(win, call):
win.current["remote-folder-data"][cur]["downloading"] = True win.current["remote-folder-data"][cur]["downloading"] = True
start_downaloding = threading.Thread(target=download_missing_changed, start_downaloding = threading.Thread(target=download_missing_changed,
args=(win, cur, )) args=(win, cur, call, ))
start_downaloding.setDaemon(True) start_downaloding.setDaemon(True)
start_downaloding.start() start_downaloding.start()
@ -646,22 +648,138 @@ def prompt_layer(win, call):
layer.move_to(win.current["w"]/2-180, layer.move_to(win.current["w"]/2-180,
win.current["h"]-145) win.current["h"]-145)
layer.show_text(win.current["http-server"]["message"]) layer.show_text(win.current["http-server"]["message"])
# Top Tabs
if "active_tab" not in win.current["remote-folder-data"][cur]:
win.current["remote-folder-data"][cur]["active_tab"] = "changed"
# Missing
def do():
win.current["remote-folder-data"][cur]["active_tab"] = "missing"
if win.current["remote-folder-data"][cur]["active_tab"] == "missing":
UI_color.set(layer, win, "progress_time")
UI_elements.roundrect(layer, win,
win.current["w"]/2-340,
110,
330,
40,
10)
UI_elements.roundrect(layer, win,
win.current["w"]/2-340,
110,
330,
40,
10,
button=do,
icon="new_file",
tip=talk.text("MissingFiles"))
UI_color.set(layer, win, "text_normal")
layer.set_font_size(20)
layer.move_to(win.current["w"]/2-290,
135)
layer.show_text(str(len(win.current["remote-folder-data"][cur]["missing"]))+" "+talk.text("MissingFiles"))
# Changed
def do():
win.current["remote-folder-data"][cur]["active_tab"] = "changed"
if win.current["remote-folder-data"][cur]["active_tab"] == "changed":
UI_color.set(layer, win, "progress_time")
UI_elements.roundrect(layer, win,
win.current["w"]/2+10,
110,
330,
40,
10)
UI_elements.roundrect(layer, win,
win.current["w"]/2+10,
110,
330,
40,
10,
button=do,
icon="configure_file",
tip=talk.text("ChangedFiles"))
UI_color.set(layer, win, "text_normal")
layer.set_font_size(20)
layer.move_to(win.current["w"]/2+60,
135)
layer.show_text(str(len(win.current["remote-folder-data"][cur]["changed"]))+" "+talk.text("ChangedFiles"))
# Search
UI_elements.image(layer, win, "settings/themes/"\
+win.settings["Theme"]+"/icons/search.png",
win.current["w"]/2,
160,
40,
40)
UI_elements.text(layer, win, "http_client_search",
win.current["w"]/2+50,
160,
250,
40)
# Toggle Visible
if "toggle_visible" not in win.current["remote-folder-data"][cur]:
win.current["remote-folder-data"][cur]["toggle_visible"] = True
toggle = {"do":None}
def do():
win.current["remote-folder-data"][cur]["toggle_visible"] = not win.current["remote-folder-data"][cur]["toggle_visible"]
toggle["do"] = win.current["remote-folder-data"][cur]["toggle_visible"]
icon = "unchecked"
if win.current["remote-folder-data"][cur]["toggle_visible"]:
icon = "checked"
UI_elements.roundrect(layer, win,
win.current["w"]/2-340,
160,
330,
40,
10,
button=do,
icon=icon,
tip=talk.text("ToggleVisible"))
UI_color.set(layer, win, "text_normal")
layer.set_font_size(20)
layer.move_to(win.current["w"]/2-290,
185)
layer.show_text(talk.text("ToggleVisible"))
# Clipping everything # Clipping everything
UI_elements.roundrect(layer, win, UI_elements.roundrect(layer, win,
win.current["w"]/2-350, win.current["w"]/2-350,
100, 200,
700, 700,
win.current["h"]-260, win.current["h"]-360,
10, 10,
fill=False) fill=False)
layer.clip() layer.clip()
clip = [ clip = [
win.current["w"]/2-350, win.current["w"]/2-350,
100, 200,
700, 700,
win.current["h"]-260] win.current["h"]-360]
# Setting up the scroll # Setting up the scroll
if "http-prompt" not in win.scroll: if "http-prompt" not in win.scroll:
@ -669,134 +787,90 @@ def prompt_layer(win, call):
current_Y = 0 current_Y = 100
# Missing files # Display list
DisplayList = {}
ActiveTab = win.current["remote-folder-data"][cur]["active_tab"]
DisplayList = win.current["remote-folder-data"][cur][ActiveTab]
if "missing_active" not in win.current["remote-folder-data"][cur]: try:
win.current["remote-folder-data"][cur]["missing_active"] = False for f in DisplayList:
fdata = DisplayList[f]
icon = "closed"
if win.current["remote-folder-data"][cur]["missing_active"]:
icon = "open"
def do():
win.current["remote-folder-data"][cur]["missing_active"] = not win.current["remote-folder-data"][cur]["missing_active"]
UI_elements.roundrect(layer, win,
win.current["w"]/2-340,
110 + current_Y + win.scroll["http-prompt"],
680,
40,
10,
button=do,
icon=icon,
tip=talk.text("MissingFiles"))
UI_color.set(layer, win, "text_normal")
layer.set_font_size(20)
layer.move_to(win.current["w"]/2-290,
current_Y + win.scroll["http-prompt"] + 135)
layer.show_text(talk.text("MissingFiles")+" ( "+str(len(win.current["remote-folder-data"][cur]["missing"]))+" ) ")
current_Y += 50
if win.current["remote-folder-data"][cur]["missing_active"]: if fdata.get("finished"):
try: continue
for f in win.current["remote-folder-data"][cur]["missing"]:
fdata = win.current["remote-folder-data"][cur]["missing"][f] found = True
if win.text["http_client_search"]["text"]:
for word in win.text["http_client_search"]["text"].split(" "):
if word.lower() not in f.lower():
found = False
continue
if fdata.get("finished"): if not found:
continue continue
UI_color.set(layer, win, "text_normal")
layer.set_font_size(20)
layer.move_to(win.current["w"]/2-270,
current_Y + win.scroll["http-prompt"] + 135)
layer.show_text(f)
current_Y += 50
except:
pass
# Updated files
if "changed_active" not in win.current["remote-folder-data"][cur]:
win.current["remote-folder-data"][cur]["changed_active"] = True
icon = "closed"
if win.current["remote-folder-data"][cur]["changed_active"]:
icon = "open"
def do():
win.current["remote-folder-data"][cur]["changed_active"] = not win.current["remote-folder-data"][cur]["changed_active"]
UI_elements.roundrect(layer, win,
win.current["w"]/2-340,
110 + current_Y + win.scroll["http-prompt"],
680,
40,
10,
button=do,
icon=icon,
tip=talk.text("ChangedFiles"))
UI_color.set(layer, win, "text_normal")
layer.set_font_size(20)
layer.move_to(win.current["w"]/2-290,
current_Y + win.scroll["http-prompt"] + 135)
layer.show_text(talk.text("ChangedFiles")+" ( "+str(len(win.current["remote-folder-data"][cur]["changed"]))+" ) ")
current_Y += 50
if win.current["remote-folder-data"][cur]["changed_active"]: ticon = "unchecked"
try: if fdata.get("to_download", True):
for f in win.current["remote-folder-data"][cur]["changed"]: ticon = "checked"
fdata = win.current["remote-folder-data"][cur]["changed"][f] if toggle["do"] != None:
fdata["to_download"] = toggle["do"]
def do():
fdata["to_download"] = not fdata.get("to_download", True)
if fdata.get("finished"): # Filetype icon
continue ext = f[f.rfind(".")+1:]
if ext in fileformats.images:
icon = "image"
elif ext in fileformats.videos:
icon = "video"
elif ext in fileformats.sounds:
icon = "mus"
elif ext == "blend":
icon = "blender"
elif ext == "progress":
icon = "checklist"
else:
icon = "file"
icon = "unchecked"
if fdata["to_download"]:
icon = "checked" UI_elements.roundrect(layer, win,
win.current["w"]/2-315,
110 + current_Y + win.scroll["http-prompt"],
660,
40,
10,
button=do,
icon=ticon,
tip=f)
def do(): UI_elements.image(layer, win, "settings/themes/"+win.settings["Theme"]+"/icons/"+icon+".png",
fdata["to_download"] = not fdata["to_download"] win.current["w"]/2-275,
UI_elements.roundrect(layer, win,
win.current["w"]/2-315,
110 + current_Y + win.scroll["http-prompt"], 110 + current_Y + win.scroll["http-prompt"],
660,
40, 40,
10, 40)
button=do,
icon=icon)
UI_color.set(layer, win, "text_normal")
layer.set_font_size(20)
layer.move_to(win.current["w"]/2-220,
current_Y + win.scroll["http-prompt"] + 135)
layer.show_text(f[f.rfind("/")+1:])
UI_color.set(layer, win, "text_normal") current_Y += 50
layer.set_font_size(20) except Exception as e:
layer.move_to(win.current["w"]/2-270, print(e)
current_Y + win.scroll["http-prompt"] + 135) pass
layer.show_text(f)
current_Y += 50
except:
pass
UI_elements.scroll_area(layer, win, "http-prompt", UI_elements.scroll_area(layer, win, "http-prompt",
int(win.current["w"]/2-350), int(win.current["w"]/2-350),
100, 200,
700, 700,
win.current["h"]-260, win.current["h"]-360,
current_Y, current_Y,
bar=True, bar=True,
mmb=True, mmb=True,

View file

@ -181,7 +181,7 @@ class handler(BaseHTTPRequestHandler):
# This is a little weird, sometimes the files have the full URL # This is a little weird, sometimes the files have the full URL
# to the data. # to the data.
if i.startswith(PROJECT): # This is good when the server is on the same machine as the orignal project if i.startswith(PROJECT): # This is good when the server is on the same machine as the orignal project
parsed.append(i[len(PROJECT):]) parsed.append(i[len(PROJECT):])
elif i.startswith(ORIGINAL_PROJECT): # This is when the server is a mirror elif i.startswith(ORIGINAL_PROJECT): # This is when the server is a mirror

View file

@ -61,7 +61,7 @@ def run():
# I might figure out how to make it faster with various resulutions. Not now. # I might figure out how to make it faster with various resulutions. Not now.
win.connect("destroy", Gtk.main_quit) win.connect("destroy", Gtk.main_quit)
win.set_title("VCStudio : "+talk.text("project-manager")) win.set_title("Blender-Pipeline : "+talk.text("project-manager"))
win.set_default_icon_from_file("tinyicon.png") win.set_default_icon_from_file("tinyicon.png")
# Setting up the events ( mouse and keyboard handling ) # Setting up the events ( mouse and keyboard handling )

View file

@ -291,4 +291,5 @@ RemoteAssetUpdates = [Remote Asset Updates]
RemoteShotUpdates = [Remote Shot Updates] RemoteShotUpdates = [Remote Shot Updates]
DownloadRemoteServer = [Download Files] DownloadRemoteServer = [Download Files]
blender-bash = [Command To Start Blender] blender-bash = [Command To Start Blender]
StillLoadingRemoteData = [Still Loading ...] StillLoadingRemoteData = [Still Loading ...]
ToggleVisible = [Toggle Visible]

View file

@ -98,7 +98,7 @@ def run(project, win):
win.set_position(Gtk.WindowPosition.CENTER) win.set_position(Gtk.WindowPosition.CENTER)
win.maximize() win.maximize()
win.connect("destroy", Gtk.main_quit) win.connect("destroy", Gtk.main_quit)
win.set_title("VCStudio") win.set_title("Blender-Pipeline")
win.set_default_icon_from_file("tinyicon.png") win.set_default_icon_from_file("tinyicon.png")
# Setting up the events ( mouse and keyboard handling ) # Setting up the events ( mouse and keyboard handling )
@ -167,7 +167,7 @@ def run(project, win):
win.analytics = analytics.load(project) win.analytics = analytics.load(project)
# Try to put a name of the project at the title # Try to put a name of the project at the title
win.set_title("VCStudio : "+win.analytics["name"]) win.set_title("Blender-Pipeline : "+win.analytics["name"])
# Cashed tables # Cashed tables
win.color = UI_color.get_table() win.color = UI_color.get_table()