diff --git a/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml b/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml
index 9e5a062653..82970322e0 100644
--- a/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml
+++ b/doc/dbus/bus/org.opensuse.Agama.Software1.bus.xml
@@ -31,9 +31,9 @@
-
-
-
+
+
+
diff --git a/doc/dbus/bus/org.opensuse.Agama1.Locale.bus.xml b/doc/dbus/bus/org.opensuse.Agama1.Locale.bus.xml
index 21c5c665d7..38416bd6bc 100644
--- a/doc/dbus/bus/org.opensuse.Agama1.Locale.bus.xml
+++ b/doc/dbus/bus/org.opensuse.Agama1.Locale.bus.xml
@@ -44,6 +44,20 @@
+
+
+
+
@@ -56,6 +70,7 @@
+
diff --git a/doc/dbus/org.opensuse.Agama.Software1.bus.xml b/doc/dbus/org.opensuse.Agama.Software1.bus.xml
new file mode 100644
index 0000000000..cd7eb6c4f6
--- /dev/null
+++ b/doc/dbus/org.opensuse.Agama.Software1.bus.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/dbus/org.opensuse.Agama1.Locale.doc.xml b/doc/dbus/org.opensuse.Agama1.Locale.doc.xml
index a01daffc3c..8844528be1 100644
--- a/doc/dbus/org.opensuse.Agama1.Locale.doc.xml
+++ b/doc/dbus/org.opensuse.Agama1.Locale.doc.xml
@@ -19,6 +19,12 @@
+
+
+
+
@@ -31,6 +37,10 @@
+
+
diff --git a/doc/dbus_api.md b/doc/dbus_api.md
index fe036e3a62..807c83f24c 100644
--- a/doc/dbus_api.md
+++ b/doc/dbus_api.md
@@ -55,34 +55,10 @@ See the new-style [reference][lang-ref] ([source][lang-src]).
Iface: o.o.Agama.Software1
-#### methods:
-
-- SelectProduct(string ProductId) -> void
- Select product for installation.
- TODO: do we need version or arch or any other parameter? should we add generic dict(sv) to it?
- Example:
-
- InstallProduct("SLES") -> () # only name from available BaseProducts is supported
-
-#### Properties (all read only):
-
-- AvailableBaseProducts -> array(struct(string ProductId, string ProductLabel, dict(string, variant) details))
- List of all available base product to install on target system.
- Note: List is sorted according to defined display order
- Example:
-
- AvailableBaseProducts -> [["SLES", "SUSE Linux Enterprise Server", {}]] # it is product name, human readable name and dict for future extensions to provide more data
-
-- SelectedBaseProduct -> string ProductId
- Base product selected for installation. It is always defined.
- Example:
-
- SelectedBaseProduct -> "SLES" # only name from available BaseProducts is supported
-
-#### Signals:
-
-- PropertiesChanged ( only standard one from org.freedesktop.DBus.Properties interface )
+See the new-style [reference][lang-ref] ([source][lang-src]).
+[lang-ref]: https://opensuse.github.io/agama/dbus/ref-org.opensuse.Agama.Software1.html
+[lang-src]: dbus/org.opensuse.Agama.Software1.doc.xml
## `org.opensuse.Agama.Storage1` Service
diff --git a/rust/agama-lib/src/software/proxies.rs b/rust/agama-lib/src/software/proxies.rs
index e76907008c..8803fce495 100644
--- a/rust/agama-lib/src/software/proxies.rs
+++ b/rust/agama-lib/src/software/proxies.rs
@@ -24,9 +24,6 @@ trait Software1 {
/// Propose method
fn propose(&self) -> zbus::Result<()>;
- /// ProvisionSelected method
- fn provision_selected(&self, provision: &str) -> zbus::Result;
-
/// ProvisionsSelected method
fn provisions_selected(&self, provisions: &[&str]) -> zbus::Result>;
diff --git a/service/lib/agama/dbus/clients/software.rb b/service/lib/agama/dbus/clients/software.rb
index 194a84a977..8b953d705d 100644
--- a/service/lib/agama/dbus/clients/software.rb
+++ b/service/lib/agama/dbus/clients/software.rb
@@ -102,15 +102,6 @@ def finish
dbus_object.Finish
end
- # Determine whether the given tag are provided by the selected packages
- #
- # @param tag [String] Tag to search for (package names, requires/provides, or file
- # names)
- # @return [Boolean] true if it is provided; false otherwise
- def provision_selected?(tag)
- dbus_object.ProvisionSelected(tag)
- end
-
# Determine whether the given tags are provided by the selected packages
#
# @param tags [Array] Tags to search for (package names, requires/provides, or file
diff --git a/service/lib/agama/dbus/software/manager.rb b/service/lib/agama/dbus/software/manager.rb
index acabf7c7d6..edb08962bd 100644
--- a/service/lib/agama/dbus/software/manager.rb
+++ b/service/lib/agama/dbus/software/manager.rb
@@ -75,9 +75,20 @@ def initialize(backend, logger)
update_validation # as different product means different software selection
end
- # TODO: just for performance comparison (see `perf.rb`)
- dbus_method :ProvisionSelected, "in Provision:s, out Result:b" do |provision|
- backend.provision_selected?(provision)
+ # value of result hash is category, description, icon, summary and order
+ dbus_method :ListPatterns, "in Filtered:b, out Result:a{s(ssssi)}" do |filtered|
+ [
+ backend.patterns(filtered).each_with_object({}) do |pattern, result|
+ value = [
+ pattern.category,
+ pattern.description,
+ pattern.icon,
+ pattern.summary,
+ pattern.order.to_i
+ ]
+ result[pattern.name] = value
+ end
+ ]
end
dbus_method :ProvisionsSelected, "in Provisions:as, out Result:ab" do |provisions|
diff --git a/service/lib/agama/software/manager.rb b/service/lib/agama/software/manager.rb
index 84e17e2e9e..4152e3bfaf 100644
--- a/service/lib/agama/software/manager.rb
+++ b/service/lib/agama/software/manager.rb
@@ -26,6 +26,7 @@
require "agama/with_progress"
require "agama/validation_error"
require "y2packager/product"
+require "y2packager/resolvable"
require "yast2/arch_filter"
require "agama/software/callbacks"
require "agama/software/proposal"
@@ -177,6 +178,18 @@ def provision_selected?(tag)
Yast::Pkg.IsSelected(tag) || Yast::Pkg.IsProvided(tag)
end
+ # Enlist available patterns
+ #
+ # @param filtered [Boolean] If list of patterns should be filtered.
+ # Filtering criteria can change.
+ # @return [Array]
+ def patterns(filtered)
+ patterns = Y2Packager::Resolvable.find(kind: :pattern)
+ patterns = patterns.select(&:user_visible) if filtered
+
+ patterns
+ end
+
# Determines whether a package is installed
#
# @param name [String] Package name
diff --git a/service/perf.rb b/service/perf.rb
deleted file mode 100644
index 2974a36d3d..0000000000
--- a/service/perf.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# frozen_string_literal: true
-
-require "benchmark"
-
-$LOAD_PATH << File.expand_path("lib", __dir__)
-
-require "agama/dbus/clients/software"
-
-PACKAGES = ["autologin-support", "kdm", "gdm", "sddm", "lightdm"].freeze
-
-CLIENT = Agama::DBus::Clients::Software.new
-# warm up call
-CLIENT.provisions_selected?(PACKAGES)
-
-RUNS = 100
-
-Benchmark.bm(15) do |x|
- x.report("ask multi:") { RUNS.times { PACKAGES.each { |p| CLIENT.provision_selected?(p) } } }
- x.report("single call:") { RUNS.times { CLIENT.provisions_selected?(PACKAGES) } }
-end