diff --git a/server/handlers.go b/server/handlers.go index 14c8d41..9ae6cf4 100644 --- a/server/handlers.go +++ b/server/handlers.go @@ -13,6 +13,7 @@ import ( "mime" "strings" "path/filepath" + "strconv" ) func IndexHandler(rw http.ResponseWriter, req *http.Request) { @@ -86,7 +87,7 @@ func FeedListHandler(rw http.ResponseWriter, req *http.Request) { } contentType := res.Header.Get("Content-Type") - if strings.HasPrefix(contentType, "text/html") { + if strings.HasPrefix(contentType, "text/html") || contentType == "" { sources, err := worker.FindFeeds(res) if err != nil { log.Print(err) @@ -102,11 +103,13 @@ func FeedListHandler(rw http.ResponseWriter, req *http.Request) { }) } else if len(sources) == 1 { feedUrl = sources[0].Url - fmt.Println("feedUrl:", feedUrl) err = createFeed(db(req), feedUrl, feed.FolderID) - if err == nil { - writeJSON(rw, map[string]string{"status": "success"}) + if err != nil { + log.Print(err) + rw.WriteHeader(http.StatusBadRequest) + return } + writeJSON(rw, map[string]string{"status": "success"}) } } else if strings.HasPrefix(contentType, "text/xml") || strings.HasPrefix(contentType, "application/xml") { err = createFeed(db(req), feedUrl, feed.FolderID) @@ -121,17 +124,20 @@ func FeedListHandler(rw http.ResponseWriter, req *http.Request) { } func createFeed(s *storage.Storage, url string, folderId *int64) error { - fmt.Println(s, url) fp := gofeed.NewParser() feed, err := fp.ParseURL(url) if err != nil { return err } + feedLink := feed.FeedLink + if len(feedLink) == 0 { + feedLink = url + } entry := s.CreateFeed( feed.Title, feed.Description, feed.Link, - feed.FeedLink, + feedLink, "", folderId, ) @@ -141,4 +147,13 @@ func createFeed(s *storage.Storage, url string, folderId *int64) error { } func FeedHandler(rw http.ResponseWriter, req *http.Request) { + if req.Method == "DELETE" { + id, err := strconv.ParseInt(Vars(req)["id"], 10, 64) + if err != nil { + rw.WriteHeader(http.StatusBadRequest) + return + } + db(req).DeleteFeed(id) + rw.WriteHeader(http.StatusNoContent) + } } diff --git a/template/static/javascripts/api.js b/template/static/javascripts/api.js index 02877bf..244542b 100644 --- a/template/static/javascripts/api.js +++ b/template/static/javascripts/api.js @@ -2,28 +2,32 @@ (function() { var api = function(method, endpoint, data) { - var promise = fetch(endpoint, { + return fetch(endpoint, { method: method, headers: {'content-type': 'application/json'}, body: JSON.stringify(data), }) - return promise.then(function(res) { - if (res.ok) return res.json() - }) + } + + var json = function(res) { + return res.json() } window.api = { feeds: { list: function() { - return api('get', '/api/feeds') + return api('get', '/api/feeds').then(json) }, create: function(data) { - return api('post', '/api/feeds', data) + return api('post', '/api/feeds', data).then(json) }, + delete: function(id) { + return api('delete', '/api/feeds/' + id) + } }, folders: { list: function() { - return api('get', '/api/folders') + return api('get', '/api/folders').then(json) }, } } diff --git a/template/static/javascripts/app.js b/template/static/javascripts/app.js index 48c8921..7b4eec3 100644 --- a/template/static/javascripts/app.js +++ b/template/static/javascripts/app.js @@ -89,7 +89,12 @@ var vm = new Vue({ }, deleteFeed: function(feed) { if (confirm('Are you sure you want to delete ' + feed.title + '?')) { - this.feeds = this.feeds.filter(function(f) { f.id != feed.id }) + var vm = this + api.feeds.delete(feed.id).then(function() { + api.feeds.list().then(function(feeds) { + vm.feeds = feeds + }) + }) } }, createFeed: function(event) { @@ -102,6 +107,9 @@ var vm = new Vue({ var vm = this api.feeds.create(data).then(function(result) { if (result.status === 'success') { + api.feeds.list().then(function(feeds) { + vm.feeds = feeds + }) vm.$bvModal.hide('settings-modal') } vm.loading.newfeed = false