Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
140a1f8eda | ||
|
07b70c084e |
2076
Cargo.lock
generated
2076
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -23,7 +23,7 @@ rocket = "0.4.0"
|
|||||||
rocket_contrib = { version = "0.4.0", features = ["json"] }
|
rocket_contrib = { version = "0.4.0", features = ["json"] }
|
||||||
rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "e922afa7c366038b3433278c03b1456b346074f2" }
|
rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "e922afa7c366038b3433278c03b1456b346074f2" }
|
||||||
rpassword = "4.0"
|
rpassword = "4.0"
|
||||||
runtime-fmt = "0.3.0"
|
runtime-fmt = "0.4.0"
|
||||||
scheduled-thread-pool = "0.2.2"
|
scheduled-thread-pool = "0.2.2"
|
||||||
serde = "1.0"
|
serde = "1.0"
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
@ -65,7 +65,7 @@ path = "plume-models"
|
|||||||
|
|
||||||
[dependencies.rocket_csrf]
|
[dependencies.rocket_csrf]
|
||||||
git = "https://github.com/fdb-hiroshima/rocket_csrf"
|
git = "https://github.com/fdb-hiroshima/rocket_csrf"
|
||||||
rev = "4a72ea2ec716cb0b26188fb00bccf2ef7d1e031c"
|
rev = "29910f2829e7e590a540da3804336577b48c7b31"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
ructe = "0.6.2"
|
ructe = "0.6.2"
|
||||||
|
2
build.rs
2
build.rs
@ -2,7 +2,7 @@ extern crate rsass;
|
|||||||
extern crate ructe;
|
extern crate ructe;
|
||||||
use ructe::Ructe;
|
use ructe::Ructe;
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
use std::{env, ffi::OsStr, fs::*, io::Write, path::*};
|
use std::{ffi::OsStr, fs::*, io::Write, path::*};
|
||||||
|
|
||||||
fn compute_static_hash() -> String {
|
fn compute_static_hash() -> String {
|
||||||
//"find static/ -type f ! -path 'static/media/*' | sort | xargs stat -c'%n %Y' | openssl dgst -r"
|
//"find static/ -type f ! -path 'static/media/*' | sort | xargs stat -c'%n %Y' | openssl dgst -r"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#![feature(custom_attribute, associated_type_defaults)]
|
#![feature(associated_type_defaults)]
|
||||||
|
|
||||||
extern crate activitypub;
|
extern crate activitypub;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
|
@ -97,7 +97,7 @@ fn inline_tags<'a>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type MediaProcessor<'a> = Box<'a + Fn(i32) -> Option<(String, Option<String>)>>;
|
pub type MediaProcessor<'a> = Box<dyn 'a + Fn(i32) -> Option<(String, Option<String>)>>;
|
||||||
|
|
||||||
fn process_image<'a, 'b>(
|
fn process_image<'a, 'b>(
|
||||||
evt: Event<'a>,
|
evt: Event<'a>,
|
||||||
|
@ -73,5 +73,4 @@ pub(crate) mod tests {
|
|||||||
Ok(conn.begin_test_transaction().unwrap())
|
Ok(conn.begin_test_transaction().unwrap())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#![feature(try_trait)]
|
#![feature(try_trait)]
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
#![feature(custom_attribute)]
|
//#![feature(register_attr)]
|
||||||
|
//#![feature(register_tool)]
|
||||||
#![feature(proc_macro_hygiene)]
|
#![feature(proc_macro_hygiene)]
|
||||||
|
|
||||||
extern crate activitypub;
|
extern crate activitypub;
|
||||||
@ -253,6 +254,7 @@ macro_rules! insert {
|
|||||||
($table:ident, $from:ident, |$val:ident, $conn:ident | $( $after:tt )+) => {
|
($table:ident, $from:ident, |$val:ident, $conn:ident | $( $after:tt )+) => {
|
||||||
last!($table);
|
last!($table);
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
pub fn insert(conn: &crate::Connection, new: $from) -> Result<Self> {
|
pub fn insert(conn: &crate::Connection, new: $from) -> Result<Self> {
|
||||||
diesel::insert_into($table::table)
|
diesel::insert_into($table::table)
|
||||||
.values(new)
|
.values(new)
|
||||||
@ -279,6 +281,7 @@ macro_rules! insert {
|
|||||||
/// ```
|
/// ```
|
||||||
macro_rules! last {
|
macro_rules! last {
|
||||||
($table:ident) => {
|
($table:ident) => {
|
||||||
|
#[allow(dead_code)]
|
||||||
pub fn last(conn: &crate::Connection) -> Result<Self> {
|
pub fn last(conn: &crate::Connection) -> Result<Self> {
|
||||||
$table::table
|
$table::table
|
||||||
.order_by($table::id.desc())
|
.order_by($table::id.desc())
|
||||||
|
@ -551,5 +551,4 @@ mod tests {
|
|||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -117,15 +117,19 @@ impl Media {
|
|||||||
Ok(match self.category() {
|
Ok(match self.category() {
|
||||||
MediaCategory::Image => SafeString::trusted(&format!(
|
MediaCategory::Image => SafeString::trusted(&format!(
|
||||||
r#"<img src="{}" alt="{}" title="{}">"#,
|
r#"<img src="{}" alt="{}" title="{}">"#,
|
||||||
url, escape(&self.alt_text), escape(&self.alt_text)
|
url,
|
||||||
|
escape(&self.alt_text),
|
||||||
|
escape(&self.alt_text)
|
||||||
)),
|
)),
|
||||||
MediaCategory::Audio => SafeString::trusted(&format!(
|
MediaCategory::Audio => SafeString::trusted(&format!(
|
||||||
r#"<div class="media-preview audio"></div><audio src="{}" title="{}" controls></audio>"#,
|
r#"<div class="media-preview audio"></div><audio src="{}" title="{}" controls></audio>"#,
|
||||||
url, escape(&self.alt_text)
|
url,
|
||||||
|
escape(&self.alt_text)
|
||||||
)),
|
)),
|
||||||
MediaCategory::Video => SafeString::trusted(&format!(
|
MediaCategory::Video => SafeString::trusted(&format!(
|
||||||
r#"<video src="{}" title="{}" controls></video>"#,
|
r#"<video src="{}" title="{}" controls></video>"#,
|
||||||
url, escape(&self.alt_text)
|
url,
|
||||||
|
escape(&self.alt_text)
|
||||||
)),
|
)),
|
||||||
MediaCategory::Unknown => SafeString::trusted(&format!(
|
MediaCategory::Unknown => SafeString::trusted(&format!(
|
||||||
r#"<a href="{}" class="media-preview unknown"></a>"#,
|
r#"<a href="{}" class="media-preview unknown"></a>"#,
|
||||||
|
@ -10,7 +10,7 @@ use std::path::Path;
|
|||||||
#[allow(dead_code)] //variants might not be constructed if not required by current migrations
|
#[allow(dead_code)] //variants might not be constructed if not required by current migrations
|
||||||
enum Action {
|
enum Action {
|
||||||
Sql(&'static str),
|
Sql(&'static str),
|
||||||
Function(&'static Fn(&Connection, &Path) -> Result<()>),
|
Function(&'static dyn Fn(&Connection, &Path) -> Result<()>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Action {
|
impl Action {
|
||||||
|
@ -153,7 +153,7 @@ impl PlumeQuery {
|
|||||||
|
|
||||||
/// Convert this Query to a Tantivy Query
|
/// Convert this Query to a Tantivy Query
|
||||||
pub fn into_query(self) -> BooleanQuery {
|
pub fn into_query(self) -> BooleanQuery {
|
||||||
let mut result: Vec<(Occur, Box<Query>)> = Vec::new();
|
let mut result: Vec<(Occur, Box<dyn Query>)> = Vec::new();
|
||||||
gen_to_query!(self, result; normal: title, subtitle, content, tag;
|
gen_to_query!(self, result; normal: title, subtitle, content, tag;
|
||||||
oneoff: instance, author, blog, lang, license);
|
oneoff: instance, author, blog, lang, license);
|
||||||
|
|
||||||
@ -279,7 +279,7 @@ impl PlumeQuery {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// map a token and it's field to a query
|
// map a token and it's field to a query
|
||||||
fn token_to_query(token: &str, field_name: &str) -> Box<Query> {
|
fn token_to_query(token: &str, field_name: &str) -> Box<dyn Query> {
|
||||||
let token = token.to_lowercase();
|
let token = token.to_lowercase();
|
||||||
let token = token.as_str();
|
let token = token.as_str();
|
||||||
let field = Searcher::schema().get_field(field_name).unwrap();
|
let field = Searcher::schema().get_field(field_name).unwrap();
|
||||||
|
@ -72,7 +72,7 @@ impl Searcher {
|
|||||||
schema_builder.build()
|
schema_builder.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create(path: &AsRef<Path>) -> Result<Self> {
|
pub fn create(path: &dyn AsRef<Path>) -> Result<Self> {
|
||||||
let whitespace_tokenizer = tokenizer::WhitespaceTokenizer.filter(LowerCaser);
|
let whitespace_tokenizer = tokenizer::WhitespaceTokenizer.filter(LowerCaser);
|
||||||
|
|
||||||
let content_tokenizer = SimpleTokenizer
|
let content_tokenizer = SimpleTokenizer
|
||||||
@ -111,7 +111,7 @@ impl Searcher {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn open(path: &AsRef<Path>) -> Result<Self> {
|
pub fn open(path: &dyn AsRef<Path>) -> Result<Self> {
|
||||||
let whitespace_tokenizer = tokenizer::WhitespaceTokenizer.filter(LowerCaser);
|
let whitespace_tokenizer = tokenizer::WhitespaceTokenizer.filter(LowerCaser);
|
||||||
|
|
||||||
let content_tokenizer = SimpleTokenizer
|
let content_tokenizer = SimpleTokenizer
|
||||||
|
@ -495,8 +495,7 @@ mod tests {
|
|||||||
),
|
),
|
||||||
published: true,
|
published: true,
|
||||||
license: "GPL".to_string(),
|
license: "GPL".to_string(),
|
||||||
source: "Actually, GNU+Linux, GNU×Linux, or GNU¿Linux are better."
|
source: "Actually, GNU+Linux, GNU×Linux, or GNU¿Linux are better.".to_string(),
|
||||||
.to_string(),
|
|
||||||
ap_url: "".to_string(),
|
ap_url: "".to_string(),
|
||||||
creation_date: None,
|
creation_date: None,
|
||||||
subtitle: "".to_string(),
|
subtitle: "".to_string(),
|
||||||
|
@ -811,9 +811,17 @@ mod tests {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let expect_keyword = TimelineQuery::parse(r#"not_a_field contains something"#).unwrap_err();
|
let expect_keyword = TimelineQuery::parse(r#"not_a_field contains something"#).unwrap_err();
|
||||||
assert_eq!(expect_keyword, QueryError::SyntaxError(0, 11, "Syntax Error: Expected one of 'blog', \
|
assert_eq!(
|
||||||
|
expect_keyword,
|
||||||
|
QueryError::SyntaxError(
|
||||||
|
0,
|
||||||
|
11,
|
||||||
|
"Syntax Error: Expected one of 'blog', \
|
||||||
'author', 'license', 'tags', 'lang', 'title', 'subtitle', 'content', 'followed', 'has_cover', \
|
'author', 'license', 'tags', 'lang', 'title', 'subtitle', 'content', 'followed', 'has_cover', \
|
||||||
'local' or 'all', got 'not_a_field'".to_owned()));
|
'local' or 'all', got 'not_a_field'"
|
||||||
|
.to_owned()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
let expect_bracket_or_comma = TimelineQuery::parse(r#"lang in [en ["#).unwrap_err();
|
let expect_bracket_or_comma = TimelineQuery::parse(r#"lang in [en ["#).unwrap_err();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -1 +1 @@
|
|||||||
nightly-2019-03-23
|
nightly-2019-12-17
|
||||||
|
@ -307,17 +307,17 @@ Then try to restart Plume
|
|||||||
(
|
(
|
||||||
"/inbox".to_owned(),
|
"/inbox".to_owned(),
|
||||||
"/inbox".to_owned(),
|
"/inbox".to_owned(),
|
||||||
rocket::http::Method::Post,
|
Some(rocket::http::Method::Post),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"/@/<name>/inbox".to_owned(),
|
"/@/<name>/inbox".to_owned(),
|
||||||
"/@/<name>/inbox".to_owned(),
|
"/@/<name>/inbox".to_owned(),
|
||||||
rocket::http::Method::Post,
|
Some(rocket::http::Method::Post),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"/api/<path..>".to_owned(),
|
"/api/<path..>".to_owned(),
|
||||||
"/api/<path..>".to_owned(),
|
"/api/<path..>".to_owned(),
|
||||||
rocket::http::Method::Post,
|
Some(rocket::http::Method::Post),
|
||||||
),
|
),
|
||||||
])
|
])
|
||||||
.finalize()
|
.finalize()
|
||||||
|
@ -298,7 +298,7 @@ pub fn update(
|
|||||||
post.license = form.license.clone();
|
post.license = form.license.clone();
|
||||||
post.cover_id = form.cover;
|
post.cover_id = form.cover;
|
||||||
post.update(&*conn, &rockets.searcher)
|
post.update(&*conn, &rockets.searcher)
|
||||||
.expect("post::update: update error");;
|
.expect("post::update: update error");
|
||||||
|
|
||||||
if post.published {
|
if post.published {
|
||||||
post.update_mentions(
|
post.update_mentions(
|
||||||
@ -308,7 +308,7 @@ pub fn update(
|
|||||||
.filter_map(|m| Mention::build_activity(&rockets, &m).ok())
|
.filter_map(|m| Mention::build_activity(&rockets, &m).ok())
|
||||||
.collect(),
|
.collect(),
|
||||||
)
|
)
|
||||||
.expect("post::update: mentions error");;
|
.expect("post::update: mentions error");
|
||||||
}
|
}
|
||||||
|
|
||||||
let tags = form
|
let tags = form
|
||||||
@ -406,7 +406,7 @@ pub fn create(
|
|||||||
rockets: PlumeRocket,
|
rockets: PlumeRocket,
|
||||||
) -> Result<RespondOrRedirect, ErrorPage> {
|
) -> Result<RespondOrRedirect, ErrorPage> {
|
||||||
let conn = &*rockets.conn;
|
let conn = &*rockets.conn;
|
||||||
let blog = Blog::find_by_fqn(&rockets, &blog_name).expect("post::create: blog error");;
|
let blog = Blog::find_by_fqn(&rockets, &blog_name).expect("post::create: blog error");
|
||||||
let slug = form.title.to_string().to_kebab_case();
|
let slug = form.title.to_string().to_kebab_case();
|
||||||
let user = rockets.user.clone().unwrap();
|
let user = rockets.user.clone().unwrap();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user