mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2026-09-19 14:53:49 +00:00
134 lines
3.3 KiB
Ruby
134 lines
3.3 KiB
Ruby
module W3DHubLauncher
|
|
class Worker
|
|
class Api
|
|
class Application
|
|
attr_reader :id, :category, :name, :type, :channels, :extended_data, :web_links
|
|
|
|
def initialize(data)
|
|
# pp data
|
|
|
|
@id = data["id"]
|
|
@category = data["category"]
|
|
@name = data["name"]
|
|
@type = data["type"]
|
|
|
|
@channels = data["channels"]&.map { |c| Channel.new(c, self) } || []
|
|
|
|
@extended_data = data["extended-data"]&.map { |d| ExtendedData.new(d) } || nil
|
|
@web_links = data["web-links"]&.map { |d| WebLink.new(d) } || nil
|
|
|
|
@servicable = extended_data("application.isservicable", "true").strip.downcase == "true"
|
|
end
|
|
|
|
def extended_data(key, default)
|
|
v = @extended_data&.find { |d| d.name == key }&.value
|
|
return default if v.nil?
|
|
|
|
v
|
|
end
|
|
|
|
# libgosu friendly color
|
|
def color
|
|
"ff_#{extended_data("colour","#000000").sub("#", "")}".to_i(16)
|
|
end
|
|
|
|
def game?
|
|
@type.include?("game")
|
|
end
|
|
|
|
def servicable?
|
|
@servicable
|
|
end
|
|
|
|
def to_json(context = nil)
|
|
{
|
|
"id": @id,
|
|
"category": @category,
|
|
"name": @name,
|
|
"type": @type,
|
|
"channels": @channels,
|
|
"extended-data": @extended_data,
|
|
"web-links": @web_links
|
|
}.to_json(context)
|
|
end
|
|
|
|
class Channel
|
|
attr_reader :id, :name, :user_level, :version, :extended_data
|
|
|
|
def initialize(data, app)
|
|
@_app = app
|
|
|
|
@id = data["id"]
|
|
@name = data["name"]
|
|
@user_level = data["user-level"]
|
|
@version = Gem::Version.new(data["current-version"])
|
|
@extended_data = data["extended-data"]&.map { |d| ExtendedData.new(d) } || nil
|
|
end
|
|
|
|
def extended_data(key, default)
|
|
v = @extended_data&.find { |d| d.name == key }&.value
|
|
if v.nil?
|
|
v = @_app.extended_data(key, default)
|
|
|
|
return default if v.nil?
|
|
end
|
|
|
|
v
|
|
end
|
|
|
|
def server_channel
|
|
extended_data("serverchannel", @id)
|
|
end
|
|
|
|
def to_json(context = nil)
|
|
{
|
|
"id": @id,
|
|
"name": @name,
|
|
"user-level": @user_level,
|
|
"current-version": @version.to_s,
|
|
"extended-data": @extended_data
|
|
}.to_json(context)
|
|
end
|
|
end
|
|
|
|
class ExtendedData
|
|
attr_reader :name, :value
|
|
|
|
def initialize(data)
|
|
if data.is_a?(Hash)
|
|
@name = data["name"]
|
|
@value = data["value"]
|
|
else
|
|
@name = data[0]
|
|
@value = data[1]
|
|
end
|
|
end
|
|
|
|
def to_json(context = nil)
|
|
{
|
|
"name": @name,
|
|
"value": @value
|
|
}.to_json(context)
|
|
end
|
|
end
|
|
|
|
class WebLink
|
|
attr_reader :name, :uri
|
|
|
|
def initialize(data)
|
|
@name = data["name"]
|
|
@uri = data["uri"]
|
|
end
|
|
|
|
def to_json(context = nil)
|
|
{
|
|
"name": @name,
|
|
"uri": @uri
|
|
}.to_json(context)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|