# Core

The WpCore API is mostly transparent to lua, as the core object is not exposed to the scripts.

For some functionality, though, the following static functions are exposed.

Core.get_properties()

  Binds `wp_core_get_properties()`

  Returns a table with the properties of the core. These are the same properties that appear on WirePlumber's client object in the PipeWire global registry.

  Returns:

    the properties of the core

  Return type:

    table

Core.get_info()

  Returns a table with information about the core. The table contains the following fields:

  Field | Contains
  --- | ---
  cookie | The value of `wp_core_get_remote_cookie()`
  name | The value of `wp_core_get_remote_name()`
  user_name | The value of `wp_core_get_remote_user_name()`
  host_name | The value of `wp_core_get_remote_host_name()`
  version | The value of `wp_core_get_remote_version()`
  properties | The value of `wp_core_get_remote_properties()`

  Returns:

    information about the core

  Return type:

    table

Core.update_properties(properties)

  Binds `wp_core_update_properties()`

  Updates the properties of the core, which are the properties that appear on WirePlumber's client object in the PipeWire global registry.

  Parameters:

    properties -- a table or Properties object with the properties to set

Core.get_own_bound_id()

  Binds `wp_core_get_own_bound_id()`

  Returns:

    the global id of WirePlumber's own client object

  Return type:

    integer

Core.get_vm_type()

  Binds `wp_core_get_vm_type()`

  Detects whether WirePlumber is running inside a virtual machine. The ALSA monitor uses this to apply VM-specific workarounds.

  Returns:

    the name of the virtual machine type, or nil if not running in a virtual machine

  Return type:

    string

Core.idle_add(callback)

  Binds `wp_core_idle_add_closure()`

  Schedules to call callback the next time that the event loop will be idle

  Parameters:

    callback (function) -- the function to call; the function takes no arguments and must return true/false, as it is a GSourceFunc: return true to have the event loop call it again the next time it is idle, false to stop calling it and remove the associated GSource

  Returns:

    the GSource associated with this idle callback

  Return type:

    GSource, see `GSource.destroy()`

Core.timeout_add(timeout_ms, callback)

  Binds `wp_core_timeout_add_closure()`

  Schedules to call callback after timeout_ms milliseconds

  Parameters:

    callback (function) -- the function to call; the function takes no arguments and must return true/false, as it is a GSourceFunc: return true to have the event loop call it again periodically every timeout_ms milliseconds, false to stop calling it and remove the associated GSource

  Returns:

    the GSource associated with this idle callback

  Return type:

    GSource, see `GSource.destroy()`

GSource.destroy(self)

  For the purpose of working with `Core.idle_add()` and `Core.timeout_add()`, the GSource object that is returned by those functions contains this method.

  Call this method to destroy the source, so that the associated callback is not called again. This can be used to stop a repeating timer callback or just to abort some idle operation

  This method binds g_source_destroy

Core.sync(callback)

  Binds `wp_core_sync()`

  Calls callback after synchronizing the transaction state with PipeWire

  Parameters:

    callback (function) -- a function to be called after syncing with PipeWire; the function takes one argument that will be an error string, if something went wrong and nil otherwise and returns nothing

Core.quit()

  Quits the current wpexec process

  Note

  This can only be called when the script is running in wpexec; if it is running in the main WirePlumber daemon, it will print a warning and do nothing

Core.require_api(..., callback)

  Ensures that the specified API plugins are loaded.

  API plugins are plugins that provide some API extensions for use in scripts. These plugins must always have their name end in "-api" and the names specified here must not have the "-api" extension.

  For instance, the "mixer-api" module provides an API to change volume/mute controls from scripts, via action signals. It can be used like this:

      Core.require_api("mixer", function(mixer)
        -- get the volume of node 35
        local volume = mixer:call("get-volume", 35)

        -- the return value of "get-volume" is a GVariant(a{sv}),
        -- which gets translated to a Lua table
        Debug.dump_table(volume)
      end)

  See also the example in `GObject.call()`

  Note

  This can only be called when the script is running in wpexec; if it is running in the main WirePlumber daemon, it will print a warning and do nothing

  Parameters:

    - ... (strings) -- a list of string arguments, which specify the names of the api plugins to load, if they are not already loaded

    - callback -- the function to call after the plugins have been loaded; this function takes references to the plugins as parameters

Core.test_feature()

  Binds `wp_core_test_feature()`

  Tests if the specified feature is provided in the current WirePlumber configuration.

  Parameters:

    feature (string) -- the name of the feature to test

  Returns:

    true if the feature is provided, false otherwise

  Return type:

    boolean