命令行版的 TodoList 工具#
项目地址:https://github.com/MrTwoc/todo-rs
用 rust 語言實現的一個基於控制台的 todolist,主要用於對事件的記錄 & 打卡,目前實現了基礎的增刪改查功能。
後續計劃用 [表格化輸出 + emoji 符號] 來美化一下輸出結果,比如:
✅🟢【已經完成】 🟡⏸️【待定】
邏輯處理#
添加=>
command_add()=>接收用戶輸入,判斷第一個參數是否為add,然後判斷參數長度,參數<3 則提示參數不足,
然後調用Target::add()=>方法接收四個參數,包括<任務名稱><截止日期>[描述][分組],[]為可選參數,
所以只需要輸入任務名和日期就能添加任務,其他參數都會被設默認值
添加之前會先遍歷文件中所有任務的id,然後 +1 給新的任務,隨後寫入json
刪除=>
將json文件讀取出來,定義個變量存儲長度,調用.retain方法,作用=>
遍歷tasks向量中的每個元素
對每個元素執行閉包|task| task.id != Some(id)
保留閉包返回true的元素,移除返回false的元素
然後比較刪除前和刪除後的長度,小於前長度就刪除成功了。
查詢=>
讀取json然後遍歷
編輯=>
接收用戶輸入,判斷指令長度<3 或者 (指令長度 - 1) % 2 == 0 則會提示不匹配,因為第0、1是edit和任務ID,
2是字段名 2+1則為修改內容,所以能這樣匹配,然後進入Target::edit()=>方法
判斷id是否合法與存在,然後按id取出該任務,進入for循環,定義:字段和參數兩變量,進入match匹配字段,
符合後修改,然後寫入json文件
// 獲取可變任務引用
let task = &mut tasks[task_index];
// 解析並應用字段更新(從索引1開始,每兩個參數為一組)
for i in (2..args.len()).step_by(2) {
let field = args[i];
let value = args[i + 1];
// 任務狀態可用指令單獨修改
match field {
"name" => task.target_name = value.to_string(),
"deadline" => task.deadline = value.to_string(),
"description" => task.description = Some(value.to_string()),
"group" => task.group = Some(value.to_string()),
_ => eprintln!("不支持的字段: {}", field),
}
}
項目 TODO#
- 添加任務的完成類型,例如 ——
每年 | 月 | 周 | 日 | 累計 X 次 | 指定日期前完成 - 應用可以在桌面托盤中或者後台運行
- 多窗口,例如查看指定組的任務詳情,就會在新窗口中顯示
- 關鍵詞查找,可以按關鍵詞查找任務。
- 批量操作:輸入一次指令,編輯多個任務,比如批量完成任務。
- 操作記錄,完成記錄:記錄用戶的每條成功執行的命令,以及用時間戳的形式記錄任務完成時間,以及可以在應用內查看記錄
- 性能優化:目前內存佔用 12MB 左右覺得有些高,打算盡可能的降低資源佔用。
- ⏸️任務日曆:可以輸出當月日曆