diff --git a/activitypub.go b/activitypub.go index 3b0ac829..926902c1 100644 --- a/activitypub.go +++ b/activitypub.go @@ -127,7 +127,7 @@ func handleFetchCollectionOutbox(app *app, w http.ResponseWriter, r *http.Reques ocp := activitystreams.NewOrderedCollectionPage(accountRoot, "outbox", res.TotalPosts, p) ocp.OrderedItems = []interface{}{} - posts, err := app.db.GetPosts(c, p, false, true) + posts, err := app.db.GetPosts(c, p, false, true, false) for _, pp := range *posts { pp.Collection = res o := pp.ActivityObject() diff --git a/collections.go b/collections.go index cd7be58c..391d153d 100644 --- a/collections.go +++ b/collections.go @@ -492,7 +492,7 @@ func fetchCollectionPosts(app *app, w http.ResponseWriter, r *http.Request) erro } } - posts, err := app.db.GetPosts(c, page, isCollOwner, false) + posts, err := app.db.GetPosts(c, page, isCollOwner, false, false) if err != nil { return err } @@ -723,7 +723,7 @@ func handleViewCollection(app *app, w http.ResponseWriter, r *http.Request) erro return impart.HTTPError{http.StatusFound, redirURL} } - coll.Posts, _ = app.db.GetPosts(c, page, cr.isCollOwner, false) + coll.Posts, _ = app.db.GetPosts(c, page, cr.isCollOwner, false, false) // Serve collection displayPage := CollectionPage{ diff --git a/database.go b/database.go index 4e64dbbb..e26c6c64 100644 --- a/database.go +++ b/database.go @@ -104,7 +104,7 @@ type writestore interface { ClaimPosts(userID int64, collAlias string, posts *[]ClaimPostRequest) (*[]ClaimPostResult, error) GetPostsCount(c *CollectionObj, includeFuture bool) - GetPosts(c *Collection, page int, includeFuture, forceRecentFirst bool) (*[]PublicPost, error) + GetPosts(c *Collection, page int, includeFuture, forceRecentFirst, includePinned bool) (*[]PublicPost, error) GetPostsTagged(c *Collection, tag string, page int, includeFuture bool) (*[]PublicPost, error) GetAPFollowers(c *Collection) (*[]RemoteUser, error) @@ -1062,10 +1062,11 @@ func (db *datastore) GetPostsCount(c *CollectionObj, includeFuture bool) { c.TotalPosts = int(count) } -// GetPosts retrieves all standard (non-pinned) posts for the given Collection. +// GetPosts retrieves all posts for the given Collection. // It will return future posts if `includeFuture` is true. +// It will include only standard (non-pinned) posts unless `includePinned` is true. // TODO: change includeFuture to isOwner, since that's how it's used -func (db *datastore) GetPosts(c *Collection, page int, includeFuture, forceRecentFirst bool) (*[]PublicPost, error) { +func (db *datastore) GetPosts(c *Collection, page int, includeFuture, forceRecentFirst, includePinned bool) (*[]PublicPost, error) { collID := c.ID cf := c.NewFormat() @@ -1089,7 +1090,11 @@ func (db *datastore) GetPosts(c *Collection, page int, includeFuture, forceRecen if !includeFuture { timeCondition = "AND created <= " + db.now() } - rows, err := db.Query("SELECT "+postCols+" FROM posts WHERE collection_id = ? AND pinned_position IS NULL "+timeCondition+" ORDER BY created "+order+limitStr, collID) + pinnedCondition := "" + if !includePinned { + pinnedCondition = "AND pinned_position IS NULL" + } + rows, err := db.Query("SELECT "+postCols+" FROM posts WHERE collection_id = ? "+pinnedCondition+" "+timeCondition+" ORDER BY created "+order+limitStr, collID) if err != nil { log.Error("Failed selecting from posts: %v", err) return nil, impart.HTTPError{http.StatusInternalServerError, "Couldn't retrieve collection posts."} diff --git a/export.go b/export.go index e23b8500..4aa00fdb 100644 --- a/export.go +++ b/export.go @@ -111,7 +111,7 @@ func compileFullExport(app *app, u *User) *ExportUser { var collObjs []CollectionObj for _, c := range *colls { co := &CollectionObj{Collection: c} - co.Posts, err = app.db.GetPosts(&c, 0, true, false) + co.Posts, err = app.db.GetPosts(&c, 0, true, false, true) if err != nil { log.Error("unable to get collection posts: %v", err) } diff --git a/feed.go b/feed.go index 89043d38..fc6478d3 100644 --- a/feed.go +++ b/feed.go @@ -56,7 +56,7 @@ func ViewFeed(app *app, w http.ResponseWriter, req *http.Request) error { if tag != "" { coll.Posts, _ = app.db.GetPostsTagged(c, tag, 1, false) } else { - coll.Posts, _ = app.db.GetPosts(c, 1, false, true) + coll.Posts, _ = app.db.GetPosts(c, 1, false, true, false) } author := "" diff --git a/sitemap.go b/sitemap.go index 9bb168af..517a379d 100644 --- a/sitemap.go +++ b/sitemap.go @@ -64,7 +64,7 @@ func handleViewSitemap(app *app, w http.ResponseWriter, r *http.Request) error { host = c.CanonicalURL() sm := buildSitemap(host, pre) - posts, err := app.db.GetPosts(c, 0, false, false) + posts, err := app.db.GetPosts(c, 0, false, false, false) if err != nil { log.Error("Error getting posts: %v", err) return err