Make messages look better and publish multiple for push events

For push events, publish one message per commit pushed, up to a limit of
15.
This commit is contained in:
2023-09-16 02:35:56 -07:00
parent 33d3313927
commit 3daab2f3f8
2 changed files with 101 additions and 61 deletions

View File

@ -105,28 +105,22 @@ async fn ensure_matrix_room_joined(matrix_client: &Client, room_id: &OwnedRoomOr
room.ok_or_else(|| anyhow!("Unable to join room {}", room_id))
}
fn build_gitlab_message(event: &GitlabEvent) -> String {
fn build_gitlab_messages(event: &GitlabEvent) -> Vec<String> {
let project = event.project();
let r = event.r#ref();
let refname = if r.starts_with("refs/") {
let parts = r.split('/').collect::<Vec<_>>();
if parts.len() > 2 {
parts.into_iter().skip(2).collect::<Vec<_>>().join("/").to_string()
} else {
drop(parts);
r.to_string()
}
} else {
r.to_string()
};
format!(
"*{}* {} **{}** [{}]({})",
project.path_with_namespace,
refname,
event.user(),
event.title(),
event.url()
)
let refname = event::parse_ref(event.r#ref());
event
.titles()
.iter()
.map(|title| {
format!(
"\\[{}\\] `{}` *{}* {}",
project.path_with_namespace,
refname,
event.user(),
title,
)
})
.collect()
}
async fn handle_gitlab_event(
@ -145,10 +139,11 @@ async fn handle_gitlab_event(
}
let room = ensure_matrix_room_joined(matrix_client, room_id).await?;
let msg = build_gitlab_message(&event);
debug!("Sending message to {}: {}", room_id, msg);
let msg_content = RoomMessageEventContent::text_markdown(&msg);
room.send(msg_content, None).await?;
for msg in build_gitlab_messages(&event) {
debug!("Sending message to {}: {}", room_id, msg);
let msg_content = RoomMessageEventContent::text_markdown(&msg);
room.send(msg_content, None).await?;
}
Ok(())
}