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 find_by_word_and_lang(&self, word: &str, lang: &str) -> Vec<Word>;
fn insert_word(&self, word: Word) -> Result<(), ()>; fn insert_word(&self, word: Word) -> Result<(), ()>;
fn remove_word(&self, word_key: &str) -> 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_word_key(word_key: &str) -> String;
fn normalize_lang_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> { fn get_all_words(&self) -> Vec<Word> {
let statement = self let statement = self
.connection .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![]; let mut word_list: Vec<Word> = vec![];
// TODO: make this pretty with functional programming // TODO: make this pretty with functional programming
@@ -94,7 +94,7 @@ impl WordSource for FileDatabase {
fn find_by_word(&self, word: &str) -> Vec<Word> { fn find_by_word(&self, word: &str) -> Vec<Word> {
let statement = self let statement = self
.connection .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![]; let mut word_list: Vec<Word> = vec![];
if let Ok(mut query) = statement { if let Ok(mut query) = statement {
@@ -118,7 +118,7 @@ impl WordSource for FileDatabase {
fn find_by_lang(&self, lang: &str) -> Vec<Word> { fn find_by_lang(&self, lang: &str) -> Vec<Word> {
let statement = self let statement = self
.connection .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![]; let mut word_list: Vec<Word> = vec![];
// TODO: make this pretty with functional programming // 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> { fn find_by_word_and_lang(&self, word: &str, lang: &str) -> Vec<Word> {
let statement = self let statement = self
.connection .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![]; let mut word_list: Vec<Word> = vec![];
if let Ok(mut query) = statement { if let Ok(mut query) = statement {
@@ -180,13 +180,14 @@ impl WordSource for FileDatabase {
Err(()) Err(())
} }
fn edit_word(&self, word: Word) -> Result<Word, ()> { fn edit_word(&self, word: Word, key: &str) -> Result<Word, ()> {
let result = self.connection.execute( 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), &Self::normalize_word_key(&word.key),
&word.description, &word.description,
&Self::normalize_lang_key(&word.lang), &Self::normalize_lang_key(&word.lang),
key,
), ),
); );
match result { match result {

View File

@@ -292,7 +292,6 @@ impl App {
self.file_database.get_all_words() self.file_database.get_all_words()
} }
}; };
self.list_state.select(Some(0));
self.description_scroll = 0; self.description_scroll = 0;
self.word_list = word_list; 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); prev_word.description.push(c);
app.word_to_edit = Some(prev_word); app.word_to_edit = Some(prev_word);
} else { } else {
app.word_to_add = Some(Word { app.word_to_edit = Some(Word {
key: c.to_string(), key: c.to_string(),
description: "".to_string(), description: "".to_string(),
lang: "".to_string(), lang: "".to_string(),
@@ -215,9 +215,10 @@ pub fn handle_user_input(app: &mut App) -> io::Result<()> {
} }
UiState::EDIT => { UiState::EDIT => {
if let Some(w) = app.word_to_edit.clone() 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 { match res {
Ok(_) => { Ok(_) => {
app.update_word_list(); app.update_word_list();