From 1184f9aaae2aaed0bf61bd5f02f16c24b7c927b9 Mon Sep 17 00:00:00 2001 From: Matt Low Date: Wed, 3 Jan 2024 07:19:08 +0000 Subject: [PATCH] Changed how conversations are grouped by age in `lmcli ls` --- pkg/cli/cmd.go | 72 +++++++++++++++++++------------------------------- 1 file changed, 27 insertions(+), 45 deletions(-) diff --git a/pkg/cli/cmd.go b/pkg/cli/cmd.go index c05af6b..1fd8db6 100644 --- a/pkg/cli/cmd.go +++ b/pkg/cli/cmd.go @@ -173,25 +173,10 @@ var lsCmd = &cobra.Command{ return } - // Example output - // $ lmcli ls - // last hour: - // 98sg - 12 minutes ago - Project discussion - // last day: - // tj3l - 10 hours ago - Deep learning concepts - // last week: - // bwfm - 2 days ago - Machine learning study - // 8n3h - 3 days ago - Weekend plans - // f3n7 - 6 days ago - CLI development - // last month: - // 5hn2 - 8 days ago - Book club discussion - // b7ze - 20 days ago - Gardening tips and tricks - // last 6 months: - // 3jn2 - 30 days ago - Web development best practices - // 43jk - 2 months ago - Longboard maintenance - // g8d9 - 3 months ago - History book club - // 4lk3 - 4 months ago - Local events and meetups - // 43jn - 6 months ago - Mobile photography techniques + type Category struct { + name string + cutoff time.Duration + } type ConversationLine struct { timeSinceReply time.Duration @@ -199,15 +184,22 @@ var lsCmd = &cobra.Command{ } now := time.Now() - categories := []string{ - "recent", - "last hour", - "last 6 hours", - "last day", - "last week", - "last month", - "last 6 months", - "older", + + midnight := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()) + monthStart := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location()) + dayOfWeek := int(now.Weekday()) + categories := []Category{ + {"today", now.Sub(midnight)}, + {"yesterday", now.Sub(midnight.AddDate(0, 0, -1))}, + {"this week", now.Sub(midnight.AddDate(0, 0, -dayOfWeek))}, + {"last week", now.Sub(midnight.AddDate(0, 0, -(dayOfWeek + 7)))}, + {"this month", now.Sub(monthStart)}, + {"last month", now.Sub(monthStart.AddDate(0, -1, 0))}, + {"2 months ago", now.Sub(monthStart.AddDate(0, -2, 0))}, + {"3 months ago", now.Sub(monthStart.AddDate(0, -3, 0))}, + {"4 months ago", now.Sub(monthStart.AddDate(0, -4, 0))}, + {"5 months ago", now.Sub(monthStart.AddDate(0, -5, 0))}, + {"older", now.Sub(time.Time{})}, } categorized := map[string][]ConversationLine{} @@ -216,26 +208,15 @@ var lsCmd = &cobra.Command{ if lastMessage == nil || err != nil { continue } + messageAge := now.Sub(lastMessage.CreatedAt) var category string - switch { - case messageAge <= 10*time.Minute: - category = "recent" - case messageAge <= time.Hour: - category = "last hour" - case messageAge <= 6*time.Hour: - category = "last 6 hours" - case messageAge <= 24*time.Hour: - category = "last day" - case messageAge <= 7*24*time.Hour: - category = "last week" - case messageAge <= 30*24*time.Hour: - category = "last month" - case messageAge <= 6*30*24*time.Hour: // Approximate as 6 months - category = "last 6 months" - default: - category = "older" + for _, c := range categories { + if messageAge < c.cutoff { + category = c.name + break + } } formatted := fmt.Sprintf( @@ -244,6 +225,7 @@ var lsCmd = &cobra.Command{ humanTimeElapsedSince(messageAge), conversation.Title, ) + categorized[category] = append( categorized[category], ConversationLine{messageAge, formatted},