blob: 918015933243e9f0565ba53d8f61c142410abab8 (
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
{ stdenv
, coreutils
, writeScriptBin
, eject
, notifyUser ? "gkleen"
, showTitle ? true
, ffmpeg ? null
, gnused ? null
, wrapperDir ? "/run/wrappers/bin"
}:
assert showTitle -> ffmpeg != null && gnused != null && notifyUser != null;
writeScriptBin "recv-media" ''
#!${stdenv.shell}
pid=$?
notify=${if notifyUser == null then "false" else "true"}
notifyUser=${if notifyUser == null then "" else notifyUser}
PATH=${wrapperDir}:${eject}/bin:${coreutils}/bin${if showTitle then '':${ffmpeg}/bin:${gnused}/bin'' else ""}
exec 1> >(logger --id=$pid -t recv-media -p user.notice)
exec 2> >(logger --id=$pid -t recv-media -p user.error)
[[ -z "$1" || -z "$2" ]] && exit 2
dir=/var/media
group=$(stat -c '%G' $dir)
tmpFile="''${dir}/.tmp/''${1:t}"
target="''${dir}/''${1:t}"
if [[ -n "''${3}" ]]; then
target="''${dir}"/$(base64 -d <<<''${3})
fi
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 -- sg $group "$0 $*"
fi
typeset -a failures
failures=()
(
if ! cp -lnv --preserve=all "$1" "''${target}"; then
mkdir -pv "''${tmpFile:h}" || failures+="mkdir"
ionice -c 3 -t cp -vn --preserve=all "$1" "''${tmpFile}" && mv -v "''${tmpFile}" "''${target}" || failures+="cp"
fi
touch -c -m -t "$2" "''${target}" || failures+="touch"
)
if $notify && [[ $#failures -gt 0 ]]; then
printf "%s\n%s\n%s" $(basename "$1") "Failed to download" ''${(j:, :)failures} | notify-''${notifyUser} -a recv-media -u Critical
fi
if $notify; then
(
summary=${if showTitle then ''$(ffmpeg -i "''${target}" -f ffmetadata pipe:1 2>/dev/null | sed -r '/^\[CHAPTER\]$/q; /^title=/!d; s/^title=//')'' else ''""''}
[[ -z "''${summary}" ]] && summary=$(basename "$1")
printf "%s\n%s\n" "''${summary}" "" | notify-''${notifyUser} -a recv-media || true
) || true
fi
''
|