|
|
@ -1,11 +1,11 @@
|
|
|
|
use actix_web::{error::ErrorBadRequest, *};
|
|
|
|
use actix_web::{error::ErrorBadRequest, *};
|
|
|
|
use anyhow::anyhow;
|
|
|
|
use anyhow::anyhow;
|
|
|
|
use chrono::{DateTime, NaiveDateTime, Utc};
|
|
|
|
use chrono::{DateTime, NaiveDateTime, Utc};
|
|
|
|
use diesel::PgConnection;
|
|
|
|
use lemmy_api_common::{blocking, claims::Claims};
|
|
|
|
use lemmy_api_common::blocking;
|
|
|
|
|
|
|
|
use lemmy_db_queries::{
|
|
|
|
use lemmy_db_queries::{
|
|
|
|
source::{community::Community_, person::Person_},
|
|
|
|
source::{community::Community_, person::Person_},
|
|
|
|
Crud,
|
|
|
|
Crud,
|
|
|
|
|
|
|
|
DbPool,
|
|
|
|
ListingType,
|
|
|
|
ListingType,
|
|
|
|
SortType,
|
|
|
|
SortType,
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -19,12 +19,7 @@ use lemmy_db_views::{
|
|
|
|
site_view::SiteView,
|
|
|
|
site_view::SiteView,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
use lemmy_db_views_actor::person_mention_view::{PersonMentionQueryBuilder, PersonMentionView};
|
|
|
|
use lemmy_db_views_actor::person_mention_view::{PersonMentionQueryBuilder, PersonMentionView};
|
|
|
|
use lemmy_utils::{
|
|
|
|
use lemmy_utils::{settings::structs::Settings, utils::markdown_to_html, LemmyError};
|
|
|
|
claims::Claims,
|
|
|
|
|
|
|
|
settings::structs::Settings,
|
|
|
|
|
|
|
|
utils::markdown_to_html,
|
|
|
|
|
|
|
|
LemmyError,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
use lemmy_websocket::LemmyContext;
|
|
|
|
use lemmy_websocket::LemmyContext;
|
|
|
|
use rss::{
|
|
|
|
use rss::{
|
|
|
|
extension::dublincore::DublinCoreExtensionBuilder,
|
|
|
|
extension::dublincore::DublinCoreExtensionBuilder,
|
|
|
@ -141,13 +136,12 @@ async fn get_feed(
|
|
|
|
_ => return Err(ErrorBadRequest(LemmyError::from(anyhow!("wrong_type")))),
|
|
|
|
_ => return Err(ErrorBadRequest(LemmyError::from(anyhow!("wrong_type")))),
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
let builder = blocking(context.pool(), move |conn| match request_type {
|
|
|
|
let builder = match request_type {
|
|
|
|
RequestType::User => get_feed_user(conn, &sort_type, param),
|
|
|
|
RequestType::User => get_feed_user(context.pool(), sort_type, param).await,
|
|
|
|
RequestType::Community => get_feed_community(conn, &sort_type, param),
|
|
|
|
RequestType::Community => get_feed_community(context.pool(), sort_type, param).await,
|
|
|
|
RequestType::Front => get_feed_front(conn, &sort_type, param),
|
|
|
|
RequestType::Front => get_feed_front(context.pool(), sort_type, param).await,
|
|
|
|
RequestType::Inbox => get_feed_inbox(conn, param),
|
|
|
|
RequestType::Inbox => get_feed_inbox(context.pool(), param).await,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
.await?
|
|
|
|
|
|
|
|
.map_err(ErrorBadRequest)?;
|
|
|
|
.map_err(ErrorBadRequest)?;
|
|
|
|
|
|
|
|
|
|
|
|
let rss = builder.build().map_err(ErrorBadRequest)?.to_string();
|
|
|
|
let rss = builder.build().map_err(ErrorBadRequest)?.to_string();
|
|
|
@ -167,19 +161,23 @@ fn get_sort_type(info: web::Query<Params>) -> Result<SortType, ParseError> {
|
|
|
|
SortType::from_str(&sort_query)
|
|
|
|
SortType::from_str(&sort_query)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fn get_feed_user(
|
|
|
|
async fn get_feed_user(
|
|
|
|
conn: &PgConnection,
|
|
|
|
pool: &DbPool,
|
|
|
|
sort_type: &SortType,
|
|
|
|
sort_type: SortType,
|
|
|
|
user_name: String,
|
|
|
|
user_name: String,
|
|
|
|
) -> Result<ChannelBuilder, LemmyError> {
|
|
|
|
) -> Result<ChannelBuilder, LemmyError> {
|
|
|
|
let site_view = SiteView::read(conn)?;
|
|
|
|
let site_view = blocking(pool, move |conn| SiteView::read(conn)).await??;
|
|
|
|
let person = Person::find_by_name(conn, &user_name)?;
|
|
|
|
let person = blocking(pool, move |conn| Person::find_by_name(conn, &user_name)).await??;
|
|
|
|
|
|
|
|
|
|
|
|
let posts = PostQueryBuilder::create(conn)
|
|
|
|
let person_id = person.id;
|
|
|
|
.listing_type(ListingType::All)
|
|
|
|
let posts = blocking(pool, move |conn| {
|
|
|
|
.sort(*sort_type)
|
|
|
|
PostQueryBuilder::create(conn)
|
|
|
|
.creator_id(person.id)
|
|
|
|
.listing_type(ListingType::All)
|
|
|
|
.list()?;
|
|
|
|
.sort(sort_type)
|
|
|
|
|
|
|
|
.creator_id(person_id)
|
|
|
|
|
|
|
|
.list()
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
.await??;
|
|
|
|
|
|
|
|
|
|
|
|
let items = create_post_items(posts)?;
|
|
|
|
let items = create_post_items(posts)?;
|
|
|
|
|
|
|
|
|
|
|
@ -193,19 +191,26 @@ fn get_feed_user(
|
|
|
|
Ok(channel_builder)
|
|
|
|
Ok(channel_builder)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fn get_feed_community(
|
|
|
|
async fn get_feed_community(
|
|
|
|
conn: &PgConnection,
|
|
|
|
pool: &DbPool,
|
|
|
|
sort_type: &SortType,
|
|
|
|
sort_type: SortType,
|
|
|
|
community_name: String,
|
|
|
|
community_name: String,
|
|
|
|
) -> Result<ChannelBuilder, LemmyError> {
|
|
|
|
) -> Result<ChannelBuilder, LemmyError> {
|
|
|
|
let site_view = SiteView::read(conn)?;
|
|
|
|
let site_view = blocking(pool, move |conn| SiteView::read(conn)).await??;
|
|
|
|
let community = Community::read_from_name(conn, &community_name)?;
|
|
|
|
let community = blocking(pool, move |conn| {
|
|
|
|
|
|
|
|
Community::read_from_name(conn, &community_name)
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
.await??;
|
|
|
|
|
|
|
|
|
|
|
|
let posts = PostQueryBuilder::create(conn)
|
|
|
|
let community_id = community.id;
|
|
|
|
.listing_type(ListingType::All)
|
|
|
|
let posts = blocking(pool, move |conn| {
|
|
|
|
.sort(*sort_type)
|
|
|
|
PostQueryBuilder::create(conn)
|
|
|
|
.community_id(community.id)
|
|
|
|
.listing_type(ListingType::All)
|
|
|
|
.list()?;
|
|
|
|
.sort(sort_type)
|
|
|
|
|
|
|
|
.community_id(community_id)
|
|
|
|
|
|
|
|
.list()
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
.await??;
|
|
|
|
|
|
|
|
|
|
|
|
let items = create_post_items(posts)?;
|
|
|
|
let items = create_post_items(posts)?;
|
|
|
|
|
|
|
|
|
|
|
@ -223,25 +228,25 @@ fn get_feed_community(
|
|
|
|
Ok(channel_builder)
|
|
|
|
Ok(channel_builder)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fn get_feed_front(
|
|
|
|
async fn get_feed_front(
|
|
|
|
conn: &PgConnection,
|
|
|
|
pool: &DbPool,
|
|
|
|
sort_type: &SortType,
|
|
|
|
sort_type: SortType,
|
|
|
|
jwt: String,
|
|
|
|
jwt: String,
|
|
|
|
) -> Result<ChannelBuilder, LemmyError> {
|
|
|
|
) -> Result<ChannelBuilder, LemmyError> {
|
|
|
|
let site_view = SiteView::read(conn)?;
|
|
|
|
let site_view = blocking(pool, move |conn| SiteView::read(conn)).await??;
|
|
|
|
let local_user_id = LocalUserId(Claims::decode(&jwt)?.claims.sub);
|
|
|
|
let local_user_id = LocalUserId(Claims::decode(&jwt, pool).await?.claims.sub);
|
|
|
|
let local_user = LocalUser::read(conn, local_user_id)?;
|
|
|
|
|
|
|
|
let person_id = local_user.person_id;
|
|
|
|
|
|
|
|
let show_bot_accounts = local_user.show_bot_accounts;
|
|
|
|
|
|
|
|
let show_read_posts = local_user.show_read_posts;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let posts = PostQueryBuilder::create(conn)
|
|
|
|
let posts = blocking(pool, move |conn| {
|
|
|
|
.listing_type(ListingType::Subscribed)
|
|
|
|
let local_user = LocalUser::read(conn, local_user_id)?;
|
|
|
|
.my_person_id(person_id)
|
|
|
|
PostQueryBuilder::create(conn)
|
|
|
|
.show_bot_accounts(show_bot_accounts)
|
|
|
|
.listing_type(ListingType::Subscribed)
|
|
|
|
.show_read_posts(show_read_posts)
|
|
|
|
.my_person_id(local_user.person_id)
|
|
|
|
.sort(*sort_type)
|
|
|
|
.show_bot_accounts(local_user.show_bot_accounts)
|
|
|
|
.list()?;
|
|
|
|
.show_read_posts(local_user.show_read_posts)
|
|
|
|
|
|
|
|
.sort(sort_type)
|
|
|
|
|
|
|
|
.list()
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
.await??;
|
|
|
|
|
|
|
|
|
|
|
|
let items = create_post_items(posts)?;
|
|
|
|
let items = create_post_items(posts)?;
|
|
|
|
|
|
|
|
|
|
|
@ -259,27 +264,33 @@ fn get_feed_front(
|
|
|
|
Ok(channel_builder)
|
|
|
|
Ok(channel_builder)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fn get_feed_inbox(conn: &PgConnection, jwt: String) -> Result<ChannelBuilder, LemmyError> {
|
|
|
|
async fn get_feed_inbox(pool: &DbPool, jwt: String) -> Result<ChannelBuilder, LemmyError> {
|
|
|
|
let site_view = SiteView::read(conn)?;
|
|
|
|
let site_view = blocking(pool, move |conn| SiteView::read(conn)).await??;
|
|
|
|
let local_user_id = LocalUserId(Claims::decode(&jwt)?.claims.sub);
|
|
|
|
let local_user_id = LocalUserId(Claims::decode(&jwt, pool).await?.claims.sub);
|
|
|
|
let local_user = LocalUser::read(conn, local_user_id)?;
|
|
|
|
let local_user = blocking(pool, move |conn| LocalUser::read(conn, local_user_id)).await??;
|
|
|
|
let person_id = local_user.person_id;
|
|
|
|
let person_id = local_user.person_id;
|
|
|
|
let show_bot_accounts = local_user.show_bot_accounts;
|
|
|
|
let show_bot_accounts = local_user.show_bot_accounts;
|
|
|
|
|
|
|
|
|
|
|
|
let sort = SortType::New;
|
|
|
|
let sort = SortType::New;
|
|
|
|
|
|
|
|
|
|
|
|
let replies = CommentQueryBuilder::create(conn)
|
|
|
|
let replies = blocking(pool, move |conn| {
|
|
|
|
.recipient_id(person_id)
|
|
|
|
CommentQueryBuilder::create(conn)
|
|
|
|
.my_person_id(person_id)
|
|
|
|
.recipient_id(person_id)
|
|
|
|
.show_bot_accounts(show_bot_accounts)
|
|
|
|
.my_person_id(person_id)
|
|
|
|
.sort(sort)
|
|
|
|
.show_bot_accounts(show_bot_accounts)
|
|
|
|
.list()?;
|
|
|
|
.sort(sort)
|
|
|
|
|
|
|
|
.list()
|
|
|
|
let mentions = PersonMentionQueryBuilder::create(conn)
|
|
|
|
})
|
|
|
|
.recipient_id(person_id)
|
|
|
|
.await??;
|
|
|
|
.my_person_id(person_id)
|
|
|
|
|
|
|
|
.sort(sort)
|
|
|
|
let mentions = blocking(pool, move |conn| {
|
|
|
|
.list()?;
|
|
|
|
PersonMentionQueryBuilder::create(conn)
|
|
|
|
|
|
|
|
.recipient_id(person_id)
|
|
|
|
|
|
|
|
.my_person_id(person_id)
|
|
|
|
|
|
|
|
.sort(sort)
|
|
|
|
|
|
|
|
.list()
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
.await??;
|
|
|
|
|
|
|
|
|
|
|
|
let items = create_reply_and_mention_items(replies, mentions)?;
|
|
|
|
let items = create_reply_and_mention_items(replies, mentions)?;
|
|
|
|
|
|
|
|
|
|
|
|