From 6d5d3e72974dcd1e70c2e4e339530bee1263114a Mon Sep 17 00:00:00 2001 From: SoniEx2 Date: Sat, 31 Mar 2018 15:02:41 -0300 Subject: Implement find_context --- Cargo.toml | 2 +- src/lib.rs | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 2fad324..26bf38d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hexchat-plugin" -version = "0.2.1" +version = "0.2.2" authors = ["SoniEx2 "] description = "Lets you write HexChat plugins in Rust" license = "AGPL-3.0+" diff --git a/src/lib.rs b/src/lib.rs index 2b45724..45b3c66 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -95,7 +95,7 @@ * -[ ] hexchat_hook_server_attrs * -[x] hexchat_hook_timer * -[x] ~~hexchat_unhook~~ not available - use Drop impls - * -[ ] hexchat_find_context + * -[x] hexchat_find_context * -[x] hexchat_get_context * -[x] hexchat_set_context * -[ ] hexchat_pluginpref_set_str @@ -631,9 +631,20 @@ impl<'a> EnsureValidContext<'a> { * context take an `&mut self`, things that do take an `self`. */ + /// Finds an open context for the given servname and channel. pub fn find_context(&mut self, servname: Option<&str>, channel: Option<&str>) -> Option { - // TODO - unimplemented!() + // this was a mistake but oh well + let ph = self.ph.ph; + let servname = CString::new(servname).unwrap(); + let channel = CString::new(channel).unwrap(); + let ctx = unsafe { + ((*ph).hexchat_find_context)(ph, servname.as_ptr(), channel.as_ptr()) + }; + if ctx.is_null() { + None + } else { + Some(Context { ctx }) + } } pub fn nickcmp(&mut self, nick1: &str, nick2: &str) -> ::std::cmp::Ordering { -- cgit 1.4.1