summaryrefslogtreecommitdiff
path: root/custom/recv-media.sh
blob: f99aaaf0106a70d38a90c4be7d67bca6d2c71178 (plain)
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
#!@zsh@/bin/zsh

pid=$?

exec 1> >(@utillinux@/bin/logger --id=$pid -t recv-media -p user.notice)
exec 2> >(@utillinux@/bin/logger --id=$pid -t recv-media -p user.error)

[[ -z "$1" || -z "$2" ]] && exit 2

dir=@mediadir@
group=$(@coreutils@/bin/stat -c '%G' $dir)
tmpFile="${dir}/.tmp/${1:t}"
target="${dir}/${1:t}"

if [[ -n "${3}" ]]; then
  target="${dir}"/$(@coreutils@/bin/base64 -d <<<${3})
fi

@utillinux@/bin/logger --id=$pid -t recv-media -p user.debug <<EOF
$(id)
$(stat ${dir})
$(stat ${1})
$(echo ${2})
EOF

if [[ $(id -Gn) != *"$group"* ]]; then
  printf "Groups are ‘%s’. Trying to switch primary group to ‘%s’..." $(id -Gn) $group
  exec -- @wrapperdir@/sg $group "$0 $*"
fi

typeset -a failures
failures=()

(
  if ! cp -lnv --preserve=all "$1" "${target}"; then
    @coreutils@/bin/mkdir -pv "${tmpFile:h}" || failures+="mkdir"

    @utillinux@/bin/ionice -c 3 -t @coreutils@/bin/cp -vn --preserve=all "$1" "${tmpFile}" && mv -v "${tmpFile}" "${target}" || failures+="cp"
  fi
  @coreutils@/bin/touch -c -m -t "$2" "${target}" || failures+="touch"
)

if @donotify@ && [[ $#failures -gt 0 ]]; then
  printf "%s\n%s\n%s" "${target:t}" "Failed to download" ${(j:, :)failures} | @notify@ -a recv-media -u Critical
fi

if @donotify@; then
  (
    if @showtitle@; then
      summary=$(@ffmpeg@/bin/ffmpeg -i "${target}" -f ffmetadata pipe:1 2>/dev/null | sed -r '/\[CHAPTER\]/q; /^title=/!d; s/^title=//')
    else
      summary=${target:t}
    fi
    printf "%s\n%s\n" "${summary}" "" | @notify@ -a recv-media || true
  ) || true
fi