<!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">
      <annotation name="org.qtproject.QtDBus.QtTypeName" value="QStringList"/>
    </property>
    <!-- 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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
    </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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
    </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="GetOS">
      <arg name="name" type="s" direction="in"/>
      <arg name="object_path" type="o" direction="out"/>
    </method>

    <!-- Array of all deployments in boot order -->
    <property name="Deployments" type="aa{sv}" access="read">
      <annotation name="org.qtproject.QtDBus.QtTypeName" value="QList&lt;QVariantMap>"/>
    </property>
  </interface>

  <interface name="org.projectatomic.rpmostree1.OS">
    <property name="BootedDeployment" type="a{sv}" access="read">
      <annotation name="org.qtproject.QtDBus.QtTypeName" value="QVariantMap"/>
    </property>
    <property name="DefaultDeployment" type="a{sv}" access="read">
      <annotation name="org.qtproject.QtDBus.QtTypeName" value="QVariantMap"/>
    </property>
    <property name="RollbackDeployment" type="a{sv}" access="read">
      <annotation name="org.qtproject.QtDBus.QtTypeName" value="QVariantMap"/>
    </property>

    <!-- 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">
      <annotation name="org.qtproject.QtDBus.QtTypeName" value="QVariantMap"/>
    </property>
    <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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
      <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" direction="in"/>
      <arg type="s" name="deployid1" direction="in"/>
      <arg type="a(sua{sv})" name="result" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantList"/>
    </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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QVariantMap"/>
      <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" direction="in"/>
      <arg type="as" name="packages" direction="in"/>
      <arg type="a(sua{sv})" name="result" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantList"/>
      <arg type="a{sv}" name="details" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="QVariantMap"/>
    </method>

    <method name="DownloadDeployRpmDiff">
      <arg type="s" name="revision" direction="in"/>
      <arg type="as" name="packages" direction="in"/>
      <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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
      <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" direction="in"/>
      <arg type="a(sua{sv})" name="result" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantList"/>
      <arg type="a{sv}" name="details" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="QVariantMap"/>
    </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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
      <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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
      <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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
      <arg type="s" name="refspec" direction="in"/>
      <arg type="as" name="packages" 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="GetCachedRebaseRpmDiff">
      <arg type="s" name="refspec" direction="in"/>
      <arg type="as" name="packages" direction="in"/>
      <arg type="a(sua{sv})" name="result" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantList"/>
      <arg type="a{sv}" name="details" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="QVariantMap"/>
    </method>

    <method name="DownloadRebaseRpmDiff">
      <arg type="s" name="refspec" direction="in"/>
      <arg type="as" name="packages" direction="in"/>
      <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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
      <arg type="as" name="packages_added" direction="in"/>
      <arg type="as" name="packages_removed" direction="in"/>
      <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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="QVariantMap"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <method name="InitramfsEtc">
      <arg type="as" name="track" direction="in"/>
      <arg type="as" name="untrack" direction="in"/>
      <arg type="b" name="untrack_all" direction="in"/>
      <arg type="b" name="force_sync" direction="in"/>
      <arg type="a{sv}" name="options" direction="in"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In4" value="QVariantMap"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

   <!-- Available options:
        "append-if-missing" (type 'as')
        "delete-if-present" (type 'as')
        "final-kernel-args" (type 's')
        "initiating-command-line" (type 's')
        "lock-finalization" (type 'b')
        "reboot" (type 'b')
    -->
    <method name="KernelArgs">
      <arg type="s" name="existing_kernel_arg_string" direction="in"/>
      <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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In4" value="QVariantMap"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <method name="GetDeploymentBootConfig">
      <arg type="s" name="deployid" direction="in"/>
      <arg type="b" name="is_pending" direction="in"/>
      <arg type="a{sv}" name="bootconfig" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMap"/>
    </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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
      <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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QMap&lt;QString,QString>"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <!-- List configured repositories.
	Available properties:
	"id" (type 's')
	"description" (type 's')
	"is-devel" (type 'b')
	"is-source" (type 'b')
	"is-enabled" (type 'b')
    -->
    <method name="ListRepos">
      <arg type="aa{sv}" name="repos" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantList"/>
    </method>

    <!-- Available modifiers:
         "set-refspec" (type 's')
         "set-revision" (type 's')
         "install-packages" (type 'as')
         "uninstall-packages" (type 'as')
         "install-local-packages" (type 'ah')
         "install-local-fileoverride-packages" (type 'ah')
         "install-modules" (type 'as')
         "uninstall-modules" (type 'as')
         "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)')
         "treefile" (type 's')

         Available options:
         "apply-live" (type 'b')
            Extend the running filesystem tree with queued changes.  This
            does not allow replacing existing files/packages.
         "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.
         "skip-branch-check" (type 'b')
            When deploying by commit hash (using "set-revision"), do not
            check if commit belongs on the same branch.
         "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.
         "register-driver" (type 's')
            Register the calling agent as the driver for updates. Takes
            a human-readable string as the name for the update driver.
         "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.
         "lock-finalization" (type 'b')
            Prevent automatic deployment finalization on shutdown.
            Clients must manually call FinalizeDeployment() when ready
            to apply the update and reboot.
         "initiating-command-line" (type 's')
            Mark the transaction as being initiated by the given command.
            This is used for the transaction title and journal entries.
    -->
    <method name="UpdateDeployment">
      <arg type="a{sv}" name="modifiers" direction="in"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
      <arg type="a{sv}" name="options" direction="in"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QVariantMap"/>
      <arg type="s" name="transaction_address" direction="out"/>
      <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
    </method>

    <!-- Available options:
         "checksum" (type 's')
            Verify that the checksum to finalize matches a specific one.
         "allow-missing-checksum" (type 'b')
            Allow "checksum" key to be missing. Given that this API is
            meant for clients with precise state transitions, *not*
            providing a checksum should be a conscious decision.
         "allow-unlocked" (type 'b')
            Don't error out if the staged deployment wasn't locked.
    -->
    <method name="FinalizeDeployment">
      <arg type="a{sv}" name="options" direction="in"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <!-- Search for packages with certain 'provides'.
         @provides: array of 'provides' to search for
         Available return package properties:
         "name" (type 's') package name
         "epoch" (type 't') package epoch
         "version" (type 's') package version
         "arch" (type 's') package architecture
         "nevra" (type 's') package nevra
         "evr" (type 's') package evr
         "summary" (type 's') package summary
         "reponame" (type 's') package repository name
    -->
    <method name="WhatProvides">
      <arg type="as" name="provides" direction="in"/>
      <arg type="aa{sv}" name="packages" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantList"/>
    </method>

    <!-- Search for packages with given 'names'.
         @pkgnames: array of package names to search for; there can be multiple results for one name
         Available return package properties:
         "key" (type 's') an item of the names array, for which the package belongs
         "name" (type 's') package name
         "epoch" (type 't') package epoch
         "version" (type 's') package version
         "arch" (type 's') package architecture
         "nevra" (type 's') package nevra
         "evr" (type 's') package evr
         "summary" (type 's') package summary
         "reponame" (type 's') package repository name
    -->
    <method name="GetPackages">
      <arg type="as" name="names" direction="in"/>
      <arg type="aa{sv}" name="packages" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantList"/>
    </method>
    
    <method name="Search">
      <arg type="as" name="names" direction="in"/>
      <arg type="aa{sv}" name="packages" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantList"/>
    </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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
      <arg type="s" name="transaction_address" direction="out"/>
    </method>

    <!-- Experimental DownloadPackages -->
    <method name="DownloadPackages">
      <!-- array of package names -->
      <arg type="as" name="queries" direction="in"/>
      <arg type="s" name="source" direction="in"/>
      <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
    </method>
  </interface>

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

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

    <!-- Description of client that started the txn -->
    <property name="InitiatingClientDescription" 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"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QStringList"/>

      <!--
         outstanding data counts, format is:
         (outstanding fetches, outstanding writes)
      -->
      <arg name="outstanding" type="(uu)" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="QVariantList"/>

      <!--
         metadata counts, format is:
         (scanned, fetched, outstanding)
      -->
      <arg name="metadata" type="(uuu)" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="QVariantList"/>

      <!--
         delta data, format is:
         (total parts, fetched parts, total super blocks, total size)
      -->
      <arg name="delta" type="(uuut)" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="QVariantList"/>

      <!--
         content data, format is:
         (fetched, requested)
      -->
      <arg name="content" type="(uu)" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out4" value="QVariantList"/>

      <!--
         transfer data, format is:
         (bytes transfered, bytes/s)
      -->
      <arg name="transfer" type="(tt)" direction="out"/>
      <annotation name="org.qtproject.QtDBus.QtTypeName.Out5" value="QVariantList"/>
    </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>
