Add `OpenWorkspaceFolder` event
Dependencies
- [2]
WFWTKCJNCreate initial Visual Studio Code extension - [3]
T4NQUSRPEmit events on file decoration change - [4]
3YGYMEXVCreate `event_loop` module - [5]
TDTLSDFGCreate macro for defining `ThreadsafeFunction`s
Change contents
- edit in extensions/vscode/src/vscode_sys/threadsafe_function.rs at line 2[5.88]
threadsafe_function! {"scm": scm {"createSourceControl":create_source_control(String,String,Option<crate::vscode_sys::reference::UriRef>) -> crate::vscode_sys::reference::SourceControlRef;}} - edit in extensions/vscode/src/vscode_sys/reference.rs at line 6
Uri, - edit in extensions/vscode/src/vscode_sys/reference.rs at line 14[2.58378]
object_reference!(UriRef: Uri); - edit in extensions/vscode/src/lib.rs at line 250
let added_workspace_uri = added_workspace.get_uri()?;let added_uri = added_workspace_uri.to_string()?;event_loop::send(Event::OpenWorkspaceFolder { uri: added_uri }); - replacement in extensions/vscode/src/lib.rs at line 393
event_loop::start();event_loop::start(env)?; - edit in extensions/vscode/src/lib.rs at line 399
let workspace_uri = workspace_folder.get_uri()?;let uri = workspace_uri.to_string()?;event_loop::send(Event::OpenWorkspaceFolder { uri }); - file addition: threadsafe_function.rs[4.138]
use napi::bindgen_prelude::FnArgs;use crate::vscode_sys;pub struct ThreadsafeFunctions {create_source_control: vscode_sys::threadsafe_function::scm::create_source_control::Prototype,}impl ThreadsafeFunctions {pub fn get(env: &napi::Env) -> Result<Self, napi::Error> {Ok(Self {create_source_control:vscode_sys::threadsafe_function::scm::create_source_control::get(env)?,})}pub async fn create_source_control(&self,id: String,name: String,uri: &str,) -> Result<vscode_sys::reference::SourceControlRef, napi::Error> {let arguments = FnArgs::from((id, name, None));self.create_source_control.call_async(arguments).await}} - replacement in extensions/vscode/src/event_loop/mod.rs at line 5
mod threadsafe_functions;mod threadsafe_function; - replacement in extensions/vscode/src/event_loop/mod.rs at line 12
pub enum Event {}pub enum Event {OpenWorkspaceFolder { uri: String },} - replacement in extensions/vscode/src/event_loop/mod.rs at line 18
async fn event_loop(mut receiver: UnboundedReceiver<Event>) {async fn event_loop(threadsafe_functions: threadsafe_function::ThreadsafeFunctions,mut receiver: UnboundedReceiver<Event>,) { - edit in extensions/vscode/src/event_loop/mod.rs at line 34
for event in &event_buffer {match event {Event::OpenWorkspaceFolder { uri } => {// TODO: handle multiple repositories per workspace// TODO: properly handle URIslet source_control_ref = match threadsafe_functions.create_source_control(String::from("pijul"), String::from("Pijul"), uri).await{Ok(source_control_ref) => source_control_ref,Err(error) => {tracing::error!(message = "Unable to create source control", ?error);continue;}};}}} - replacement in extensions/vscode/src/event_loop/mod.rs at line 60
#[tracing::instrument]pub fn start() {#[tracing::instrument(skip_all)]pub fn start(env: &napi::Env) -> Result<(), napi::Error> {let threadsafe_functions = threadsafe_function::ThreadsafeFunctions::get(env)?; - replacement in extensions/vscode/src/event_loop/mod.rs at line 66
tracing::error!("Event sender has already been initialized");return Err(napi::Error::from_reason("Event sender has already been initialized",)); - replacement in extensions/vscode/src/event_loop/mod.rs at line 71
std::thread::spawn(|| event_loop(receiver));std::thread::spawn(|| event_loop(threadsafe_functions, receiver));Ok(())