<!DOCTYPE node PUBLIC
"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">

  <!-- Deployment dictionary keys:
       'id' (type 's')
       'osname' (type 's')
       'serial' (type 'i')
       'checksum' (type 's')
       'version' (type 's')
       'timestamp' (type 't')
       'origin' (type 's')
       'signatures' (type 'av')
       'packages' (type 'as')
       'booted' (type 'b')
  -->

  <interface name="org.projectatomic.rpmostree1.Sysroot">
    <!-- The booted OSName -->
    <property name="Booted" type="o" access="read"/>

    <!-- The system root path -->
    <property name="Path" type="s" access="read"/>

    <!-- The values are (method-name, sender-name, object path) -->
    <property name="ActiveTransaction" type="(sss)" access="read"/>
    <!-- A DBus address - connect to it to access its methods -->
    <property name="ActiveTransactionPath" type="s" access="read"/>

    <!-- (Currently) optional method to denote the client plans
         to either invoke methods on the daemon, or monitor status.
         If no clients are registered, the daemon may exit.

         'id (type 's') - Package/component name (e.g. `cockpit`, `gnome-software`)
    -->
    <method name="RegisterClient">
      <arg type="a{sv}" name="options" direction="in"/>
    </method>

    <!-- You must call this if your process is no longer interested in talking to
         rpm-ostree, but will remain connected to the bus.

         No options are currently defined.
    -->
    <method name="UnregisterClient">
      <arg type="a{sv}" name="options" direction="in"/>
    </method>

    <!-- Reload sysroot if changed. This can also be used as a way to sync with the daemon
         to ensure e.g. D-Bus properties are updated before reading them. -->
    <method name="Reload">
    </method>

    <!-- Like Reload, but also reload configuration files. -->
    <method name="ReloadConfig">
    </method>

    <!-- none, check, stage -->
    <property name="AutomaticUpdatePolicy" type="s" access="read"/>

    <method name="CreateOSName">
      <arg type="s" name="name"/>
      <arg type="o" name="result" direction="out"/>
    </method>

    <method name="GetOS">
      <arg name="name" type="s"/>
      <arg name="object_path" type="o" direction="out"/>
    </method>

    <!-- Array of all deployments in boot order -->
    <property name="Deployments" type="aa{sv}" access="read"/>
  </interface>

  <interface name="org.projectatomic.rpmostree1.OS">
    <property name="BootedDeployment" type="a{sv}" access="read"/>
    <property name="DefaultDeployment" type="a{sv}" access="read"/>
    <property name="RollbackDeployment" type="a{sv}" access="read"/>

    <!-- CachedUpdate dictionary keys:
       'osname' (type 's')
       'checksum' (type 's')
       'version' (type 's')
       'timestamp' (type 't')
       'origin' (type 's')
       'signatures' (type 'av')
       'gpg-enabled' (type 'b')
       'ref-has-new-commit' (type 'b')
          TRUE if 'checksum' refers to a new base commit we're not booted in.
       'rpm-diff' (type 'a{sv}')
          'upgraded' (type 'a(us(ss)(ss))')
          'downgraded' (type 'a(us(ss)(ss))')
          'removed' (type 'a(usss)')
          'added' (type 'a(usss)')
       'advisories' (type 'a(suuasa{sv})')
    -->
    <property name="CachedUpdate" type="a{sv}" access="read"/>
    <property name="HasCachedUpdateRpmDiff" type="b" access="read"/>

    <!-- Available options:
         "mode" (type 's')
            One of auto, none, check. Defaults to auto, which follows configured
            policy (available in AutomaticUpdatePolicy property).
         "output-to-self" (type 'b')
            Whether output should go to the daemon itself rather than the
            transaction. Defaults to TRUE.

         If automatic updates are not enabled, @enabled will be FALSE and
         @transaction_address will be the empty string.
    -->
    <method name="AutomaticUpdateTrigger">
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="b" name="enabled" direction="out"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <property name="Name" type="s" access="read"/>

    <method name="GetDeploymentsRpmDiff">
      <arg type="s" name="deployid0"/>
      <arg type="s" name="deployid1"/>
      <arg type="a(sua{sv})" name="result" direction="out"/>
    </method>

    <!-- Revision may be a full checksum or version string.

         Available options:
         "reboot" (type 'b')
    -->
    <method name="Deploy">
      <arg type="s" name="revision" direction="in"/>
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="s" name="transaction_address" direction="out"/>
      <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
    </method>

    <!-- details dictionary keys:
       'osname' (type 's')
       'checksum' (type 's')
       'version' (type 's')
       'timestamp' (type 't')
       'origin' (type 's')
       'signatures' (type 'av')
    -->
    <method name="GetCachedDeployRpmDiff">
      <arg type="s" name="revision"/>
      <arg type="as" name="packages"/>
      <arg type="a(sua{sv})" name="result" direction="out"/>
      <arg type="a{sv}" name="details" direction="out"/>
    </method>

    <method name="DownloadDeployRpmDiff">
      <arg type="s" name="revision"/>
      <arg type="as" name="packages"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <!-- Available options:
         "allow-downgrade" (type 'b')
         "reboot" (type 'b')
    -->
    <method name="Upgrade">
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="s" name="transaction_address" direction="out"/>
      <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
    </method>

    <!-- details dictionary keys:
       'osname' (type 's')
       'checksum' (type 's')
       'version' (type 's')
       'timestamp' (type 't')
       'origin' (type 's')
       'signatures' (type 'av')
    -->
    <method name="GetCachedUpdateRpmDiff">
      <arg type="s" name="deployid"/>
      <arg type="a(sua{sv})" name="result" direction="out"/>
      <arg type="a{sv}" name="details" direction="out"/>
    </method>

    <method name="DownloadUpdateRpmDiff">
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <!-- Available options:
         "reboot" (type 'b')
    -->
    <method name="Rollback">
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <!-- Available options:
         "reboot" (type 'b')
    -->
    <method name="ClearRollbackTarget">
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <!-- Available options:
         "skip-purge" (type 'b')
         "reboot" (type 'b')
         "revision" (type 's')
    -->
    <method name="Rebase">
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="s" name="refspec"/>
      <arg type="as" name="packages"/>
      <arg type="s" name="transaction_address" direction="out"/>
      <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
    </method>

    <!-- details dictionary keys:
       'osname' (type 's')
       'checksum' (type 's')
       'version' (type 's')
       'timestamp' (type 't')
       'origin' (type 's')
       'signatures' (type 'av')
    -->
    <method name="GetCachedRebaseRpmDiff">
      <arg type="s" name="refspec"/>
      <arg type="as" name="packages"/>
      <arg type="a(sua{sv})" name="result" direction="out"/>
      <arg type="a{sv}" name="details" direction="out"/>
    </method>

    <method name="DownloadRebaseRpmDiff">
      <arg type="s" name="refspec"/>
      <arg type="as" name="packages"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <!-- Available options:
         "reboot" (type 'b')
         "dry-run" (type 'b')
    -->
    <method name="PkgChange">
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="as" name="packages_added"/>
      <arg type="as" name="packages_removed"/>
      <arg type="s" name="transaction_address" direction="out"/>
      <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
    </method>

    <method name="SetInitramfsState">
      <arg type="b" name="regenerate" direction="in"/>
      <arg type="as" name="args" direction="in"/>
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

   <!-- Available options:
        "reboot" (type 'b')
    -->
    <method name="KernelArgs">
      <arg type="s" name="existing_kernel_arg_string"/>
      <arg type="as" name="kernel_args_added" direction="in"/>
      <arg type="as" name="kernel_args_replaced" direction="in"/>
      <arg type="as" name="kernel_args_removed" direction="in"/>
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <method name="GetDeploymentBootConfig">
      <arg type="s" name="deployid" />
      <arg type="b" name="is_pending" direction="in"/>
      <arg type="a{sv}" name="bootconfig" direction="out"/>
    </method>

    <method name="Cleanup">
      <arg type="as" name="elements" direction="in"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <method name="RefreshMd">
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <!-- Set options in yum .repo files -->
    <method name="ModifyYumRepo">
      <arg type="s" name="repo_id" direction="in"/>
      <arg type="a{ss}" name="settings" direction="in"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <!-- Available modifiers:
         "set-refspec" (type 's')
         "set-revision" (type 's')
         "install-packages" (type 'as')
         "uninstall-packages" (type 'as')
         "install-local-packages" (type 'ah')
         "override-remove-packages" (type 'as')
         "override-reset-packages" (type 'as')
         "override-replace-packages" (type 'as')
         "override-replace-local-packages" (type 'ah')
         "custom-origin" (type '(ss)')

         Available options:
         "reboot" (type 'b')
            Initiate a reboot after transaction.
         "allow-downgrade" (type 'b')
            Allow newly pulled bases to have older timestamps than the
            current base. Defaults to TRUE if either "set-refspec" or
            "set-revision" is specified.
         "skip-purge" (type 'b')
            Do not purge the old refspec. Only valid if "set-refspec" is
            specified.
         "no-pull-base" (type 'b')
            Do not pull a base layer from the remote. Not valid if
            either "set-refspec" or "set-revision" is specified.
         "dry-run" (type 'b')
            Stop short of deploying the new tree. If layering packages,
            the pkg diff is printed but packages are not downloaded or
            imported.
         "no-layering" (type 'b')
            Remove all package requests. Requests in "install-packages"
            are still subsequently processed if specified.
         "no-overrides" (type 'b')
            Remove all active overrides. Not valid if any override
            modifiers are specified.
         "no-initramfs" (type 'b')
            Disable any initramfs regeneration.
         "cache-only" (type 'b')
            Do not update rpmmd repo metadata cache or ostree refspec.
            Not valid if "download-only" is specified.
         "download-only" (type 'b')
            Update rpmmd repo metadata cache and ostree refspec. Do not
            perform any deployments. This is like "dry-run" except that
            the latter does not download and import packages. Not valid
            if "cache-only" or "dry-run" is specified.
         "allow-inactive-requests" (type 'b')
            When installing packages, allow package requests which would
            not immediately be active.
         "idempotent-layering" (type 'b')
            Don't error out on requests in install-* or uninstall-*
            modifiers that are already satisfied.
    -->
    <method name="UpdateDeployment">
      <arg type="a{sv}" name="modifiers" direction="in"/>
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="s" name="transaction_address" direction="out"/>
      <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
    </method>

  </interface>

  <interface name="org.projectatomic.rpmostree1.OSExperimental">

    <!-- Just a test method -->
    <method name="Moo">
      <arg type="b" name="utf8" direction="in"/>
      <arg type="s" name="result" direction="out"/>
    </method>

    <method name="LiveFs">
      <arg type="a{sv}" name="options" direction="in"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

  </interface>

  <interface name="org.projectatomic.rpmostree1.Transaction">

    <!-- A single-line human-readable string -->
    <property name="Title" type="s" access="read"/>

    <!-- Yes, we can. -->
    <method name="Cancel"/>

    <!-- For a client to call when ready to receive signals.
         The return boolean indicates whether the transaction was
         started by this method call (true) or was already started
         by another client (false). -->
    <method name="Start">
      <arg type="b" name="started" direction="out"/>
    </method>

    <signal name="Finished">
      <arg name="success" type="b" direction="out"/>
      <arg name="error_message" type="s" direction="out"/>
    </signal>

    <!-- For miscellaneous messages; line-buffered. -->
    <signal name="Message">
      <arg name="text" type="s" direction="out"/>
    </signal>

    <!-- Tasks are notifications that work is being done. -->
    <signal name="TaskBegin">
      <arg name="text" type="s" direction="out"/>
    </signal>

    <signal name="TaskEnd">
      <arg name="text" type="s" direction="out"/>
    </signal>

    <!-- Generic percentage progress. -->
    <signal name="PercentProgress">
      <arg name="text" type="s" direction="out"/>
      <arg name="percentage" type="u" direction="out"/>
    </signal>

    <signal name="DownloadProgress">
      <!-- time data, format is:
            start time, elapsed seconds
      -->
    	<arg name="time" type="(tt)" direction="out"/>

      <!--
         outstanding data counts, format is:
         (outstanding fetches, outstanding writes)
      -->
      <arg name="outstanding" type="(uu)" direction="out"/>

      <!--
         metadata counts, format is:
         (scanned, fetched, outstanding)
      -->
    	<arg name="metadata" type="(uuu)" direction="out"/>

      <!--
         delta data, format is:
         (total parts, fetched parts, total super blocks, total size)
      -->
    	<arg name="delta" type="(uuut)" direction="out"/>

      <!--
         content data, format is:
         (fetched, requested)
      -->
    	<arg name="content" type="(uu)" direction="out"/>

      <!--
         transfer data, format is:
         (bytes transfered, bytes/s)
      -->
    	<arg name="transfer" type="(tt)" direction="out"/>
    </signal>

    <signal name="SignatureProgress">
      <!-- An ostree GVariant containing signature data
           see ostree_gpg_verify_result_get_all.
      -->
    	<arg name="signature" type="av" direction="out"/>
      <!-- The signed commit -->
    	<arg name="commit" type="s" direction="out"/>
    </signal>

    <!-- Indicates progress signals are done and subsequent
         Message signals should be output on separate lines. -->
    <signal name="ProgressEnd"/>
  </interface>
</node>
