X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=update_sheets.js;h=f96b223a83054a4b732369c1cac52ed0f90c07dd;hb=62acd54d7e0d27c056de5e7a106be803c3dc2f4e;hp=1459ae181bc00ceee5a9e3d7587a97f9b0adda67;hpb=311763d7e3f395dd9e7a0f692ff5b30ba4a7874c;p=ultimatescore diff --git a/update_sheets.js b/update_sheets.js index 1459ae1..f96b223 100644 --- a/update_sheets.js +++ b/update_sheets.js @@ -68,16 +68,20 @@ function possibly_update_oauth_key(cb) { function publish_group_rank(response, group_name) { let updates = []; - let cols = ultimateconfig['score_sheet_cols'][group_name]; + let config = ultimateconfig['group_cells'][group_name]; + let cols = config['score_sheet_cols']; let teams = parse_teams_from_spreadsheet(response); let games = parse_games_from_spreadsheet(response, group_name, false); apply_games_to_teams(games, teams); + teams = filter_teams(teams, response); // Write the points total to the unsorted columns. - for (let i = 0; i < teams.length; ++i) { - let row = ultimateconfig['point_total_start_row'] + i; - updates.push({ "range": cols[2] + row, "values": [ [ teams[i].pts ] ] }); + if (config['point_total_start_row'] !== null) { + for (let i = 0; i < teams.length; ++i) { + let row = config['point_total_start_row'] + i; + updates.push({ "range": cols[2] + row, "values": [ [ teams[i].pts ] ] }); + } } let tiebreakers = []; @@ -85,7 +89,7 @@ function publish_group_rank(response, group_name) // Write the ranking table, from scratch. for (let i = 0; i < teams.length; ++i) { - let row = ultimateconfig['ranking_list_start_row'] + i; + let row = config['ranking_list_start_row'] + i; updates.push({ "range": cols[0] + row, "values": [ [ teams[i].rank ] ] }); updates.push({ "range": cols[1] + row, "values": [ [ teams[i].mediumname ] ] }); updates.push({ "range": cols[2] + row, "values": [ [ teams[i].pts ] ] }); @@ -95,7 +99,7 @@ function publish_group_rank(response, group_name) if (tiebreakers.length != 0) { tb_str = tiebreakers.join("\n"); } - updates.push({ "range": cols[0] + ultimateconfig['ranking_list_explain_row'], "values": [ [ tb_str ] ]}); + updates.push({ "range": config['ranking_list_explain_cell'], "values": [ [ tb_str ] ]}); let json = { "valueInputOption": "USER_ENTERED", @@ -277,7 +281,7 @@ function fill_playoff(replacements, teams) { let games = ultimateconfig['playoff_games']; get_results('Results', function(response) { - let updates = []; + let updates = [], meta_updates = []; let game_num = 0; for (const game of games) { let team1 = do_replacements(game[0], replacements); @@ -297,6 +301,18 @@ function fill_playoff(replacements, teams) { let score2 = response['values'][row - 1][cols[2]]; let game_name = game[4]; let game_name2 = game_name.replace("Semi", "semi"); + let game_day = game[7]; + if (game_day === undefined) { + game_day = 7; // Sunday. + } + + let range = { + "sheetId": ultimateconfig['score_sheet_index'], + "startColumnIndex": cols[1], + "endColumnIndex": cols[2] + 1, + "startRowIndex": row - 1, + "endRowIndex": row + }; if (parseInt(score1) >= 0 && parseInt(score2) >= 0 && score1 != score2) { if (parseInt(score1) > parseInt(score2)) { @@ -310,16 +326,21 @@ function fill_playoff(replacements, teams) { replacements.unshift(["W " + game_name2, team2]); replacements.unshift(["L " + game_name2, team1]); } + meta_updates.push({ "unmergeCells": { "range": range }}); } else if (game[5]) { + // No score yet, so write the name of the game (e.g. “L-semi 1”) + // where the score would normally be, to mark what this game is called. + // This is useful with the limited space on the tablet. score1 = score2 = ""; updates.push({ "range": cell_score1, "values": [ [ game[4] ] ] }); + meta_updates.push({ "mergeCells": { "range": range, "mergeType": "MERGE_ALL" }}); } if (game[2] == 0) { // Stream field. // Game. updates.push({ "range": "Playoffs!A" + (game_num + 32) + ":J" + (game_num + 32), - "values": [ [ team1, team2, score1, score2, "", "", "", 7, response['values'][row - 1][1].replace(".",":"), game[6] ] ] + "values": [ [ team1, team2, score1, score2, "", "", "", game_day, response['values'][row - 1][1].replace(".",":"), game[6] ] ] }); // Team codes. @@ -339,8 +360,14 @@ function fill_playoff(replacements, teams) { "valueInputOption": "USER_ENTERED", "data": updates }; + let meta_json = { + "requests": meta_updates + }; possibly_update_oauth_key(function() { - post_json('https://sheets.googleapis.com/v4/spreadsheets/' + ultimateconfig['score_sheet_id'] + '/values:batchUpdate?key=' + ultimateconfig['api_key'], json, function(response) {}, current_oauth_access_token); + post_json('https://sheets.googleapis.com/v4/spreadsheets/' + ultimateconfig['score_sheet_id'] + '/values:batchUpdate?key=' + ultimateconfig['api_key'], json, function(response) { + get_group('Playoffs 9th-13th', function(response_l) { publish_group_rank(response_l, 'Playoffs 9th-13th'); }); + }, current_oauth_access_token); + post_json('https://sheets.googleapis.com/v4/spreadsheets/' + ultimateconfig['score_sheet_id'] + ':batchUpdate?key=' + ultimateconfig['api_key'], meta_json, function(response) {}, current_oauth_access_token); }); }); } @@ -377,6 +404,7 @@ function get_ranked(response, group_name) { let teams = parse_teams_from_spreadsheet(response); let games = parse_games_from_spreadsheet(response, group_name, false); apply_games_to_teams(games, teams); + teams = filter_teams(teams, response); let tiebreakers = []; teams = rank(games, teams, 1, tiebreakers); return teams;