diff --git a/src/main.rs b/src/main.rs index 17e759d..124b258 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,9 +58,16 @@ fn main() -> Result<(), Error> { let tags = &mut Vec::new(); for v in args.ids_or_tags.iter() { + debug!("MAIN: Parsed value: {:?}", v); match v.clone() { - NumberOrString::Number(num) => ids.push(num), - NumberOrString::Str(str) => tags.push(str), + NumberOrString::Number(num) => { + debug!("MAIN: Adding to ids: {}", num); + ids.push(num) + }, + NumberOrString::Str(str) => { + debug!("MAIN: Adding to tags: {}", str); + tags.push(str) + }, } } diff --git a/src/modes/info.rs b/src/modes/info.rs index 8a794b0..f6f931b 100644 --- a/src/modes/info.rs +++ b/src/modes/info.rs @@ -24,6 +24,33 @@ pub fn mode_info( conn: &mut rusqlite::Connection, data_path: PathBuf, ) -> Result<()> { + // Check if any tags can be parsed as numbers and treat them as IDs for --info + let mut numeric_tags = Vec::new(); + let mut non_numeric_tags = Vec::new(); + + for tag in tags.iter() { + if let Ok(num) = tag.parse::() { + numeric_tags.push(num); + } else { + non_numeric_tags.push(tag.clone()); + } + } + + // If we have numeric tags and no IDs, use them as IDs + if ids.is_empty() && !numeric_tags.is_empty() { + // For --info, we can only handle one ID + if numeric_tags.len() > 1 { + cmd.error(ErrorKind::InvalidValue, "More than one ID given, you must supply exactly one ID or atleast one tag when using --info").exit(); + } + // Move the numeric tag to ids + ids.push(numeric_tags[0]); + // Clear the tags since we're now using an ID + tags.clear(); + } else { + // Use the original logic + *tags = non_numeric_tags; + } + if !ids.is_empty() && !tags.is_empty() { cmd.error(ErrorKind::InvalidValue, "Both ID and tags given, you must supply exactly one ID or atleast one tag when using --info").exit(); } else if ids.len() > 1 {