commit e396d327ce7472ac9a79ab7df26755d6e50ef0c7 from: Matt Streatfield via: Oliver Lowe date: Mon Apr 21 23:45:08 2025 UTC Wrap channel results so we can add extra data Link to channel commit - f018f5a676cd8a415a426d8302bc1950a9dd20b4 commit + e396d327ce7472ac9a79ab7df26755d6e50ef0c7 blob - 99641078e9a491a9611743912649a41225603666 blob + 4fdd36ec7bd8c1eff3fe3f07c55628360acf7a7f --- internal/service/handlers.go +++ internal/service/handlers.go @@ -3,16 +3,12 @@ package service import ( "html/template" "net/http" - - "github.com/streatCodes/rss/rss" + "net/url" ) -type TemplateData struct { - Results []rss.Channel -} - var templateFuncs = template.FuncMap{ - "timeAgo": timeAgo, + "timeAgo": timeAgo, + "pathEscape": url.PathEscape, } func render(w http.ResponseWriter, name string, data any) { @@ -29,14 +25,14 @@ func (service *Service) searchHandler(w http.ResponseW isHtmx := r.Header.Get("HX-Request") == "true" searchQuery := r.URL.Query().Get("search") - channels, err := service.findChannel(searchQuery) + results, err := service.findChannel(searchQuery) if err != nil { panic("TODO") } if isHtmx { - render(w, "results", channels) + render(w, "results", results) return } - render(w, "home", TemplateData{Results: channels}) + render(w, "home", results) } blob - fc7a36095e3546d9ad62f9fc8ff9dc680428be92 blob + 7ed9210fb5ae6c58e79f7f2e061779b2107ecb8d --- internal/service/search.go +++ internal/service/search.go @@ -1,22 +1,31 @@ package service import ( + "log" "net/http" "net/url" "github.com/streatCodes/rss/rss" ) -func (service *Service) findChannel(query string) ([]rss.Channel, error) { +type ChannelResult struct { + ChannelUrl string + Channel rss.Channel +} + +func (service *Service) findChannel(query string) ([]ChannelResult, error) { //If the search query is a URL then ingest the feed if parsedURL, err := url.ParseRequestURI(query); err == nil { + channelUrl := parsedURL.String() + //Check to see if we have the feed in the database - if channel, err := service.db.GetChannel(parsedURL.String()); channel != nil && err == nil { - return []rss.Channel{*channel}, nil + if channel, err := service.db.GetChannel(channelUrl); channel != nil && err == nil { + return []ChannelResult{{ChannelUrl: channelUrl, Channel: *channel}}, nil } //Fetch from the internet - res, err := http.Get(query) + log.Printf("Indexing channel %s\n", channelUrl) + res, err := http.Get(channelUrl) if err != nil { return nil, err } @@ -26,12 +35,12 @@ func (service *Service) findChannel(query string) ([]r return nil, err } - err = service.db.SaveChannel(parsedURL.String(), &feed.Channel) + err = service.db.SaveChannel(channelUrl, &feed.Channel) if err != nil { return nil, err } - return []rss.Channel{feed.Channel}, nil + return []ChannelResult{{ChannelUrl: channelUrl, Channel: feed.Channel}}, nil } - return []rss.Channel{}, nil + return []ChannelResult{}, nil } blob - 0cf6eed00b7dcfbdeca42e826f92a48ce7895b6c blob + 23302b9aa8be8f918eb35fbd152ef550a6366a1c --- internal/templates/home.tmpl +++ internal/templates/home.tmpl @@ -36,7 +36,7 @@
- {{ template "results" .Results }} + {{ template "results" . }}
{{ template "footer" }} blob - 9d3a73da08d07995b9a751c618d6103d58855e78 blob + 659b7e94cc258811911c19033cd2fa7efe7b88b6 --- internal/templates/results.tmpl +++ internal/templates/results.tmpl @@ -2,33 +2,33 @@
{{ range . }}
- +
-

{{ .Title }}

- Episodes +

{{ .Channel.Title }}

+ Episodes
-
-

{{ .Description }}

+

{{ .Channel.Description }}

- {{ if gt (len .Link) 0 }} - + {{ if gt (len .Channel.Link) 0 }} + {{ end }} - + - {{ range .Categories }} + {{ range .Channel.Categories }} #{{ .Text }} {{ end }}