diff --git a/admin.go b/admin.go index e3959ce..6e57a14 100644 --- a/admin.go +++ b/admin.go @@ -5,6 +5,7 @@ import ( "log" "net/http" "strings" + "strconv" ) type settingsData struct { @@ -159,6 +160,9 @@ type newData struct { S Status Found int Books []newBook + Page int + Next string + Prev string } func newHandler(w http.ResponseWriter, r *http.Request) { @@ -173,7 +177,16 @@ func newHandler(w http.ResponseWriter, r *http.Request) { return } - res, num, _ := db.GetNewBooks() + page := 0 + if len(r.Form["p"]) != 0 { + var err error + page, err = strconv.Atoi(r.Form["p"][0]) + if err != nil { + page = 0 + } + } + res, num, _ := db.GetNewBooks(NEW_ITEMS_PAGE, page*NEW_ITEMS_PAGE) + var data newData data.S = GetStatus(w, r) data.Found = num @@ -183,6 +196,13 @@ func newHandler(w http.ResponseWriter, r *http.Request) { _, data.Books[i].TitleFound, _ = db.GetBooks(buildQuery("title:"+b.Title), 1) _, data.Books[i].AuthorFound, _ = db.GetBooks(buildQuery("author:"+strings.Join(b.Author, " author:")), 1) } + data.Page = page+1 + if num > (page+1)*NEW_ITEMS_PAGE { + data.Next = "/new/?p=" + strconv.Itoa(page+1) + } + if page > 0 { + data.Prev = "/new/?p=" + strconv.Itoa(page-1) + } loadTemplate(w, "new", data) } diff --git a/config.go b/config.go index fdbb611..4d0a270 100644 --- a/config.go +++ b/config.go @@ -10,6 +10,7 @@ const ( PASS_SALT = "ImperialLibSalt" TAGS_DISPLAY = 50 SEARCH_ITEMS_PAGE = 10 + NEW_ITEMS_PAGE = 50 TEMPLATE_PATH = "templates/" BOOKS_PATH = "books/" COVER_PATH = "cover/" diff --git a/database.go b/database.go index d2d8527..00f7a98 100644 --- a/database.go +++ b/database.go @@ -151,21 +151,12 @@ func (d *DB) GetDownloadedBooks(num int) (books []Book, err error) { return } -/* Returns: list of books, number found and err +/* optional parameters: length and start index + * + * Returns: list of books, number found and err */ -func (d *DB) GetNewBooks() (books []Book, num int, err error) { - var q *mgo.Query - q = d.books.Find(bson.M{"$nor": []bson.M{{"active": true}}}).Sort("-_id") - num, err = q.Count() - if err != nil { - return - } - - err = q.All(&books) - for i, b := range books { - books[i].Id = bson.ObjectId(b.Id).Hex() - } - return +func (d *DB) GetNewBooks(r ...int) (books []Book, num int, err error) { + return d.GetBooks(bson.M{"$nor": []bson.M{{"active": true}}}, r...) } func (d *DB) BookActive(id bson.ObjectId) bool { diff --git a/templates/new.html b/templates/new.html index f9def41..7064fe7 100644 --- a/templates/new.html +++ b/templates/new.html @@ -7,6 +7,18 @@ {{end}}

Found {{.Found}} books.

+ {{range .Books}} {{$titleFound := .TitleFound}} @@ -41,6 +53,18 @@ {{end}} {{end}} + {{if .Books}}
Save All