From e8b4b17f981ea5418b12d1920288bcfc7615a0fe Mon Sep 17 00:00:00 2001 From: talwat <83217276+talwat@users.noreply.github.com> Date: Wed, 4 Jun 2025 14:09:41 +0200 Subject: [PATCH] fix: bookmark writing --- src/tracks/bookmark.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/tracks/bookmark.rs b/src/tracks/bookmark.rs index d8d91cd..0901f7d 100644 --- a/src/tracks/bookmark.rs +++ b/src/tracks/bookmark.rs @@ -1,5 +1,7 @@ +use std::io::SeekFrom; + use tokio::fs::{create_dir_all, OpenOptions}; -use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use tokio::io::{AsyncReadExt, AsyncSeekExt, AsyncWriteExt}; use crate::data_dir; @@ -27,17 +29,19 @@ pub async fn bookmark(path: String, custom: Option) -> eyre::Result = text.lines().collect(); - let previous_len = lines.len(); - lines.retain(|line| (*line != entry)); - let contains = lines.len() != previous_len; + let mut lines: Vec<&str> = text.trim().lines().filter(|x| !x.is_empty()).collect(); + let idx = lines.iter().position(|x| **x == entry); - if !contains { + if let Some(idx) = idx { + lines.remove(idx); + } else { lines.push(&entry); } + let text = format!("\n{}", lines.join("\n")); + file.seek(SeekFrom::Start(0)).await?; file.set_len(0).await?; - file.write_all(format!("\n{}\n", lines.join("\n")).as_bytes()).await?; + file.write_all(text.as_bytes()).await?; - Ok(!contains) + Ok(idx.is_none()) }