github.com/primecitizens/pcz/std@v0.2.1/plat/js/webext/wallpaper/bindings/ffi_bindings.ts (about)

     1  import { importModule, Application, heap, Pointer } from "@ffi";
     2  
     3  importModule("plat/js/webext/wallpaper", (A: Application) => {
     4    const WEBEXT = typeof globalThis.browser === "undefined" ? globalThis.chrome : globalThis.browser;
     5  
     6    return {
     7      "constof_WallpaperLayout": (ref: heap.Ref<string>): number => {
     8        const idx = ["STRETCH", "CENTER", "CENTER_CROPPED"].indexOf(A.H.get(ref));
     9        return idx < 0 ? 0 : idx + 1;
    10      },
    11  
    12      "store_SetWallpaperArgDetails": (ptr: Pointer, ref: heap.Ref<any>) => {
    13        const x = A.H.get<any>(ref);
    14  
    15        if (typeof x === "undefined") {
    16          A.store.Bool(ptr + 21, false);
    17          A.store.Ref(ptr + 0, undefined);
    18          A.store.Ref(ptr + 4, undefined);
    19          A.store.Enum(ptr + 8, -1);
    20          A.store.Bool(ptr + 20, false);
    21          A.store.Bool(ptr + 12, false);
    22          A.store.Ref(ptr + 16, undefined);
    23        } else {
    24          A.store.Bool(ptr + 21, true);
    25          A.store.Ref(ptr + 0, x["data"]);
    26          A.store.Ref(ptr + 4, x["filename"]);
    27          A.store.Enum(ptr + 8, ["STRETCH", "CENTER", "CENTER_CROPPED"].indexOf(x["layout"] as string));
    28          A.store.Bool(ptr + 20, "thumbnail" in x ? true : false);
    29          A.store.Bool(ptr + 12, x["thumbnail"] ? true : false);
    30          A.store.Ref(ptr + 16, x["url"]);
    31        }
    32      },
    33      "load_SetWallpaperArgDetails": (ptr: Pointer, create: heap.Ref<boolean>, ref: heap.Ref<any>): heap.Ref<any> => {
    34        const x = create === A.H.TRUE ? {} : A.H.get<any>(ref);
    35  
    36        x["data"] = A.load.Ref(ptr + 0, undefined);
    37        x["filename"] = A.load.Ref(ptr + 4, undefined);
    38        x["layout"] = A.load.Enum(ptr + 8, ["STRETCH", "CENTER", "CENTER_CROPPED"]);
    39        if (A.load.Bool(ptr + 20)) {
    40          x["thumbnail"] = A.load.Bool(ptr + 12);
    41        } else {
    42          delete x["thumbnail"];
    43        }
    44        x["url"] = A.load.Ref(ptr + 16, undefined);
    45        return create === A.H.TRUE ? A.H.push(x) : ref;
    46      },
    47      "has_SetWallpaper": (): heap.Ref<boolean> => {
    48        if (WEBEXT?.wallpaper && "setWallpaper" in WEBEXT?.wallpaper) {
    49          return A.H.TRUE;
    50        }
    51        return A.H.FALSE;
    52      },
    53      "func_SetWallpaper": (fn: Pointer): void => {
    54        A.store.Ref(fn, WEBEXT.wallpaper.setWallpaper);
    55      },
    56      "call_SetWallpaper": (retPtr: Pointer, details: Pointer): void => {
    57        const details_ffi = {};
    58  
    59        details_ffi["data"] = A.load.Ref(details + 0, undefined);
    60        details_ffi["filename"] = A.load.Ref(details + 4, undefined);
    61        details_ffi["layout"] = A.load.Enum(details + 8, ["STRETCH", "CENTER", "CENTER_CROPPED"]);
    62        if (A.load.Bool(details + 20)) {
    63          details_ffi["thumbnail"] = A.load.Bool(details + 12);
    64        }
    65        details_ffi["url"] = A.load.Ref(details + 16, undefined);
    66  
    67        const _ret = WEBEXT.wallpaper.setWallpaper(details_ffi);
    68        A.store.Ref(retPtr, _ret);
    69      },
    70      "try_SetWallpaper": (retPtr: Pointer, errPtr: Pointer, details: Pointer): heap.Ref<boolean> => {
    71        try {
    72          const details_ffi = {};
    73  
    74          details_ffi["data"] = A.load.Ref(details + 0, undefined);
    75          details_ffi["filename"] = A.load.Ref(details + 4, undefined);
    76          details_ffi["layout"] = A.load.Enum(details + 8, ["STRETCH", "CENTER", "CENTER_CROPPED"]);
    77          if (A.load.Bool(details + 20)) {
    78            details_ffi["thumbnail"] = A.load.Bool(details + 12);
    79          }
    80          details_ffi["url"] = A.load.Ref(details + 16, undefined);
    81  
    82          const _ret = WEBEXT.wallpaper.setWallpaper(details_ffi);
    83          A.store.Ref(retPtr, _ret);
    84          return A.H.TRUE;
    85        } catch (err: any) {
    86          A.store.Ref(errPtr, err);
    87          return A.H.FALSE;
    88        }
    89      },
    90    };
    91  });