Compare commits
5 Commits
fd7dcafd4e
...
07992b6636
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
07992b6636 | ||
|
|
9583234df5 | ||
|
|
2943362587 | ||
|
|
cbd4e32022 | ||
|
|
727b4fdea6 |
@@ -10,12 +10,25 @@ import (
|
|||||||
|
|
||||||
func (h Handler) feeds(w http.ResponseWriter, r *http.Request) error {
|
func (h Handler) feeds(w http.ResponseWriter, r *http.Request) error {
|
||||||
switch r.Method {
|
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:
|
case http.MethodPost, http.MethodPut:
|
||||||
if err := r.ParseForm(); err != nil {
|
if err := r.ParseForm(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := h.feedsUpsert(r.Context(), r.URL.Query().Get("id"), r.Form); err != nil {
|
if r.URL.Query().Has("delete") {
|
||||||
return err
|
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:
|
default:
|
||||||
http.NotFound(w, r)
|
http.NotFound(w, r)
|
||||||
@@ -29,6 +42,10 @@ func (h Handler) feeds(w http.ResponseWriter, r *http.Request) error {
|
|||||||
return nil
|
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 {
|
func (h Handler) feedsUpsert(ctx context.Context, id string, form url.Values) error {
|
||||||
var req feeds.Version
|
var req feeds.Version
|
||||||
for k, v := range map[string]*string{
|
for k, v := range map[string]*string{
|
||||||
|
|||||||
@@ -23,7 +23,13 @@
|
|||||||
{{ if eq "" .editing.ID }}
|
{{ if eq "" .editing.ID }}
|
||||||
New
|
New
|
||||||
{{ else }}
|
{{ 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 }}
|
{{ end }}
|
||||||
</h3>
|
</h3>
|
||||||
<form method="POST" action="/v1/feeds?id={{ .editing.ID }}">
|
<form method="POST" action="/v1/feeds?id={{ .editing.ID }}">
|
||||||
@@ -17,17 +17,17 @@ import (
|
|||||||
_ "embed"
|
_ "embed"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed testdata/index.tmpl
|
//go:embed public/index.tmpl
|
||||||
var embeddedIndexTMPL string
|
var embeddedIndexTMPL string
|
||||||
|
|
||||||
//go:embed testdata/*
|
//go:embed public/*
|
||||||
var embeddedDir embed.FS
|
var embeddedDir embed.FS
|
||||||
|
|
||||||
var dir = func() string {
|
var dir = func() string {
|
||||||
if v := os.Getenv("UI_D"); v != "" {
|
if v := os.Getenv("UI_D"); v != "" {
|
||||||
return 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 {
|
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")
|
w.Header().Set("Cache-Control", "max-age=2592000")
|
||||||
fs := http.FileServer(http.FS(embeddedDir))
|
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)
|
fs.ServeHTTP(w, r)
|
||||||
return nil
|
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"
|
editing.Version.WebhookURL = "vpntor:///data/completed-rss/TITLE"
|
||||||
all := []feeds.Feed{}
|
all := []feeds.Feed{}
|
||||||
if err := feeds.ForEach(ctx, func(f feeds.Feed) error {
|
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") {
|
if f.Entry.ID == r.URL.Query().Get("edit") {
|
||||||
editing.Entry = f.Entry
|
editing.Entry = f.Entry
|
||||||
editing.Version = f.Version
|
editing.Version = f.Version
|
||||||
|
|||||||
@@ -84,6 +84,10 @@ func ForEach(ctx context.Context, cb func(Feed) error) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Delete(ctx context.Context, id string) error {
|
||||||
|
return Update(ctx, id, "", "", "", "", "", "")
|
||||||
|
}
|
||||||
|
|
||||||
func Get(ctx context.Context, id string) (Feed, error) {
|
func Get(ctx context.Context, id string) (Feed, error) {
|
||||||
if err := initDB(ctx); err != nil {
|
if err := initDB(ctx); err != nil {
|
||||||
return Feed{}, err
|
return Feed{}, err
|
||||||
|
|||||||
Reference in New Issue
Block a user