Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
joseivanlopez committed Feb 18, 2022
1 parent 6218249 commit b113d82
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 47 deletions.
69 changes: 32 additions & 37 deletions yastd/lib/yast2/dbus/installer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,60 +31,55 @@ class Installer < ::DBus::Object

# @param installer [Yast2::Installer] YaST installer instance
# @param args [Array<Object>] ::DBus::Object arguments
def initialize(installer, logger, *args)
def initialize(installer, logger)
@installer = installer
@logger = logger
@available_languages = installer.languages.map { |k,v| [k, v.first, {}] }
@logger.debug "Available languages #{@available_languages.inspect}"
@available_base_products = installer.products

installer.dbus_obj = self
# @available_base_products = installer.products

super(*args)
super(PATH)
end

LANGUAGE_INTERFACE = "org.opensuse.YaST.Installer1.Language"
dbus_interface LANGUAGE_INTERFACE do
dbus_attr_reader :available_languages, "a(ssa{sv})"
attr_writer :available_languages
dbus_watcher :available_languages
dbus_interface YAST_INSTALLER_INTERFACE do
dbus_method :probe, "out result:u" do
# TODO
0
end

def marked_for_install
# TODO: change when installer support multiple target languages
[installer.language]
dbus_method :commit, "out result:u" do
# TODO
0
end
end

dbus_reader :marked_for_install, "as"
# SOFTWARE_INTERFACE = "org.opensuse.YaST.Installer1.Software"
# dbus_interface SOFTWARE_INTERFACE do
# dbus_attr_reader :available_base_products, "a(ssa{sv})"
# attr_writer :available_base_products
# dbus_watcher :available_base_products

dbus_method :ToInstall, "in LangIDs:as" do |lang_ids|
logger.info "ToInstall #{lang_ids.inspect}"
# def selected_base_product
# installer.product
# end

# TODO: adapt installer API to allow more languages to install
installer.language = lang_ids.first
self[DBus::PROPERTY_INTERFACE].PropertiesChanged(LANGUAGE_INTERFACE, {"MarkedForInstall" => lang_ids}, [])
end
end
# dbus_reader :selected_base_product, "s"

SOFTWARE_INTERFACE = "org.opensuse.YaST.Installer1.Software"
dbus_interface SOFTWARE_INTERFACE do
dbus_attr_reader :available_base_products, "a(ssa{sv})"
attr_writer :available_base_products
dbus_watcher :available_base_products

def selected_base_product
installer.product
end
# dbus_method :SelectProduct, "in ProductID:s" do |product_id|
# logger.info "SelectProduct #{product_id}"

dbus_reader :selected_base_product, "s"
# installer.product = product_id
# self[DBus::PROPERTY_INTERFACE].PropertiesChanged(SOFTWARE_INTERFACE, {"SelectedBaseProduct" => product_id}, [])
# end
# end

private

dbus_method :SelectProduct, "in ProductID:s" do |product_id|
logger.info "SelectProduct #{product_id}"
PATH = "/org/opensuse/YaST/Installer1".freeze
private_constant :PATH

installer.product = product_id
self[DBus::PROPERTY_INTERFACE].PropertiesChanged(SOFTWARE_INTERFACE, {"SelectedBaseProduct" => product_id}, [])
end
end
YAST_INSTALLER_INTERFACE = "org.opensuse.YaST.Installer1"
private_constant :YAST_INSTALLER_INTERFACE
end
end
end
76 changes: 76 additions & 0 deletions yastd/lib/yast2/dbus/language.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Copyright (c) [2022] SUSE LLC
#
# All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of version 2 of the GNU General Public License as published
# by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, contact SUSE LLC.
#
# To contact SUSE LLC about this file by physical or electronic mail, you may
# find current contact information at www.suse.com.

require "dbus"

module Yast2
module DBus
# YaST D-Bus object (/org/opensuse/YaST/Installer1)
#
# @see https://rubygems.org/gems/ruby-dbus
class Language < ::DBus::Object
# @param installer [Yast2::Installer] YaST installer instance
def initialize(installer, logger)
@installer = installer
@logger = logger

super(PATH)
end

dbus_interface YAST_LANGUAGE_INTERFACE do
dbus_reader :available_languages, "a(ssa{sv})"
attr_writer :available_languages
dbus_watcher :available_languages

dbus_reader :marked_for_install, "as"

dbus_method :ToInstall, "in LangIDs:as" do |lang_ids|
logger.info "ToInstall #{lang_ids.inspect}"
select_to_install(lang_ids)

self[DBus::PROPERTY_INTERFACE].PropertiesChanged(LANGUAGE_INTERFACE, {"MarkedForInstall" => lang_ids}, [])
end
end

private

PATH = "/org/opensuse/Yast/Language1".freeze
private_constant :PATH

YAST_LANGUAGE_INTERFACE = "org.opensuse.YaST.Language1".freeze
private_constant :LANGUAGE_INTERFACE

attr_reader :installer, :logger

def available_languages
@available_languages ||= installer.languages.map { |k,v| [k, v.first, {}] }
end

def marked_for_install
# TODO: change when installer support multiple target languages
[installer.language]
end

def select_to_install(lang_ids)
# TODO: adapt installer API to allow more languages to install
installer.language = lang_ids.first
end
end
end
end
42 changes: 32 additions & 10 deletions yastd/lib/yast2/dbus/service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

require "dbus"
require "yast2/dbus/installer"
require "yast2/dbus/language"
require "yast2/dbus/software"
require "yast2/installer"

module Yast2
Expand Down Expand Up @@ -49,12 +51,10 @@ def initialize(logger = nil)

# Exports the installer object through the D-Bus service
def export
service = bus.request_service(SERVICE_NAME)
installer_obj = Yast2::DBus::Installer.new(
build_installer, logger, OBJECT_PATH
)
service.export(installer_obj)
logger.info "Exported #{OBJECT_PATH} object"
dbus_objects.each { |o| service.export(o) }

paths = dbus_objects.map(&:path).join(", ")
logger.info "Exported #{paths} objects"
end

def dispatch
Expand All @@ -65,10 +65,32 @@ def dispatch

attr_reader :logger

def build_installer
installer = Yast2::Installer.new(logger: logger)
installer.probe
installer
def service
@service ||= bus.request_service(SERVICE_NAME)
end

def dbus_objects
@dbus_objects ||= [installer_dbus, language_dbus, software_dbus]
end

def installer_dbus
@installer_dbus ||= Yast2::DBus::Installer.new(yast_installer, logger)
end

def language_bus
@language_dbus ||= Yast2::DBus::Language.new(yast_installer, logger)
end

def software_bus
@software_dbus ||= Yast2::DBus::Software.new(yast_installer, logger)
end

def installer
@yast_installer ||= Yast2::Installer.new(logger: logger).tap do |installer|
# FIXME: do not probe by default
installer.probe
installer.dbus_objects = dbus_objects
end
end
end
end
Expand Down

0 comments on commit b113d82

Please sign in to comment.