[4]Todo-rs-Sqlite

上一章内容

项目地址：https://github.com/MrTwoc/todo-rs

上一章实现了任务的表格化输出，但是美化效果不怎么样。。

这次将存储任务的 json 文件，改为了用 sqlite 存储数据，以及将任务级别从固定几个级别改为了 u8 级别，

可以支持更大的分级空间。

以及新增了基于 sqlite 的用户管理功能，为以后可能会将项目结构改为 cs 结构做准备。

增加了 toml 配置文件，目前只有一条参数：if_login。如果为 false，则跳过登陆，默认为本地登陆。

后续如果要支持 pgsql 的话，可以在配置文件中设置连接地址。

目前遇到的难点：

sqlite 中的任务批量状态更新

sqlite 中的任务编辑

其中任务编辑是直接用的是遍历中用 match 匹配参数，然后挨个更新。。每个符合的 match，用一句代替

Copy
conn.execute(
"UPDATE tasks SET description = ? WHERE id = ?",
(value, task_id),
)?;

而任务批量更新，则是将 id 用 iter 和 collect 组为数组，然后遍历中，为每个任务修改状态

Copy
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，不再直接删除任务。