pandemonium_cms/game/StaticMain.gd

93 lines
2.5 KiB
GDScript

extends WebServer
# Maybe WebNodes should get a method like get_property_list?
# (like get_uri_list, get_served_folder_list, get_served_file_list)
# Would likely be good for other things, like cleanups aswell.
var StaticWebServerRequest = preload("res://StaticWebServerRequest.gd")
func _ready() -> void:
start()
func prepare_dir(export_folder : String) -> void:
var dir : Directory = Directory.new()
if dir.dir_exists(export_folder):
OS.move_to_trash(export_folder)
dir.make_dir_recursive(export_folder)
func make_dir_recursive(folder : String) -> void:
var dir : Directory = Directory.new()
dir.make_dir_recursive(folder)
func export_web_project() -> void:
if !get_web_root():
print("!get_web_root()")
return
var export_folder : String = OS.get_user_data_dir().append_path("export/")
prepare_dir(export_folder)
evaluate_web_node(get_web_root(), "/", export_folder)
func copy_folder(path_from : String, path_to : String) -> void:
var dir : Directory = Directory.new()
dir.make_dir_recursive(path_to)
if dir.open(path_from) == OK:
dir.list_dir_begin(true)
var file_name : String = dir.get_next()
while !file_name.empty():
if dir.current_is_dir():
copy_folder(path_from.append_path(file_name), path_to.append_path(file_name))
else:
dir.copy(path_from.plus_file(file_name), path_to.plus_file(file_name))
file_name = dir.get_next()
else:
print("An error occurred when trying to access the path: %s " % path_from)
func write_index(n : WebNode, path : String) -> void:
var request : WebServerRequestScriptable = StaticWebServerRequest.new()
request._set_server(self)
request._set_web_root(get_web_root())
n.handle_request(request)
var file : File = File.new()
file.open(path.plus_file("index.html"), File.WRITE)
file.store_string(request.compiled_body)
file.close()
func evaluate_web_node(n : WebNode, web_node_path : String, path : String) -> void:
make_dir_recursive(path)
if n is WebRoot:
if n.www_root_path != "":
copy_folder(n.www_root_path, path)
for c in n.get_children():
if c is WebNode:
if c.uri_segment != "/":
continue
write_index(c, path)
break
else:
write_index(n, path)
for c in n.get_children():
if c is WebNode:
if c.uri_segment.empty() || c.uri_segment == "/":
continue
evaluate_web_node(c, web_node_path.append_path(c.uri_segment), path.append_path(c.uri_segment))
func _on_ExportButton_pressed() -> void:
export_web_project()
func _on_OpenFolderButton_pressed() -> void:
OS.shell_open(OS.get_user_data_dir())