library/packages/src/lib/packages/update_messages_view.rb
require "yast"
module Packages
# This class converts a set of libzypp update messages into string
# representations.
#
# At this time, richtext is the only provided conversion.
class UpdateMessagesView
include Yast::I18n
extend Yast::I18n
# @param messages [Array<UpdateMessage>] List of messages
def initialize(messages)
Yast.import "String"
textdomain "base"
@messages = messages
end
# Gets richtext representation of messages passed to constructor
#
# @return [String] Richtext representation of the list of messages
def richtext
text = "<h1>" + _("Packages notifications") + "</h1>\n<p>" \
+ _("You have notifications from the following packages:") + "</p>"
text << richtext_toc(@messages) if @messages.size > 1
text << @messages.map { |m| message_to_richtext(m) }.join("<hr>")
end
private
# Convert one message to richtext
#
# @return [String] Message converted to richtext
def message_to_richtext(message)
location = format(_("This message will be available at %s"),
Yast::String.EscapeTags(message.installation_path))
content = message.text.strip.gsub("\n\n", "</p><p>").gsub("\n", "<br>")
"<h2>#{Yast::String.EscapeTags(message.solvable)}</h2>" \
"<p><em>#{location}</em></p>" \
"<p>#{content}</p>"
end
# Return a richtext list of package names to be used as table of contents
#
# @return [String] List of package names
def richtext_toc(messages)
names = messages.map { |m| Yast::String.EscapeTags(m.solvable) }
"<ul><li>#{names.join("</li>\n<li>")}</li></ul>\n"
end
end
end