-
-
Notifications
You must be signed in to change notification settings - Fork 35
/
run
executable file
·139 lines (114 loc) · 3.94 KB
/
run
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/bin/bash
set -u # Treat unset variables as an error.
log() {
echo "$*"
}
process_filebot_output() {
while read LINE; do
log "$LINE"
done
}
WATCHDIR_HASH="$(mktemp -d)"
trap "exit" TERM QUIT INT
trap "clean_exit" EXIT
clean_exit() {
rm -rf "$WATCHDIR_HASH"
}
# Define all environment variables with their default value.
AMC_INTERVAL="${AMC_INTERVAL:-1800}"
AMC_INPUT_STABLE_TIME="${AMC_INPUT_STABLE_TIME:-10}"
AMC_ACTION="${AMC_ACTION:-test}"
AMC_CONFLICT="${AMC_CONFLICT:-auto}"
AMC_MATCH_MODE="${AMC_MATCH_MODE:-opportunistic}"
AMC_ARTWORK="${AMC_ARTWORK:-n}"
AMC_LANG="${AMC_LANG:-English}"
AMC_MUSIC_FORMAT="${AMC_MUSIC_FORMAT:-\{plex\}}"
AMC_MOVIE_FORMAT="${AMC_MOVIE_FORMAT:-\{plex\}}"
AMC_SERIES_FORMAT="${AMC_SERIES_FORMAT:-\{plex\}}"
AMC_ANIME_FORMAT="${AMC_ANIME_FORMAT:-\{plex\}}"
AMC_PROCESS_MUSIC="${AMC_PROCESS_MUSIC:-y}"
AMC_SUBTITLE_LANG="${AMC_SUBTITLE_LANG:-}"
# Store custom options in an array. This is required to handle more complex
# options. For example, "--filter 'age < 30'" needs to be passed as 2 separate
# arguments to FileBot.
eval "AMC_CUSTOM_OPTIONS=(${AMC_CUSTOM_OPTIONS:-})"
AMC_INPUT_DIR="${AMC_INPUT_DIR:-/watch}"
AMC_OUTPUT_DIR="${AMC_OUTPUT_DIR:-/output}"
AMC_EXCLUDE_LIST="/config/amc-exlude-list.txt"
AMC_LOG_FILE="/config/log/amc.log"
if [ -n "$AMC_LANG" ]; then
# Make sure `--lang` is not already set in AMC_CUSTOM_OPTIONS.
if [[ ! "${AMC_CUSTOM_OPTIONS[*]}" =~ "--lang" ]]; then
AMC_CUSTOM_OPTIONS=("--lang" "$AMC_LANG" "${AMC_CUSTOM_OPTIONS[@]}")
fi
fi
if [ -n "$AMC_SUBTITLE_LANG" ]; then
AMC_CUSTOM_OPTIONS=("--def" "subtitles=$AMC_SUBTITLE_LANG" "${AMC_CUSTOM_OPTIONS[@]}")
fi
if [ "$AMC_MATCH_MODE" = "opportunistic" ]; then
AMC_CUSTOM_OPTIONS=("-non-strict" "${AMC_CUSTOM_OPTIONS[@]}")
fi
WATCHDIR_HASH_calculate() {
WATCHDIR="$1"
find "$WATCHDIR" -follow -type f -not -path '*/\.*' -printf '%T@:%s:%p\n' | md5sum | cut -d' ' -f1
}
WATCHDIR_HASH_isset() {
WATCHDIR="$1"
[ -f "$WATCHDIR_HASH/$WATCHDIR/hash" ]
}
WATCHDIR_HASH_update() {
WATCHDIR="$1"
mkdir -p "$WATCHDIR_HASH/$WATCHDIR"
WATCHDIR_HASH_calculate "$WATCHDIR" > "$WATCHDIR_HASH/$WATCHDIR/hash"
}
WATCHDIR_HASH_changed() {
WATCHDIR="$1"
[ ! -f "$WATCHDIR_HASH/$WATCHDIR/hash" ] || \
[ "$(cat "$WATCHDIR_HASH/$WATCHDIR/hash")" != "$(WATCHDIR_HASH_calculate "$WATCHDIR")" ]
}
INIT=true
while true; do
if ! $INIT; then
sleep "$AMC_INTERVAL"
else
INIT=false
fi
# Do not invoke the AMC script if input folder is empty.
if ! ls -1qA "$AMC_INPUT_DIR" | grep -q .; then
continue
fi
# Do not invoke the AMC script if input folder did not change.
if ! WATCHDIR_HASH_changed "$AMC_INPUT_DIR"; then
continue
fi
log "Changes detected in input folder."
# Save the current input dir hash.
WATCHDIR_HASH_update "$AMC_INPUT_DIR"
# Wait to make sure the input folder is stable.
log "Waiting $AMC_INPUT_STABLE_TIME seconds before proceeding..."
sleep "$AMC_INPUT_STABLE_TIME"
# Do not invoke the AMC script if the input folder is not stable.
if WATCHDIR_HASH_changed "$AMC_INPUT_DIR"; then
log "Skipping AMC script invocation: input folder not stable."
continue
fi
# Run the AMC script.
log "Invoking AMC script..."
/opt/filebot/filebot \
-script fn:amc \
"$AMC_INPUT_DIR" \
--log-file "$AMC_LOG_FILE" \
--output "$AMC_OUTPUT_DIR" \
--action "$AMC_ACTION" \
--conflict "$AMC_CONFLICT" \
--def artwork="$AMC_ARTWORK" \
--def music="$AMC_PROCESS_MUSIC" \
--def clean=y \
--def excludeList="$AMC_EXCLUDE_LIST" \
--def movieFormat="$AMC_MOVIE_FORMAT" \
--def musicFormat="$AMC_MUSIC_FORMAT" \
--def seriesFormat="$AMC_SERIES_FORMAT" \
--def animeFormat="$AMC_ANIME_FORMAT" \
"${AMC_CUSTOM_OPTIONS[@]}" 2>&1 | process_filebot_output
done
# vim:ft=sh:ts=4:sw=4:et:sts=4