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