diff --git a/internal/webserver/handler_messages.go b/internal/webserver/handler_messages.go index a697a13..70ca5d6 100644 --- a/internal/webserver/handler_messages.go +++ b/internal/webserver/handler_messages.go @@ -27,7 +27,7 @@ func (t MessageData) FocusedTweetID() scraper.TweetID { } func (app *Application) Messages(w http.ResponseWriter, r *http.Request) { - app.traceLog.Printf("'Lists' handler (path: %q)", r.URL.Path) + app.traceLog.Printf("'Messages' handler (path: %q)", r.URL.Path) // TODO: what if no active user? diff --git a/internal/webserver/static/styles.css b/internal/webserver/static/styles.css index 64219eb..8ebc8bb 100644 --- a/internal/webserver/static/styles.css +++ b/internal/webserver/static/styles.css @@ -148,12 +148,15 @@ a.entity { color: var(--color-twitter-blue); } -.tweet .text { +.tweet .text, .dm-message-text-container .text { display: block; margin-bottom: 0.4em; margin-top: 0; overflow-wrap: anywhere; } +.dm-message-text-container .text:last-child { + margin-bottom: 0; +} #focused-tweet .text { font-size: 1.4em; } @@ -651,39 +654,57 @@ ul.dropdown-items { box-sizing: border-box; } .chats-container .chat-list { - width: 30%; + flex-basis: 0; + flex-grow: 4; display: flex; flex-direction: column; overflow-y: scroll; } .chats-container .chat-list .chat { border-bottom: 1px solid var(--color-outline-gray); - padding: 0.5em; + padding: 1em 1em 0 1em; box-sizing: border-box; + cursor: pointer; } +.chats-container .chat-list .chat .chat-preview-header { + display: flex; + align-items: center; + justify-content: space-between; +} +.chats-container .chat-list .chat .chat-preview-header .posted-at { + margin: 0; +} +.chats-container .chat-list .chat .chat-preview { + font-size: 0.9em; + color: var(--color-twitter-text-gray); + padding: 0 1em; + border-left: 1px solid var(--color-outline-gray); +} + .chats-container #chat-view { - width: 70%; + flex-basis: 0; + flex-grow: 7; border-left: 1px solid var(--color-outline-gray); overflow-y: scroll; padding: 0.5em; box-sizing: border-box; } .chats-container #chat-view .our-message { - justify-content: flex-end; + align-items: flex-end; } .dm-message-and-reacts-container { display: flex; flex-direction: column; margin: 1em 0; } -p.dm-message-text { +.dm-message-text-container { display: inline-block; padding: 1em; background-color: #ddd; border-radius: 1em; margin: 0; } -.our-message p.dm-message-text { +.our-message .dm-message-text-container { background-color: var(--color-twitter-blue-light); } .sender-profile-image-container { @@ -708,3 +729,6 @@ p.dm-message-text { .our-message .dm-message-reactions { flex-direction: row-reverse; } +.dm-message-and-reacts-container p.posted-at { + margin: 0 4.5em; +} diff --git a/internal/webserver/tpl/tweet_page_includes/chat_list.tpl b/internal/webserver/tpl/tweet_page_includes/chat_list.tpl index db31cec..73a46af 100644 --- a/internal/webserver/tpl/tweet_page_includes/chat_list.tpl +++ b/internal/webserver/tpl/tweet_page_includes/chat_list.tpl @@ -3,14 +3,23 @@ {{range .RoomIDs}} {{$room := (index $.Rooms .)}}
- {{range $room.Participants}} - {{if (ne .UserID (active_user).ID)}} - -
- {{template "author-info" (user .UserID)}} -
+
+ {{range $room.Participants}} + {{if (ne .UserID (active_user).ID)}} + +
+ {{template "author-info" (user .UserID)}} +
+ {{end}} {{end}} - {{end}} +
+

+ {{$room.LastMessagedAt.Time.Format "Jan 2, 2006"}} +
+ {{$room.LastMessagedAt.Time.Format "3:04 pm"}} +

+
+

{{(index $.DMTrove.Messages $room.LastMessageID).Text}}

{{end}} diff --git a/internal/webserver/tpl/tweet_page_includes/chat_view.tpl b/internal/webserver/tpl/tweet_page_includes/chat_view.tpl index b4b7bb6..09f3ee9 100644 --- a/internal/webserver/tpl/tweet_page_includes/chat_view.tpl +++ b/internal/webserver/tpl/tweet_page_includes/chat_view.tpl @@ -11,7 +11,7 @@ -

{{$message.Text}}

+
{{template "text-with-entities" $message.Text}}
{{range $message.Reactions}} @@ -19,6 +19,9 @@ {{.Emoji}} {{end}}
+

+ {{$message.SentAt.Time.Format "Jan 2, 2006 @ 3:04 pm"}} +

{{end}} diff --git a/pkg/persistence/dm_queries.go b/pkg/persistence/dm_queries.go index 6f65e58..c77ac1c 100644 --- a/pkg/persistence/dm_queries.go +++ b/pkg/persistence/dm_queries.go @@ -1,6 +1,8 @@ package persistence import ( + "database/sql" + "errors" "fmt" "strings" @@ -188,7 +190,10 @@ func (p Profile) GetChatRoomsPreview(id UserID) DMChatView { panic(err) } err = p.DB.Get(&msg, q, args...) - if err != nil { + if errors.Is(err, sql.ErrNoRows) { + // TODO + fmt.Printf("No messages found in chat; skipping preview\n") + } else if err != nil { panic(err) }