コマンドライン版の TodoList ツール#
プロジェクトアドレス:https://github.com/MrTwoc/todo-rs
Rust 言語で実装されたコンソールベースの todolist で、主にイベントの記録と打刻に使用され、現在は基本的な CRUD 機能を実装しています。
今後は [表形式の出力 + 絵文字] を使って出力結果を美化する予定です。例えば:
✅🟢【完了】 🟡⏸️【未定】
ロジック処理#
追加=>
command_add()=>ユーザー入力を受け取り、最初のパラメータがaddであるかを判断し、パラメータの長さを判断します。パラメータ<3の場合はパラメータ不足を通知し、
その後Target::add()=>メソッドを呼び出して、4つのパラメータを受け取ります。<タスク名><締切>[説明][グループ]、[]はオプションパラメータです。
したがって、タスク名と日付を入力するだけでタスクを追加でき、他のパラメータはデフォルト値が設定されます。
追加する前にファイル内のすべてのタスクの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ループに入ります。フィールドとパラメータの2つの変数を定義し、matchでフィールドを一致させます。
一致したら変更し、その後jsonファイルに書き込みます。
// 可変タスク参照を取得
let task = &mut tasks[task_index];
// フィールド更新を解析し適用(インデックス1から開始し、2つのパラメータごとに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 で高いと感じており、リソース使用をできるだけ低減する予定
- ⏸️タスクカレンダー:当月のカレンダーを出力可能