Skip to content

Commit 7dcd78b

Browse files
authored
Merge pull request #458 from CodeforEvolution/jake/gnome-extensions-update-check
2 parents 08379cb + 7dbe16a commit 7dcd78b

2 files changed

Lines changed: 53 additions & 0 deletions

File tree

andax/fns/tsunagu.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,57 @@ pub mod ar {
299299
get(ctx, &format!("https://git.sr.ht/{repo}/blob/{branch}/{file}"))
300300
}
301301

302+
#[rhai_fn(return_raw, global)]
303+
pub fn gnome_extensions(ctx: NativeCallContext, uuid: &str) -> Res<String> {
304+
let response_value = get_json_value(
305+
ctx,
306+
&format!("https://extensions.gnome.org/api/v1/extensions/{uuid}/versions/?format=json"),
307+
)?;
308+
trace!("Got json from {uuid}:\n{response_value}");
309+
310+
let results =
311+
response_value.get("results").ok_or_else(|| E::from("No json[`results`]?"))?;
312+
let results_arr =
313+
results.as_array().ok_or_else(|| E::from("json[`results`] is not array type?"))?;
314+
315+
// There's both the version name and the internal/fallback version.
316+
// We'll use the internal/fallback version since the version name is optional and not always present.
317+
let mut latest_version = 0;
318+
for result in results_arr {
319+
let Some(result_obj) = result.as_object() else {
320+
continue;
321+
};
322+
let Some(status_value) = result_obj.get("status") else {
323+
continue;
324+
};
325+
let Some(status) = status_value.as_i64() else {
326+
continue;
327+
};
328+
329+
// Is version marked as "Active"?
330+
if status != 3 {
331+
continue;
332+
}
333+
334+
let Some(version_value) = result_obj.get("version") else {
335+
continue;
336+
};
337+
let Some(version) = version_value.as_i64() else {
338+
continue;
339+
};
340+
341+
if version > latest_version {
342+
latest_version = version;
343+
}
344+
}
345+
346+
if latest_version == 0 {
347+
return Err(E::from("No active extension version could be found!"));
348+
}
349+
350+
Ok(latest_version.to_string())
351+
}
352+
302353
#[rhai_fn(skip)]
303354
pub fn internal_env(key: &str) -> Res<String> {
304355
trace!("env(`{key}`) = {:?}", std::env::var(key));

tests/test.rhai

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ print(env("PATH"));
2929
// print(sourcehut("~alextee/libaudec"))
3030
// print(sourcehut_commit("~alextee/libaudec"))
3131

32+
// print(gnome_extensions("live-lockscreen@nick-redwill"))
33+
3234
let obj = #{
3335
"a": 1,
3436
"b": 2 ,

0 commit comments

Comments
 (0)