diff --git a/bin/tau/tau-cli/src/main.rs b/bin/tau/tau-cli/src/main.rs
index 1297a8c1a..46f024d98 100644
--- a/bin/tau/tau-cli/src/main.rs
+++ b/bin/tau/tau-cli/src/main.rs
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-use std::{process::exit, sync::Arc};
+use std::{collections::HashMap, process::exit, sync::Arc};
use clap::{Parser, Subcommand};
use log::{error, info};
@@ -41,7 +41,7 @@ use drawdown::{drawdown, to_naivedate};
use filter::{apply_filter, get_ids, no_filter_warn};
use primitives::{task_from_cli, State, TaskEvent};
use util::{due_as_timestamp, prompt_text};
-use view::{print_task_info, print_task_list};
+use view::{find_free_id, print_task_info, print_task_list};
use taud::task_info::TaskInfo;
@@ -181,28 +181,43 @@ fn main() -> Result<()> {
// If not provided we use get_ids() to get them from the daemon.
let ids = get_ids(&mut filters)?;
let ids_clone = ids.clone();
- let task_ids = if ids.is_empty() { tau.get_ids().await? } else { ids };
+ let mut tasks_local_id = HashMap::new();
- let mut tasks = if filters.contains(&"state:stop".to_string()) ||
+ let task_ref_ids = tau.get_ref_ids().await?;
+
+ let tasks = if filters.contains(&"state:stop".to_string()) ||
filters.contains(&"all".to_string())
{
tau.get_stop_tasks(None).await?
} else {
vec![]
};
- for id in task_ids {
- tasks.push(tau.get_task_by_id(id).await?);
+
+ let mut store_ids = vec![];
+
+ for task in tasks.clone() {
+ let task_id = find_free_id(&store_ids);
+ tasks_local_id.insert(task_id as usize, task);
+ store_ids.push(task_id);
+ }
+
+ for refid in task_ref_ids {
+ let task_id = find_free_id(&store_ids);
+ let element = tau.get_task_by_ref_id(&refid).await?;
+ tasks_local_id.insert(task_id as usize, element);
+ store_ids.push(task_id);
}
if ids_clone.len() == 1 && args.command.is_none() {
- let tsk = tasks[0].clone();
- print_task_info(tsk)?;
+ let id_itself = ids_clone[0] as usize;
+ let tsk = tasks_local_id.get(&id_itself).unwrap();
+ print_task_info(id_itself, tsk.clone())?;
return Ok(())
}
for filter in filters {
- apply_filter(&mut tasks, &filter);
+ apply_filter(&mut tasks_local_id.clone().into_values().collect(), &filter);
}
// Parse subcommands
@@ -226,9 +241,8 @@ fn main() -> Result<()> {
let title = task.clone().title;
- let task_id = tau.add(task).await?;
- if task_id > 0 {
- println!("Created task {} \"{}\"", task_id, title);
+ if tau.add(task).await? {
+ println!("Created task \"{}\"", title);
}
Ok(())
}
@@ -237,12 +251,13 @@ fn main() -> Result<()> {
if args.filters.is_empty() {
no_filter_warn()
}
+
let base_task = task_from_cli(values)?;
- for task in tasks.clone() {
- let res = tau.update(task.id, base_task.clone()).await?;
+ for (id, task) in tasks_local_id {
+ let res = tau.update(&task.ref_id, base_task.clone()).await?;
if res {
- let tsk = tau.get_task_by_id(task.id).await?;
- print_task_info(tsk)?;
+ let tsk = tau.get_task_by_ref_id(&task.ref_id).await?;
+ print_task_info(id, tsk)?;
}
}
@@ -253,10 +268,12 @@ fn main() -> Result<()> {
if args.filters.is_empty() {
no_filter_warn()
}
+
let state = State::Start;
- for task in tasks {
- if tau.set_state(task.id, &state).await? {
- println!("Started task: {:?}", task.id);
+ for id in ids_clone {
+ let task = tasks_local_id.get(&(id as usize)).unwrap();
+ if tau.set_state(&task.ref_id, &state).await? {
+ println!("Started task: {} with refid: {}", id, task.ref_id);
}
}
@@ -267,10 +284,12 @@ fn main() -> Result<()> {
if args.filters.is_empty() {
no_filter_warn()
}
+
let state = State::Open;
- for task in tasks {
- if tau.set_state(task.id, &state).await? {
- println!("Opened task: {:?}", task.id);
+ for id in ids_clone {
+ let task = tasks_local_id.get(&(id as usize)).unwrap();
+ if tau.set_state(&task.ref_id, &state).await? {
+ println!("Opened task: {} with refid: {}", id, task.ref_id);
}
}
@@ -281,10 +300,12 @@ fn main() -> Result<()> {
if args.filters.is_empty() {
no_filter_warn()
}
+
let state = State::Pause;
- for task in tasks {
- if tau.set_state(task.id, &state).await? {
- println!("Paused task: {:?}", task.id);
+ for id in ids_clone {
+ let task = tasks_local_id.get(&(id as usize)).unwrap();
+ if tau.set_state(&task.ref_id, &state).await? {
+ println!("Paused task: {} with refid: {}", id, task.ref_id);
}
}
@@ -295,10 +316,12 @@ fn main() -> Result<()> {
if args.filters.is_empty() {
no_filter_warn()
}
+
let state = State::Stop;
- for task in tasks {
- if tau.set_state(task.id, &state).await? {
- println!("Stopped task: {}", task.id);
+ for id in ids_clone {
+ let task = tasks_local_id.get(&(id as usize)).unwrap();
+ if tau.set_state(&task.ref_id, &state).await? {
+ println!("Stopped task: {} with refid: {}", id, task.ref_id);
}
}
@@ -309,7 +332,9 @@ fn main() -> Result<()> {
if args.filters.is_empty() {
no_filter_warn()
}
- for task in tasks {
+
+ for id in ids_clone {
+ let task = tasks_local_id.get(&(id as usize)).unwrap();
let comment = if content.is_empty() {
prompt_text(task.clone(), "comment")?
} else {
@@ -321,19 +346,20 @@ fn main() -> Result<()> {
exit(1)
}
- let res = tau.set_comment(task.id, comment.unwrap().trim()).await?;
+ let res = tau.set_comment(&task.ref_id, comment.unwrap().trim()).await?;
if res {
- let tsk = tau.get_task_by_id(task.id).await?;
- print_task_info(tsk)?;
+ let tsk = tau.get_task_by_ref_id(&task.ref_id).await?;
+ print_task_info(id as usize, tsk)?;
}
}
Ok(())
}
TauSubcommand::Info => {
- for task in tasks {
- let task = tau.get_task_by_id(task.id).await?;
- print_task_info(task)?;
+ for id in ids_clone {
+ let task = tasks_local_id.get(&(id as usize)).unwrap();
+ let task = tau.get_task_by_ref_id(&task.ref_id).await?;
+ print_task_info(id as usize, task)?;
}
Ok(())
}
@@ -385,9 +411,9 @@ fn main() -> Result<()> {
drawdown(date, tasks, assignee)?;
}
None => {
- let ws = tau.get_ws().await?;
- let tasks = tau.get_stop_tasks(None).await?;
- print_task_list(tasks, ws)?;
+ let _ws = tau.get_ws().await?;
+ let _tasks = tau.get_stop_tasks(None).await?;
+ // print_task_list(tasks, ws)?;
}
}
@@ -396,12 +422,12 @@ fn main() -> Result<()> {
TauSubcommand::List => {
let ws = tau.get_ws().await?;
- print_task_list(tasks, ws)
+ print_task_list(tasks_local_id, ws)
}
},
None => {
let ws = tau.get_ws().await?;
- print_task_list(tasks, ws)
+ print_task_list(tasks_local_id, ws)
}
}?;
diff --git a/bin/tau/tau-cli/src/primitives.rs b/bin/tau/tau-cli/src/primitives.rs
index 0cf6f8ce4..632192696 100644
--- a/bin/tau/tau-cli/src/primitives.rs
+++ b/bin/tau/tau-cli/src/primitives.rs
@@ -37,7 +37,6 @@ impl From for TaskInfo {
Self {
ref_id: String::default(),
workspace: String::default(),
- id: u32::default(),
title: value.title,
tags: value.tags,
desc: String::default(),
diff --git a/bin/tau/tau-cli/src/rpc.rs b/bin/tau/tau-cli/src/rpc.rs
index 2151eea00..35087620f 100644
--- a/bin/tau/tau-cli/src/rpc.rs
+++ b/bin/tau/tau-cli/src/rpc.rs
@@ -31,7 +31,7 @@ impl Tau {
}
/// Add a new task.
- pub async fn add(&self, task: BaseTask) -> Result {
+ pub async fn add(&self, task: BaseTask) -> Result {
let mut params = vec![
JsonValue::String(task.title.clone()),
JsonValue::Array(task.tags.iter().map(|x| JsonValue::String(x.clone())).collect()),
@@ -55,26 +55,26 @@ impl Tau {
let rep = self.rpc_client.request(req).await?;
debug!("Got reply: {:?}", rep);
- Ok(*rep.get::().unwrap() as u32)
+ Ok(*rep.get::().unwrap())
}
/// Get current open tasks ids.
- pub async fn get_ids(&self) -> Result> {
- let req = JsonRequest::new("get_ids", vec![]);
+ pub async fn get_ref_ids(&self) -> Result> {
+ let req = JsonRequest::new("get_ref_ids", vec![]);
let rep = self.rpc_client.request(req).await?;
debug!("Got reply: {:?}", rep);
let mut ret = vec![];
for i in rep.get::>().unwrap() {
- ret.push(*i.get::().unwrap() as u32)
+ ret.push(i.get::().unwrap().to_string())
}
Ok(ret)
}
/// Update existing task given it's ID and some params.
- pub async fn update(&self, id: u32, task: BaseTask) -> Result {
+ pub async fn update(&self, ref_id: &str, task: BaseTask) -> Result {
let mut params = vec![
JsonValue::String(task.title.clone()),
JsonValue::Array(task.tags.iter().map(|x| JsonValue::String(x.clone())).collect()),
@@ -96,7 +96,7 @@ impl Tau {
let req = JsonRequest::new(
"update",
- vec![JsonValue::Number(id.into()), JsonValue::Array(params)],
+ vec![JsonValue::String(ref_id.into()), JsonValue::Array(params)],
);
let rep = self.rpc_client.request(req).await?;
@@ -105,10 +105,10 @@ impl Tau {
}
/// Set the state for a task.
- pub async fn set_state(&self, id: u32, state: &State) -> Result {
+ pub async fn set_state(&self, ref_id: &str, state: &State) -> Result {
let req = JsonRequest::new(
"set_state",
- vec![JsonValue::Number(id.into()), JsonValue::String(state.to_string())],
+ vec![JsonValue::String(ref_id.into()), JsonValue::String(state.to_string())],
);
let rep = self.rpc_client.request(req).await?;
@@ -117,10 +117,10 @@ impl Tau {
}
/// Set a comment for a task.
- pub async fn set_comment(&self, id: u32, content: &str) -> Result {
+ pub async fn set_comment(&self, ref_id: &str, content: &str) -> Result {
let req = JsonRequest::new(
"set_comment",
- vec![JsonValue::Number(id.into()), JsonValue::String(content.to_string())],
+ vec![JsonValue::String(ref_id.into()), JsonValue::String(content.to_string())],
);
let rep = self.rpc_client.request(req).await?;
@@ -129,8 +129,8 @@ impl Tau {
}
/// Get task data by its ID.
- pub async fn get_task_by_id(&self, id: u32) -> Result {
- let req = JsonRequest::new("get_task_by_id", vec![JsonValue::Number(id.into())]);
+ pub async fn get_task_by_ref_id(&self, ref_id: &str) -> Result {
+ let req = JsonRequest::new("get_task_by_ref_id", vec![JsonValue::String(ref_id.into())]);
let rep = self.rpc_client.request(req).await?;
debug!("Got reply: {:?}", rep);
diff --git a/bin/tau/tau-cli/src/util.rs b/bin/tau/tau-cli/src/util.rs
index af1f18ee5..e7dd46bb1 100644
--- a/bin/tau/tau-cli/src/util.rs
+++ b/bin/tau/tau-cli/src/util.rs
@@ -75,7 +75,7 @@ pub fn prompt_text(task_info: TaskInfo, what: &str) -> Result