Files
Kalulu/sources/language_tool/sentence_list.gd
T
2025-09-05 15:55:48 +02:00

120 lines
3.5 KiB
GDScript

extends WordList
var not_found_list: String = ""
@onready var export_not_found_button: Button = %ExportNotFoundButton
@onready var file_dialog_export: FileDialog = $FileDialogExport
func create_sub_elements_list() -> void:
super()
@warning_ignore("unsafe_property_access")
new_gp.sub_elements_list = sub_elements_list.duplicate()
sub_elements_list.clear()
Database.db.query("Select Words.ID as ID, Words.Word as Word, group_concat(GPs.Phoneme, '') as Phonemes
FROM Words
INNER JOIN GPsInWords ON GPsInWords.WordID = Words.ID
INNER JOIN GPs ON GPs.ID = GPsInWords.GPID
GROUP BY Words.ID
ORDER BY Words.Word")
for result: Dictionary in Database.db.query_result:
sub_elements_list[result.ID] = {
grapheme = result.Word,
phoneme = result.Phonemes
}
func get_lesson_for_element(id: int) -> int:
return Database.get_min_lesson_for_sentence_id(id) + 1
func _on_list_title_new_search(new_text: String) -> void:
for element: WordListElement in elements_container.get_children():
var found: bool = false
for word: String in element.word.split(" "):
if word.begins_with(new_text):
found = true
break
element.visible = found
func _ready() -> void:
super()
connect_not_found()
func connect_not_found() -> void:
for element: WordListElement in elements_container.get_children():
if element is SentenceListElement and not (element as SentenceListElement).not_found.is_connected(_on_not_found):
(element as SentenceListElement).not_found.connect(_on_not_found)
if _element is SentenceListElement and not (_element as SentenceListElement).not_found.is_connected(_on_not_found_csv):
(_element as SentenceListElement).not_found.connect(_on_not_found_csv)
func _on_plus_button_pressed() -> void:
super()
connect_not_found()
func _on_not_found(text: String) -> void:
error_label.text = text
func _on_not_found_csv(text: String) -> void:
not_found_list += text + "\n"
func _on_list_title_import_path_selected(path: String, match_to_file: bool) -> void:
var file: FileAccess = FileAccess.open(path, FileAccess.READ)
var line: PackedStringArray = file.get_csv_line()
if line.size() < 1 or line[0] != "Sentence":
error_label.text = "Column name should be Sentence"
return
var inserted_one: bool = false
var not_found_one: bool = false
var all_data: Dictionary = {}
while not file.eof_reached():
line = file.get_csv_line()
if line.size() < 1 or line[0] == "":
continue
all_data[line[0]] = true
var id: int = _element._already_in_database(line[0])
if id >= 0:
continue
id = _element._add_from_additional_word_list(line[0])
if id >= 0:
inserted_one = true
else:
not_found_one = true
# delete elements that are not in file
if match_to_file:
var query: String = "Select * FROM Sentences"
Database.db.query(query)
var result: Array[Dictionary] = Database.db.query_result
for element: Dictionary in result:
if not element.Sentence in all_data:
Database.db.delete_rows("Sentences", "ID=%s" % element.ID)
inserted_one = true
if inserted_one:
get_tree().reload_current_scene()
elif not_found_one:
export_not_found_button.show()
func _on_export_not_found_button_pressed() -> void:
file_dialog_export.filters = []
file_dialog_export.add_filter("*.txt", "txt")
Utils.disconnect_all(file_dialog_export.file_selected)
file_dialog_export.file_selected.connect(_on_export_filename_selected)
file_dialog_export.show()
func _on_export_filename_selected(path: String) -> void:
var file: FileAccess = FileAccess.open(path, FileAccess.WRITE)
file.store_string(not_found_list)
file.close()