項目地址:https://github.com/MrTwoc/todo-rs
上一章實現了任務的表格化輸出,但是美化效果不怎麼樣。。
這次將存儲任務的 json 文件,改為了用 sqlite 存儲數據,以及將任務級別從固定幾個級別改為了 u8 級別,
可以支持更大的分級空間。
以及新增了基於 sqlite 的用戶管理功能,為以後可能會將項目結構改為 cs 結構做準備。
增加了 toml 配置文件,目前只有一條參數:if_login。如果為 false,則跳過登錄,默認為本地登錄。
後續如果要支持 pgsql 的話,可以在配置文件中設置連接地址。
目前遇到的難點:
- sqlite 中的任務批量狀態更新
- sqlite 中的任務編輯
其中任務編輯是直接用的是遍歷中用 match 匹配參數,然後挨個更新。。每個符合的 match,用一句代替
conn.execute(
"UPDATE tasks SET description = ? WHERE id = ?",
(value, task_id),
)?;
而任務批量更新,則是將 id 用 iter 和 collect 組為數組,然後遍歷中,為每個任務修改狀態
pub fn sql_update_status(args: &[&str]) -> Result<(), Box<dyn std::error::Error>> {
let status = args[1];
let ids: Vec<u32> = args[2..]
.iter()
.map(|s| s.parse())
.collect::<Result<_, _>>()?;
let conn = get_conn()?;
for id in ids {
conn.execute(
"UPDATE tasks SET task_status = ? WHERE id = ?",
(status, id),
)?;
}
info!("[sqlite]任務狀態更新成功");
println!("任務更新");
Ok(())
}
未實現內容:
將排序算法融入其中
將查找算法融入其中
將應用隱藏到托盤運行
將對任務的刪除,改為對任務的狀態更改,已刪除的任務將狀態從 0 改為 1,不再直接刪除任務。