aboutsummaryrefslogtreecommitdiffhomepage
path: root/ui
diff options
context:
space:
mode:
authorGravatar Peter De Wachter <pdewacht@gmail.com>2019-08-15 09:48:07 +0200
committerGravatar Frédéric Guillot <fred@miniflux.net>2019-08-15 21:58:01 -0700
commitd882bbca85b801ed408644800364ec0a5bdcffd4 (patch)
tree08f4c52970b13d6ca6ce23a694174ed61ada1d2e /ui
parentac45307da63186fea074e8a5573af6d0dad0fd26 (diff)
Import OPML from URL
Diffstat (limited to 'ui')
-rw-r--r--ui/opml_upload.go44
-rw-r--r--ui/ui.go1
2 files changed, 45 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"))
+}
diff --git a/ui/ui.go b/ui/ui.go
index 4a60807..dd1a9d8 100644
--- a/ui/ui.go
+++ b/ui/ui.go
@@ -112,6 +112,7 @@ func Serve(router *mux.Router, store *storage.Storage, pool *worker.Pool, feedHa
uiRouter.HandleFunc("/export", handler.exportFeeds).Name("export").Methods("GET")
uiRouter.HandleFunc("/import", handler.showImportPage).Name("import").Methods("GET")
uiRouter.HandleFunc("/upload", handler.uploadOPML).Name("uploadOPML").Methods("POST")
+ uiRouter.HandleFunc("/fetch", handler.fetchOPML).Name("fetchOPML").Methods("POST")
// OAuth2 flow.
uiRouter.HandleFunc("/oauth2/{provider}/unlink", handler.oauth2Unlink).Name("oauth2Unlink").Methods("GET")