add optional autosave to file content
This commit is contained in:
parent
d3764d3c4a
commit
eeb6744947
27
ServerUI.gd
27
ServerUI.gd
@ -7,6 +7,9 @@ const SERVER_STATUS_TEXT: Dictionary = {
|
|||||||
|
|
||||||
const ACCEPTED_FILE_FORMATS := ["md"] # server should ignore these file types when adding endpoints
|
const ACCEPTED_FILE_FORMATS := ["md"] # server should ignore these file types when adding endpoints
|
||||||
|
|
||||||
|
export(bool) var enable_file_autosave := true # if true, will save the active file's contents every save_file_timeout seconds.
|
||||||
|
export(float) var save_file_timeout := 4.0 # the time to save document content after the edited signal of TextEdit
|
||||||
|
|
||||||
enum ContextMenuOptions {
|
enum ContextMenuOptions {
|
||||||
MOVE_UP,
|
MOVE_UP,
|
||||||
MOVE_DOWN,
|
MOVE_DOWN,
|
||||||
@ -24,7 +27,6 @@ onready var file_tree_context_menu := $"%FileTreeContextMenu"
|
|||||||
|
|
||||||
onready var document_input_textedit := $"%DocInputTextEdit"
|
onready var document_input_textedit := $"%DocInputTextEdit"
|
||||||
onready var content_preview_richtextlabel := $"%ContentPreviewRichTextLabel"
|
onready var content_preview_richtextlabel := $"%ContentPreviewRichTextLabel"
|
||||||
onready var document_input_timer := $"%EditedTimeout"
|
|
||||||
|
|
||||||
onready var server_folder_dialog := $"%ServerFolderDialog"
|
onready var server_folder_dialog := $"%ServerFolderDialog"
|
||||||
|
|
||||||
@ -157,7 +159,6 @@ func _generate_filestxt():
|
|||||||
files += "%s %s %s\n" % [file.file_path, file.date, file.title]
|
files += "%s %s %s\n" % [file.file_path, file.date, file.title]
|
||||||
|
|
||||||
var f := File.new()
|
var f := File.new()
|
||||||
|
|
||||||
if f.open(server_dir.plus_file("files.txt"), File.WRITE) == OK:
|
if f.open(server_dir.plus_file("files.txt"), File.WRITE) == OK:
|
||||||
f.store_string(files)
|
f.store_string(files)
|
||||||
f.close()
|
f.close()
|
||||||
@ -236,6 +237,26 @@ func _on_DocInputTextEdit_text_changed() -> void:
|
|||||||
current_file.content = new_text
|
current_file.content = new_text
|
||||||
current_file.dirty = true
|
current_file.dirty = true
|
||||||
|
|
||||||
|
if !current_file.timer:
|
||||||
|
var t := Timer.new()
|
||||||
|
t.wait_time = save_file_timeout
|
||||||
|
t.one_shot = true
|
||||||
|
current_file.timer = t
|
||||||
|
add_child(t)
|
||||||
|
t.connect("timeout", self, "_on_EditedTimeout_timeout", [t, current_file])
|
||||||
|
else:
|
||||||
|
current_file.timer.stop()
|
||||||
|
current_file.timer.start()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_EditedTimeout_timeout(timer: Timer, file: FileDef) -> void:
|
||||||
|
file.timer = null
|
||||||
|
timer.queue_free()
|
||||||
|
|
||||||
|
var f := File.new()
|
||||||
|
if f.open(server_dir.plus_file(file.file_path), File.WRITE) == OK:
|
||||||
|
f.store_string(file.content)
|
||||||
|
|
||||||
|
|
||||||
func FileDef(
|
func FileDef(
|
||||||
file_path: String,
|
file_path: String,
|
||||||
@ -259,3 +280,5 @@ class FileDef:
|
|||||||
var dirty: bool = false
|
var dirty: bool = false
|
||||||
|
|
||||||
var content: String
|
var content: String
|
||||||
|
|
||||||
|
var timer: Timer
|
||||||
|
@ -206,11 +206,6 @@ size_flags_vertical = 3
|
|||||||
show_line_numbers = true
|
show_line_numbers = true
|
||||||
wrap_enabled = true
|
wrap_enabled = true
|
||||||
|
|
||||||
[node name="EditedTimeout" type="Timer" parent="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer/VBoxContainer/HSplitContainer/ContentEditContainer/DocInputTextEdit"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
wait_time = 3.0
|
|
||||||
one_shot = true
|
|
||||||
|
|
||||||
[node name="ContentPreviewContainer" type="VBoxContainer" parent="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer/VBoxContainer/HSplitContainer"]
|
[node name="ContentPreviewContainer" type="VBoxContainer" parent="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer/VBoxContainer/HSplitContainer"]
|
||||||
margin_left = 390.0
|
margin_left = 390.0
|
||||||
margin_right = 848.0
|
margin_right = 848.0
|
||||||
|
Loading…
Reference in New Issue
Block a user