Script 'schedule': take into account the date of tour.
This commit is contained in:
parent
2a6f4fdbe9
commit
c7dff3cc27
102
schedule
102
schedule
@ -3,13 +3,13 @@
|
|||||||
# Distributed under the terms of the GNU General Public License v2
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
|
||||||
# REPO_DIR="https://github.com/fat0troll/lorchess"
|
# REPO_DIR="https://github.com/fat0troll/lorchess"
|
||||||
REPO_DIR=`dirname "$0"`
|
REPO_DIR=
|
||||||
|
|
||||||
# Specify the tournament here
|
# Specify the tournament here
|
||||||
TOURNAMENT=
|
TOURNAMENT=
|
||||||
|
|
||||||
# Version information
|
# Version information
|
||||||
VERSION="0.5"
|
VERSION="0.6"
|
||||||
|
|
||||||
argv0=${0##*/}
|
argv0=${0##*/}
|
||||||
|
|
||||||
@ -18,23 +18,24 @@ function usage {
|
|||||||
List games on tours of tournament
|
List games on tours of tournament
|
||||||
|
|
||||||
Usage: $argv0 [options] [tours]
|
Usage: $argv0 [options] [tours]
|
||||||
Tournament tours are restricted to sequence \`tours' given in
|
Put the script under the root directory of your repository or set
|
||||||
Bash-style syntax, i.e., \`tours' may include explicit numbers
|
inner variable REPO_DIR to point to your local or remote GitHub
|
||||||
(tours=1 3), intervals (tours={1..5}), or any combination of them.
|
repository. If the tournament is not the last one (default), store
|
||||||
If no tours are specified, display each tour until an empty
|
its sub-directory in inner variable TOURNAMENT.
|
||||||
\`tour_info' is found. By default, only unaccomplished games are
|
|
||||||
listed.
|
|
||||||
|
|
||||||
Inner variable REPO points to the root of repository; its default
|
Tournament tours are restricted to sequence 'tours' given in the
|
||||||
value of \`dirname \$0\` can be replaced by a URL link, absolute or
|
Bash-style syntax, i.e., 'tours' may include explicit numbers
|
||||||
relative path. Inner variable TOURNAMENT specifies the sub-directory
|
(tours=1 3), intervals (tours={1..5}), or any combination of them.
|
||||||
of tournament.
|
If no tours are specified, display all started tours (use '-f' to
|
||||||
|
see future tours too). By default, only unaccomplished games are
|
||||||
|
listed.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
-a List accomplished games too
|
-a List accomplished games too
|
||||||
|
-f Allow to display future tours
|
||||||
-p PLAYER Show game if PLAYER is a part of a player's name
|
-p PLAYER Show game if PLAYER is a part of a player's name
|
||||||
-f FORMAT Specify the output format; FORMAT is \`term'
|
-o FORMAT Specify the output format; FORMAT is 'term' (default),
|
||||||
(default), \`html', or \`lor'
|
'html', or 'lor'
|
||||||
-l Add the URL link to game (if accomplished)
|
-l Add the URL link to game (if accomplished)
|
||||||
-h Show this help output
|
-h Show this help output
|
||||||
-v Show version information
|
-v Show version information
|
||||||
@ -48,6 +49,7 @@ function version {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setup_repo {
|
function setup_repo {
|
||||||
|
[[ -z $REPO_DIR ]] && REPO_DIR=`dirname "$0"`
|
||||||
CURL_OPTS="-q --fail --location --silent"
|
CURL_OPTS="-q --fail --location --silent"
|
||||||
|
|
||||||
# If no tournament given, set it to the last one
|
# If no tournament given, set it to the last one
|
||||||
@ -70,7 +72,7 @@ function setup_repo {
|
|||||||
TOURNAMENT=${TOURNAMENT%/}
|
TOURNAMENT=${TOURNAMENT%/}
|
||||||
|
|
||||||
# Convert REPO_DIR to an absolute path
|
# Convert REPO_DIR to an absolute path
|
||||||
[[ $REPO_DIR =~ ^/ ]] || REPO_DIR=$(cd $REPO_DIR; pwd)
|
[[ ! $REPO_DIR =~ ^/ ]] && REPO_DIR=$(cd $REPO_DIR; pwd)
|
||||||
|
|
||||||
REPO_URL="file://${REPO_DIR}"
|
REPO_URL="file://${REPO_DIR}"
|
||||||
fi
|
fi
|
||||||
@ -90,6 +92,9 @@ function show_tour_sequence {
|
|||||||
tour_seq=$(ls -1 -d ${REPO_DIR}/${TOURNAMENT}/tours/[0-9][0-9]/ \
|
tour_seq=$(ls -1 -d ${REPO_DIR}/${TOURNAMENT}/tours/[0-9][0-9]/ \
|
||||||
| sed -E "s|${REPO_DIR}/${TOURNAMENT}/tours/([0-9]{2})/|\1|")
|
| sed -E "s|${REPO_DIR}/${TOURNAMENT}/tours/([0-9]{2})/|\1|")
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
# Don't care about the begging of an explicitly specified tour
|
||||||
|
SHOW_FUTURE=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for tour in $tour_seq; do
|
for tour in $tour_seq; do
|
||||||
@ -108,27 +113,16 @@ function show_tour_sequence {
|
|||||||
function output_tour_info {
|
function output_tour_info {
|
||||||
local date_re="([0-9?]{2})\.([0-9?]{2})\.([0-9?]{4})"
|
local date_re="([0-9?]{2})\.([0-9?]{2})\.([0-9?]{4})"
|
||||||
local res_re="(1-0|1/2|0-1)"
|
local res_re="(1-0|1/2|0-1)"
|
||||||
|
local tour_num= date_beg= date_end=
|
||||||
local white= black= result= game_date=
|
local white= black= result= game_date=
|
||||||
# Lines with game info
|
# Lines with game info
|
||||||
local output_lines=
|
local output_lines=
|
||||||
|
|
||||||
while read line; do
|
while read line; do
|
||||||
# Read 'tour_num'
|
# Read the number of tour
|
||||||
if [[ -z $tour_num ]]; then
|
get_tour_num
|
||||||
[[ $line =~ ^"Тур №"([0-9]+) ]] && local tour_num=${BASH_REMATCH[1]}
|
# Read the begging and end of tour
|
||||||
continue
|
get_tour_dates
|
||||||
fi
|
|
||||||
|
|
||||||
# Read 'date_beg' and 'date_end'
|
|
||||||
if [[ -z $date_beg || -z $date_end ]]; then
|
|
||||||
if [[ $line =~ ^"Время проведения:"\ +$date_re\ +-\ +$date_re ]]; then
|
|
||||||
# Use short dates
|
|
||||||
local date_beg=${BASH_REMATCH[1]}.${BASH_REMATCH[2]}
|
|
||||||
local date_end=${BASH_REMATCH[4]}.${BASH_REMATCH[5]}
|
|
||||||
fi
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Keep game info if needed, and store it in variables 'white',
|
# Keep game info if needed, and store it in variables 'white',
|
||||||
# 'black', 'result', and 'game_date'
|
# 'black', 'result', and 'game_date'
|
||||||
if keep_game_info; then
|
if keep_game_info; then
|
||||||
@ -141,7 +135,36 @@ function output_tour_info {
|
|||||||
fi
|
fi
|
||||||
done <<< "$tour_info"
|
done <<< "$tour_info"
|
||||||
|
|
||||||
[[ -n $output_lines ]] && eval "info_output_$FORMAT"
|
[[ -n $output_lines ]] && eval info_output_$FORMAT
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_tour_num {
|
||||||
|
if [[ -z $tour_num ]]; then
|
||||||
|
[[ $line =~ ^"Тур №"([0-9]+) ]] && tour_num=${BASH_REMATCH[1]}
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_tour_dates {
|
||||||
|
if [[ -z $date_beg || -z $date_end ]]; then
|
||||||
|
if [[ $line =~ ^"Время проведения:"\ +($date_re)\ +-\ +($date_re) ]]; then
|
||||||
|
date_beg=${BASH_REMATCH[1]} date_end=${BASH_REMATCH[5]}
|
||||||
|
|
||||||
|
if ! $SHOW_FUTURE; then
|
||||||
|
# Unknown beginning of tour
|
||||||
|
[[ $date_beg =~ \? ]] && break
|
||||||
|
|
||||||
|
# The date of tour later than today
|
||||||
|
local date_tour=$(sed -E "s/${date_re}/\3-\2-\1/" <<< $date_beg)
|
||||||
|
local date_unix=$(date -d $date_tour +%s) this_unix=$(date +%s)
|
||||||
|
(( date_unix > this_unix )) && break
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use short dates
|
||||||
|
date_beg=${date_beg::5} date_end=${date_end::5}
|
||||||
|
fi
|
||||||
|
continue
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function keep_game_info {
|
function keep_game_info {
|
||||||
@ -177,7 +200,7 @@ function info_output_term {
|
|||||||
echo -n "$(tput setaf 2)${tour_num} тур "
|
echo -n "$(tput setaf 2)${tour_num} тур "
|
||||||
echo "$(tput setaf 6)(${date_beg} - ${date_end})$(tput sgr0)"
|
echo "$(tput setaf 6)(${date_beg} - ${date_end})$(tput sgr0)"
|
||||||
|
|
||||||
echo -en "$output_lines" | while IFS= read line; do
|
for line in "$(echo -e "$output_lines")"; do
|
||||||
# Highlight player's name
|
# Highlight player's name
|
||||||
if [[ -n $PLAYER ]]; then
|
if [[ -n $PLAYER ]]; then
|
||||||
players=$(grep -o "[^ ]*${PLAYER}[^ ]*" <<< "$line")
|
players=$(grep -o "[^ ]*${PLAYER}[^ ]*" <<< "$line")
|
||||||
@ -222,7 +245,7 @@ function info_output_html {
|
|||||||
echo " <tbody>"
|
echo " <tbody>"
|
||||||
|
|
||||||
echo -en "$output_lines" | while read white hyphen black result url; do
|
echo -en "$output_lines" | while read white hyphen black result url; do
|
||||||
[[ $result == "1/2" ]] && result="½-½"
|
[[ $result == 1/2 ]] && result=½-½
|
||||||
[[ -n $url ]] && result="<a href=\"${url}\">${result}</a>"
|
[[ -n $url ]] && result="<a href=\"${url}\">${result}</a>"
|
||||||
|
|
||||||
echo " <tr>"
|
echo " <tr>"
|
||||||
@ -242,22 +265,25 @@ function die {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function checkargs {
|
function checkargs {
|
||||||
[[ $OPTARG =~ ^-[apflhv]$ ]] && die "Option -${opt}: argument not found"
|
[[ $OPTARG =~ ^-[afpolhv]$ ]] && die "Option -${opt}: argument not found"
|
||||||
[[ $opt == f && ! $OPTARG =~ ^(term|html|lor)$ ]] && die "Incorrect FORMAT specified"
|
[[ $opt == o && ! $OPTARG =~ ^(term|html|lor)$ ]] && die "Incorrect FORMAT specified"
|
||||||
}
|
}
|
||||||
|
|
||||||
FORMAT=term
|
FORMAT=term
|
||||||
SHOW_ALL=false
|
SHOW_ALL=false
|
||||||
|
SHOW_FUTURE=false
|
||||||
SHOW_LINK=false
|
SHOW_LINK=false
|
||||||
|
|
||||||
while getopts ap:f:lhv opt; do
|
while getopts afp:o:lhv opt; do
|
||||||
case $opt in
|
case $opt in
|
||||||
a) SHOW_ALL=true
|
a) SHOW_ALL=true
|
||||||
;;
|
;;
|
||||||
|
f) SHOW_FUTURE=true
|
||||||
|
;;
|
||||||
p) checkargs
|
p) checkargs
|
||||||
PLAYER=$OPTARG
|
PLAYER=$OPTARG
|
||||||
;;
|
;;
|
||||||
f) checkargs
|
o) checkargs
|
||||||
FORMAT=$OPTARG
|
FORMAT=$OPTARG
|
||||||
;;
|
;;
|
||||||
l) SHOW_LINK=true
|
l) SHOW_LINK=true
|
||||||
|
Loading…
Reference in New Issue
Block a user