simplify location parsing

This commit is contained in:
holger krekel
2019-11-02 22:25:31 +01:00
parent d24a982757
commit d774430ec2
3 changed files with 9 additions and 19 deletions

View File

@@ -766,14 +766,11 @@ impl<'a> MimeParser<'a> {
// XXX what if somebody sends eg an "location-highlights.kml"
// attachment unrelated to location streaming?
if filename.starts_with("location") || filename.starts_with("message") {
let d = std::string::String::from_utf8_lossy(&decoded_data);
let parsed = match location::Kml::parse(self.context, &d) {
Ok(res) => Some(res),
Err(err) => {
let parsed = location::Kml::parse(self.context, decoded_data)
.map_err(|err| {
warn!(self.context, "failed to parse kml part: {}", err);
None
}
};
})
.ok();
if filename.starts_with("location") {
self.location_kml = parsed;
} else {

View File

@@ -62,14 +62,11 @@ impl Kml {
Default::default()
}
pub fn parse(context: &Context, content: impl AsRef<str>) -> Result<Self, Error> {
ensure!(
content.as_ref().len() <= (1024 * 1024),
"A kml-files with {} bytes is larger than reasonably expected.",
content.as_ref().len()
);
pub fn parse(context: &Context, content: &[u8]) -> Result<Self, Error> {
ensure!(content.len() <= (1024 * 1024), "kml-file too large");
let mut reader = quick_xml::Reader::from_str(content.as_ref());
let to_parse = String::from_utf8_lossy(content);
let mut reader = quick_xml::Reader::from_str(&to_parse);
reader.trim_text(true);
let mut kml = Kml::new();
@@ -674,7 +671,7 @@ mod tests {
let xml =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n<Document addr=\"user@example.org\">\n<Placemark><Timestamp><when>2019-03-06T21:09:57Z</when></Timestamp><Point><coordinates accuracy=\"32.000000\">9.423110,53.790302</coordinates></Point></Placemark>\n<PlaceMARK>\n<Timestamp><WHEN > \n\t2018-12-13T22:11:12Z\t</WHEN></Timestamp><Point><coordinates aCCuracy=\"2.500000\"> 19.423110 \t , \n 63.790302\n </coordinates></Point></PlaceMARK>\n</Document>\n</kml>";
let kml = Kml::parse(&context.ctx, &xml).expect("parsing failed");
let kml = Kml::parse(&context.ctx, &(xml.as_bytes())).expect("parsing failed");
assert!(kml.addr.is_some());
assert_eq!(kml.addr.as_ref().unwrap(), "user@example.org",);

View File

@@ -503,10 +503,6 @@ impl<'a> MimeFactory<'a> {
if location::is_sending_locations_to_chat(context, self.msg.chat_id) {
match location::get_kml(context, self.msg.chat_id) {
Ok((kml_content, last_added_location_id)) => {
info!(
context,
"adding location.kml to mime message: {}", kml_content
);
wrapmime::add_filename_part(
message,
"location.kml",