download system
This commit is contained in:
98
flumi/Scripts/Browser/DownloadDialog.gd
Normal file
98
flumi/Scripts/Browser/DownloadDialog.gd
Normal 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()
|
||||
Reference in New Issue
Block a user