aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm-web/src/views/list.rs
blob: 6d4ccd5156b0db043e8086fbefc85716177df279 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
use crate::prelude::*;

pub(crate) fn render(model: &crate::model::Model) -> Vec<Node<crate::Msg>> {
    let rows: Vec<_> = model.sessions().iter().map(row).collect();
    vec![
        seed::table![
            seed::tr![
                seed::th!["username"],
                seed::th!["size"],
                seed::th!["idle"],
                seed::th!["watchers"],
                seed::th!["title"],
            ],
            rows
        ],
        seed::button![simple_ev(Ev::Click, crate::Msg::Refresh), "refresh"],
    ]
}

fn row(session: &crate::protocol::Session) -> Node<crate::Msg> {
    seed::tr![
        seed::td![seed::a![
            simple_ev(
                Ev::Click,
                crate::Msg::StartWatching(session.id.clone())
            ),
            session.username,
        ]],
        seed::td![format!("{}x{}", session.size.cols, session.size.rows)],
        seed::td![format_time(session.idle_time)],
        seed::td![format!("{}", session.watchers)],
        seed::td![session.title],
    ]
}

// XXX copied from teleterm
fn format_time(dur: u32) -> String {
    let secs = dur % 60;
    let dur = dur / 60;
    if dur == 0 {
        return format!("{}s", secs);
    }

    let mins = dur % 60;
    let dur = dur / 60;
    if dur == 0 {
        return format!("{}m{:02}s", mins, secs);
    }

    let hours = dur % 24;
    let dur = dur / 24;
    if dur == 0 {
        return format!("{}h{:02}m{:02}s", hours, mins, secs);
    }

    let days = dur;
    format!("{}d{:02}h{:02}m{:02}s", days, hours, mins, secs)
}