aboutsummaryrefslogtreecommitdiffhomepage
path: root/ui/opml_upload.go
diff options
context:
space:
mode:
Diffstat (limited to 'ui/opml_upload.go')
-rw-r--r--ui/opml_upload.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/ui/opml_upload.go b/ui/opml_upload.go
index e5a9391..4c94db6 100644
--- a/ui/opml_upload.go
+++ b/ui/opml_upload.go
@@ -7,6 +7,7 @@ package ui // import "miniflux.app/ui"
import (
"net/http"
+ "miniflux.app/http/client"
"miniflux.app/http/request"
"miniflux.app/http/response/html"
"miniflux.app/http/route"
@@ -59,3 +60,46 @@ func (h *handler) uploadOPML(w http.ResponseWriter, r *http.Request) {
html.Redirect(w, r, route.Path(h.router, "feeds"))
}
+
+func (h *handler) fetchOPML(w http.ResponseWriter, r *http.Request) {
+ user, err := h.store.UserByID(request.UserID(r))
+ if err != nil {
+ html.ServerError(w, r, err)
+ return
+ }
+
+ url := r.FormValue("url")
+ if url == "" {
+ html.Redirect(w, r, route.Path(h.router, "import"))
+ return
+ }
+
+ logger.Debug(
+ "[UI:FetchOPML] User #%d fetching this URL: %s",
+ user.ID,
+ url,
+ )
+
+ sess := session.New(h.store, request.SessionID(r))
+ view := view.New(h.tpl, r, sess)
+ view.Set("menu", "feeds")
+ view.Set("user", user)
+ view.Set("countUnread", h.store.CountUnreadEntries(user.ID))
+ view.Set("countErrorFeeds", h.store.CountErrorFeeds(user.ID))
+
+ clt := client.New(url)
+ resp, err := clt.Get()
+ if err != nil {
+ view.Set("errorMessage", err)
+ html.OK(w, r, view.Render("import"))
+ return
+ }
+
+ if impErr := opml.NewHandler(h.store).Import(user.ID, resp.Body); impErr != nil {
+ view.Set("errorMessage", impErr)
+ html.OK(w, r, view.Render("import"))
+ return
+ }
+
+ html.Redirect(w, r, route.Path(h.router, "feeds"))
+}