summaryrefslogtreecommitdiff
path: root/tools/lib.bash
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2022-06-08 22:01:22 +0300
committerEvgeny Zinoviev <me@ch1p.io>2022-06-11 19:05:51 +0300
commiteb502ab9c94cc8a89a29f9310e2f56404b432053 (patch)
tree70ec81d40a9fc406960d85773436d3b33a014c7a /tools/lib.bash
parent1ed87f69878b85daf94cde4c7b187939d9e15778 (diff)
ipcam: rewrite motion detection system
Diffstat (limited to 'tools/lib.bash')
-rw-r--r--tools/lib.bash122
1 files changed, 122 insertions, 0 deletions
diff --git a/tools/lib.bash b/tools/lib.bash
new file mode 100644
index 0000000..1cf459b
--- /dev/null
+++ b/tools/lib.bash
@@ -0,0 +1,122 @@
+# colored output
+# --------------
+
+BOLD=$(tput bold)
+RST=$(tput sgr0)
+RED=$(tput setaf 1)
+GREEN=$(tput setaf 2)
+YELLOW=$(tput setaf 3)
+CYAN=$(tput setaf 6)
+VERBOSE=
+
+echoinfo() {
+ >&2 echo "${CYAN}$@${RST}"
+}
+
+echoerr() {
+ >&2 echo "${RED}${BOLD}error:${RST}${RED} $@${RST}"
+}
+
+echowarn() {
+ >&2 echo "${YELLOW}${BOLD}warning:${RST}${YELLOW} $@${RST}"
+}
+
+die() {
+ echoerr "$@"
+ exit 1
+}
+
+debug() {
+ if [ -n "$VERBOSE" ]; then
+ >&2 echo "$@"
+ fi
+}
+
+
+# measuring executing time
+# ------------------------
+
+__time_started=
+
+time_start() {
+ __time_started=$(date +%s)
+}
+
+time_elapsed() {
+ local fin=$(date +%s)
+ echo $(( fin - __time_started ))
+}
+
+
+# config parsing
+# --------------
+
+read_config() {
+ local config_file="$1"
+ local dst="$2"
+
+ [ -f "$config_file" ] || die "read_config: $config_file: no such file"
+
+ local n=0
+ local failed=
+ local key
+ local value
+
+ while read line; do
+ n=$(( n+1 ))
+
+ # skip empty lines or comments
+ if [ -z "$line" ] || [[ "$line" =~ ^#.* ]]; then
+ continue
+ fi
+
+ if [[ $line = *"="* ]]; then
+ key="${line%%=*}"
+ value="${line#*=}"
+ eval "$dst[$key]=\"$value\""
+ else
+ echoerr "config: invalid line $n"
+ failed=1
+ fi
+ done < <(cat "$config_file")
+
+ [ -z "$failed" ]
+}
+
+check_config() {
+ local var="$1"
+ local keys="$2"
+
+ local failed=
+
+ for key in $keys; do
+ if [ -z "$(eval "echo -n \${$var[$key]}")" ]; then
+ echoerr "config: ${BOLD}${key}${RST}${RED} is missing"
+ failed=1
+ fi
+ done
+
+ [ -z "$failed" ]
+}
+
+
+# other functions
+# ---------------
+
+installed() {
+ command -v "$1" > /dev/null
+ return $?
+}
+
+download() {
+ local source="$1"
+ local target="$2"
+
+ if installed curl; then
+ curl -f -s -o "$target" "$source"
+ elif installed wget; then
+ wget -q -O "$target" "$source"
+ else
+ die "neither curl nor wget found, can't proceed"
+ fi
+}