Browse Source

Merge pull request 'Make actors subscribe to channel once' (#913) from remote-fetch-once into main

Reviewed-on: #913
pull/914/head
KitaitiMakoto 1 month ago
parent
commit
fe92d95f6c
14 changed files with 32 additions and 47 deletions
  1. +1
    -0
      CHANGELOG.md
  2. +5
    -3
      Cargo.lock
  3. +1
    -3
      plume-models/src/comments.rs
  4. +2
    -5
      plume-models/src/config.rs
  5. +2
    -1
      plume-models/src/lists.rs
  6. +1
    -7
      plume-models/src/posts.rs
  7. +6
    -8
      plume-models/src/remote_fetch_actor.rs
  8. +1
    -1
      plume-models/src/safe_string.rs
  9. +6
    -8
      plume-models/src/search/actor.rs
  10. +2
    -3
      plume-models/src/timeline/query.rs
  11. +1
    -4
      plume-models/src/users.rs
  12. +1
    -1
      rust-toolchain
  13. +1
    -1
      snap/snapcraft.yaml
  14. +2
    -2
      src/routes/blogs.rs

+ 1
- 0
CHANGELOG.md View File

@@ -24,6 +24,7 @@

- Percent-encode URI for remote_interact (#866, #857)
- Menu animation not opening on iOS (#876, #897)
- Make actors subscribe to channel once (#913)

## [[0.6.0]] - 2020-12-29



+ 5
- 3
Cargo.lock View File

@@ -1,5 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3

[[package]]
name = "activitypub"
version = "0.1.6"
@@ -2037,13 +2039,13 @@ checksum = "f44db4199cdb049b494a92d105acbfa43c25b3925e33803923ba9580b7bc9e1a"

[[package]]
name = "lexical-core"
version = "0.7.4"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db65c6da02e61f55dae90a0ae427b2a5f6b3e8db09f58d10efab23af92592616"
checksum = "21f866863575d0e1d654fbeeabdc927292fdf862873dc3c96c6f753357e13374"
dependencies = [
"arrayvec",
"bitflags 1.2.1",
"cfg-if 0.1.10",
"cfg-if 1.0.0",
"ryu",
"static_assertions",
]


+ 1
- 3
plume-models/src/comments.rs View File

@@ -255,9 +255,7 @@ impl FromId<DbConn> for Comment {
.and_then(|m| {
let author = &Post::get(conn, comm.post_id)?.get_authors(conn)?[0];
let not_author = m.link_props.href_string()? != author.ap_url.clone();
Ok(Mention::from_activity(
conn, &m, comm.id, false, not_author,
)?)
Mention::from_activity(conn, &m, comm.id, false, not_author)
})
.ok();
}


+ 2
- 5
plume-models/src/config.rs View File

@@ -164,11 +164,8 @@ impl Default for LogoConfig {
};
let mut custom_icons = env::vars()
.filter_map(|(var, val)| {
if let Some(size) = var.strip_prefix("PLUME_LOGO_") {
Some((size.to_owned(), val))
} else {
None
}
var.strip_prefix("PLUME_LOGO_")
.map(|size| (size.to_owned(), val))
})
.filter_map(|(var, val)| var.parse::<u64>().ok().map(|var| (var, val)))
.map(|(dim, src)| Icon {


+ 2
- 1
plume-models/src/lists.rs View File

@@ -285,7 +285,8 @@ impl List {
.select(list_elems::word)
.load::<Option<String>>(conn)
.map_err(Error::from)
.map(|r| r.into_iter().filter_map(|o| o).collect::<Vec<String>>())
// .map(|r| r.into_iter().filter_map(|o| o).collect::<Vec<String>>())
.map(|r| r.into_iter().flatten().collect::<Vec<String>>())
}

pub fn clear(&self, conn: &Connection) -> Result<()> {


+ 1
- 7
plume-models/src/posts.rs View File

@@ -443,13 +443,7 @@ impl Post {
m,
)
})
.filter_map(|(id, m)| {
if let Some(id) = id {
Some((m, id))
} else {
None
}
})
.filter_map(|(id, m)| id.map(|id| (m, id)))
.collect::<Vec<_>>();

let old_mentions = Mention::list_for_post(&conn, self.id)?;


+ 6
- 8
plume-models/src/remote_fetch_actor.rs View File

@@ -17,24 +17,22 @@ pub struct RemoteFetchActor {

impl RemoteFetchActor {
pub fn init(conn: DbPool) {
ACTOR_SYS
let actor = ACTOR_SYS
.actor_of_args::<RemoteFetchActor, _>("remote-fetch", conn)
.expect("Failed to initialize remote fetch actor");
}
}

impl Actor for RemoteFetchActor {
type Msg = UserEvent;

fn pre_start(&mut self, ctx: &Context<Self::Msg>) {
USER_CHAN.tell(
Subscribe {
actor: Box::new(ctx.myself()),
actor: Box::new(actor),
topic: "*".into(),
},
None,
)
}
}

impl Actor for RemoteFetchActor {
type Msg = UserEvent;

fn recv(&mut self, _ctx: &Context<Self::Msg>, msg: Self::Msg, _sender: Sender) {
use UserEvent::*;


+ 1
- 1
plume-models/src/safe_string.rs View File

@@ -156,7 +156,7 @@ impl<'de> Deserialize<'de> for SafeString {
where
D: Deserializer<'de>,
{
Ok(deserializer.deserialize_string(SafeStringVisitor)?)
deserializer.deserialize_string(SafeStringVisitor)
}
}



+ 6
- 8
plume-models/src/search/actor.rs View File

@@ -13,24 +13,22 @@ pub struct SearchActor {

impl SearchActor {
pub fn init(searcher: Arc<Searcher>, conn: DbPool) {
ACTOR_SYS
let actor = ACTOR_SYS
.actor_of_args::<SearchActor, _>("search", (searcher, conn))
.expect("Failed to initialize searcher actor");
}
}

impl Actor for SearchActor {
type Msg = PostEvent;

fn pre_start(&mut self, ctx: &Context<Self::Msg>) {
POST_CHAN.tell(
Subscribe {
actor: Box::new(ctx.myself()),
actor: Box::new(actor),
topic: "*".into(),
},
None,
)
}
}

impl Actor for SearchActor {
type Msg = PostEvent;

fn recv(&mut self, _ctx: &Context<Self::Msg>, msg: Self::Msg, _sender: Sender) {
use PostEvent::*;


+ 2
- 3
plume-models/src/timeline/query.rs View File

@@ -601,11 +601,10 @@ fn parse_l<'a, 'b>(stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>], Lis
}

fn parse_m<'a, 'b>(mut stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>], Vec<&'a str>)> {
let mut res: Vec<&str> = Vec::new();
res.push(match stream.get(0)? {
let mut res: Vec<&str> = vec![match stream.get(0)? {
Token::Word(_, _, w) => w,
t => return t.get_error(Token::Word(0, 0, "any word")),
});
}];
stream = &stream[1..];
while let Token::Comma(_) = stream[0] {
res.push(match stream.get(1)? {


+ 1
- 4
plume-models/src/users.rs View File

@@ -486,10 +486,7 @@ impl User {
.filter_map(|j| serde_json::from_value(j.clone()).ok())
.collect::<Vec<T>>();

let next = match json.get("next") {
Some(x) => Some(x.as_str().unwrap().to_owned()),
None => None,
};
let next = json.get("next").map(|x| x.as_str().unwrap().to_owned());
Ok((items, next))
}
pub fn fetch_outbox<T: Activity>(&self) -> Result<Vec<T>> {


+ 1
- 1
rust-toolchain View File

@@ -1 +1 @@
nightly-2021-01-15
nightly-2021-03-25

+ 1
- 1
snap/snapcraft.yaml View File

@@ -25,7 +25,7 @@ parts:
plume:
plugin: rust
source: .
rust-revision: nightly-2020-01-15
rust-revision: nightly-2021-03-25
build-packages:
- libssl-dev
- pkg-config


+ 2
- 2
src/routes/blogs.rs View File

@@ -348,7 +348,7 @@ pub fn update(
#[get("/~/<name>/outbox")]
pub fn outbox(name: String, conn: DbConn) -> Option<ActivityStream<OrderedCollection>> {
let blog = Blog::find_by_fqn(&conn, &name).ok()?;
Some(blog.outbox(&conn).ok()?)
blog.outbox(&conn).ok()
}
#[allow(unused_variables)]
#[get("/~/<name>/outbox?<page>")]
@@ -358,7 +358,7 @@ pub fn outbox_page(
conn: DbConn,
) -> Option<ActivityStream<OrderedCollectionPage>> {
let blog = Blog::find_by_fqn(&conn, &name).ok()?;
Some(blog.outbox_page(&conn, page.limits()).ok()?)
blog.outbox_page(&conn, page.limits()).ok()
}
#[get("/~/<name>/atom.xml")]
pub fn atom_feed(name: String, conn: DbConn) -> Option<Content<String>> {


Loading…
Cancel
Save