mirror of
https://git.joinplu.me/Plume/Plume.git
synced 2024-11-29 15:01:10 +00:00
Display recent articles on the homepage
This commit is contained in:
parent
a74215ef07
commit
397d25e431
3 changed files with 31 additions and 3 deletions
|
@ -70,6 +70,13 @@ impl Post {
|
||||||
.into_iter().nth(0)
|
.into_iter().nth(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_recents(conn: &PgConnection, limit: i64) -> Vec<Post> {
|
||||||
|
posts::table.order(posts::creation_date.desc())
|
||||||
|
.limit(limit)
|
||||||
|
.load::<Post>(conn)
|
||||||
|
.expect("Error loading recent posts")
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_authors(&self, conn: &PgConnection) -> Vec<User> {
|
pub fn get_authors(&self, conn: &PgConnection) -> Vec<User> {
|
||||||
use schema::users;
|
use schema::users;
|
||||||
use schema::post_authors;
|
use schema::post_authors;
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
use rocket::request::Form;
|
use rocket::request::Form;
|
||||||
use rocket::response::Redirect;
|
use rocket::response::Redirect;
|
||||||
use rocket_contrib::Template;
|
use rocket_contrib::Template;
|
||||||
use std::collections::HashMap;
|
use serde_json;
|
||||||
|
|
||||||
use BASE_URL;
|
use BASE_URL;
|
||||||
|
use activity_pub::object::Object;
|
||||||
use db_conn::DbConn;
|
use db_conn::DbConn;
|
||||||
|
use models::posts::Post;
|
||||||
use models::users::User;
|
use models::users::User;
|
||||||
use models::instance::*;
|
use models::instance::*;
|
||||||
|
|
||||||
|
@ -12,9 +14,19 @@ use models::instance::*;
|
||||||
fn index(conn: DbConn, user: Option<User>) -> Template {
|
fn index(conn: DbConn, user: Option<User>) -> Template {
|
||||||
match Instance::get_local(&*conn) {
|
match Instance::get_local(&*conn) {
|
||||||
Some(inst) => {
|
Some(inst) => {
|
||||||
|
let recents = Post::get_recents(&*conn, 5);
|
||||||
|
|
||||||
Template::render("instance/index", json!({
|
Template::render("instance/index", json!({
|
||||||
"instance": inst,
|
"instance": inst,
|
||||||
"account": user
|
"account": user,
|
||||||
|
"recents": recents.into_iter().map(|p| {
|
||||||
|
json!({
|
||||||
|
"post": p,
|
||||||
|
"author": p.get_authors(&*conn)[0],
|
||||||
|
"url": p.compute_id(&*conn),
|
||||||
|
"date": p.creation_date.timestamp()
|
||||||
|
})
|
||||||
|
}).collect::<Vec<serde_json::Value>>()
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
|
|
|
@ -5,5 +5,14 @@
|
||||||
{% endblock title %}
|
{% endblock title %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1>Welcome on {{ instance.name }}</h1>
|
<h1>Welcome on {{ instance.name }}</h1>
|
||||||
|
|
||||||
|
<h2>Latest articles</h2>
|
||||||
|
{% for article in recents %}
|
||||||
|
<div>
|
||||||
|
<h3><a href="{{ article.url }}">{{ article.post.title }}</a></h3>
|
||||||
|
<p>{{ article.post.content | escape | truncate(length=200) }}…</p>
|
||||||
|
<p>By {{ article.author.display_name }} ⋅ {{ article.date | date(format="%B %e") }}</p>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
Loading…
Reference in a new issue