Skip to content

Commit

Permalink
Add max_comment_length to config
Browse files Browse the repository at this point in the history
  • Loading branch information
alanvardy committed Jan 4, 2025
1 parent 502dc68 commit b9ab11f
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## Unreleased (on main branch only)

- Render attachment URLs in comments
- Make `max_comment_length` configurable

## 2025-01-02 v0.6.26

Expand Down
11 changes: 11 additions & 0 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
- [Values](#values)
- [disable_links](#disable_links)
- [last_version_check](#last_version_check)
- [max_comment_length](#max_comment_length)
- [next_id](#next_id)
- [path](#path)
- [natural_language_only](#natural_language_only)
Expand Down Expand Up @@ -66,6 +67,16 @@ If true, disables OSC8 linking and just displays plain text

Holds a string date, i.e. `"2023-08-30"` representing the last time crates.io was checked for the latest `tod` version. Tod will check crates.io a maximum of once per day.

### max_comment_length

```
type: nullable positive integer
default: null
possible_values: Any positive integer or null
```

The maximum number of characters that will be printed in total when showing comments.

### next_id

```
Expand Down
8 changes: 8 additions & 0 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ use tokio::fs;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::sync::mpsc::UnboundedSender;

const MAX_COMMENT_LENGTH: u32 = 500;

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct Completed {
count: u32,
Expand Down Expand Up @@ -45,6 +47,8 @@ pub struct Config {
#[serde(default)]
pub disable_links: bool,
pub completed: Option<Completed>,
// Maximum length for printing comments
pub max_comment_length: Option<u32>,
pub verbose: Option<bool>,
/// Don't ask for sections
pub no_sections: Option<bool>,
Expand Down Expand Up @@ -108,6 +112,9 @@ impl Default for SortValue {
}
}
impl Config {
pub fn max_comment_length(self: &Config) -> u32 {
self.max_comment_length.unwrap_or(MAX_COMMENT_LENGTH)

Check warning on line 116 in src/config.rs

View check run for this annotation

Codecov / codecov/patch

src/config.rs#L115-L116

Added lines #L115 - L116 were not covered by tests
}
pub async fn reload_projects(self: &mut Config) -> Result<String, Error> {
let all_projects = todoist::projects(self).await?;
let current_projects = self.projects.clone().unwrap_or_default();
Expand Down Expand Up @@ -255,6 +262,7 @@ impl Config {
natural_language_only: None,
mock_string: None,
mock_select: None,
max_comment_length: None,
verbose: None,
internal: Internal { tx: Some(tx) },
args: Args {
Expand Down
14 changes: 13 additions & 1 deletion src/error.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use std::{fmt::Display, num::ParseIntError};
use std::{
fmt::Display,
num::{ParseIntError, TryFromIntError},
};

use crate::color;
use homedir::GetHomeError;
Expand Down Expand Up @@ -32,6 +35,15 @@ impl From<std::io::Error> for Error {
}
}

impl From<TryFromIntError> for Error {
fn from(value: TryFromIntError) -> Self {
Self {
source: String::from("TryFromIntError"),
message: format!("{value}"),
}
}
}

impl From<JoinError> for Error {
fn from(value: JoinError) -> Self {
Self {
Expand Down
7 changes: 3 additions & 4 deletions src/tasks/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ use supports_hyperlinks::Stream;
use super::{priority, DateTimeInfo, Duration, Task, Unit};
use crate::{color, config::Config, error::Error, projects::Project, time, todoist};

const MAX_COMMENT_LENGTH: usize = 500;

pub fn content(task: &Task, config: &Config) -> String {
let content = match task.priority {
priority::Priority::Low => color::blue_string(&task.content),
Expand Down Expand Up @@ -146,9 +144,10 @@ pub async fn comments(config: &Config, task: &Task) -> Result<String, Error> {
comments.reverse();
let comments = comments.join("\n\n");
let mut formatted_string = format!("\n\n{comment_icon} Comments {comment_icon}\n\n{comments}");
let max_comment_length: usize = config.max_comment_length().try_into()?;

Check warning on line 147 in src/tasks/format.rs

View check run for this annotation

Codecov / codecov/patch

src/tasks/format.rs#L147

Added line #L147 was not covered by tests

if formatted_string.len() > MAX_COMMENT_LENGTH {
formatted_string.truncate(MAX_COMMENT_LENGTH);
if formatted_string.len() > max_comment_length {
formatted_string.truncate(max_comment_length);

Check warning on line 150 in src/tasks/format.rs

View check run for this annotation

Codecov / codecov/patch

src/tasks/format.rs#L149-L150

Added lines #L149 - L150 were not covered by tests
formatted_string.push_str("[TRUNCATED]");
};

Expand Down
1 change: 1 addition & 0 deletions src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ pub mod fixtures {
disable_links: false,
completed: None,
bell_on_success: false,
max_comment_length: Some(100),
bell_on_failure: true,
internal: Internal { tx: tx() },
projects: Some(vec![Project {
Expand Down

0 comments on commit b9ab11f

Please sign in to comment.