1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
// DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE // Version 2, December 2004 // // Copyright (C) 2018 Thomas Bailleux <thomas@bailleux.me> // // Everyone is permitted to copy and distribute verbatim or modified // copies of this license document, and changing it is allowed as long // as the name is changed. // // DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE // TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION // // 0. You just DO WHAT THE FUCK YOU WANT TO. // // Author: zadig <thomas chr(0x40) bailleux.me> //! A simple parser and reader for Thumbs.db files. //! //! This uses the crate `ole` for parsing Thumbs.db files. //! Then, it extracts the thumbnails. //! //! ## Example //! //! ``` //! //! use thumbsdb::ThumbsDb; //! //! // Reads a Thumbs.db file //! let thumbsdb = ThumbsDb::from_path("assets/Thumbs.db").unwrap(); //! //! // Iterates through all thumbnails inside the Thumbs.db //! for thumbnail in thumbsdb.iterate() { //! let mut buf = std::vec::Vec::<u8>::new(); //! //! // Extracts the thumbnail and saves it into a file //! match thumbsdb.extract_thumbnail(thumbnail, &mut buf) { //! Ok(()) => { //! use std::io::Write; //! let mut output_file //! = std::fs::File::create(format!("assets/streams/{}", //! thumbnail.name())).unwrap(); //! output_file.write_all(&buf); //! }, //! Err(e) => eprintln!("error: {}", e) //! }; //! } //! //! ``` //! //! ## Compatibility //! //! This crate works fine for rust 1.9 or greater. extern crate ole; mod thumbsdb; mod error; mod catalog; mod util; mod thumbnail; mod iterator; pub use thumbsdb::ThumbsDb; pub use error::Error; pub use thumbnail::Thumbnail; pub use iterator::ThumbnailIterator; #[cfg(test)] mod tests { use super::ThumbsDb; use std; #[test] fn it_works() { let t = ThumbsDb::from_path("assets/Thumbs.db").unwrap(); for thumbnail in t.iterate() { println!("thumbnail={}", thumbnail); let mut buf = std::vec::Vec::<u8>::new(); match t.extract_thumbnail(thumbnail, &mut buf) { Ok(()) => { use std::io::Write; let mut f = std::fs::File::create(format!("assets/streams/{}", thumbnail.name())).unwrap(); match f.write_all(&buf) { Ok(_) => println!("{} extracted.", thumbnail.name()), Err(e) => eprintln!("Error: {}", e) } }, Err(e) => eprintln!("error: {}", e) } } } }