You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
6.5 KiB
177 lines
6.5 KiB
6 months ago
|
@tool
|
||
|
extends Control
|
||
|
|
||
|
var current_info : Dictionary = {}
|
||
|
@onready var editor_view := find_parent('EditorView')
|
||
|
|
||
|
|
||
|
func _ready():
|
||
|
await editor_view.ready
|
||
|
theme = editor_view.theme
|
||
|
|
||
|
%Install.icon = editor_view.get_theme_icon("AssetLib", "EditorIcons")
|
||
|
%LoadingIcon.texture = editor_view.get_theme_icon("KeyTrackScale", "EditorIcons")
|
||
|
%InstallWarning.modulate = editor_view.get_theme_color("warning_color", "Editor")
|
||
|
|
||
|
DialogicUtil.get_dialogic_plugin().get_editor_interface().get_resource_filesystem().resources_reimported.connect(_on_resources_reimported)
|
||
|
|
||
|
|
||
|
func open():
|
||
|
get_parent().popup_centered_ratio(0.5)
|
||
|
get_parent().mode = Window.MODE_WINDOWED
|
||
|
get_parent().move_to_foreground()
|
||
|
get_parent().grab_focus()
|
||
|
|
||
|
|
||
|
func load_info(info:Dictionary, update_type:int) -> void:
|
||
|
current_info = info
|
||
|
if update_type == 2:
|
||
|
%State.text = "No Information Available"
|
||
|
%UpdateName.text = "Unable to access versions."
|
||
|
%UpdateName.add_theme_color_override("font_color", editor_view.get_theme_color("readonly_color", "Editor"))
|
||
|
%Content.text = "You are probably not connected to the internet. Fair enough."
|
||
|
%ShortInfo.text = "Huh, what happened here?"
|
||
|
%ReadFull.hide()
|
||
|
%Install.disabled = true
|
||
|
return
|
||
|
|
||
|
# If we are up to date (or beyond):
|
||
|
if info.is_empty():
|
||
|
info['name'] = "You are in the future, Marty!"
|
||
|
info["body"] = "# 😎 You are using the WIP branch!\nSeems like you are using a version that isn't even released yet. Be careful and give us your feedback ;)"
|
||
|
info["published_at"] = "????T"
|
||
|
info["author"] = {'login':"???"}
|
||
|
%State.text = "Where are we Doc?"
|
||
|
%UpdateName.add_theme_color_override("font_color", editor_view.get_theme_color("property_color_z", "Editor"))
|
||
|
%Install.disabled = true
|
||
|
|
||
|
elif update_type == 0:
|
||
|
%State.text = "Update Available!"
|
||
|
%UpdateName.add_theme_color_override("font_color", editor_view.get_theme_color("warning_color", "Editor"))
|
||
|
%Install.disabled = false
|
||
|
else:
|
||
|
%State.text = "You are up to date:"
|
||
|
%UpdateName.add_theme_color_override("font_color", editor_view.get_theme_color("success_color", "Editor"))
|
||
|
%Install.disabled = true
|
||
|
|
||
|
%UpdateName.text = info.name
|
||
|
%Content.text = markdown_to_bbcode('#'+info.body.get_slice('#', 1)).strip_edges()
|
||
|
%ShortInfo.text = "Published on "+info.published_at.substr(0, info.published_at.find('T'))+" by "+info.author.login
|
||
|
if info.has("html_url"):
|
||
|
%ReadFull.uri = info.html_url
|
||
|
%ReadFull.show()
|
||
|
else:
|
||
|
%ReadFull.hide()
|
||
|
if info.has('reactions'):
|
||
|
%Reactions.show()
|
||
|
var reactions := {"laugh":"😂", "hooray":"🎉", "confused":"😕", "heart":"❤️", "rocket":"🚀", "eyes":"👀"}
|
||
|
for i in reactions:
|
||
|
%Reactions.get_node(i.capitalize()).visible = info.reactions[i] > 0
|
||
|
%Reactions.get_node(i.capitalize()).text = reactions[i]+" "+str(info.reactions[i]) if info.reactions[i] > 0 else reactions[i]
|
||
|
if info.reactions['+1']+info.reactions['-1'] > 0:
|
||
|
%Reactions.get_node("Likes").visible = true
|
||
|
%Reactions.get_node("Likes").text = "👍 "+str(info.reactions['+1']+info.reactions['-1'])
|
||
|
else:
|
||
|
%Reactions.get_node("Likes").visible = false
|
||
|
else:
|
||
|
%Reactions.hide()
|
||
|
|
||
|
func _on_window_close_requested():
|
||
|
get_parent().visible = false
|
||
|
|
||
|
|
||
|
func _on_install_pressed():
|
||
|
find_parent('UpdateManager').request_update_download()
|
||
|
|
||
|
%InfoLabel.text = "Downloading. This can take a moment."
|
||
|
%Loading.show()
|
||
|
%LoadingIcon.create_tween().set_loops().tween_property(%LoadingIcon, 'rotation', 2*PI, 1).from(0)
|
||
|
|
||
|
|
||
|
func _on_refresh_pressed():
|
||
|
find_parent('UpdateManager').request_update_check()
|
||
|
|
||
|
|
||
|
func _on_update_manager_downdload_completed(result:int):
|
||
|
%Loading.hide()
|
||
|
match result:
|
||
|
0: # success
|
||
|
%InfoLabel.text = "Installed successfully. Restart needed!"
|
||
|
%InfoLabel.modulate = editor_view.get_theme_color("success_color", "Editor")
|
||
|
%Restart.show()
|
||
|
%Restart.grab_focus()
|
||
|
1: # failure
|
||
|
%InfoLabel.text = "Download failed."
|
||
|
%InfoLabel.modulate = editor_view.get_theme_color("readonly_color", "Editor")
|
||
|
|
||
|
|
||
|
func _on_resources_reimported(resources:Array) -> void:
|
||
|
if is_inside_tree():
|
||
|
await get_tree().process_frame
|
||
|
get_parent().move_to_foreground()
|
||
|
|
||
|
|
||
|
func markdown_to_bbcode(text:String) -> String:
|
||
|
var font_sizes := {1:20, 2:16, 3:16,4:14, 5:14}
|
||
|
var title_regex := RegEx.create_from_string('(^|\n)((?<level>#+)(?<title>.*))\\n')
|
||
|
var res := title_regex.search(text)
|
||
|
while res:
|
||
|
text = text.replace(res.get_string(2), '[font_size='+str(font_sizes[len(res.get_string('level'))])+']'+res.get_string('title').strip_edges()+'[/font_size]')
|
||
|
res = title_regex.search(text)
|
||
|
|
||
|
var link_regex := RegEx.create_from_string('(?<!\\!)\\[(?<text>[^\\]]*)]\\((?<link>[^)]*)\\)')
|
||
|
res = link_regex.search(text)
|
||
|
while res:
|
||
|
text = text.replace(res.get_string(), '[url='+res.get_string('link')+']'+res.get_string('text').strip_edges()+'[/url]')
|
||
|
res = link_regex.search(text)
|
||
|
|
||
|
var image_regex := RegEx.create_from_string('\\!\\[(?<text>[^\\]]*)]\\((?<link>[^)]*)\\)\n*')
|
||
|
res = image_regex.search(text)
|
||
|
while res:
|
||
|
text = text.replace(res.get_string(), '[url='+res.get_string('link')+']'+res.get_string('text').strip_edges()+'[/url]')
|
||
|
res = image_regex.search(text)
|
||
|
|
||
|
var italics_regex := RegEx.create_from_string('\\*(?<text>[^\\*\\n]*)\\*')
|
||
|
res = italics_regex.search(text)
|
||
|
while res:
|
||
|
text = text.replace(res.get_string(), '[i]'+res.get_string('text').strip_edges()+'[/i]')
|
||
|
res = italics_regex.search(text)
|
||
|
|
||
|
var bullets_regex := RegEx.create_from_string('(?<=\\n)(\\*|-)(?<text>[^\\*\\n]*)\\n')
|
||
|
res = bullets_regex.search(text)
|
||
|
while res:
|
||
|
text = text.replace(res.get_string(), '[ul]'+res.get_string('text').strip_edges()+'[/ul]\n')
|
||
|
res = bullets_regex.search(text)
|
||
|
|
||
|
var small_code_regex := RegEx.create_from_string('(?<!`)`(?<text>[^`]+)`')
|
||
|
res = small_code_regex.search(text)
|
||
|
while res:
|
||
|
text = text.replace(res.get_string(), '[code][color='+get_theme_color("accent_color", "Editor").to_html()+']'+res.get_string('text').strip_edges()+'[/color][/code]')
|
||
|
res = small_code_regex.search(text)
|
||
|
|
||
|
var big_code_regex := RegEx.create_from_string('(?<!`)```(?<text>[^`]+)```')
|
||
|
res = big_code_regex.search(text)
|
||
|
while res:
|
||
|
text = text.replace(res.get_string(), '[code][bgcolor='+get_theme_color("box_selection_fill_color", "Editor").to_html()+']'+res.get_string('text').strip_edges()+'[/bgcolor][/code]')
|
||
|
res = big_code_regex.search(text)
|
||
|
|
||
|
return text
|
||
|
|
||
|
|
||
|
|
||
|
func _on_content_meta_clicked(meta:Variant) -> void:
|
||
|
OS.shell_open(str(meta))
|
||
|
|
||
|
|
||
|
func _on_install_mouse_entered():
|
||
|
if not %Install.disabled:
|
||
|
%InstallWarning.show()
|
||
|
|
||
|
|
||
|
func _on_install_mouse_exited():
|
||
|
%InstallWarning.hide()
|
||
|
|
||
|
|
||
|
func _on_restart_pressed():
|
||
|
DialogicUtil.get_dialogic_plugin().get_editor_interface().restart_editor(true)
|