MrTwoc

MrTwoc

Hello!

[4]Todo-rs-Sqlite

上一章内容

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

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

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

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

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

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

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

目前遇到的难点:

  1. sqlite 中的任务批量状态更新
  2. 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,不再直接删除任务。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。