38 lines
1.5 KiB
Ruby
38 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module UI
|
|
module Windows
|
|
# Login splash: ASCII banner + last callers + new message counts. Closed
|
|
# with Enter / Esc / clicking the OK button.
|
|
class Bulletin
|
|
def self.open(app, services:)
|
|
banner_lines = [
|
|
" \e[1;33m _____ _ _ ____ ____ _____\e[0m",
|
|
" \e[1;33m|_ _|__ | | | |_ __ _ _ _ ___ | __ )| __ )/ ____|\e[0m",
|
|
" \e[1;33m | |/ _ \\ | | | __|/ _` | '_/ _ \\ | _ \\| _ \\\\___ \\\e[0m",
|
|
" \e[1;33m | | __/ | |___ | |_| (_| | || __/ | |_) | |_) |___) |\e[0m",
|
|
" \e[1;33m |_|\\___| |_____|\\__|\\__,_|_| \\___| |____/|____/|____/\e[0m",
|
|
]
|
|
caller_lines = services[:last_callers].recent(3).map do |c|
|
|
" · #{c.username} \e[2;37m#{c.timestamp[0, 16].sub('T', ' ')}\e[0m"
|
|
end
|
|
BBS::Windows::Info.open(app,
|
|
title: ' Welcome ', width: 70, height: 17,
|
|
body: [
|
|
*banner_lines.map { |l| { text: l, style: :accent } },
|
|
:spacer,
|
|
"Logged in as \e[1;33m#{app.context[:username] || 'Anonymous'}\e[0m",
|
|
:spacer,
|
|
"Online now: #{services[:online].count}",
|
|
"Total messages: #{services[:boards].total_count}",
|
|
:spacer,
|
|
'Last callers:',
|
|
*caller_lines,
|
|
],
|
|
buttons: [{ label: '&Continue', primary: true, cancel: true }]
|
|
)
|
|
end
|
|
end
|
|
end
|
|
end
|