From 8f0e554bc4ce189e80825da89948f881b87ed420 Mon Sep 17 00:00:00 2001 From: Dmitry Bogatov Date: Wed, 14 Aug 2019 06:07:20 +0000 Subject: [PATCH] Implement Rust version of {dc_msg_guess_msgtype_from_suffix} --- Cargo.lock | 7 +++++++ Cargo.toml | 1 + src/dc_msg.rs | 19 +++++++++++++++++++ src/lib.rs | 2 ++ 4 files changed, 29 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index a588114d2..2678e5b49 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -480,6 +480,7 @@ dependencies = [ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "mmime 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1074,6 +1075,11 @@ dependencies = [ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "maplit" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "matches" version = "0.1.8" @@ -2802,6 +2808,7 @@ dependencies = [ "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" "checksum lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" "checksum mach 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "86dd2487cdfea56def77b88438a2c915fb45113c5319bfe7e14306ca4cd0b0e1" +"checksum maplit 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08cbb6b4fef96b6d77bfc40ec491b1690c779e77b05cd9f07f787ed376fd4c43" "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" "checksum md-5 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a18af3dcaf2b0219366cdb4e2af65a6101457b415c3d1a5c71dd9c2b7c77b9c8" "checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e" diff --git a/Cargo.toml b/Cargo.toml index d58e47b2b..a63896f46 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,7 @@ pgp = { version = "0.2", default-features = false } hex = "0.3.2" sha2 = "0.8.0" rand = "0.6.5" +maplit = "1.0.1" smallvec = "0.6.9" reqwest = "0.9.15" num-derive = "0.2.5" diff --git a/src/dc_msg.rs b/src/dc_msg.rs index c71adb469..d443cee84 100644 --- a/src/dc_msg.rs +++ b/src/dc_msg.rs @@ -1,4 +1,5 @@ use std::ffi::CString; +use std::path::Path; use crate::constants::*; use crate::contact::*; @@ -352,6 +353,24 @@ pub unsafe fn dc_msg_guess_msgtype_from_suffix( free(dummy_buf as *mut libc::c_void); } +pub fn dc_msg_guess_msgtype_from_suffix2(path: &Path) -> Option<(Viewtype, &str)> { + let known = hashmap! { + "mp3" => (Viewtype::Audio, "audio/mpeg"), + "aac" => (Viewtype::Audio, "audio/aac"), + "mp4" => (Viewtype::Video, "video/mp4"), + "jpg" => (Viewtype::Image, "image/jpeg"), + "jpeg" => (Viewtype::Image, "image/jpeg"), + "png" => (Viewtype::Image, "image/png"), + "webp" => (Viewtype::Image, "image/webp"), + "gif" => (Viewtype::Gif, "image/gif"), + "vcf" => (Viewtype::File, "text/vcard"), + "vcard" => (Viewtype::File, "text/vcard"), + }; + let extension = path.extension()?.to_str()?; + + known.get(extension).map(|x| *x) +} + pub unsafe fn dc_msg_get_file(msg: *const dc_msg_t) -> *mut libc::c_char { let mut file_abs = 0 as *mut libc::c_char; diff --git a/src/lib.rs b/src/lib.rs index afbdad728..f99b0ae80 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,8 @@ extern crate rusqlite; extern crate strum; #[macro_use] extern crate strum_macros; +#[macro_use] +extern crate maplit; #[macro_use] mod log;