diff options
-rw-r--r-- | public/style.css | 1 | ||||
-rw-r--r-- | schema.sql | 2 | ||||
-rw-r--r-- | server.js | 125 | ||||
-rw-r--r-- | views/head.pug | 5 |
4 files changed, 66 insertions, 67 deletions
diff --git a/public/style.css b/public/style.css index 486b309..bbbcbbd 100644 --- a/public/style.css +++ b/public/style.css @@ -391,5 +391,6 @@ div.body img { .game_item.finished .game_main { background-color: gainsboro } .game_item.archived .game_head { background-color: darkgray } .game_item.archived .game_main { background-color: lightgray } +.game_item.unread .game_head { background-color: orange } .game_item.your_turn .game_head { background-color: gold } .game_item.your_turn .game_main { background-color: lightyellow } @@ -256,8 +256,6 @@ create view user_dynamic_view as and join_count = 0 ) + ( select count(1) from unseen_games where user_id = users.user_id - ) + ( - select count(1) from unread_chats where user_id = users.user_id ) as waiting, is_banned @@ -2022,25 +2022,25 @@ function insert_rematch_players(old_game_id, new_game_id, req_user_id, order) { throw new Error("missing players") switch (order) { - default: - case "swap": - players.sort((a, b) => roles.indexOf(a.role) - roles.indexOf(b.role)) - for (let i = 0; i < n; ++i) - players[i].role = roles[(i+1) % n] - break - case "keep": - // do nothing - break - case "shuffle": - // unused for now - random but known - shuffle(players) - for (let i = 0; i < n; ++i) - players[i].role = roles[i] - break - case "random": - for (let i = 0; i < n; ++i) - players[i].role = "Random " + (i+1) - break + default: + case "swap": + players.sort((a, b) => roles.indexOf(a.role) - roles.indexOf(b.role)) + for (let i = 0; i < n; ++i) + players[i].role = roles[(i + 1) % n] + break + case "keep": + // do nothing + break + case "shuffle": + // unused for now - random but known + shuffle(players) + for (let i = 0; i < n; ++i) + players[i].role = roles[i] + break + case "random": + for (let i = 0; i < n; ++i) + players[i].role = "Random " + (i + 1) + break } for (let p of players) { @@ -3372,11 +3372,12 @@ function make_pools(seed, players) { return designs.pool_players(players, n+1) throw new Error("cannot create pools for this player/rounds configuration") - + /* if (v > n+1) return designs.pool_players(players, n+1) return [ players ] + */ } if (k === 3) { @@ -4030,53 +4031,53 @@ function broadcast_presence(game_id) { function handle_player_message(socket, cmd, arg) { switch (cmd) { - case "action": - on_action(socket, arg[0], arg[1], arg[2]) - break - case "query": - on_query(socket, arg[0], arg[1]) - break - case "resign": - on_resign(socket) - break - case "getnote": - on_getnote(socket) - break - case "putnote": - on_putnote(socket, arg) - break - case "getchat": - on_getchat(socket, arg) - break - case "chat": - on_chat(socket, arg) - break - case "getsnap": - on_snap(socket, arg | 0) - break - case "querysnap": - on_query_snap(socket, arg[0], arg[1], arg[2]) - break - default: - send_message(socket, "error", "Invalid server command: " + cmd) - break + case "action": + on_action(socket, arg[0], arg[1], arg[2]) + break + case "query": + on_query(socket, arg[0], arg[1]) + break + case "resign": + on_resign(socket) + break + case "getnote": + on_getnote(socket) + break + case "putnote": + on_putnote(socket, arg) + break + case "getchat": + on_getchat(socket, arg) + break + case "chat": + on_chat(socket, arg) + break + case "getsnap": + on_snap(socket, arg | 0) + break + case "querysnap": + on_query_snap(socket, arg[0], arg[1], arg[2]) + break + default: + send_message(socket, "error", "Invalid server command: " + cmd) + break } } function handle_observer_message(socket, cmd, arg) { switch (cmd) { - case "getsnap": - on_snap(socket, arg) - break - case "querysnap": - on_query_snap(socket, arg[0], arg[1], arg[2]) - break - case 'query': - on_query(socket, arg[0], arg[1]) - break - default: - send_message(socket, "error", "Invalid server command: " + cmd) - break + case "getsnap": + on_snap(socket, arg) + break + case "querysnap": + on_query_snap(socket, arg[0], arg[1], arg[2]) + break + case "query": + on_query(socket, arg[0], arg[1]) + break + default: + send_message(socket, "error", "Invalid server command: " + cmd) + break } } diff --git a/views/head.pug b/views/head.pug index 17edf02..8e5a0fe 100644 --- a/views/head.pug +++ b/views/head.pug @@ -60,7 +60,7 @@ mixin gamelist(list,hide_title=0) let pace_icon = "" let pace_text = "" let chat_icon = "" - if (item.your_turn || item.is_unseen || item.is_unread) className += " your_turn" + if (item.your_turn || item.is_unseen) className += " your_turn" if (item.status === 0 && item.join_count === 0) className += " open replacement" else if (item.status === 0 && item.join_count !== item.player_count) className += " open" else if (item.status === 0 && item.join_count === item.player_count) className += " ready" @@ -68,8 +68,7 @@ mixin gamelist(list,hide_title=0) else if (item.status === 1 && item.join_count === item.player_count) className += " active" else if (item.status === 2) className += " finished" else if (item.status === 3) className += " archived" - if (item.is_unread) chat_icon = "\u{1f4dd}" - if (item.is_unseen) chat_icon = "\u{2728}" + if (item.is_unread) { chat_icon = "\u{1f4dd}"; className += " unread" } if (item.is_private) pace_icon += EMOJI_PRIVATE if (item.is_match) pace_icon += EMOJI_MATCH |