diff options
Diffstat (limited to 'components/net')
-rw-r--r-- | components/net/filemanager_thread.rs | 48 | ||||
-rw-r--r-- | components/net/resource_thread.rs | 4 |
2 files changed, 38 insertions, 14 deletions
diff --git a/components/net/filemanager_thread.rs b/components/net/filemanager_thread.rs index 83695434328..f2cdc658b37 100644 --- a/components/net/filemanager_thread.rs +++ b/components/net/filemanager_thread.rs @@ -3,7 +3,9 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; -use net_traits::filemanager_thread::{FileManagerThreadMsg, FileManagerResult, FileManagerThreadError}; +use mime_guess::guess_mime_type_opt; +use net_traits::filemanager_thread::{FileManagerThreadMsg, FileManagerResult}; +use net_traits::filemanager_thread::{SelectedFile, FileManagerThreadError}; use std::cell::RefCell; use std::collections::HashMap; use std::fs::File; @@ -17,15 +19,13 @@ pub struct FileManager { idmap: RefCell<HashMap<Uuid, PathBuf>>, } -impl FileManager { - fn new(recv: IpcReceiver<FileManagerThreadMsg>) -> FileManager { - FileManager { - receiver: recv, - idmap: RefCell::new(HashMap::new()), - } - } +pub trait FileManagerThreadFactory { + fn new() -> Self; +} - pub fn new_thread() -> IpcSender<FileManagerThreadMsg> { +impl FileManagerThreadFactory for IpcSender<FileManagerThreadMsg> { + /// Create a FileManagerThread + fn new() -> IpcSender<FileManagerThreadMsg> { let (chan, recv) = ipc::channel().unwrap(); spawn_named("FileManager".to_owned(), move || { @@ -34,6 +34,16 @@ impl FileManager { chan } +} + + +impl FileManager { + fn new(recv: IpcReceiver<FileManagerThreadMsg>) -> FileManager { + FileManager { + receiver: recv, + idmap: RefCell::new(HashMap::new()), + } + } /// Start the file manager event loop fn start(&mut self) { @@ -49,7 +59,7 @@ impl FileManager { } impl FileManager { - fn select_file(&mut self, sender: IpcSender<FileManagerResult<(Uuid, PathBuf, u64)>>) { + fn select_file(&mut self, sender: IpcSender<FileManagerResult<SelectedFile>>) { // TODO: Pull the dialog UI in and get selected let selected_path = Path::new(""); @@ -63,7 +73,7 @@ impl FileManager { } } - fn select_files(&mut self, sender: IpcSender<FileManagerResult<Vec<(Uuid, PathBuf, u64)>>>) { + fn select_files(&mut self, sender: IpcSender<FileManagerResult<Vec<SelectedFile>>>) { let selected_paths = vec![Path::new("")]; let mut replies = vec![]; @@ -81,7 +91,7 @@ impl FileManager { let _ = sender.send(Ok(replies)); } - fn create_entry(&mut self, file_path: &Path) -> Option<(Uuid, PathBuf, u64)> { + fn create_entry(&mut self, file_path: &Path) -> Option<SelectedFile> { match File::open(file_path) { Ok(handler) => { let id = Uuid::new_v4(); @@ -100,7 +110,19 @@ impl FileManager { let filename = file_path.file_name(); match (epoch, filename) { - (Ok(epoch), Some(filename)) => Some((id, Path::new(filename).to_path_buf(), epoch)), + (Ok(epoch), Some(filename)) => { + let filename_path = Path::new(filename); + let mime = guess_mime_type_opt(filename_path); + Some(SelectedFile { + id: id, + filename: filename_path.to_path_buf(), + modified: epoch, + type_string: match mime { + Some(x) => format!("{}", x), + None => "".to_string(), + }, + }) + } _ => None } }, diff --git a/components/net/resource_thread.rs b/components/net/resource_thread.rs index 7e93901a740..43919362bfa 100644 --- a/components/net/resource_thread.rs +++ b/components/net/resource_thread.rs @@ -11,6 +11,7 @@ use cookie_storage::CookieStorage; use data_loader; use devtools_traits::{DevtoolsControlMsg}; use file_loader; +use filemanager_thread::FileManagerThreadFactory; use hsts::HstsList; use http_loader::{self, HttpState}; use hyper::client::pool::Pool; @@ -154,7 +155,8 @@ pub fn new_resource_threads(user_agent: String, devtools_chan: Option<Sender<DevtoolsControlMsg>>, profiler_chan: ProfilerChan) -> ResourceThreads { ResourceThreads::new(new_core_resource_thread(user_agent, devtools_chan, profiler_chan), - StorageThreadFactory::new()) + StorageThreadFactory::new(), + FileManagerThreadFactory::new()) } |