mirror of
https://github.com/youwen5/iamb.git
synced 2025-08-04 11:38:28 -07:00
Recognise URLs in plain text message bodies (#476)
This commit is contained in:
parent
34d3b844af
commit
ec88f4441e
5 changed files with 29 additions and 6 deletions
10
Cargo.lock
generated
10
Cargo.lock
generated
|
@ -2274,6 +2274,7 @@ dependencies = [
|
||||||
"image",
|
"image",
|
||||||
"lazy_static 1.5.0",
|
"lazy_static 1.5.0",
|
||||||
"libc",
|
"libc",
|
||||||
|
"linkify",
|
||||||
"markup5ever_rcdom",
|
"markup5ever_rcdom",
|
||||||
"matrix-sdk",
|
"matrix-sdk",
|
||||||
"mime",
|
"mime",
|
||||||
|
@ -2831,6 +2832,15 @@ dependencies = [
|
||||||
"vcpkg",
|
"vcpkg",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "linkify"
|
||||||
|
version = "0.10.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f1dfa36d52c581e9ec783a7ce2a5e0143da6237be5811a0b3153fedfdbe9f780"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "linux-raw-sys"
|
name = "linux-raw-sys"
|
||||||
version = "0.3.8"
|
version = "0.3.8"
|
||||||
|
|
|
@ -64,6 +64,7 @@ unicode-width = "0.1.10"
|
||||||
url = {version = "^2.2.2", features = ["serde"]}
|
url = {version = "^2.2.2", features = ["serde"]}
|
||||||
edit = "0.1.4"
|
edit = "0.1.4"
|
||||||
humansize = "2.0.0"
|
humansize = "2.0.0"
|
||||||
|
linkify = "0.10.0"
|
||||||
|
|
||||||
[dependencies.comrak]
|
[dependencies.comrak]
|
||||||
version = "0.22.0"
|
version = "0.22.0"
|
||||||
|
|
|
@ -524,11 +524,11 @@ impl StyleTree {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct TreeGenState {
|
pub struct TreeGenState {
|
||||||
link_num: u8,
|
pub link_num: u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TreeGenState {
|
impl TreeGenState {
|
||||||
fn next_link_char(&mut self) -> Option<char> {
|
pub fn next_link_char(&mut self) -> Option<char> {
|
||||||
let num = self.link_num;
|
let num = self.link_num;
|
||||||
|
|
||||||
if num < 62 {
|
if num < 62 {
|
||||||
|
|
|
@ -72,6 +72,7 @@ mod state;
|
||||||
|
|
||||||
pub use self::compose::text_to_message;
|
pub use self::compose::text_to_message;
|
||||||
use self::state::{body_cow_state, html_state};
|
use self::state::{body_cow_state, html_state};
|
||||||
|
pub use html::TreeGenState;
|
||||||
|
|
||||||
type ProtocolPreview<'a> = (&'a Protocol, u16, u16);
|
type ProtocolPreview<'a> = (&'a Protocol, u16, u16);
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,14 @@ use crate::base::{
|
||||||
SendAction,
|
SendAction,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::message::{text_to_message, Message, MessageEvent, MessageKey, MessageTimeStamp};
|
use crate::message::{
|
||||||
|
text_to_message,
|
||||||
|
Message,
|
||||||
|
MessageEvent,
|
||||||
|
MessageKey,
|
||||||
|
MessageTimeStamp,
|
||||||
|
TreeGenState,
|
||||||
|
};
|
||||||
use crate::worker::Requester;
|
use crate::worker::Requester;
|
||||||
|
|
||||||
use super::scrollback::{Scrollback, ScrollbackState};
|
use super::scrollback::{Scrollback, ScrollbackState};
|
||||||
|
@ -226,10 +233,14 @@ impl ChatState {
|
||||||
|
|
||||||
let links = if let Some(html) = &msg.html {
|
let links = if let Some(html) = &msg.html {
|
||||||
html.get_links()
|
html.get_links()
|
||||||
} else if let Ok(url) = Url::parse(&msg.event.body()) {
|
|
||||||
vec![('0', url)]
|
|
||||||
} else {
|
} else {
|
||||||
vec![]
|
linkify::LinkFinder::new()
|
||||||
|
.links(&msg.event.body())
|
||||||
|
.filter_map(|u| Url::parse(u.as_str()).ok())
|
||||||
|
.scan(TreeGenState { link_num: 0 }, |state, u| {
|
||||||
|
state.next_link_char().map(|c| (c, u))
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
};
|
};
|
||||||
|
|
||||||
if links.is_empty() {
|
if links.is_empty() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue