nandi/gleanpublic Fork 0
c898429
Commits
Clone
git clone https://git.rickub.com/nandi/glean.git
git clone ssh://git@rickub.com/nandi/glean.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Add subscribe button in article view for non subscribed feedsUnverified

Julien Robert committed 2026-04-22T14:08:48+02:00 Browse files
c898429 parent: 8df4ed4
modified internal/server/articles_handler.go +5 -2
@@ -91,8 +91,11 @@ func (s *Server) handleArticles(w http.ResponseWriter, r *http.Request) {
9191 if feed, err := s.db.GetFeed(r.Context(), feedURL); err == nil {
9292 data["Feed"] = feed
9393 }
94- unreadCount, _ := s.db.GetUnreadCount(r.Context(), user.DID, feedURL)
95- data["FeedUnreadCount"] = unreadCount
94+ if _, err := s.db.GetSubscription(r.Context(), user.DID, feedURL); err == nil {
95+ data["IsSubscribed"] = true
96+ } else {
97+ data["IsSubscribed"] = false
98+ }
9699 }
97100
98101 if r.Header.Get("HX-Request") == "true" {
@@ -91,8 +91,11 @@ func (s *Server) handleArticles(w http.ResponseWriter, r *http.Request) {
91 if feed, err := s.db.GetFeed(r.Context(), feedURL); err == nil {91 if feed, err := s.db.GetFeed(r.Context(), feedURL); err == nil {
92 data["Feed"] = feed92 data["Feed"] = feed
93 }93 }
94- unreadCount, _ := s.db.GetUnreadCount(r.Context(), user.DID, feedURL)94+ if _, err := s.db.GetSubscription(r.Context(), user.DID, feedURL); err == nil {
95- data["FeedUnreadCount"] = unreadCount95+ data["IsSubscribed"] = true
96+ } else {
97+ data["IsSubscribed"] = false
98+ }
96 }99 }
97 100
98 if r.Header.Get("HX-Request") == "true" {101 if r.Header.Get("HX-Request") == "true" {
modified internal/tmpl/articles.html +8 -1
@@ -15,12 +15,19 @@
1515 </div>
1616 </div>
1717 <div class="flex items-center gap-3">
18- {{if .FeedUnreadCount}}<span class="text-xs bg-spot-green/20 text-spot-green px-2.5 py-0.5 rounded-full font-bold">{{.FeedUnreadCount}} unread</span>{{end}}
18+ {{if not .IsSubscribed}}
19+ <form hx-post="/feeds/add" hx-swap="none" hx-on::after-request="if(event.detail.successful) window.location.reload()">
20+ {{csrfInput .CSRFToken}}
21+ <input type="hidden" name="feed_url" value="{{.FeedURL}}">
22+ <button type="submit" class="bg-spot-green text-white rounded-pill px-4 py-1.5 text-xs font-bold uppercase tracking-button hover:brightness-110 transition">Subscribe</button>
23+ </form>
24+ {{else}}
1925 <form hx-post="/articles/mark-all-read" hx-confirm="Mark all articles as read?">
2026 {{csrfInput .CSRFToken}}
2127 <input type="hidden" name="feed" value="{{.FeedURL}}">
2228 <button type="submit" class="border border-spot-outline text-spot-text rounded-pill px-4 py-1.5 text-xs font-bold uppercase tracking-button hover:border-spot-text transition">Mark all read</button>
2329 </form>
30+ {{end}}
2431 </div>
2532 </div>
2633 {{if .Feed.Description.Valid}}<p class="text-sm text-spot-secondary mt-2">{{.Feed.Description.String}}</p>{{end}}
@@ -15,12 +15,19 @@
15 </div>15 </div>
16 </div>16 </div>
17 <div class="flex items-center gap-3">17 <div class="flex items-center gap-3">
18- {{if .FeedUnreadCount}}<span class="text-xs bg-spot-green/20 text-spot-green px-2.5 py-0.5 rounded-full font-bold">{{.FeedUnreadCount}} unread</span>{{end}}18+ {{if not .IsSubscribed}}
19+ <form hx-post="/feeds/add" hx-swap="none" hx-on::after-request="if(event.detail.successful) window.location.reload()">
20+ {{csrfInput .CSRFToken}}
21+ <input type="hidden" name="feed_url" value="{{.FeedURL}}">
22+ <button type="submit" class="bg-spot-green text-white rounded-pill px-4 py-1.5 text-xs font-bold uppercase tracking-button hover:brightness-110 transition">Subscribe</button>
23+ </form>
24+ {{else}}
19 <form hx-post="/articles/mark-all-read" hx-confirm="Mark all articles as read?">25 <form hx-post="/articles/mark-all-read" hx-confirm="Mark all articles as read?">
20 {{csrfInput .CSRFToken}}26 {{csrfInput .CSRFToken}}
21 <input type="hidden" name="feed" value="{{.FeedURL}}">27 <input type="hidden" name="feed" value="{{.FeedURL}}">
22 <button type="submit" class="border border-spot-outline text-spot-text rounded-pill px-4 py-1.5 text-xs font-bold uppercase tracking-button hover:border-spot-text transition">Mark all read</button>28 <button type="submit" class="border border-spot-outline text-spot-text rounded-pill px-4 py-1.5 text-xs font-bold uppercase tracking-button hover:border-spot-text transition">Mark all read</button>
23 </form>29 </form>
30+ {{end}}
24 </div>31 </div>
25 </div>32 </div>
26 {{if .Feed.Description.Valid}}<p class="text-sm text-spot-secondary mt-2">{{.Feed.Description.String}}</p>{{end}}33 {{if .Feed.Description.Valid}}<p class="text-sm text-spot-secondary mt-2">{{.Feed.Description.String}}</p>{{end}}