From: Olaf Wintermann Date: Thu, 25 Jun 2026 19:27:17 +0000 (+0200) Subject: add resource methods for setting/getting (string) properties X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=refs%2Fheads%2Fmain;p=note.git add resource methods for setting/getting (string) properties --- diff --git a/dav-rs/src/dav/resource.rs b/dav-rs/src/dav/resource.rs index 536b434..9089b8d 100644 --- a/dav-rs/src/dav/resource.rs +++ b/dav-rs/src/dav/resource.rs @@ -306,6 +306,80 @@ impl<'a> ResourceRef<'a> { } } } + + pub fn set_string_property(&self, namespace: &str, name: &str, value: &str) { + let cstr_ns = CString::new(namespace).unwrap(); + let cstr_name = CString::new(name).unwrap(); + let cstr_value = CString::new(value).unwrap(); + unsafe { + dav_set_string_property_ns(self.ptr, cstr_ns.as_ptr(), cstr_name.as_ptr(), cstr_value.as_ptr()); + } + } + + pub fn set_string_prefixed_property(&self, prefixed_name: &str, value: &str) { + let cstr_name = CString::new(prefixed_name).unwrap(); + let cstr_value = CString::new(value).unwrap(); + unsafe { + dav_set_string_property(self.ptr, cstr_name.as_ptr(), cstr_value.as_ptr()); + } + } + + pub fn set_encrypted_string_property(&self, namespace: &str, name: &str, value: &str) { + let cstr_ns = CString::new(namespace).unwrap(); + let cstr_name = CString::new(name).unwrap(); + let cstr_value = CString::new(value).unwrap(); + unsafe { + dav_set_encrypted_string_property_ns(self.ptr, cstr_ns.as_ptr(), cstr_name.as_ptr(), cstr_value.as_ptr()); + } + } + + pub fn get_string_property(&self, namespace: &str, name: &str) -> Option { + let cstr_ns = CString::new(namespace).unwrap(); + let cstr_name = CString::new(name).unwrap(); + unsafe { + let value = dav_get_string_property_ns(self.ptr, cstr_ns.as_ptr(), cstr_name.as_ptr()); + if value.is_null() { + None + } else { + Some(CStr::from_ptr(value).to_string_lossy() .into_owned()) + } + } + } + + pub fn get_string_prefixed_property(&self, prefixed_name: &str) -> Option { + let cstr_name = CString::new(prefixed_name).unwrap(); + unsafe { + let value = dav_get_string_property(self.ptr, cstr_name.as_ptr()); + if value.is_null() { + None + } else { + Some(CStr::from_ptr(value).to_string_lossy() .into_owned()) + } + } + } + + pub fn remove_property(&self, namespace: &str, name: &str) { + let cstr_ns = CString::new(namespace).unwrap(); + let cstr_name = CString::new(name).unwrap(); + unsafe { + dav_remove_property_ns(self.ptr, cstr_ns.as_ptr(), cstr_name.as_ptr()); + } + } + + pub fn remove_prefixed_property(&self, prefixed_name: &str) { + let cstr_name = CString::new(prefixed_name).unwrap(); + unsafe { + dav_remove_property(self.ptr, cstr_name.as_ptr()); + } + } + + pub fn remove_encrypted_property(&self, namespace: &str, name: &str) { + let cstr_ns = CString::new(namespace).unwrap(); + let cstr_name = CString::new(name).unwrap(); + unsafe { + dav_remove_encrypted_property_ns(self.ptr, cstr_ns.as_ptr(), cstr_name.as_ptr()); + } + } } @@ -464,4 +538,14 @@ unsafe extern "C" { fn dav_lock(res: *mut ffi::DavResource) -> c_int; fn dav_lock_t(res: *mut ffi::DavResource, timeout: libc::time_t) -> c_int; fn dav_unlock(res: *mut ffi::DavResource) -> c_int; + + fn dav_get_string_property(res: *mut ffi::DavResource, property: *const c_char) -> *mut c_char; + fn dav_get_string_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char) -> *mut c_char; + fn dav_set_string_property(res: *mut ffi::DavResource, property: *const c_char, value: *const c_char); + fn dav_set_string_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char, value: *const c_char); + fn dav_set_encrypted_string_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char, value: *const c_char); + + fn dav_remove_property(res: *mut ffi::DavResource, property: *const c_char); + fn dav_remove_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char); + fn dav_remove_encrypted_property_ns(res: *mut ffi::DavResource, namespace: *const c_char, property: *const c_char); } \ No newline at end of file