diff --git a/handlers/chat.go b/handlers/chat.go index ce229c1..9553dba 100644 --- a/handlers/chat.go +++ b/handlers/chat.go @@ -2,10 +2,12 @@ package handlers import ( "encoding/json" + "html/template" "log" "net/http" "sync" "threadr/models" + "github.com/gorilla/sessions" "github.com/gorilla/websocket" ) @@ -136,21 +138,6 @@ func ChatHandler(app *App) http.HandlerFunc { return } - if r.URL.Query().Get("autocomplete") == "true" { - // Handle autocomplete for mentions - prefix := r.URL.Query().Get("prefix") - usernames, err := models.GetUsernamesMatching(app.DB, prefix) - if err != nil { - log.Printf("Error fetching usernames for autocomplete: %v", err) - http.Error(w, "Internal Server Error", http.StatusInternalServerError) - return - } - response, _ := json.Marshal(usernames) - w.Header().Set("Content-Type", "application/json") - w.Write(response) - return - } - // Render chat page messages, err := models.GetRecentChatMessages(app.DB, 50) if err != nil { @@ -164,9 +151,17 @@ func ChatHandler(app *App) http.HandlerFunc { messages[i], messages[j] = messages[j], messages[i] } + allUsernames, err := models.GetAllUsernames(app.DB) + if err != nil { + log.Printf("Error fetching all usernames: %v", err) + allUsernames = []string{} // Proceed without autocomplete on error + } + allUsernamesJSON, _ := json.Marshal(allUsernames) + data := struct { PageData - Messages []models.ChatMessage + Messages []models.ChatMessage + AllUsernames template.JS }{ PageData: PageData{ Title: "ThreadR - Chat", @@ -177,7 +172,8 @@ func ChatHandler(app *App) http.HandlerFunc { StaticPath: app.Config.ThreadrDir + "/static", CurrentURL: r.URL.Path, }, - Messages: messages, + Messages: messages, + AllUsernames: template.JS(allUsernamesJSON), } if err := app.Tmpl.ExecuteTemplate(w, "chat", data); err != nil { log.Printf("Error executing template in ChatHandler: %v", err) diff --git a/models/chat.go b/models/chat.go index e9045bf..3138e5a 100644 --- a/models/chat.go +++ b/models/chat.go @@ -78,25 +78,6 @@ func GetChatMessageByID(db *sql.DB, id int) (*ChatMessage, error) { return &msg, nil } -func GetUsernamesMatching(db *sql.DB, prefix string) ([]string, error) { - query := "SELECT username FROM users WHERE username LIKE ? LIMIT 10" - rows, err := db.Query(query, prefix+"%") - if err != nil { - return nil, err - } - defer rows.Close() - - var usernames []string - for rows.Next() { - var username string - if err := rows.Scan(&username); err != nil { - return nil, err - } - usernames = append(usernames, username) - } - return usernames, nil -} - // Simple utility to extract mentions from content func extractMentions(content string) []string { re := regexp.MustCompile(`@(\w+)`) @@ -106,4 +87,4 @@ func extractMentions(content string) []string { mentions[i] = match[1] } return mentions -} +} \ No newline at end of file diff --git a/models/user.go b/models/user.go index ab5c293..8016a05 100644 --- a/models/user.go +++ b/models/user.go @@ -153,3 +153,22 @@ const ( func HasGlobalPermission(user *User, perm int64) bool { return user.Permissions&perm != 0 } + +func GetAllUsernames(db *sql.DB) ([]string, error) { + query := "SELECT username FROM users ORDER BY username ASC" + rows, err := db.Query(query) + if err != nil { + return nil, err + } + defer rows.Close() + + var usernames []string + for rows.Next() { + var username string + if err := rows.Scan(&username); err != nil { + return nil, err + } + usernames = append(usernames, username) + } + return usernames, nil +} \ No newline at end of file diff --git a/templates/pages/chat.html b/templates/pages/chat.html index 93e5d9d..eef2587 100644 --- a/templates/pages/chat.html +++ b/templates/pages/chat.html @@ -257,9 +257,8 @@ -{{end}} +{{end}} \ No newline at end of file