diff --git a/.travis.yml b/.travis.yml index 01a6fac..921c577 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,9 +2,11 @@ language: bash sudo: required os: - linux +before_script: + - cp ./config.sample config install: - ./build/install.sh script: - - ./build/build.sh + - ./build/build.sh notifications: email: false diff --git a/arm_wrapper.sh b/arm_wrapper.sh index fd19f58..77d7227 100755 --- a/arm_wrapper.sh +++ b/arm_wrapper.sh @@ -1,2 +1,2 @@ #!/bin/bash -echo bash /opt/arm/identify.sh | at now +echo bash /opt/arm/identify.sh /opt/arm/config | at now diff --git a/config.sample b/config.sample old mode 100755 new mode 100644 index 749bc92..6e066e4 --- a/config.sample +++ b/config.sample @@ -1,4 +1,3 @@ -#!/bin/bash # ARM (Automatic Ripping Machine) oonfig file ################# @@ -92,7 +91,7 @@ IFTTT_EVENT="arm_event" #use the label of the DVD/CD or else use empty.log #this is required for udev events where there is no media available #such as ejecting the drive -if [ -z $ID_FS_LABEL]; then +if [ -z "$ID_FS_LABEL" ]; then LOGFILE="empty.log" else LOGFILE=${ID_FS_LABEL}".log" @@ -100,3 +99,4 @@ fi #Set full logfile path LOG=$LOGPATH$LOGFILE + diff --git a/data_rip.sh b/data_rip.sh index 8c80e9b..c465fe8 100755 --- a/data_rip.sh +++ b/data_rip.sh @@ -1,22 +1,24 @@ #!/bin/bash -# # Rip Data using DD -source /opt/arm/config + +# shellcheck disable=SC1091 +# shellcheck source=config +source "$ARM_CONFIG" { - TIMESTAMP=`date '+%Y%m%d_%H%M%S'`; - DEST=/mnt/media/ARM/${TIMESTAMP}_${ID_FS_LABEL} - mkdir $DEST + TIMESTAMP=$(date '+%Y%m%d_%H%M%S'); + DEST="/mnt/media/ARM/${TIMESTAMP}_${ID_FS_LABEL}" + mkdir "$DEST" FILENAME=${ID_FS_LABEL}_disc.iso #dd if=/dev/sr0 of=$DEST/$FILENAME - cat /dev/sr0 > $DEST/$FILENAME + cat "$DEVNAME" > "$DEST/$FILENAME" eject -} >> $LOG +} >> "$LOG" diff --git a/getmovietitle.py b/getmovietitle.py index 6c9c56b..7f46211 100755 --- a/getmovietitle.py +++ b/getmovietitle.py @@ -48,6 +48,8 @@ def getbluraytitle(): bluray_title = unicodedata.normalize('NFKD', bluray_title).encode('ascii', 'ignore').decode() bluray_title = bluray_title.replace(' - Blu-rayTM', '') + bluray_title = bluray_title.replace(' - BLU-RAYTM', '') + bluray_title = bluray_title.replace(' - BLU-RAY', '') bluray_title = bluray_title.replace(' - Blu-ray', '') return bluray_title + " (" + bluray_year + ")" diff --git a/identify.sh b/identify.sh index 628b78a..db17c02 100755 --- a/identify.sh +++ b/identify.sh @@ -1,42 +1,49 @@ #!/bin/bash -# -source /opt/arm/config + +export ARM_CONFIG=$1 + +echo "$ARM_CONFIG" + +# shellcheck source=config +# shellcheck disable=SC1091 +source "$ARM_CONFIG" # Create log dir if needed -mkdir -p $LOGPATH +mkdir -p "$LOGPATH" +#shellcheck disable=SC2094 { -echo "Starting Identify Script..." >> $LOG +echo "Starting Identify Script..." >> "$LOG" VIDEO_TITLE="" HAS_NICE_TITLE="" #Clean up old log files -FILESFOUND=( $(find $LOGPATH -mtime +$LOGLIFE -type f)) -echo "Deleting ${#FILESFOUND[@]} old log files:"${FILESFOUND[@]} >> $LOG -find $LOGPATH -mtime +$LOGLIFE -type f -delete +FILESFOUND=( $(find "$LOGPATH" -mtime +"$LOGLIFE" -type f)) +echo "Deleting ${#FILESFOUND[@]} old log files: ${FILESFOUND[*]}" >> "$LOG" +find "$LOGPATH" -mtime +"$LOGLIFE" -type f -delete # Set Home to home folder of user that is setup to run MakeMKV export HOME="/root/" # Output UDEV info -udevadm info -q env -n ${DEVNAME} >> $LOG +udevadm info -q env -n "$DEVNAME" >> "$LOG" -if [ $ID_FS_TYPE == "udf" ]; then - echo "identified udf" >> $LOG - echo "found ${ID_FS_LABEL} on ${DEVNAME}" >> $LOG +if [ "$ID_FS_TYPE" == "udf" ]; then + echo "identified udf" >> "$LOG" + echo "found ${ID_FS_LABEL} on ${DEVNAME}" >> "$LOG" - if [ $ARM_CHECK_UDF == true ]; then + if [ "$ARM_CHECK_UDF" == true ]; then # check to see if this is really a video - mkdir -p /mnt/${DEVNAME} - mount ${DEVNAME} /mnt/${DEVNAME} + mkdir -p /mnt/"$DEVNAME" + mount "$DEVNAME" /mnt/"$DEVNAME" if [[ -d /mnt/${DEVNAME}/VIDEO_TS || -d /mnt/${DEVNAME}/BDMV ]]; then - echo "identified udf as video" >> $LOG + echo "identified udf as video" >> "$LOG" - if [ $GET_VIDEO_TITLE == true ]; then + if [ "$GET_VIDEO_TITLE" == true ]; then - GET_TITLE_OUTPUT=$(/opt/arm/getmovietitle.py -p "/mnt${DEVNAME}" 2>&1) + GET_TITLE_OUTPUT=$(/opt/arm/getmovietitle.py -p /mnt"${DEVNAME}" 2>&1) GET_TITLE_RESULT=$? if [ $GET_TITLE_RESULT = 0 ]; then @@ -65,35 +72,35 @@ if [ $ID_FS_TYPE == "udf" ]; then echo "video title is now ${VIDEO_TITLE}" echo "video type is ${VIDEO_TYPE}" - umount /mnt/${DEVNAME} - /opt/arm/video_rip.sh "$VIDEO_TITLE" "$HAS_NICE_TITLE" "$VIDEO_TYPE" $LOG + umount "/mnt/$DEVNAME" + /opt/arm/video_rip.sh "$VIDEO_TITLE" "$HAS_NICE_TITLE" "$VIDEO_TYPE" "$LOG" else - umount /mnt/${DEVNAME} - echo "identified udf as data" >> $LOG - /opt/arm/data_rip.sh $LOG - eject $DEVNAME + umount "/mnt/$DEVNAME" + echo "identified udf as data" >> "$LOG" + /opt/arm/data_rip.sh + eject "$DEVNAME" fi else - echo "ARM_CHECK_UDF is false, assuming udf is video" >> $LOG - /opt/arm/video_rip.sh $LOG + echo "ARM_CHECK_UDF is false, assuming udf is video" >> "$LOG" + /opt/arm/video_rip.sh "$LOG" fi -elif (($ID_CDROM_MEDIA_TRACK_COUNT_AUDIO > 0 )); then - echo "identified audio" >> $LOG - abcde -d $DEVNAME +elif (("$ID_CDROM_MEDIA_TRACK_COUNT_AUDIO" > 0 )); then + echo "identified audio" >> "$LOG" + abcde -d "$DEVNAME" -elif [ $ID_FS_TYPE == "iso9660" ]; then - echo "identified data" >> $LOG - /opt/arm/data_rip.sh $LOG - eject $DEVNAME +elif [ "$ID_FS_TYPE" == "iso9660" ]; then + echo "identified data" >> "$LOG" + /opt/arm/data_rip.sh "$LOG" + eject "$DEVNAME" else - echo "unable to identify" >> $LOG - echo $ID_CDROM_MEDIA_TRACK_COUNT_AUDIO >> $LOG - echo $ID_FS_TYPE >> $LOG - eject $DEVNAME + echo "unable to identify" + echo "$ID_CDROM_MEDIA_TRACK_COUNT_AUDIO" >> "$LOG" + echo "$ID_FS_TYPE" >> "$LOG" + eject "$DEVNAME" fi -} >> $LOG +} >> "$LOG" diff --git a/notify.sh b/notify.sh index f334f68..5ef9e57 100755 --- a/notify.sh +++ b/notify.sh @@ -1,28 +1,30 @@ #!/bin/bash -source /opt/arm/config +# shellcheck source=config +# shellcheck disable=SC1091 +source "$ARM_CONFIG" MSG=$1 { #Notification via pushbullet #Trigger onl if variable is set if [ -z "$PB_KEY" ]; then - echo "Pushbullet notifications not enabled" >> $LOG + echo "Pushbullet notifications not enabled" >> "$LOG" else - echo "Sending Pushbullet notification" >> $LOG - curl -s -u $PB_KEY: https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="$MSG" - echo "Pushbullet notification sent" >> $LOG + echo "Sending Pushbullet notification" >> "$LOG" + curl -s -u "$PB_KEY": https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="$MSG" + echo "Pushbullet notification sent" >> "$LOG" fi #Notification via IFTTT #Trigger only if variable is set if [ -z "$IFTTT_KEY" ]; then - echo "IFTTT notifications not enabled" >> $LOG + echo "IFTTT notifications not enabled" >> "$LOG" else - echo "Sending IFTTT notification" >> $LOG - curl -s -X POST -H "Content-Type: application/json" -d '{"value1":"'"$MSG"'"}' https://maker.ifttt.com/trigger/${IFTTT_EVENT}/with/key/${IFTTT_KEY} - printf "\nIFTTT notification sent" >> $LOG + echo "Sending IFTTT notification" >> "$LOG" + curl -s -X POST -H "Content-Type: application/json" -d '{"value1":"'"$MSG"'"}' https://maker.ifttt.com/trigger/"$IFTTT_EVENT"/with/key/"$IFTTT_KEY" + printf "\nIFTTT notification sent" >> "$LOG" fi -} >> $LOG +} >> "$LOG" diff --git a/video_rip.sh b/video_rip.sh index 4b70b0b..1646944 100755 --- a/video_rip.sh +++ b/video_rip.sh @@ -1,8 +1,9 @@ #!/bin/bash -# # Rip video using MakeMKV then eject and call transcode script -source /opt/arm/config +# shellcheck source=config +# shellcheck disable=SC1091 +source "$ARM_CONFIG" VIDEO_TITLE=$1 HAS_NICE_TITLE=$2 @@ -11,46 +12,46 @@ VIDEO_TYPE=$3 { echo "Video Title is ${VIDEO_TITLE}" - echo "Ripping video ${ID_FS_LABEL} from ${DEVNAME}" >> $LOG - TIMESTAMP=`date '+%Y%m%d_%H%M%S'`; - DEST=${RAWPATH}/${VIDEO_TITLE}_${TIMESTAMP} + echo "Ripping video ${ID_FS_LABEL} from ${DEVNAME}" >> "$LOG" + TIMESTAMP=$(date '+%Y%m%d_%H%M%S'); + DEST="${RAWPATH}/${VIDEO_TITLE}_${TIMESTAMP}" RIPSTART=$(date +%s); mkdir "$DEST" #echo /opt/arm/video_transcode.sh \"$DEST\" \"$VIDEO_TITLE\" $TIMESTAMP >> $LOG - if [ $RIPMETHOD = "backup" ] && [ $ID_CDROM_MEDIA_BD = "1" ]; then - echo "Using backup method of ripping." >> $LOG + if [ "$RIPMETHOD" = "backup" ] && [ "$ID_CDROM_MEDIA_BD" = "1" ]; then + echo "Using backup method of ripping." >> "$LOG" DISC="${DEVNAME: -1}" - echo "Sending command: "makemkvcon backup --decrypt -r disc:"$DISC" \""$DEST"/""\" - makemkvcon backup --decrypt -r disc:$DISC $DEST/ - eject $DEVNAME - elif [ $MAINFEATURE = true ] && [ $ID_CDROM_MEDIA_DVD = "1" ] && [ -z $ID_CDROM_MEDIA_BD ]; then - echo "Media is DVD and Main Feature parameter in config file is true. Bypassing MakeMKV." >> $LOG + echo "Sending command: makemkvcon backup --decrypt -r disc:$DISC $DEST" + makemkvcon backup --decrypt -r disc:"$DISC" "$DEST"/ + eject "$DEVNAME" + elif [ "$MAINFEATURE" = true ] && [ "$ID_CDROM_MEDIA_DVD" = "1" ] && [ -z "$ID_CDROM_MEDIA_BD" ]; then + echo "Media is DVD and Main Feature parameter in config file is true. Bypassing MakeMKV." >> "$LOG" # rmdir "$DEST" echo "DEST is ${DEST}" else - echo "Using mkv method of ripping." >> $LOG - makemkvcon mkv dev:$DEVNAME all "$DEST" --minlength=$MINLENGTH -r - eject $DEVNAME + echo "Using mkv method of ripping." >> "$LOG" + makemkvcon mkv dev:"$DEVNAME" all "$DEST" --minlength="$MINLENGTH" -r + eject "$DEVNAME" fi RIPEND=$(date +%s); - RIPSEC=$(($RIPEND-$RIPSTART)); - RIPTIME="$(($RIPSEC / 3600)) hours, $((($RIPSEC / 60) % 60)) minutes and $(($RIPSEC % 60)) seconds." + RIPSEC=$((RIPEND-RIPSTART)); + RIPTIME="$((RIPSEC / 3600)) hours, $(((RIPSEC / 60) % 60)) minutes and $((RIPSEC % 60)) seconds." #eject $DEVNAME #echo /opt/arm/notify.sh "\"Ripped: ${ID_FS_LABEL} completed from ${DEVNAME} in ${RIPTIME}\"" |at now - echo "STAT: ${ID_FS_LABEL} ripped in ${RIPTIME}" >> $LOG + echo "STAT: ${ID_FS_LABEL} ripped in ${RIPTIME}" >> "$LOG" - echo /opt/arm/video_transcode.sh \"$DEST\" \"$VIDEO_TITLE\" \"$HAS_NICE_TITLE\" \"$VIDEO_TYPE\" $TIMESTAMP >> $LOG - echo /opt/arm/video_transcode.sh \"$DEST\" \"$VIDEO_TITLE\" \"$HAS_NICE_TITLE\" \"$VIDEO_TYPE\" $TIMESTAMP | batch + echo "/opt/arm/video_transcode.sh \"$DEST\" \"$VIDEO_TITLE\" \"$HAS_NICE_TITLE\" \"$VIDEO_TYPE\" $TIMESTAMP" + echo "/opt/arm/video_transcode.sh \"$DEST\" \"$VIDEO_TITLE\" \"$HAS_NICE_TITLE\" \"$VIDEO_TYPE\" \"$TIMESTAMP\"" | batch - echo "${ID_FS_LABEL} sent to transcoding queue..." >> $LOG + echo "${ID_FS_LABEL} sent to transcoding queue..." >> "$LOG" -} >> $LOG +} >> "$LOG" diff --git a/video_transcode.sh b/video_transcode.sh index 46f4d63..b3b2526 100755 --- a/video_transcode.sh +++ b/video_transcode.sh @@ -1,7 +1,9 @@ #!/bin/bash # Transcodes Video files using HandBrake and removes source files when done -source /opt/arm/config +# shellcheck source=config +# shellcheck disable=SC1091 +source "$ARM_CONFIG" SRC=$1 LABEL=$2 @@ -11,72 +13,73 @@ TIMESTAMP=$5 TRANSSTART=$(date +%s); - echo "Start video transcoding script" >> $LOG + echo "Start video transcoding script" >> "$LOG" if [ "$HAS_NICE_TITLE" = true ]; then - echo "transcoding with a nice title" >> $LOG + echo "transcoding with a nice title" >> "$LOG" DEST="${ARMPATH}/${LABEL}" echo "dest ${DEST} variable created" if [ -d "$DEST" ]; then - echo "directory already exists... adding timestamp" >> $LOG + echo "directory already exists... adding timestamp" >> "$LOG" DEST="${ARMPATH}/${LABEL}_${TIMESTAMP}" fi else - echo "transcoding without a nice title" >> $LOG + echo "transcoding without a nice title" >> "$LOG" DEST="${ARMPATH}/${LABEL}_${TIMESTAMP}" fi # DEST="${ARMPATH}/${LABEL}_${TIMESTAMP}" mkdir "$DEST" - if [ $RIPMETHOD = "backup" ] && [ "$MAINFEATURE" = true ] && [ $ID_CDROM_MEDIA_BD = "1" ]; then - echo "Transcoding BluRay main feature only." >> $LOG - $HANDBRAKE_CLI -i $SRC -o "$DEST/$LABEL.$DEST_EXT" --main-feature --preset="$HB_PRESET" --subtitle scan -F 2>> $LOG - rmdir -rf $SRC - elif [ $RIPMETHOD = "backup" ] && [ "$MAINFEATURE" = false ] && [ $ID_CDROM_MEDIA_BD = "1" ]; then - echo "Transcoding BluRay all titles above minlength." >> $LOG - $HANDBRAKE_CLI -i $SRC -o "$DEST/$LABEL.$DEST_EXT" --min-duration $MINLENGTH --preset="$HB_PRESET" --subtitle scan -F 2>> $LOG - rmdir -rf $SRC - elif [ $MAINFEATURE = true ] && [ $ID_CDROM_MEDIA_DVD = "1" ]; then - echo "Transcoding DVD main feature only." >> $LOG + if [ "$RIPMETHOD" = "backup" ] && [ "$MAINFEATURE" = true ] && [ "$ID_CDROM_MEDIA_BD" = "1" ]; then + echo "Transcoding BluRay main feature only." >> "$LOG" + $HANDBRAKE_CLI -i "$SRC" -o "$DEST/$LABEL.$DEST_EXT" --main-feature --preset="$HB_PRESET" --subtitle scan -F 2>> "$LOG" + rmdir -rf "$SRC" + elif [ "$RIPMETHOD" = "backup" ] && [ "$MAINFEATURE" = false ] && [ "$ID_CDROM_MEDIA_BD" = "1" ]; then + echo "Transcoding BluRay all titles above minlength." >> "$LOG" + $HANDBRAKE_CLI -i "$SRC" -o "$DEST/$LABEL.$DEST_EXT" --min-duration "$MINLENGTH" --preset="$HB_PRESET" --subtitle scan -F 2>> "$LOG" + rmdir -rf "$SRC" + elif [ "$MAINFEATURE" = true ] && [ "$ID_CDROM_MEDIA_DVD" = "1" ]; then + echo "Transcoding DVD main feature only." >> "$LOG" # echo "$HANDBRAKE_CLI -i $DEVNAME -o \"${DEST}/${LABEL}.${DEST_EXT}\" --main-feature --preset="${HB_PRESET}" --subtitle scan -F 2" >> $LOG - $HANDBRAKE_CLI -i $DEVNAME -o "${DEST}/${LABEL}.${DEST_EXT}" --main-feature --preset="${HB_PRESET}" --subtitle scan -F 2>> $LOG + $HANDBRAKE_CLI -i "$DEVNAME" -o "${DEST}/${LABEL}.${DEST_EXT}" --main-feature --preset="${HB_PRESET}" --subtitle scan -F 2>> "$LOG" # $HANDBRAKE_CLI -i $DEVNAME -o "${DEST}/${LABEL}.${DEST_EXT}" --main-feature --preset="${HB_PRESET}">> $LOG - eject $DEVNAME + eject "$DEVNAME" else - echo "Transcoding all files." >> $LOG - for FILE in `ls $SRC` + echo "Transcoding all files." >> "$LOG" + # shellcheck disable=SC2045 + for FILE in $(ls "$SRC") do - filename=$(basename $FILE) + filename=$(basename "$FILE") - extension=${filename##*.} + #extension=${filename##*.} filename=${filename%.*} - echo "Transcoding file $FILE" >> $LOG - $HANDBRAKE_CLI -i "$SRC/$FILE" -o "$DEST/$filename.$DEST_EXT" --preset="$HB_PRESET" --subtitle scan -F 2>> $LOG - rm "$SRC"/"$FILE" + echo "Transcoding file $FILE" >> "$LOG" + $HANDBRAKE_CLI -i "$SRC/$FILE" -o "$DEST/$filename.$DEST_EXT" --preset="$HB_PRESET" --subtitle scan -F 2>> "$LOG" + rm "$SRC/$FILE" done - rmdir $SRC + rmdir "$SRC" fi - if [ $VIDEO_TYPE = "movie" ] && [ $MAINFEATURE = true ] && [ $HAS_NICE_TITLE = true ]; then - echo "checing for existing file" >> $LOG + if [ "$VIDEO_TYPE" = "movie" ] && [ "$MAINFEATURE" = true ] && [ "$HAS_NICE_TITLE" = true ]; then + echo "checing for existing file" >> "$LOG" if [ ! -f "$MEDIA_DIR/$LABEL.$DEST_EXT" ]; then - echo "No file found. Moving \"$DEST/$LABEL.$DEST_EXT to $MEDIA_DIR/$LABEL.$DEST_EXT\"" >> $LOG + echo "No file found. Moving \"$DEST/$LABEL.$DEST_EXT to $MEDIA_DIR/$LABEL.$DEST_EXT\"" >> "$LOG" mv -n "$DEST/$LABEL.$DEST_EXT" "$MEDIA_DIR/$LABEL.$DEST_EXT" else - echo "Warning: $MEDIA_DIR/$LABEL.$DEST_EXT File exists! File moving aborted" >> $LOG + echo "Warning: $MEDIA_DIR/$LABEL.$DEST_EXT File exists! File moving aborted" >> "$LOG" fi else - echo "Nothing here..." >> $LOG + echo "Nothing here..." >> "$LOG" fi -rmdir -rf $SRC +rmdir -rf "$SRC" TRANSEND=$(date +%s); -TRANSSEC=$(($TRANSEND-$TRANSSTART)); -TRANSTIME="$(($TRANSSEC / 3600)) hours, $((($TRANSSEC / 60) % 60)) minutes and $(($TRANSSEC % 60)) seconds." +TRANSSEC=$((TRANSEND-TRANSSTART)); +TRANSTIME="$((TRANSSEC / 3600)) hours, $(((TRANSSEC / 60) % 60)) minutes and $((TRANSSEC % 60)) seconds." -echo "STAT: ${ID_FS_LABEL} transcoded in ${TRANSTIME}" >> $LOG +echo "STAT: ${ID_FS_LABEL} transcoded in ${TRANSTIME}" >> "$LOG" #echo /opt/arm/rename.sh $DEST