コマンドライン版の TodoList ツール#
プロジェクトアドレス:https://github.com/MrTwoc/todo-rs
Rust 言語で実装されたコンソールベースの todolist で、主にイベントの記録と打刻に使用されます。現在、基本的な CRUD 機能が実装されています。
今後は [表形式の出力 + emoji シンボル] を使って出力結果を美化する予定です。例えば:
✅🟢【完了】 🟡⏸️【未定】
ロジック処理#
追加=>
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 で高いと感じており、リソース使用を可能な限り低減する予定
- ⏸️タスクカレンダー:当月のカレンダーを出力可能