fix: edit + order

This commit is contained in:
2026-08-07 00:07:34 +02:00
parent 311f2fe7b4
commit dbdce75996
3 changed files with 12 additions and 11 deletions

View File

@@ -53,7 +53,7 @@ pub trait WordSource {
fn find_by_word_and_lang(&self, word: &str, lang: &str) -> Vec<Word>;
fn insert_word(&self, word: Word) -> Result<(), ()>;
fn remove_word(&self, word_key: &str) -> Result<(), ()>;
fn edit_word(&self, word: Word) -> Result<Word, ()>;
fn edit_word(&self, word: Word, key: &str) -> Result<Word, ()>;
fn normalize_word_key(word_key: &str) -> String;
fn normalize_lang_key(word_key: &str) -> String;
}
@@ -70,7 +70,7 @@ impl WordSource for FileDatabase {
fn get_all_words(&self) -> Vec<Word> {
let statement = self
.connection
.prepare("select key, description, lang from word");
.prepare("select key, description, lang from word ORDER BY key ASC");
let mut word_list: Vec<Word> = vec![];
// TODO: make this pretty with functional programming
@@ -94,7 +94,7 @@ impl WordSource for FileDatabase {
fn find_by_word(&self, word: &str) -> Vec<Word> {
let statement = self
.connection
.prepare("SELECT key, description, lang FROM word");
.prepare("SELECT key, description, lang FROM word ORDER BY key ASC");
let mut word_list: Vec<Word> = vec![];
if let Ok(mut query) = statement {
@@ -118,7 +118,7 @@ impl WordSource for FileDatabase {
fn find_by_lang(&self, lang: &str) -> Vec<Word> {
let statement = self
.connection
.prepare("select key, description, lang from word where lang = ?1");
.prepare("select key, description, lang from word where lang = ?1 ORDER BY key ASC");
let mut word_list: Vec<Word> = vec![];
// TODO: make this pretty with functional programming
@@ -142,7 +142,7 @@ impl WordSource for FileDatabase {
fn find_by_word_and_lang(&self, word: &str, lang: &str) -> Vec<Word> {
let statement = self
.connection
.prepare("SELECT key, description, lang FROM word where lang = ?1");
.prepare("SELECT key, description, lang FROM word where lang = ?1 ORDER BY key ASC");
let mut word_list: Vec<Word> = vec![];
if let Ok(mut query) = statement {
@@ -180,13 +180,14 @@ impl WordSource for FileDatabase {
Err(())
}
fn edit_word(&self, word: Word) -> Result<Word, ()> {
fn edit_word(&self, word: Word, key: &str) -> Result<Word, ()> {
let result = self.connection.execute(
"UPDATE word SET key = ?1, description = ?2, lang = ?3 WHERE key = ?1",
"UPDATE word SET key = ?1, description = ?2, lang = ?3 WHERE key = ?4",
(
&Self::normalize_word_key(&word.key),
&word.description,
&Self::normalize_lang_key(&word.lang),
key,
),
);
match result {

View File

@@ -292,7 +292,6 @@ impl App {
self.file_database.get_all_words()
}
};
self.list_state.select(Some(0));
self.description_scroll = 0;
self.word_list = word_list;
}

View File

@@ -110,7 +110,7 @@ pub fn handle_user_input(app: &mut App) -> io::Result<()> {
prev_word.description.push(c);
app.word_to_edit = Some(prev_word);
} else {
app.word_to_add = Some(Word {
app.word_to_edit = Some(Word {
key: c.to_string(),
description: "".to_string(),
lang: "".to_string(),
@@ -215,9 +215,10 @@ pub fn handle_user_input(app: &mut App) -> io::Result<()> {
}
UiState::EDIT => {
if let Some(w) = app.word_to_edit.clone()
&& w.key.len() > 0
&& let Some(w_k) = app.get_selected_word()
{
let res = app.file_database.edit_word(w.clone());
// FIXME: dirty trick to make it work, but should need to use get_selected_word
let res = app.file_database.edit_word(w.clone(), &w_k.key);
match res {
Ok(_) => {
app.update_word_list();