52 lines
1.7 KiB
Ruby
52 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
||
|
||
module UI
|
||
module Windows
|
||
module_function
|
||
|
||
def system_info(app, services:)
|
||
width = 60
|
||
height = 14
|
||
window = BBS::Dialogs.centred_window(app, width: width, height: height,
|
||
title: ' System Info ')
|
||
x, y = window.bounds.x + 2, window.bounds.y + 1
|
||
rows = [
|
||
['Online users', services[:online].count.to_s],
|
||
['Messages', services[:boards].total_count.to_s],
|
||
['Boards', services[:boards].boards.size.to_s],
|
||
['Wiki', 'https://wiki.teletypegames.org'],
|
||
['Games API', 'https://teletypegames.org'],
|
||
['Platform', RUBY_PLATFORM],
|
||
['Ruby', RUBY_VERSION],
|
||
['Uptime', format_uptime(services[:uptime])],
|
||
]
|
||
|
||
rows.each_with_index do |(k, v), i|
|
||
label = BBS::Widgets::Label.new(text: k.ljust(15), style_key: :input_label)
|
||
label.layout(x, y + i, 16, 1)
|
||
value = BBS::Widgets::Label.new(text: v.to_s, style_key: :window_text)
|
||
value.layout(x + 16, y + i, width - 20, 1)
|
||
window.add(label)
|
||
window.add(value)
|
||
end
|
||
|
||
ok = BBS::Widgets::Button.new(label: '&Close',
|
||
on_click: ->(_) { app.close_window(window) })
|
||
ok.layout(window.bounds.x + (width - 10) / 2, window.bounds.y + height - 2, 10, 1)
|
||
window.add(ok)
|
||
window.reset_focus
|
||
app.open_window(window)
|
||
window
|
||
end
|
||
|
||
def format_uptime(start)
|
||
return '–' unless start
|
||
seconds = (Time.now - start).to_i
|
||
h = seconds / 3600
|
||
m = (seconds % 3600) / 60
|
||
s = seconds % 60
|
||
"#{h}h #{m}m #{s}s"
|
||
end
|
||
end
|
||
end
|