/* This file is part of DarkFi (https://dark.fi) * * Copyright (C) 2020-2023 Dyne.org foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ use log::debug; use serde_json::{from_value, json}; use darkfi::{rpc::jsonrpc::JsonRequest, Result}; use crate::{ primitives::{BaseTask, State, TaskInfo}, Tau, }; impl Tau { pub async fn close_connection(&self) -> Result<()> { self.rpc_client.close().await } /// Add a new task. pub async fn add(&self, task: BaseTask) -> Result { let req = JsonRequest::new("add", json!([task])); let rep = self.rpc_client.request(req).await?; debug!("Got reply: {:?}", rep); let reply: bool = from_value(rep)?; Ok(reply) } /// Get current open tasks ids. pub async fn get_ids(&self) -> Result> { let req = JsonRequest::new("get_ids", json!([])); let rep = self.rpc_client.request(req).await?; let mut ret = vec![]; for i in rep.as_array().unwrap() { ret.push(i.as_u64().unwrap()); } Ok(ret) } /// Update existing task given it's ID and some params. pub async fn update(&self, id: u64, task: BaseTask) -> Result { let req = JsonRequest::new("update", json!([id, task])); let rep = self.rpc_client.request(req).await?; debug!("Got reply: {:?}", rep); let reply: bool = from_value(rep)?; Ok(reply) } /// Set the state for a task. pub async fn set_state(&self, id: u64, state: &State) -> Result { let req = JsonRequest::new("set_state", json!([id, state.to_string()])); let rep = self.rpc_client.request(req).await?; debug!("Got reply: {:?}", rep); let reply: bool = from_value(rep)?; Ok(reply) } /// Set a comment for a task. pub async fn set_comment(&self, id: u64, content: &str) -> Result { let req = JsonRequest::new("set_comment", json!([id, content])); let rep = self.rpc_client.request(req).await?; debug!("Got reply: {:?}", rep); let reply: bool = from_value(rep)?; Ok(reply) } /// Get task data by its ID. pub async fn get_task_by_id(&self, id: u64) -> Result { let req = JsonRequest::new("get_task_by_id", json!([id])); let rep = self.rpc_client.request(req).await?; Ok(serde_json::from_value(rep)?) } /// Get month's stopped tasks. pub async fn get_stop_tasks(&self, month: Option) -> Result> { let req = JsonRequest::new("get_stop_tasks", json!([month])); let rep = self.rpc_client.request(req).await?; Ok(serde_json::from_value(rep)?) } /// Switch workspace. pub async fn switch_ws(&self, workspace: String) -> Result { let req = JsonRequest::new("switch_ws", json!([workspace])); let rep = self.rpc_client.request(req).await?; debug!("Got reply: {:?}", rep); let reply: bool = from_value(rep)?; Ok(reply) } /// Get current workspace. pub async fn get_ws(&self) -> Result { let req = JsonRequest::new("get_ws", json!([])); let rep = self.rpc_client.request(req).await?; Ok(serde_json::from_value(rep)?) } /// Export tasks. pub async fn export_to(&self, path: String) -> Result { let req = JsonRequest::new("export", json!([path])); let rep = self.rpc_client.request(req).await?; debug!("Got reply: {:?}", rep); Ok(serde_json::from_value(rep)?) } /// Import tasks. pub async fn import_from(&self, path: String) -> Result { let req = JsonRequest::new("import", json!([path])); let rep = self.rpc_client.request(req).await?; debug!("Got reply: {:?}", rep); Ok(serde_json::from_value(rep)?) } }