- Open source, [AGPL License](/LICENSE).
- Self hostable, easy to deploy.
- - Comes with [Docker](https://lemmy.ml/docs/en/administration_install_docker.html) and [Ansible](https://lemmy.ml/docs/en/administration_install_ansible.html).
+ - Comes with [Docker](https://lemmy.ml/docs/en/administration/install_docker.html) and [Ansible](https://lemmy.ml/docs/en/administration/install_ansible.html).
- Clean, mobile-friendly interface.
- Only a minimum of a username and password is required to sign up!
- User avatar support.
## Installation
-- [Docker](https://lemmy.ml/docs/en/administration_install_docker.html)
-- [Ansible](https://lemmy.ml/docs/en/administration_install_ansible.html)
+- [Docker](https://lemmy.ml/docs/en/administration/install_docker.html)
+- [Ansible](https://lemmy.ml/docs/en/administration/install_ansible.html)
## Lemmy Projects
## Contributing
- [Contributing instructions](https://lemmy.ml/docs/en/contributing.html)
-- [Docker Development](https://lemmy.ml/docs/en/contributing_docker_development.html)
-- [Local Development](https://lemmy.ml/docs/en/contributing_local_development.html)
+- [Docker Development](https://lemmy.ml/docs/en/contributing/docker_development.html)
+- [Local Development](https://lemmy.ml/docs/en/contributing/local_development.html)
### Translations
- Added query performance testing and comparisons. Added indexes to make sure every query is `< 30 ms`.
- Added compilation time testing.
+### Federation
+
+This release includes some bug fixes for federation, and some changes to get us closer to compliance with the ActivityPub standard.
+
+- [Community bans now federating](https://github.com/LemmyNet/lemmy/issues/1287).
+- [Local posts sometimes got marked as remote](https://github.com/LemmyNet/lemmy/issues/1302).
+- [Creator of post/comment was not notified about new child comments](https://github.com/LemmyNet/lemmy/issues/1325).
+- [Community deletion now federated](https://github.com/LemmyNet/lemmy/issues/1256).
+
+None of these are breaking changes, so federation between 0.9.0 and 0.8.11 will work without problems.
### Lemmy javascript / typescript client
- We moved documentation into a separate git repository, and support translation for the docs now!
- Moved our code of conduct into the documentation.
-### Federation
-
-This release includes some bug fixes for federation, and some changes to get us closer to compliance with the ActivityPub standard.
-
-- fixed: [Community bans not federating](https://github.com/LemmyNet/lemmy/issues/1287)
-- fixed: [Local posts sometimes got marked as remote](https://github.com/LemmyNet/lemmy/issues/1302)
-- fixed: [Creator of post/comment is not notified about new child comments](https://github.com/LemmyNet/lemmy/issues/1325)
-- fixed: [Community deletion not federated](https://github.com/LemmyNet/lemmy/issues/1256)
-
-None of these are breaking changes, so federation between 0.9.0 and 0.8.11 will work without problems.
-
-
## Upgrading
If you'd like to make a DB backup before upgrading, follow [this guide](https://lemmy.ml/docs/en/administration/backup_and_restore.html).
"eslint": "^7.18.0",
"eslint-plugin-jane": "^9.0.3",
"jest": "^26.6.3",
- "lemmy-js-client": "0.9.0-rc.12",
+ "lemmy-js-client": "0.9.1-rc.1",
"node-fetch": "^2.6.1",
"prettier": "^2.1.2",
"ts-jest": "^26.4.4",
dependencies:
language-subtag-registry "~0.3.2"
-lemmy-js-client@0.9.0-rc.12:
- version "0.9.0-rc.12"
- resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.9.0-rc.12.tgz#991d31c4ef89b9bd4088a17c60b6cbaac997df41"
- integrity sha512-SeCw9wjU89Zm4YWhr+neHC2XvqoqzJg2e42sFEgcDmnQxpPt2sND9Udu+tjGXatbz0tCu6ybGmpR5M0QT4xx9Q==
+lemmy-js-client@0.9.1-rc.1:
+ version "0.9.1-rc.1"
+ resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.9.1-rc.1.tgz#afe3cb0d4852f849dd087a4756a3771bc920a907"
+ integrity sha512-aVvo4IeJvIPUvypipk4GnyLB6nVQVLfB0arYrMkVV4L7zrZ/0pGtpkMDLaOAj/KpA6O0u9eLmaou5RberZQolA==
leven@^3.1.0:
version "3.1.0"
Crud,
Followable,
Joinable,
+ ListingType,
SortType,
};
use lemmy_db_schema::{
None => false,
};
+ let type_ = ListingType::from_str(&data.type_)?;
let sort = SortType::from_str(&data.sort)?;
let page = data.page;
let limit = data.limit;
let communities = blocking(context.pool(), move |conn| {
CommunityQueryBuilder::create(conn)
+ .listing_type(&type_)
.sort(&sort)
.show_nsfw(show_nsfw)
.my_user_id(user_id)
functions::hot_rank,
fuzzy_search,
limit_and_offset,
+ ListingType,
MaybeOptional,
SortType,
ToSafe,
pub struct CommunityQueryBuilder<'a> {
conn: &'a PgConnection,
+ listing_type: &'a ListingType,
sort: &'a SortType,
my_user_id: Option<i32>,
show_nsfw: bool,
CommunityQueryBuilder {
conn,
my_user_id: None,
+ listing_type: &ListingType::All,
sort: &SortType::Hot,
show_nsfw: true,
search_term: None,
}
}
+ pub fn listing_type(mut self, listing_type: &'a ListingType) -> Self {
+ self.listing_type = listing_type;
+ self
+ }
+
pub fn sort(mut self, sort: &'a SortType) -> Self {
self.sort = sort;
self
query = query.filter(community::nsfw.eq(false));
};
+ query = match self.listing_type {
+ ListingType::Subscribed => query.filter(community_follower::user_id.is_not_null()), // TODO could be this: and(community_follower::user_id.eq(user_id_join)),
+ ListingType::Local => query.filter(community::local.eq(true)),
+ _ => query,
+ };
+
let (limit, offset) = limit_and_offset(self.page, self.limit);
let res = query
.limit(limit)
let mut query = mod_add_community::table
.inner_join(user_::table.on(mod_add_community::mod_user_id.eq(user_::id)))
.inner_join(community::table)
- .inner_join(user_alias_1::table.on(mod_add_community::other_user_id.eq(user_::id)))
+ .inner_join(user_alias_1::table.on(mod_add_community::other_user_id.eq(user_alias_1::id)))
.select((
mod_add_community::all_columns,
User_::safe_columns_tuple(),
) -> Result<Vec<Self>, Error> {
let mut query = mod_add::table
.inner_join(user_::table.on(mod_add::mod_user_id.eq(user_::id)))
- .inner_join(user_alias_1::table.on(mod_add::other_user_id.eq(user_::id)))
+ .inner_join(user_alias_1::table.on(mod_add::other_user_id.eq(user_alias_1::id)))
.select((
mod_add::all_columns,
User_::safe_columns_tuple(),
let mut query = mod_ban_from_community::table
.inner_join(user_::table.on(mod_ban_from_community::mod_user_id.eq(user_::id)))
.inner_join(community::table)
- .inner_join(user_alias_1::table.on(mod_ban_from_community::other_user_id.eq(user_::id)))
+ .inner_join(
+ user_alias_1::table.on(mod_ban_from_community::other_user_id.eq(user_alias_1::id)),
+ )
.select((
mod_ban_from_community::all_columns,
User_::safe_columns_tuple(),
) -> Result<Vec<Self>, Error> {
let mut query = mod_ban::table
.inner_join(user_::table.on(mod_ban::mod_user_id.eq(user_::id)))
- .inner_join(user_alias_1::table.on(mod_ban::other_user_id.eq(user_::id)))
+ .inner_join(user_alias_1::table.on(mod_ban::other_user_id.eq(user_alias_1::id)))
.select((
mod_ban::all_columns,
User_::safe_columns_tuple(),
#[derive(Deserialize, Debug)]
pub struct ListCommunities {
+ pub type_: String,
pub sort: String,
pub page: Option<i64>,
pub limit: Option<i64>,