Compare commits

...

5 Commits

Author SHA1 Message Date
bel 07992b6636 delete less accidentally clickable 2025-11-30 08:56:37 -07:00
bel 9583234df5 do not list deleted (url == "") 2025-11-30 08:54:28 -07:00
bel 2943362587 if POST /?delete then DELETE 2025-11-30 08:54:18 -07:00
bel cbd4e32022 DELETE /v1/feeds/abc updates all fields to "" 2025-11-30 08:44:27 -07:00
bel 727b4fdea6 from testdata to public for .html 2025-11-30 08:40:15 -07:00
5 changed files with 39 additions and 10 deletions

View File

@ -10,12 +10,25 @@ import (
func (h Handler) feeds(w http.ResponseWriter, r *http.Request) error {
switch r.Method {
case http.MethodDelete:
if err := r.ParseForm(); err != nil {
return err
}
if err := h.feedsDelete(r.Context(), r.URL.Query().Get("id")); err != nil {
return err
}
case http.MethodPost, http.MethodPut:
if err := r.ParseForm(); err != nil {
return err
}
if err := h.feedsUpsert(r.Context(), r.URL.Query().Get("id"), r.Form); err != nil {
return err
if r.URL.Query().Has("delete") {
if err := h.feedsDelete(r.Context(), r.URL.Query().Get("id")); err != nil {
return err
}
} else {
if err := h.feedsUpsert(r.Context(), r.URL.Query().Get("id"), r.Form); err != nil {
return err
}
}
default:
http.NotFound(w, r)
@ -29,6 +42,10 @@ func (h Handler) feeds(w http.ResponseWriter, r *http.Request) error {
return nil
}
func (h Handler) feedsDelete(ctx context.Context, id string) error {
return feeds.Delete(ctx, id)
}
func (h Handler) feedsUpsert(ctx context.Context, id string, form url.Values) error {
var req feeds.Version
for k, v := range map[string]*string{

View File

@ -23,7 +23,13 @@
{{ if eq "" .editing.ID }}
New
{{ else }}
Update <code><a target="_blank" href="{{ .editing_url }}">{{ .editing.URL }}</a></code> (<a href="?">clear</a>)
Updating <code><a target="_blank" href="{{ .editing_url }}">{{ .editing.URL }}</a></code> (<a href="?">clear</a>)
<br>
<div style="scale: 0.85">
<form method="POST" action="/v1/feeds?id={{ .editing.ID }}&delete">
<button type="submit">DELETE</button>
</form>
</div>
{{ end }}
</h3>
<form method="POST" action="/v1/feeds?id={{ .editing.ID }}">
@ -32,9 +38,9 @@
<div>
<label for="{{ $k }}">
{{ $k }}
{{- if eq $k "URL" }}
{{- if eq $k "URL" }}
(hint: nyaa://?q=show)
{{ else if eq $k "WebhookURL" }}
{{ else if eq $k "WebhookURL" }}
(hint: vpntor:///outdir)
{{ end }}
</label>

View File

@ -17,17 +17,17 @@ import (
_ "embed"
)
//go:embed testdata/index.tmpl
//go:embed public/index.tmpl
var embeddedIndexTMPL string
//go:embed testdata/*
//go:embed public/*
var embeddedDir embed.FS
var dir = func() string {
if v := os.Getenv("UI_D"); v != "" {
return v
}
return "./src/cmd/server/handler/testdata"
return "./src/cmd/server/handler/public"
}()
func (h Handler) ui(w http.ResponseWriter, r *http.Request) error {
@ -37,7 +37,7 @@ func (h Handler) ui(w http.ResponseWriter, r *http.Request) error {
w.Header().Set("Cache-Control", "max-age=2592000")
fs := http.FileServer(http.FS(embeddedDir))
r.URL.Path = fmt.Sprintf("/testdata/%s", strings.TrimPrefix(r.URL.Path, "/experimental/ui"))
r.URL.Path = fmt.Sprintf("/public/%s", strings.TrimPrefix(r.URL.Path, "/experimental/ui"))
fs.ServeHTTP(w, r)
return nil
}
@ -57,7 +57,9 @@ func (h Handler) uiIndex(w http.ResponseWriter, r *http.Request) error {
editing.Version.WebhookURL = "vpntor:///data/completed-rss/TITLE"
all := []feeds.Feed{}
if err := feeds.ForEach(ctx, func(f feeds.Feed) error {
all = append(all, f)
if deleted := f.Version.URL == ""; !deleted {
all = append(all, f)
}
if f.Entry.ID == r.URL.Query().Get("edit") {
editing.Entry = f.Entry
editing.Version = f.Version

View File

@ -84,6 +84,10 @@ func ForEach(ctx context.Context, cb func(Feed) error) error {
return nil
}
func Delete(ctx context.Context, id string) error {
return Update(ctx, id, "", "", "", "", "", "")
}
func Get(ctx context.Context, id string) (Feed, error) {
if err := initDB(ctx); err != nil {
return Feed{}, err