diff options
Diffstat (limited to 'internal/ui/subscription_submit.go')
-rw-r--r-- | internal/ui/subscription_submit.go | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/internal/ui/subscription_submit.go b/internal/ui/subscription_submit.go index ce444d79..f0de2079 100644 --- a/internal/ui/subscription_submit.go +++ b/internal/ui/subscription_submit.go @@ -12,6 +12,7 @@ import ( "miniflux.app/v2/internal/http/route" "miniflux.app/v2/internal/locale" "miniflux.app/v2/internal/model" + "miniflux.app/v2/internal/reader/fetcher" feedHandler "miniflux.app/v2/internal/reader/handler" "miniflux.app/v2/internal/reader/subscription" "miniflux.app/v2/internal/ui/form" @@ -51,20 +52,24 @@ func (h *handler) submitSubscription(w http.ResponseWriter, r *http.Request) { return } - var rssbridgeURL string + var rssBridgeURL string if intg, err := h.store.Integration(user.ID); err == nil && intg != nil && intg.RSSBridgeEnabled { - rssbridgeURL = intg.RSSBridgeURL + rssBridgeURL = intg.RSSBridgeURL } - subscriptions, localizedError := subscription.FindSubscriptions( + requestBuilder := fetcher.NewRequestBuilder() + requestBuilder.WithTimeout(config.Opts.HTTPClientTimeout()) + requestBuilder.WithProxy(config.Opts.HTTPClientProxy()) + requestBuilder.WithUserAgent(subscriptionForm.UserAgent) + requestBuilder.WithCookie(subscriptionForm.Cookie) + requestBuilder.WithUsernameAndPassword(subscriptionForm.Username, subscriptionForm.Password) + requestBuilder.UseProxy(subscriptionForm.FetchViaProxy) + requestBuilder.IgnoreTLSErrors(subscriptionForm.AllowSelfSignedCertificates) + + subscriptionFinder := subscription.NewSubscriptionFinder(requestBuilder) + subscriptions, localizedError := subscriptionFinder.FindSubscriptions( subscriptionForm.URL, - subscriptionForm.UserAgent, - subscriptionForm.Cookie, - subscriptionForm.Username, - subscriptionForm.Password, - subscriptionForm.FetchViaProxy, - subscriptionForm.AllowSelfSignedCertificates, - rssbridgeURL, + rssBridgeURL, ) if localizedError != nil { v.Set("form", subscriptionForm) @@ -79,7 +84,35 @@ func (h *handler) submitSubscription(w http.ResponseWriter, r *http.Request) { v.Set("form", subscriptionForm) v.Set("errorMessage", locale.NewLocalizedError("error.subscription_not_found").Translate(user.Language)) html.OK(w, r, v.Render("add_subscription")) - case n == 1: + case n == 1 && subscriptionFinder.IsFeedAlreadyDownloaded(): + feed, localizedError := feedHandler.CreateFeedFromSubscriptionDiscovery(h.store, user.ID, &model.FeedCreationRequestFromSubscriptionDiscovery{ + Content: subscriptionFinder.FeedResponseInfo().Content, + ETag: subscriptionFinder.FeedResponseInfo().ETag, + LastModified: subscriptionFinder.FeedResponseInfo().LastModified, + CategoryID: subscriptionForm.CategoryID, + FeedURL: subscriptions[0].URL, + Crawler: subscriptionForm.Crawler, + AllowSelfSignedCertificates: subscriptionForm.AllowSelfSignedCertificates, + UserAgent: subscriptionForm.UserAgent, + Cookie: subscriptionForm.Cookie, + Username: subscriptionForm.Username, + Password: subscriptionForm.Password, + ScraperRules: subscriptionForm.ScraperRules, + RewriteRules: subscriptionForm.RewriteRules, + BlocklistRules: subscriptionForm.BlocklistRules, + KeeplistRules: subscriptionForm.KeeplistRules, + UrlRewriteRules: subscriptionForm.UrlRewriteRules, + FetchViaProxy: subscriptionForm.FetchViaProxy, + }) + if localizedError != nil { + v.Set("form", subscriptionForm) + v.Set("errorMessage", localizedError.Translate(user.Language)) + html.OK(w, r, v.Render("add_subscription")) + return + } + + html.Redirect(w, r, route.Path(h.router, "feedEntries", "feedID", feed.ID)) + case n == 1 && !subscriptionFinder.IsFeedAlreadyDownloaded(): feed, localizedError := feedHandler.CreateFeed(h.store, user.ID, &model.FeedCreationRequest{ CategoryID: subscriptionForm.CategoryID, FeedURL: subscriptions[0].URL, |