MCPcopy Index your code
hub / github.com/LabyStudio/java-spotify-api / getCoverArt

Function getCoverArt

rust/src/lib.rs:142–188  ·  view source on GitHub ↗
(out_ptr: *mut *mut u8, out_len: *mut usize)

Source from the content-addressed store, hash-verified

140
141#[no_mangle]
142pub extern "system" fn getCoverArt(out_ptr: *mut *mut u8, out_len: *mut usize) -> i32 {
143 if out_ptr.is_null() || out_len.is_null() {
144 return 0; // false
145 }
146 let result = std::panic::catch_unwind(|| {
147 block_on(async {
148 match get_spotify_session()? {
149 Some(session) => {
150 let props = session.TryGetMediaPropertiesAsync()?.get()?;
151 let thumbnail = props.Thumbnail()?;
152 let stream = thumbnail.OpenReadAsync()?.get()?;
153 let size = stream.Size()?;
154
155 if size == 0 {
156 return Err(Error::new(E_FAIL, "Cover art size is zero"));
157 }
158
159 use windows::Storage::Streams::DataReader;
160 let reader = DataReader::CreateDataReader(&stream)?;
161 reader.LoadAsync(size as u32)?.get()?;
162
163 let mut buffer = vec![0u8; size as usize];
164 reader.ReadBytes(&mut buffer)?;
165 Ok(buffer)
166 }
167 _ => Err(Error::empty()),
168 }
169 })
170 });
171
172 match result {
173 Ok(Ok(buffer)) => unsafe {
174 let len = buffer.len();
175 let ptr = libc::malloc(len);
176 if ptr.is_null() {
177 return 0; // false
178 }
179 std::ptr::copy_nonoverlapping(buffer.as_ptr(), ptr as *mut u8, len);
180 *out_ptr = ptr as *mut u8;
181 *out_len = len;
182 1 // true
183 },
184 _ => {
185 0 // false
186 }
187 }
188}
189
190#[no_mangle]
191pub extern "system" fn freeString(s: *mut c_char) {

Callers

nothing calls this directly

Calls 2

get_spotify_sessionFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected