download system

This commit is contained in:
Face
2025-09-07 13:37:47 +03:00
parent 57674eb2b5
commit b4639e80bc
28 changed files with 1315 additions and 2 deletions

View File

@@ -0,0 +1,98 @@
class_name DownloadDialog
extends PopupPanel
signal download_confirmed(download_data: Dictionary, save_path: String)
signal download_cancelled(download_data: Dictionary)
@onready var ok_button: Button = $VBox/HBoxContainer/OkButton
@onready var cancel_button: Button = $VBox/HBoxContainer/CancelButton
@onready var file_dialog: FileDialog = $FileDialog
@onready var filename_label: Label = $VBox/FilenameLabel
@onready var url_label: Label = $VBox/URLLabel
var download_data: Dictionary = {}
func show_download_dialog(data: Dictionary):
download_data = data
var filename = data.get("filename", "download")
var url = data.get("url", "")
filename_label.text = "File: " + filename
var current_site = data.get("current_site", "")
if current_site != "":
url_label.text = "From: " + current_site
else:
url_label.text = "From: " + URLUtils.extract_domain(url)
popup()
_animate_entrance()
ok_button.grab_focus()
func _animate_entrance():
if not is_inside_tree():
return
var original_size = Vector2(size)
var small_size = original_size * 0.8
var size_difference = original_size - small_size
var original_pos = position
size = Vector2i(small_size)
position = original_pos + Vector2i(size_difference * 0.5)
var tween = create_tween()
if tween:
tween.set_parallel(true)
var size_property = tween.tween_property(self, "size", Vector2i(original_size), 0.2)
var pos_property = tween.tween_property(self, "position", original_pos, 0.2)
if size_property:
size_property.set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
if pos_property:
pos_property.set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
func _on_download_confirmed():
file_dialog.current_file = download_data.get("filename", "download")
file_dialog.current_dir = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS)
file_dialog.show()
func _animate_exit():
if not is_inside_tree():
queue_free()
return
var current_size = Vector2(size)
var small_size = current_size * 0.8
var size_difference = current_size - small_size
var current_pos = position
var target_pos = current_pos + Vector2i(size_difference * 0.5)
var tween = create_tween()
if tween:
tween.set_parallel(true)
var size_property = tween.tween_property(self, "size", Vector2i(small_size), 0.15)
var pos_property = tween.tween_property(self, "position", target_pos, 0.15)
if size_property:
size_property.set_ease(Tween.EASE_IN).set_trans(Tween.TRANS_BACK)
if pos_property:
pos_property.set_ease(Tween.EASE_IN).set_trans(Tween.TRANS_BACK)
await tween.finished
queue_free()
func _on_save_location_selected(path: String):
download_confirmed.emit(download_data, path)
_animate_exit()
func _on_file_dialog_cancelled():
download_cancelled.emit(download_data)
_animate_exit()
func _on_download_cancelled():
download_cancelled.emit(download_data)
_animate_exit()