diff --git a/.gitignore b/.gitignore
index 28e1ea4..e22e3dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ rssfeed.xml
# vim-restconsole
console.rest
+vrc_cookie_jar
diff --git a/endpoints_api_comics.go b/endpoints_api_comics.go
index b8cdf22..6b8a54c 100644
--- a/endpoints_api_comics.go
+++ b/endpoints_api_comics.go
@@ -31,12 +31,12 @@ func handleApiComicsCall(w http.ResponseWriter, req *http.Request) {
return
default:
- http.Error(w, "You did a bad", 400)
+ userError(w)
return
}
default:
- http.Error(w, "You did a bad", 400)
+ userError(w)
return
}
}
@@ -45,7 +45,7 @@ func handleApiListComics(w http.ResponseWriter) {
var res []byte
var err error
if res, err = json.Marshal(m.Comics); err != nil {
- http.Error(w, "I did a bad", 500)
+ serverError(w)
return
}
fmt.Fprint(w, string(res))
@@ -62,7 +62,7 @@ func handleApiSearchComic(nm string, w http.ResponseWriter) {
var res []byte
var err error
if res, err = json.Marshal(cs); err != nil {
- http.Error(w, "I did a bad", 500)
+ serverError(w)
return
}
fmt.Fprint(w, string(res))
@@ -73,17 +73,17 @@ func handleApiShowComic(cid string, w http.ResponseWriter) {
var c *Comic
pts := strings.Split(cid, ";")
if len(pts) != 2 {
- http.Error(w, "You did a bad", 400)
+ userError(w)
return
}
if c, err = m.GetComic(pts[0], pts[1]); err != nil {
- http.Error(w, err.Error(), 400)
+ userError(w)
return
}
var res []byte
if res, err = json.Marshal(c); err != nil {
- http.Error(w, err.Error(), 400)
+ userError(w)
return
}
fmt.Fprint(w, string(res))
diff --git a/endpoints_api_users.go b/endpoints_api_users.go
index e6b7e27..25a38e5 100644
--- a/endpoints_api_users.go
+++ b/endpoints_api_users.go
@@ -22,13 +22,15 @@ func handleApiUsersCall(w http.ResponseWriter, req *http.Request) {
return
}
switch fn {
+ case "byname":
+ handleApiShowUserByName(uid, w)
default:
handleApiShowUser(uid, w)
}
case "POST", "PUT":
if !uidok {
- http.Error(w, "You did a bad", 400)
+ userError(w)
return
}
if !fnok {
@@ -36,7 +38,7 @@ func handleApiUsersCall(w http.ResponseWriter, req *http.Request) {
var u *User
var err error
if u, err = m.GetUserByName(uid); err == nil {
- http.Error(w, "You did a bad", 400)
+ userError(w)
return
}
u = NewUser(uid)
@@ -49,18 +51,18 @@ func handleApiUsersCall(w http.ResponseWriter, req *http.Request) {
case "slugs":
slug, slugok := vars["slug"]
if !slugok {
- http.Error(w, "You did a bad", 400)
+ userError(w)
return
}
handleApiSubUser(uid, slug, w)
default:
- http.Error(w, "You did a bad", 400)
+ userError(w)
return
}
default:
- http.Error(w, "You did a bad", 400)
+ userError(w)
return
}
@@ -70,7 +72,7 @@ func handleApiListUsers(w http.ResponseWriter) {
var res []byte
var err error
if res, err = json.Marshal(m.Users); err != nil {
- http.Error(w, "I did a bad", 500)
+ serverError(w)
return
}
fmt.Fprint(w, string(res))
@@ -80,13 +82,30 @@ func handleApiShowUser(uid string, w http.ResponseWriter) {
var err error
var u *User
if u, err = m.GetUser(uid); err != nil {
- http.Error(w, err.Error(), 400)
+ userError(w)
return
}
var res []byte
if res, err = json.Marshal(u); err != nil {
- http.Error(w, err.Error(), 400)
+ userError(w)
+ return
+ }
+ fmt.Fprint(w, string(res))
+ return
+}
+
+func handleApiShowUserByName(uname string, w http.ResponseWriter) {
+ var err error
+ var u *User
+ if u, err = m.GetUserByName(uname); err != nil {
+ userError(w)
+ return
+ }
+
+ var res []byte
+ if res, err = json.Marshal(u); err != nil {
+ userError(w)
return
}
fmt.Fprint(w, string(res))
@@ -98,23 +117,23 @@ func handleApiSubUser(uid string, slug string, w http.ResponseWriter) {
var u *User
var err error
if u, err = m.GetUser(uid); err != nil {
- http.Error(w, err.Error(), 400)
+ userError(w)
return
}
pts := strings.Split(slug, ";")
if len(pts) != 2 {
- http.Error(w, err.Error(), 400)
+ userError(w)
return
}
_, err = m.GetComic(pts[0], pts[1])
if err != nil {
- http.Error(w, err.Error(), 400)
+ userError(w)
return
}
u.SubSlugs = append(u.SubSlugs, slug)
err = m.SaveUser(u)
if err != nil {
- http.Error(w, err.Error(), 400)
+ userError(w)
return
}
m.LoadUsers()
diff --git a/helper_dilbert.go b/helper_dilbert.go
index 59744ec..d1a8838 100644
--- a/helper_dilbert.go
+++ b/helper_dilbert.go
@@ -64,5 +64,5 @@ func getDilbertFeedDesc(date time.Time) (string, error) {
if !exists {
return "", errors.New("Couldn't find image source")
}
- return "", nil
+ return "", nil
}
diff --git a/helper_gocomics.go b/helper_gocomics.go
index 33e1ef7..9f5fcb7 100644
--- a/helper_gocomics.go
+++ b/helper_gocomics.go
@@ -15,19 +15,22 @@ func downloadGoComicsList() []Comic {
lstUrl := "http://www.gocomics.com/comics/a-to-z"
res, err := http.Get(lstUrl)
if err != nil {
+ fmt.Println("Error getting gocomics list:", err.Error())
return ret
}
defer res.Body.Close()
if res.StatusCode != 200 {
+ fmt.Println("Error getting gocomics list:", res.StatusCode)
return ret
}
// Load the HTML document
doc, err := goquery.NewDocumentFromReader(res.Body)
if err != nil {
+ fmt.Println("Error loading gocomics list:", err.Error())
return ret
}
- doc.Find("a.amu-media-item-link").Each(func(i int, s *goquery.Selection) {
+ doc.Find(".gc-blended-link").Each(func(i int, s *goquery.Selection) {
// For each item found, get the band and title
slug, exists := s.Attr("href")
if exists {
@@ -35,9 +38,15 @@ func downloadGoComicsList() []Comic {
if len(pts) > 2 {
slug = pts[1]
}
- name := s.Find("h4.media-heading").Text()
- author := s.Find("h6.media-subheading").Text()
+ inner := strings.TrimSpace(s.Text())
+ pts = strings.Split(inner, "\n")
+ name := strings.TrimSpace(pts[0])
+ var author string
+ if len(pts) > 1 {
+ author = strings.TrimSpace(pts[1])
+ }
author = strings.TrimPrefix(author, "By ")
+ author = strings.Replace(author, "\u0026", "&", -1)
ret = append(ret, *NewComic(slug, name, author, "gocomics"))
}
})
diff --git a/helpers.go b/helpers.go
index 9150a80..281aec0 100644
--- a/helpers.go
+++ b/helpers.go
@@ -2,6 +2,7 @@ package main
import (
"errors"
+ "net/http"
"strings"
"time"
)
@@ -67,7 +68,7 @@ func buildRssFeed(uid string) (string, error) {
"",
" ",
" BCW Comic Feed",
- " http://comics.bullercodeworks.com/edit/" + uid + "",
+ " http://ribbit.bullercodeworks.com/edit/" + uid + "",
" Comic feed for " + usr.Username + "",
" en-us",
" " + time.Now().Format(time.RFC1123) + "",
@@ -100,3 +101,11 @@ func addStringIfUnique(st string, sl []string) []string {
}
return append(sl, st)
}
+
+func userError(w http.ResponseWriter) {
+ http.Error(w, "You did a bad", 400)
+}
+
+func serverError(w http.ResponseWriter) {
+ http.Error(w, "I did a bad", 500)
+}
diff --git a/main.go b/main.go
index d86b6ac..d63d05c 100644
--- a/main.go
+++ b/main.go
@@ -64,8 +64,7 @@ func main() {
} else if len(os.Args) > 1 {
switch os.Args[1] {
case "--test":
- //d, _ := getXKCDFeedDesc(time.Now())
- fmt.Println(buildRssFeed("09af5fda-43dc-416e-93ad-cc050e0c098a"))
+ fmt.Println(buildRssFeed("30f14e57-6500-443c-8c77-f352788eacb0"))
done()
case "--list-comics":
comics := m.GetAllComics()
@@ -115,7 +114,7 @@ func main() {
http.Handle("/", r)
chain := alice.New(loggingHandler).Then(r)
- // Save changes to the DB every 5 minutes
+ // Refresh the DB at 2 AM
go func() {
for {
if m.Site.LastSave.IsZero() || (time.Now().Day() != m.Site.LastSave.Day() && time.Now().Hour() == 2) {
diff --git a/model.go b/model.go
index f1d5437..985a4d4 100644
--- a/model.go
+++ b/model.go
@@ -98,3 +98,10 @@ func (m *model) UpdateAllUserFeeds() {
}
}
}
+
+type Source interface {
+ downloadList() []Comic
+ getRssItem(slug string) (string, error)
+ getUrl(slug string, dt time.Time) (string, error)
+ getDescription(slug string, dt time.Time) (string, error)
+}
diff --git a/model_comics.go b/model_comics.go
index 2dcfb63..3d5ce61 100644
--- a/model_comics.go
+++ b/model_comics.go
@@ -91,6 +91,14 @@ func (m *model) SaveComic(c *Comic) error {
if err = m.bolt.SetTimestamp(bkt, "lastupdate", c.LastUpdate); err != nil {
return err
}
+ // Add it to the cached list
+ for i, v := range m.Comics {
+ if v.Source == c.Source && v.Slug == c.Slug {
+ m.Comics[i] = *c
+ return nil
+ }
+ }
+ m.Comics = append(m.Comics, *c)
return nil
}
diff --git a/model_user.go b/model_user.go
index e92385c..f9da076 100644
--- a/model_user.go
+++ b/model_user.go
@@ -2,6 +2,7 @@ package main
import (
"errors"
+ "fmt"
"strings"
"github.com/pborman/uuid"
@@ -69,6 +70,7 @@ func (m *model) GetUser(uid string) (*User, error) {
bkt := []string{"users", uid}
ret.Uuid = uid
if ret.Username, err = m.bolt.GetValue(bkt, "username"); err != nil {
+ fmt.Println("Error getting username value:", err.Error())
return nil, err
}
var subs string