mirror of
https://github.com/kdheepak/taskwarrior-tui.git
synced 2025-08-25 17:57:19 +02:00
Fix task color when tagged
This commit is contained in:
parent
77e91f205e
commit
7208d7879d
2 changed files with 47 additions and 41 deletions
85
src/app.rs
85
src/app.rs
|
@ -145,14 +145,49 @@ pub struct TaskReportTable {
|
||||||
pub labels: Vec<String>,
|
pub labels: Vec<String>,
|
||||||
pub columns: Vec<String>,
|
pub columns: Vec<String>,
|
||||||
pub tasks: Vec<Vec<String>>,
|
pub tasks: Vec<Vec<String>>,
|
||||||
|
virtual_tags: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TaskReportTable {
|
impl TaskReportTable {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
|
let virtual_tags = vec![
|
||||||
|
"PROJECT",
|
||||||
|
"BLOCKED",
|
||||||
|
"UNBLOCKED",
|
||||||
|
"BLOCKING",
|
||||||
|
"DUE",
|
||||||
|
"DUETODAY",
|
||||||
|
"TODAY",
|
||||||
|
"OVERDUE",
|
||||||
|
"WEEK",
|
||||||
|
"MONTH",
|
||||||
|
"QUARTER",
|
||||||
|
"YEAR",
|
||||||
|
"ACTIVE",
|
||||||
|
"SCHEDULED",
|
||||||
|
"PARENT",
|
||||||
|
"CHILD",
|
||||||
|
"UNTIL",
|
||||||
|
"WAITING",
|
||||||
|
"ANNOTATED",
|
||||||
|
"READY",
|
||||||
|
"YESTERDAY",
|
||||||
|
"TOMORROW",
|
||||||
|
"TAGGED",
|
||||||
|
"PENDING",
|
||||||
|
"COMPLETED",
|
||||||
|
"DELETED",
|
||||||
|
"UDA",
|
||||||
|
"ORPHAN",
|
||||||
|
"PRIORITY",
|
||||||
|
"PROJECT",
|
||||||
|
"LATEST",
|
||||||
|
];
|
||||||
let mut task_report_table = Self {
|
let mut task_report_table = Self {
|
||||||
labels: vec![],
|
labels: vec![],
|
||||||
columns: vec![],
|
columns: vec![],
|
||||||
tasks: vec![vec![]],
|
tasks: vec![vec![]],
|
||||||
|
virtual_tags: virtual_tags.iter().map(|s| s.to_string()).collect::<Vec<_>>(),
|
||||||
};
|
};
|
||||||
task_report_table.export_headers();
|
task_report_table.export_headers();
|
||||||
task_report_table
|
task_report_table
|
||||||
|
@ -253,40 +288,6 @@ impl TaskReportTable {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_string_attribute(&self, attribute: &str, task: &Task) -> String {
|
pub fn get_string_attribute(&self, attribute: &str, task: &Task) -> String {
|
||||||
let tags = vec![
|
|
||||||
"PROJECT",
|
|
||||||
"BLOCKED",
|
|
||||||
"UNBLOCKED",
|
|
||||||
"BLOCKING",
|
|
||||||
"DUE",
|
|
||||||
"DUETODAY",
|
|
||||||
"TODAY",
|
|
||||||
"OVERDUE",
|
|
||||||
"WEEK",
|
|
||||||
"MONTH",
|
|
||||||
"QUARTER",
|
|
||||||
"YEAR",
|
|
||||||
"ACTIVE",
|
|
||||||
"SCHEDULED",
|
|
||||||
"PARENT",
|
|
||||||
"CHILD",
|
|
||||||
"UNTIL",
|
|
||||||
"WAITING",
|
|
||||||
"ANNOTATED",
|
|
||||||
"READY",
|
|
||||||
"YESTERDAY",
|
|
||||||
"TOMORROW",
|
|
||||||
"TAGGED",
|
|
||||||
"PENDING",
|
|
||||||
"COMPLETED",
|
|
||||||
"DELETED",
|
|
||||||
"UDA",
|
|
||||||
"ORPHAN",
|
|
||||||
"PRIORITY",
|
|
||||||
"PROJECT",
|
|
||||||
"LATEST",
|
|
||||||
];
|
|
||||||
|
|
||||||
match attribute {
|
match attribute {
|
||||||
"id" => task.id().unwrap_or_default().to_string(),
|
"id" => task.id().unwrap_or_default().to_string(),
|
||||||
"due.relative" => match task.due() {
|
"due.relative" => match task.due() {
|
||||||
|
@ -317,7 +318,7 @@ impl TaskReportTable {
|
||||||
},
|
},
|
||||||
"tags.count" => match task.tags() {
|
"tags.count" => match task.tags() {
|
||||||
Some(v) => {
|
Some(v) => {
|
||||||
let t = v.iter().filter(|t| !tags.contains(&t.as_str())).cloned().count();
|
let t = v.iter().filter(|t| !self.virtual_tags.contains(t)).cloned().count();
|
||||||
if t == 0 {
|
if t == 0 {
|
||||||
"".to_string()
|
"".to_string()
|
||||||
} else {
|
} else {
|
||||||
|
@ -329,7 +330,7 @@ impl TaskReportTable {
|
||||||
"tags" => match task.tags() {
|
"tags" => match task.tags() {
|
||||||
Some(v) => v
|
Some(v) => v
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|t| !tags.contains(&t.as_str()))
|
.filter(|t| !self.virtual_tags.contains(t))
|
||||||
.cloned()
|
.cloned()
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join(","),
|
.join(","),
|
||||||
|
@ -745,11 +746,11 @@ impl TTApp {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn style_for_task(&self, task: &Task) -> Style {
|
fn style_for_task(&self, task: &Task) -> Style {
|
||||||
let tag_names_in_precedence = &self.config.rule_precedence_color;
|
let virtual_tag_names_in_precedence = &self.config.rule_precedence_color;
|
||||||
|
|
||||||
let mut style = Style::default();
|
let mut style = Style::default();
|
||||||
|
|
||||||
for tag_name in tag_names_in_precedence {
|
for tag_name in virtual_tag_names_in_precedence {
|
||||||
if task
|
if task
|
||||||
.tags()
|
.tags()
|
||||||
.unwrap_or(&vec![])
|
.unwrap_or(&vec![])
|
||||||
|
@ -1271,7 +1272,10 @@ impl TTApp {
|
||||||
add_tag(&mut task, "ANNOTATED".to_string());
|
add_tag(&mut task, "ANNOTATED".to_string());
|
||||||
}
|
}
|
||||||
if task.tags().is_some() {
|
if task.tags().is_some() {
|
||||||
add_tag(&mut task, "TAGGED".to_string());
|
let tags = task.tags().unwrap().iter().filter(|s| !self.task_report_table.virtual_tags.contains(s)).collect::<Vec<_>>();
|
||||||
|
if !tags.is_empty() {
|
||||||
|
add_tag(&mut task, "TAGGED".to_string());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if task.mask().is_some() {
|
if task.mask().is_some() {
|
||||||
add_tag(&mut task, "TEMPLATE".to_string());
|
add_tag(&mut task, "TEMPLATE".to_string());
|
||||||
|
@ -1571,7 +1575,8 @@ mod tests {
|
||||||
assert_eq!(app.context_name, "".to_string());
|
assert_eq!(app.context_name, "".to_string());
|
||||||
println!("{:?}", app.tasks.lock().unwrap()[0]);
|
println!("{:?}", app.tasks.lock().unwrap()[0]);
|
||||||
|
|
||||||
println!("{:?}", app.style_for_task(&app.task_current().unwrap()));
|
dbg!(&app.task_current().unwrap().tags());
|
||||||
|
dbg!(app.style_for_task(&app.task_current().unwrap()));
|
||||||
//println!("{:?}", app.task_report_columns);
|
//println!("{:?}", app.task_report_columns);
|
||||||
//println!("{:?}", app.task_report_labels);
|
//println!("{:?}", app.task_report_labels);
|
||||||
|
|
||||||
|
|
|
@ -247,7 +247,7 @@ impl TConfig {
|
||||||
fn get_rule_precedence_color() -> Vec<String> {
|
fn get_rule_precedence_color() -> Vec<String> {
|
||||||
let data = Self::get_config("rule.precedence.color");
|
let data = Self::get_config("rule.precedence.color");
|
||||||
data.split(',')
|
data.split(',')
|
||||||
.map(|s| s.trim_end_matches('.'))
|
.filter(|s| !s.ends_with('.'))
|
||||||
.map(|s| s.to_string())
|
.map(|s| s.to_string())
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
}
|
}
|
||||||
|
@ -313,5 +313,6 @@ mod tests {
|
||||||
fn test_colors() {
|
fn test_colors() {
|
||||||
let tc = TConfig::default();
|
let tc = TConfig::default();
|
||||||
dbg!(&tc.color["color.active"]);
|
dbg!(&tc.color["color.active"]);
|
||||||
|
dbg!(&tc.rule_precedence_color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue