diff --git a/lidarr/TidalVideo.bash b/lidarr/TidalVideo.bash
deleted file mode 100644
index 98c9af0..0000000
--- a/lidarr/TidalVideo.bash
+++ /dev/null
@@ -1,457 +0,0 @@
-#!/usr/bin/env bash
-# Experimental
-scriptVersion="1.1"
-scriptName="TidalVideo"
-
-#### Import Settings
-source /config/extended.conf
-#### Import Functions
-source /config/extended/functions
-
-getArrAppInfo
-verifyApiAccess
-videoDownloadPath="$downloadPath/tidal/videos"
-
-if [ -d $videoDownloadPath ]; then
- rm -rf "$videoDownloadPath"
-fi
-
-TidalClientSetup () {
- log "TIDAL :: Verifying tidal-dl configuration"
-
- tidal-dl -o "$videoDownloadPath"/incomplete 2>&1 | tee -a /config/logs/$scriptName.txt
- tidalQuality=HiFi
-
- if [ ! -f /config/xdg/.tidal-dl.token.json ]; then
- #log "TIDAL :: ERROR :: Downgrade tidal-dl for workaround..."
- #pip3 install tidal-dl==2022.3.4.2 --no-cache-dir &>/dev/null
- log "TIDAL :: ERROR :: Loading client for required authentication, please authenticate, then exit the client..."
- NotifyWebhook "FatalError" "TIDAL requires authentication, please authenticate now (check logs)"
- tidal-dl
- fi
-
- if [ ! -d "$videoDownloadPath/incomplete" ]; then
- mkdir -p "$videoDownloadPath"/incomplete
- chmod 777 "$videoDownloadPath"/incomplete
- else
- rm -rf "$videoDownloadPath"/incomplete/*
- fi
-
- #log "TIDAL :: Upgrade tidal-dl to newer version..."
- #pip3 install tidal-dl==2022.07.06.1 --no-cache-dir &>/dev/null
-
-}
-
-TidaldlStatusCheck () {
- until false
- do
- running=no
- if ps aux | grep "tidal-dl" | grep -v "grep" | read; then
- running=yes
- log "STATUS :: TIDAL-DL :: BUSY :: Pausing/waiting for all active tidal-dl tasks to end..."
- sleep 2
- continue
- fi
- break
- done
-}
-
-TidalClientTest () {
- log "TIDAL :: tidal-dl client setup verification..."
- i=0
- while [ $i -lt 3 ]; do
- i=$(( $i + 1 ))
- TidaldlStatusCheck
- tidal-dl -q Normal -o "$videoDownloadPath"/incomplete -l "$tidalClientTestDownloadId" 2>&1 | tee -a /config/logs/$scriptName.txt
- downloadCount=$(find "$videoDownloadPath"/incomplete -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | wc -l)
- if [ $downloadCount -le 0 ]; then
- continue
- else
- break
- fi
- done
- tidalClientTest="unknown"
- if [ $downloadCount -le 0 ]; then
- if [ -f /config/xdg/.tidal-dl.token.json ]; then
- rm /config/xdg/.tidal-dl.token.json
- fi
- log "TIDAL :: ERROR :: Download failed"
- log "TIDAL :: ERROR :: You will need to re-authenticate on next script run..."
- log "TIDAL :: ERROR :: Exiting..."
- rm -rf "$videoDownloadPath"/incomplete/*
- NotifyWebhook "Error" "TIDAL not authenticated but configured"
- tidalClientTest="failed"
- exit
- else
- rm -rf "$videoDownloadPath"/incomplete/*
- log "TIDAL :: Successfully Verified"
- tidalClientTest="success"
- fi
-}
-
-AddFeaturedVideoArtists () {
- if [ "$addFeaturedVideoArtists" != "true" ]; then
- log "-----------------------------------------------------------------------------"
- log "Add Featured Music Video Artists to Lidarr :: DISABLED"
- log "-----------------------------------------------------------------------------"
- return
- fi
- log "-----------------------------------------------------------------------------"
- log "Add Featured Music Video Artists to Lidarr :: ENABLED"
- log "-----------------------------------------------------------------------------"
- lidarrArtistsData="$(curl -s "$arrUrl/api/v1/artist?apikey=${arrApiKey}" | jq -r ".[]")"
- artistTidalUrl=$(echo $lidarrArtistsData | jq -r '.links[] | select(.name=="tidal") | .url')
- videoArtists=$(ls /config/extended/cache/tidal-videos/)
- videoArtistsCount=$(ls /config/extended/cache/tidal-videos/ | wc -l)
- if [ "$videoArtistsCount" == "0" ]; then
- log "$videoArtistsCount Artists found for processing, skipping..."
- return
- fi
- loopCount=0
- for slug in $(echo $videoArtists); do
- loopCount=$(( $loopCount + 1))
- artistName="$(cat /config/extended/cache/tidal-videos/$slug)"
- if echo "$artistTidalUrl" | grep -i "tidal.com/artist/${slug}$" | read; then
- log "$loopCount of $videoArtistsCount :: $artistName :: Already added to Lidarr, skipping..."
- continue
- fi
- log "$loopCount of $videoArtistsCount :: $artistName :: Processing url :: https://tidal.com/artist/${slug}"
-
- artistNameEncoded="$(jq -R -r @uri <<<"$artistName")"
- lidarrArtistSearchData="$(curl -s "$arrUrl/api/v1/search?term=${artistNameEncoded}&apikey=${arrApiKey}")"
- lidarrArtistMatchedData=$(echo $lidarrArtistSearchData | jq -r ".[] | select(.artist) | select(.artist.links[].url | contains (\"tidal.com/artist/${slug}\"))" 2>/dev/null)
-
- if [ ! -z "$lidarrArtistMatchedData" ]; then
- data="$lidarrArtistMatchedData"
- artistName="$(echo "$data" | jq -r ".artist.artistName")"
- foreignId="$(echo "$data" | jq -r ".foreignId")"
- else
- log "$loopCount of $videoArtistsCount :: $artistName :: ERROR : Musicbrainz ID Not Found, skipping..."
- continue
- fi
- data=$(curl -s "$arrUrl/api/v1/rootFolder" -H "X-Api-Key: $arrApiKey" | jq -r ".[]")
- path="$(echo "$data" | jq -r ".path")"
- qualityProfileId="$(echo "$data" | jq -r ".defaultQualityProfileId")"
- metadataProfileId="$(echo "$data" | jq -r ".defaultMetadataProfileId")"
- data="{
- \"artistName\": \"$artistName\",
- \"foreignArtistId\": \"$foreignId\",
- \"qualityProfileId\": $qualityProfileId,
- \"metadataProfileId\": $metadataProfileId,
- \"monitored\":true,
- \"monitor\":\"all\",
- \"rootFolderPath\": \"$path\",
- \"addOptions\":{\"searchForMissingAlbums\":false}
- }"
-
- if echo "$lidarrArtistIds" | grep "^${foreignId}$" | read; then
- log "$loopCount of $videoArtistsCount :: $artistName :: Already in Lidarr ($foreignId), skipping..."
- continue
- fi
- log "$loopCount of $videoArtistsCount :: $artistName :: Adding $artistName to Lidarr ($foreignId)..."
- LidarrTaskStatusCheck
- lidarrAddArtist=$(curl -s "$arrUrl/api/v1/artist" -X POST -H 'Content-Type: application/json' -H "X-Api-Key: $arrApiKey" --data-raw "$data")
- done
-
-}
-
-LidarrTaskStatusCheck () {
- alerted=no
- until false
- do
- taskCount=$(curl -s "$arrUrl/api/v1/command?apikey=${arrApiKey}" | jq -r '.[] | select(.status=="started") | .name' | wc -l)
- if [ "$taskCount" -ge "1" ]; then
- if [ "$alerted" = "no" ]; then
- alerted=yes
- log "STATUS :: LIDARR BUSY :: Pausing/waiting for all active Lidarr tasks to end..."
- fi
- sleep 2
- else
- break
- fi
- done
-}
-
-TidalClientSetup
-AddFeaturedVideoArtists
-
-lidarrArtists=$(wget --timeout=0 -q -O - "$arrUrl/api/v1/artist?apikey=$arrApiKey" | jq -r .[])
-lidarrArtistIds=$(echo $lidarrArtists | jq -r .id)
-lidarrArtistCount=$(echo "$lidarrArtistIds" | wc -l)
-for lidarrArtistId in $(echo $lidarrArtistIds); do
- processCount=$(( $processCount + 1))
- lidarrArtistData=$(wget --timeout=0 -q -O - "$arrUrl/api/v1/artist/$lidarrArtistId?apikey=$arrApiKey")
- lidarrArtistName=$(echo $lidarrArtistData | jq -r .artistName)
- lidarrArtistMusicbrainzId=$(echo $lidarrArtistData | jq -r .foreignArtistId)
- lidarrArtistPath="$(echo "${lidarrArtistData}" | jq -r " .path")"
- lidarrArtistFolder="$(basename "${lidarrArtistPath}")"
- lidarrArtistFolderNoDisambig="$(echo "$lidarrArtistFolder" | sed "s/ (.*)$//g" | sed "s/\.$//g")" # Plex Sanitization, remove disambiguation
-
- artistGenres=""
- OLDIFS="$IFS"
- IFS=$'\n'
- artistGenres=($(echo $lidarrArtistData | jq -r ".genres[]"))
- IFS="$OLDIFS"
- if [ ! -z "$artistGenres" ]; then
- for genre in ${!artistGenres[@]}; do
- artistGenre="${artistGenres[$genre]}"
- OUT=$OUT"$artistGenre / "
- done
- genre="${OUT%???}"
- else
- genre=""
- fi
-
- tidalArtistUrl=$(echo "${lidarrArtistData}" | jq -r ".links | .[] | select(.name==\"tidal\") | .url")
- tidalArtistIds="$(echo "$tidalArtistUrl" | grep -o '[[:digit:]]*' | sort -u | head -n1)"
- lidarrArtistTrackData=$(wget --timeout=0 -q -O - "$arrUrl/api/v1/track?artistId=$lidarrArtistId&apikey=${arrApiKey}" | jq -r .[].title)
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: Getting Tidal Video Data..."
- tidalVideosData=$(curl -s "https://api.tidal.com/v1/artists/${tidalArtistIds}/videos?countryCode=${tidalCountryCode}&offset=0&limit=100" -H "x-tidal-token: CzET4vdadNUFQ5JU" | jq -r ".items | sort_by(.explicit) | reverse | .[]")
- tidalVideoIds=$(echo $tidalVideosData | jq -r .id)
- tidalVideoIdsCount=$(echo "$tidalVideoIds" | wc -l)
- tidalVideoProcessNumber=0
-
- for id in $(echo "$tidalVideoIds"); do
- tidalVideoProcessNumber=$(( $tidalVideoProcessNumber + 1 ))
- videoData=$(echo $tidalVideosData | jq -r "select(.id==$id)")
- videoTitle=$(echo $videoData | jq -r .title)
- videoTitleClean="$(echo "$videoTitle" | sed 's%/%-%g')"
- videoTitleClean="$(echo "$videoTitleClean" | sed -e "s/[:alpha:][:digit:]._' -/ /g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
- videoExplicit=$(echo $videoData | jq -r .explicit)
- videoUrl="https://tidal.com/browse/video/$id"
- videoDate="$(echo "$videoData" | jq -r ".releaseDate")"
- videoDate="${videoDate:0:10}"
- videoYear="${videoDate:0:4}"
- videoImageId="$(echo "$videoData" | jq -r ".imageId")"
- videoImageIdFix="$(echo "$videoImageId" | sed "s/-/\//g")"
- videoThumbnailUrl="https://resources.tidal.com/images/$videoImageIdFix/750x500.jpg"
- videoSource="tidal"
- videoArtists="$(echo "$videoData" | jq -r ".artists[]")"
- videoArtistsIds="$(echo "$videoArtists" | jq -r ".id")"
- videoType=""
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Processing..."
-
- if echo "$videoTitle" | grep -i "official" | grep -i "video" | read; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Official Music Video Match Found!"
- videoType="-video"
- elif echo "$videoTitle" | grep -i "official" | grep -i "lyric" | read; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Official Lyric Video Match Found!"
- videoType="-lyrics"
- elif echo "$videoTitle" | grep -i "video" | grep -i "lyric" | read; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Official Lyric Video Match Found!"
- videoType="-lyrics"
- elif echo "$videoTitle" | grep -i "4k upgrade" | read; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: 4K Upgrade Found!"
- videoType="-video"
- elif echo "$videoTitle" | grep -i "\(.*live.*\)" | read; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Live Video Found!"
- videoType="-live"
- elif echo $lidarrArtistTrackData | grep -i "$videoTitle" | read; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Music Video Track Name Match Found!"
- videoType="-video"
- else
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: ERROR :: Unable to match!"
- continue
- fi
-
- videoFileName="${videoTitleClean}${videoType}.mkv"
- existingFileSize=""
- existingFile=""
-
- if [ -d "$videoPath/$lidarrArtistFolderNoDisambig" ]; then
- existingFile="$(find "$videoPath/$lidarrArtistFolderNoDisambig" -type f -iname "${videoFileName}")"
- existingFileNfo="$(find "$videoPath/$lidarrArtistFolderNoDisambig" -type f -iname "${videoTitleClean}${videoType}.nfo")"
- existingFileJpg="$(find "$videoPath/$lidarrArtistFolderNoDisambig" -type f -iname "${videoTitleClean}${videoType}.jpg")"
- fi
- if [ -f "$existingFile" ]; then
- existingFileSize=$(stat -c "%s" "$existingFile")
- fi
-
- if [ -f /config/extended/logs/tidal-video/$id ]; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Previously Downloaded"
- if [ -f "$existingFile" ]; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Previously Downloaded, skipping..."
- continue
- else
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Previously Downloaded file missing, re-downloading..."
- fi
- fi
-
- if [ ! -d "/config/extended/cache/tidal-videos" ]; then
- mkdir -p "/config/extended/cache/tidal-videos"
- chmod 777 "/config/extended/cache/tidal-videos"
- fi
- if [ ! -f "/config/extended/cache/tidal-videos/$tidalArtistIds" ]; then
- echo -n "$lidarrArtistName" > "/config/extended/cache/tidal-videos/$tidalArtistIds"
- fi
-
- for videoArtistId in $(echo "$videoArtistsIds"); do
- videoArtistData=$(echo "$videoArtists" | jq -r "select(.id==$videoArtistId)")
- videoArtistName=$(echo "$videoArtistData" | jq -r .name)
- videoArtistType=$(echo "$videoArtistData" | jq -r .type)
- if [ ! -f "/config/extended/cache/tidal-videos/$videoArtistId" ]; then
- echo -n "$videoArtistName" > "/config/extended/cache/tidal-videos/$videoArtistId"
- fi
- done
-
-
-
- if [ ! -d "$videoDownloadPath/incomplete" ]; then
- mkdir -p "$videoDownloadPath/incomplete"
- fi
-
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Downloading..."
- tidal-dl -q HiFi -o "$videoDownloadPath/incomplete" -l "$videoUrl"
- find "$videoDownloadPath/incomplete" -type f -exec mv "{}" "$videoDownloadPath/incomplete"/ \;
- find "$videoDownloadPath/incomplete" -mindepth 1 -type d -exec rm -rf "{}" \; &>/dev/null
- find "$videoDownloadPath/incomplete" -type f -regex ".*/.*\.\(mkv\|mp4\)" -print0 | while IFS= read -r -d '' video; do
- file="${video}"
- filenoext="${file%.*}"
- filename="$(basename "$video")"
- extension="${filename##*.}"
- filenamenoext="${filename%.*}"
- mv "$file" "$videoDownloadPath/$filename"
-
-
- if [ -f "$videoDownloadPath/$filename" ]; then
- chmod 666 "$videoDownloadPath/$filename"
- downloadFailed=false
- else
- continue 2
- fi
-
- if [ "$videoDownloadPath/incomplete" ]; then
- rm -rf "$videoDownloadPath/incomplete"
- fi
-
- if python3 /usr/local/sma/manual.py --config "/config/extended/sma.ini" -i "$videoDownloadPath/$filename" -nt; then
- sleep 0.01
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Processed with SMA..."
- rm /usr/local/sma/config/*log*
- else
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: ERROR: SMA Processing Error"
- rm "$videoDownloadPath/$filename"
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: INFO: deleted: $filename"
- fi
-
- if [ -f "$videoDownloadPath/${filenamenoext}.mkv" ]; then
- curl -s "$videoThumbnailUrl" -o "$videoDownloadPath/poster.jpg"
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Tagging file"
- ffmpeg -y \
- -i "$videoDownloadPath/${filenamenoext}.mkv" \
- -c copy \
- -metadata TITLE="$videoTitle" \
- -metadata DATE_RELEASE="$videoDate" \
- -metadata DATE="$videoDate" \
- -metadata YEAR="$videoYear" \
- -metadata GENRE="$genre" \
- -metadata ARTIST="$lidarrArtistName" \
- -metadata ALBUMARTIST="$lidarrArtistName" \
- -metadata ENCODED_BY="lidarr-extended" \
- -attach "$videoDownloadPath/poster.jpg" -metadata:s:t mimetype=image/jpeg \
- "$videoDownloadPath/$videoFileName"
- chmod 666 "$videoDownloadPath/$videoFileName"
- fi
- if [ -f "$videoDownloadPath/$videoFileName" ]; then
- if [ -f "$videoDownloadPath/${filenamenoext}.mkv" ]; then
- rm "$videoDownloadPath/${filenamenoext}.mkv"
- fi
- fi
- done
-
- downloadedFileSize=$(stat -c "%s" "$videoDownloadPath/$videoFileName")
-
- if [ -f "$existingFile" ]; then
- if [ $downloadedFileSize -lt $existingFileSize ]; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Downloaded file is smaller than existing file ($downloadedFileSize -lt $existingFileSize), skipping..."
- rm -rf "$videoDownloadPath"/*
- continue
- fi
- if [ $downloadedFileSize == $existingFileSize ]; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Existing File is the same size as the download ($downloadedFileSize = $existingFileSize), skipping..."
- rm -rf "$videoDownloadPath"/*
- continue
- fi
- if [ $downloadedFileSize -gt $existingFileSize ]; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Downloaded File is bigger than existing file ($downloadedFileSize -gt $existingFileSize), removing existing file to import the new file..."
- rm "$existingFile"
- fi
- fi
-
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Writing NFO"
- nfo="$videoDownloadPath/${videoTitleClean}${videoType}.nfo"
- if [ -f "$nfo" ]; then
- rm "$nfo"
- fi
- echo "" >> "$nfo"
- echo " ${videoTitle}" >> "$nfo"
- echo " " >> "$nfo"
- echo " " >> "$nfo"
- echo " " >> "$nfo"
- if [ ! -z "$artistGenres" ]; then
- for genre in ${!artistGenres[@]}; do
- artistGenre="${artistGenres[$genre]}"
- echo " $artistGenre" >> "$nfo"
- done
- fi
- echo " " >> "$nfo"
- echo " $videoYear" >> "$nfo"
- for videoArtistId in $(echo "$videoArtistsIds"); do
- videoArtistData=$(echo "$videoArtists" | jq -r "select(.id==$videoArtistId)")
- videoArtistName=$(echo "$videoArtistData" | jq -r .name)
- videoArtistType=$(echo "$videoArtistData" | jq -r .type)
- echo " $videoArtistName" >> "$nfo"
- done
- echo " " >> "$nfo"
- echo " $lidarrArtistName" >> "$nfo"
- echo " $lidarrArtistMusicbrainzId" >> "$nfo"
- echo " " >> "$nfo"
- echo " ${videoTitleClean}${videoType}.jpg" >> "$nfo"
- echo " tidal" >> "$nfo"
- echo "" >> "$nfo"
- tidy -w 2000 -i -m -xml "$nfo" &>/dev/null
- chmod 666 "$nfo"
-
-
-
- if [ -f "$videoDownloadPath/$videoFileName" ]; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Moving Download to final destination"
- if [ ! -d "$videoPath/$lidarrArtistFolderNoDisambig" ]; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Creating Destination Directory \"$videoPath/$lidarrArtistFolderNoDisambig\""
- mkdir -p "$videoPath/$lidarrArtistFolderNoDisambig"
- chmod 777 "$videoPath/$lidarrArtistFolderNoDisambig"
- fi
- mv "$videoDownloadPath/$videoFileName" "$videoPath/$lidarrArtistFolderNoDisambig/${videoFileName}"
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Setting permissions"
- chmod 666 "$videoPath/$lidarrArtistFolderNoDisambig/${videoFileName}"
- if [ -f "$nfo" ]; then
- if [ -f "$existingFileNfo" ]; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Deleting existing video nfo"
- rm "$existingFileNfo"
- fi
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Moving video nfo to final destination"
- mv "$nfo" "$videoPath/$lidarrArtistFolderNoDisambig/${videoTitleClean}${videoType}.nfo"
- chmod 666 "$videoPath/$lidarrArtistFolderNoDisambig/${videoTitleClean}${videoType}.nfo"
- fi
-
- if [ -f "$videoDownloadPath/poster.jpg" ]; then
- if [ -f "$existingFileJpg" ]; then
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Deleting existing video jpg"
- rm "$existingFileJpg"
- fi
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Moving video poster to final destination"
- mv "$videoDownloadPath/poster.jpg" "$videoPath/$lidarrArtistFolderNoDisambig/${videoTitleClean}${videoType}.jpg"
- chmod 666 "$videoPath/$lidarrArtistFolderNoDisambig/${videoTitleClean}${videoType}.jpg"
- fi
- fi
-
- if [ ! -d /config/extended/logs/tidal-video ]; then
- mkdir -p /config/extended/logs/tidal-video
- chmod 777 /config/extended/logs/tidal-video
- fi
- log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Logging completed download $id to: /config/extended/logs/tidal-video/$id"
- touch /config/extended/logs/tidal-video/$id
- chmod 666 "/config/extended/logs/tidal-video/$id"
- done
-done
-exit
diff --git a/lidarr/TidalVideoDownloader.bash b/lidarr/TidalVideoDownloader.bash
new file mode 100644
index 0000000..cfb0c29
--- /dev/null
+++ b/lidarr/TidalVideoDownloader.bash
@@ -0,0 +1,486 @@
+#!/usr/bin/env bash
+scriptVersion="1.0"
+scriptName="Tidal Video Downloader"
+
+#### Import Settings
+source /config/extended.conf
+#### Import Functions
+source /config/extended/functions
+
+
+verifyConfig () {
+ videoContainer=mkv
+
+ if [ "$enableVideo" != "true" ]; then
+ log "Script is not enabled, enable by setting enableVideo to \"true\" by modifying the \"/config/extended.conf\" config file..."
+ log "Sleeping (infinity)"
+ sleep infinity
+ fi
+
+ if [ -z "$downloadPath" ]; then
+ downloadPath="/config/extended/downloads"
+ fi
+ videoDownloadPath="$downloadPath/tidal/videos"
+ if [ -z "$videoScriptInterval" ]; then
+ videoScriptInterval="15m"
+ fi
+
+ if [ -z "$videoPath" ]; then
+ log "ERROR: videoPath is not configured via the \"/config/extended.conf\" config file..."
+ log "Updated your \"/config/extended.conf\" file with the latest options, see: https://github.com/RandomNinjaAtk/arr-scripts/blob/main/lidarr/extended.conf"
+ log "Sleeping (infinity)"
+ sleep infinity
+ fi
+}
+
+TidalClientSetup () {
+ log "TIDAL :: Verifying tidal-dl configuration"
+
+ tidal-dl -o "$videoDownloadPath"/incomplete 2>&1 | tee -a /config/logs/$scriptName.txt
+ tidalQuality=HiFi
+
+ if [ ! -f /config/xdg/.tidal-dl.token.json ]; then
+ #log "TIDAL :: ERROR :: Downgrade tidal-dl for workaround..."
+ #pip3 install tidal-dl==2022.3.4.2 --no-cache-dir &>/dev/null
+ log "TIDAL :: ERROR :: Loading client for required authentication, please authenticate, then exit the client..."
+ NotifyWebhook "FatalError" "TIDAL requires authentication, please authenticate now (check logs)"
+ tidal-dl
+ fi
+
+ if [ ! -d "$videoDownloadPath/incomplete" ]; then
+ mkdir -p "$videoDownloadPath"/incomplete
+ chmod 777 "$videoDownloadPath"/incomplete
+ else
+ rm -rf "$videoDownloadPath"/incomplete/*
+ fi
+
+ #log "TIDAL :: Upgrade tidal-dl to newer version..."
+ #pip3 install tidal-dl==2022.07.06.1 --no-cache-dir &>/dev/null
+
+}
+
+TidaldlStatusCheck () {
+ until false
+ do
+ running=no
+ if ps aux | grep "tidal-dl" | grep -v "grep" | read; then
+ running=yes
+ log "STATUS :: TIDAL-DL :: BUSY :: Pausing/waiting for all active tidal-dl tasks to end..."
+ sleep 2
+ continue
+ fi
+ break
+ done
+}
+
+TidalClientTest () {
+ log "TIDAL :: tidal-dl client setup verification..."
+ i=0
+ while [ $i -lt 3 ]; do
+ i=$(( $i + 1 ))
+ TidaldlStatusCheck
+ tidal-dl -q Normal -o "$videoDownloadPath"/incomplete -l "$tidalClientTestDownloadId" 2>&1 | tee -a /config/logs/$scriptName.txt
+ downloadCount=$(find "$videoDownloadPath"/incomplete -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | wc -l)
+ if [ $downloadCount -le 0 ]; then
+ continue
+ else
+ break
+ fi
+ done
+ tidalClientTest="unknown"
+ if [ $downloadCount -le 0 ]; then
+ if [ -f /config/xdg/.tidal-dl.token.json ]; then
+ rm /config/xdg/.tidal-dl.token.json
+ fi
+ log "TIDAL :: ERROR :: Download failed"
+ log "TIDAL :: ERROR :: You will need to re-authenticate on next script run..."
+ log "TIDAL :: ERROR :: Exiting..."
+ rm -rf "$videoDownloadPath"/incomplete/*
+ NotifyWebhook "Error" "TIDAL not authenticated but configured"
+ tidalClientTest="failed"
+ exit
+ else
+ rm -rf "$videoDownloadPath"/incomplete/*
+ log "TIDAL :: Successfully Verified"
+ tidalClientTest="success"
+ fi
+}
+
+AddFeaturedVideoArtists () {
+ if [ "$addFeaturedVideoArtists" != "true" ]; then
+ log "-----------------------------------------------------------------------------"
+ log "Add Featured Music Video Artists to Lidarr :: DISABLED"
+ log "-----------------------------------------------------------------------------"
+ return
+ fi
+ log "-----------------------------------------------------------------------------"
+ log "Add Featured Music Video Artists to Lidarr :: ENABLED"
+ log "-----------------------------------------------------------------------------"
+ lidarrArtistsData="$(curl -s "$arrUrl/api/v1/artist?apikey=${arrApiKey}" | jq -r ".[]")"
+ artistTidalUrl=$(echo $lidarrArtistsData | jq -r '.links[] | select(.name=="tidal") | .url')
+ videoArtists=$(ls /config/extended/cache/tidal-videos/)
+ videoArtistsCount=$(ls /config/extended/cache/tidal-videos/ | wc -l)
+ if [ "$videoArtistsCount" == "0" ]; then
+ log "$videoArtistsCount Artists found for processing, skipping..."
+ return
+ fi
+ loopCount=0
+ for slug in $(echo $videoArtists); do
+ loopCount=$(( $loopCount + 1))
+ artistName="$(cat /config/extended/cache/tidal-videos/$slug)"
+ if echo "$artistTidalUrl" | grep -i "tidal.com/artist/${slug}$" | read; then
+ log "$loopCount of $videoArtistsCount :: $artistName :: Already added to Lidarr, skipping..."
+ continue
+ fi
+ log "$loopCount of $videoArtistsCount :: $artistName :: Processing url :: https://tidal.com/artist/${slug}"
+
+ artistNameEncoded="$(jq -R -r @uri <<<"$artistName")"
+ lidarrArtistSearchData="$(curl -s "$arrUrl/api/v1/search?term=${artistNameEncoded}&apikey=${arrApiKey}")"
+ lidarrArtistMatchedData=$(echo $lidarrArtistSearchData | jq -r ".[] | select(.artist) | select(.artist.links[].url | contains (\"tidal.com/artist/${slug}\"))" 2>/dev/null)
+
+ if [ ! -z "$lidarrArtistMatchedData" ]; then
+ data="$lidarrArtistMatchedData"
+ artistName="$(echo "$data" | jq -r ".artist.artistName")"
+ foreignId="$(echo "$data" | jq -r ".foreignId")"
+ else
+ log "$loopCount of $videoArtistsCount :: $artistName :: ERROR : Musicbrainz ID Not Found, skipping..."
+ continue
+ fi
+ data=$(curl -s "$arrUrl/api/v1/rootFolder" -H "X-Api-Key: $arrApiKey" | jq -r ".[]")
+ path="$(echo "$data" | jq -r ".path")"
+ qualityProfileId="$(echo "$data" | jq -r ".defaultQualityProfileId")"
+ metadataProfileId="$(echo "$data" | jq -r ".defaultMetadataProfileId")"
+ data="{
+ \"artistName\": \"$artistName\",
+ \"foreignArtistId\": \"$foreignId\",
+ \"qualityProfileId\": $qualityProfileId,
+ \"metadataProfileId\": $metadataProfileId,
+ \"monitored\":true,
+ \"monitor\":\"all\",
+ \"rootFolderPath\": \"$path\",
+ \"addOptions\":{\"searchForMissingAlbums\":false}
+ }"
+
+ if echo "$lidarrArtistIds" | grep "^${foreignId}$" | read; then
+ log "$loopCount of $videoArtistsCount :: $artistName :: Already in Lidarr ($foreignId), skipping..."
+ continue
+ fi
+ log "$loopCount of $videoArtistsCount :: $artistName :: Adding $artistName to Lidarr ($foreignId)..."
+ LidarrTaskStatusCheck
+ lidarrAddArtist=$(curl -s "$arrUrl/api/v1/artist" -X POST -H 'Content-Type: application/json' -H "X-Api-Key: $arrApiKey" --data-raw "$data")
+ done
+
+}
+
+LidarrTaskStatusCheck () {
+ alerted=no
+ until false
+ do
+ taskCount=$(curl -s "$arrUrl/api/v1/command?apikey=${arrApiKey}" | jq -r '.[] | select(.status=="started") | .name' | wc -l)
+ if [ "$taskCount" -ge "1" ]; then
+ if [ "$alerted" = "no" ]; then
+ alerted=yes
+ log "STATUS :: LIDARR BUSY :: Pausing/waiting for all active Lidarr tasks to end..."
+ fi
+ sleep 2
+ else
+ break
+ fi
+ done
+}
+
+VideoProcess () {
+ lidarrArtists=$(wget --timeout=0 -q -O - "$arrUrl/api/v1/artist?apikey=$arrApiKey" | jq -r .[])
+ lidarrArtistIds=$(echo $lidarrArtists | jq -r .id)
+ lidarrArtistCount=$(echo "$lidarrArtistIds" | wc -l)
+ for lidarrArtistId in $(echo $lidarrArtistIds); do
+ processCount=$(( $processCount + 1))
+ lidarrArtistData=$(wget --timeout=0 -q -O - "$arrUrl/api/v1/artist/$lidarrArtistId?apikey=$arrApiKey")
+ lidarrArtistName=$(echo $lidarrArtistData | jq -r .artistName)
+ lidarrArtistMusicbrainzId=$(echo $lidarrArtistData | jq -r .foreignArtistId)
+ lidarrArtistPath="$(echo "${lidarrArtistData}" | jq -r " .path")"
+ lidarrArtistFolder="$(basename "${lidarrArtistPath}")"
+ lidarrArtistFolderNoDisambig="$(echo "$lidarrArtistFolder" | sed "s/ (.*)$//g" | sed "s/\.$//g")" # Plex Sanitization, remove disambiguation
+
+ artistGenres=""
+ OLDIFS="$IFS"
+ IFS=$'\n'
+ artistGenres=($(echo $lidarrArtistData | jq -r ".genres[]"))
+ IFS="$OLDIFS"
+ if [ ! -z "$artistGenres" ]; then
+ for genre in ${!artistGenres[@]}; do
+ artistGenre="${artistGenres[$genre]}"
+ OUT=$OUT"$artistGenre / "
+ done
+ genre="${OUT%???}"
+ else
+ genre=""
+ fi
+
+ tidalArtistUrl=$(echo "${lidarrArtistData}" | jq -r ".links | .[] | select(.name==\"tidal\") | .url")
+ tidalArtistIds="$(echo "$tidalArtistUrl" | grep -o '[[:digit:]]*' | sort -u | head -n1)"
+ lidarrArtistTrackData=$(wget --timeout=0 -q -O - "$arrUrl/api/v1/track?artistId=$lidarrArtistId&apikey=${arrApiKey}" | jq -r .[].title)
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: Getting Tidal Video Data..."
+ tidalVideosData=$(curl -s "https://api.tidal.com/v1/artists/${tidalArtistIds}/videos?countryCode=${tidalCountryCode}&offset=0&limit=100" -H "x-tidal-token: CzET4vdadNUFQ5JU" | jq -r ".items | sort_by(.explicit) | reverse | .[]")
+ tidalVideoIds=$(echo $tidalVideosData | jq -r .id)
+ tidalVideoIdsCount=$(echo "$tidalVideoIds" | wc -l)
+ tidalVideoProcessNumber=0
+
+ for id in $(echo "$tidalVideoIds"); do
+ tidalVideoProcessNumber=$(( $tidalVideoProcessNumber + 1 ))
+ videoData=$(echo $tidalVideosData | jq -r "select(.id==$id)")
+ videoTitle=$(echo $videoData | jq -r .title)
+ videoTitleClean="$(echo "$videoTitle" | sed 's%/%-%g')"
+ videoTitleClean="$(echo "$videoTitleClean" | sed -e "s/[:alpha:][:digit:]._' -/ /g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
+ videoExplicit=$(echo $videoData | jq -r .explicit)
+ videoUrl="https://tidal.com/browse/video/$id"
+ videoDate="$(echo "$videoData" | jq -r ".releaseDate")"
+ videoDate="${videoDate:0:10}"
+ videoYear="${videoDate:0:4}"
+ videoImageId="$(echo "$videoData" | jq -r ".imageId")"
+ videoImageIdFix="$(echo "$videoImageId" | sed "s/-/\//g")"
+ videoThumbnailUrl="https://resources.tidal.com/images/$videoImageIdFix/750x500.jpg"
+ videoSource="tidal"
+ videoArtists="$(echo "$videoData" | jq -r ".artists[]")"
+ videoArtistsIds="$(echo "$videoArtists" | jq -r ".id")"
+ videoType=""
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Processing..."
+
+ if echo "$videoTitle" | grep -i "official" | grep -i "video" | read; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Official Music Video Match Found!"
+ videoType="-video"
+ elif echo "$videoTitle" | grep -i "official" | grep -i "lyric" | read; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Official Lyric Video Match Found!"
+ videoType="-lyrics"
+ elif echo "$videoTitle" | grep -i "video" | grep -i "lyric" | read; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Official Lyric Video Match Found!"
+ videoType="-lyrics"
+ elif echo "$videoTitle" | grep -i "4k upgrade" | read; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: 4K Upgrade Found!"
+ videoType="-video"
+ elif echo "$videoTitle" | grep -i "\(.*live.*\)" | read; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Live Video Found!"
+ videoType="-live"
+ elif echo $lidarrArtistTrackData | grep -i "$videoTitle" | read; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Music Video Track Name Match Found!"
+ videoType="-video"
+ else
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: ERROR :: Unable to match!"
+ continue
+ fi
+
+ videoFileName="${videoTitleClean}${videoType}.mkv"
+ existingFileSize=""
+ existingFile=""
+
+ if [ -d "$videoPath/$lidarrArtistFolderNoDisambig" ]; then
+ existingFile="$(find "$videoPath/$lidarrArtistFolderNoDisambig" -type f -iname "${videoFileName}")"
+ existingFileNfo="$(find "$videoPath/$lidarrArtistFolderNoDisambig" -type f -iname "${videoTitleClean}${videoType}.nfo")"
+ existingFileJpg="$(find "$videoPath/$lidarrArtistFolderNoDisambig" -type f -iname "${videoTitleClean}${videoType}.jpg")"
+ fi
+ if [ -f "$existingFile" ]; then
+ existingFileSize=$(stat -c "%s" "$existingFile")
+ fi
+
+ if [ -f /config/extended/logs/tidal-video/$id ]; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Previously Downloaded"
+ if [ -f "$existingFile" ]; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Previously Downloaded, skipping..."
+ continue
+ else
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Previously Downloaded file missing, re-downloading..."
+ fi
+ fi
+
+ if [ ! -d "/config/extended/cache/tidal-videos" ]; then
+ mkdir -p "/config/extended/cache/tidal-videos"
+ chmod 777 "/config/extended/cache/tidal-videos"
+ fi
+ if [ ! -f "/config/extended/cache/tidal-videos/$tidalArtistIds" ]; then
+ echo -n "$lidarrArtistName" > "/config/extended/cache/tidal-videos/$tidalArtistIds"
+ fi
+
+ for videoArtistId in $(echo "$videoArtistsIds"); do
+ videoArtistData=$(echo "$videoArtists" | jq -r "select(.id==$videoArtistId)")
+ videoArtistName=$(echo "$videoArtistData" | jq -r .name)
+ videoArtistType=$(echo "$videoArtistData" | jq -r .type)
+ if [ ! -f "/config/extended/cache/tidal-videos/$videoArtistId" ]; then
+ echo -n "$videoArtistName" > "/config/extended/cache/tidal-videos/$videoArtistId"
+ fi
+ done
+
+
+
+ if [ ! -d "$videoDownloadPath/incomplete" ]; then
+ mkdir -p "$videoDownloadPath/incomplete"
+ fi
+
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Downloading..."
+ tidal-dl -q HiFi -o "$videoDownloadPath/incomplete" -l "$videoUrl"
+ find "$videoDownloadPath/incomplete" -type f -exec mv "{}" "$videoDownloadPath/incomplete"/ \;
+ find "$videoDownloadPath/incomplete" -mindepth 1 -type d -exec rm -rf "{}" \; &>/dev/null
+ find "$videoDownloadPath/incomplete" -type f -regex ".*/.*\.\(mkv\|mp4\)" -print0 | while IFS= read -r -d '' video; do
+ file="${video}"
+ filenoext="${file%.*}"
+ filename="$(basename "$video")"
+ extension="${filename##*.}"
+ filenamenoext="${filename%.*}"
+ mv "$file" "$videoDownloadPath/$filename"
+
+
+ if [ -f "$videoDownloadPath/$filename" ]; then
+ chmod 666 "$videoDownloadPath/$filename"
+ downloadFailed=false
+ else
+ continue 2
+ fi
+
+ if [ "$videoDownloadPath/incomplete" ]; then
+ rm -rf "$videoDownloadPath/incomplete"
+ fi
+
+ if python3 /usr/local/sma/manual.py --config "/config/extended/sma.ini" -i "$videoDownloadPath/$filename" -nt; then
+ sleep 0.01
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Processed with SMA..."
+ rm /usr/local/sma/config/*log*
+ else
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: ERROR: SMA Processing Error"
+ rm "$videoDownloadPath/$filename"
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: INFO: deleted: $filename"
+ fi
+
+ if [ -f "$videoDownloadPath/${filenamenoext}.mkv" ]; then
+ curl -s "$videoThumbnailUrl" -o "$videoDownloadPath/poster.jpg"
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Tagging file"
+ ffmpeg -y \
+ -i "$videoDownloadPath/${filenamenoext}.mkv" \
+ -c copy \
+ -metadata TITLE="$videoTitle" \
+ -metadata DATE_RELEASE="$videoDate" \
+ -metadata DATE="$videoDate" \
+ -metadata YEAR="$videoYear" \
+ -metadata GENRE="$genre" \
+ -metadata ARTIST="$lidarrArtistName" \
+ -metadata ALBUMARTIST="$lidarrArtistName" \
+ -metadata ENCODED_BY="lidarr-extended" \
+ -attach "$videoDownloadPath/poster.jpg" -metadata:s:t mimetype=image/jpeg \
+ "$videoDownloadPath/$videoFileName"
+ chmod 666 "$videoDownloadPath/$videoFileName"
+ fi
+ if [ -f "$videoDownloadPath/$videoFileName" ]; then
+ if [ -f "$videoDownloadPath/${filenamenoext}.mkv" ]; then
+ rm "$videoDownloadPath/${filenamenoext}.mkv"
+ fi
+ fi
+ done
+
+ downloadedFileSize=$(stat -c "%s" "$videoDownloadPath/$videoFileName")
+
+ if [ -f "$existingFile" ]; then
+ if [ $downloadedFileSize -lt $existingFileSize ]; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Downloaded file is smaller than existing file ($downloadedFileSize -lt $existingFileSize), skipping..."
+ rm -rf "$videoDownloadPath"/*
+ continue
+ fi
+ if [ $downloadedFileSize == $existingFileSize ]; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Existing File is the same size as the download ($downloadedFileSize = $existingFileSize), skipping..."
+ rm -rf "$videoDownloadPath"/*
+ continue
+ fi
+ if [ $downloadedFileSize -gt $existingFileSize ]; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Downloaded File is bigger than existing file ($downloadedFileSize -gt $existingFileSize), removing existing file to import the new file..."
+ rm "$existingFile"
+ fi
+ fi
+
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Writing NFO"
+ nfo="$videoDownloadPath/${videoTitleClean}${videoType}.nfo"
+ if [ -f "$nfo" ]; then
+ rm "$nfo"
+ fi
+ echo "" >> "$nfo"
+ echo " ${videoTitle}" >> "$nfo"
+ echo " " >> "$nfo"
+ echo " " >> "$nfo"
+ echo " " >> "$nfo"
+ if [ ! -z "$artistGenres" ]; then
+ for genre in ${!artistGenres[@]}; do
+ artistGenre="${artistGenres[$genre]}"
+ echo " $artistGenre" >> "$nfo"
+ done
+ fi
+ echo " " >> "$nfo"
+ echo " $videoYear" >> "$nfo"
+ for videoArtistId in $(echo "$videoArtistsIds"); do
+ videoArtistData=$(echo "$videoArtists" | jq -r "select(.id==$videoArtistId)")
+ videoArtistName=$(echo "$videoArtistData" | jq -r .name)
+ videoArtistType=$(echo "$videoArtistData" | jq -r .type)
+ echo " $videoArtistName" >> "$nfo"
+ done
+ echo " " >> "$nfo"
+ echo " $lidarrArtistName" >> "$nfo"
+ echo " $lidarrArtistMusicbrainzId" >> "$nfo"
+ echo " " >> "$nfo"
+ echo " ${videoTitleClean}${videoType}.jpg" >> "$nfo"
+ echo " tidal" >> "$nfo"
+ echo "" >> "$nfo"
+ tidy -w 2000 -i -m -xml "$nfo" &>/dev/null
+ chmod 666 "$nfo"
+
+
+
+ if [ -f "$videoDownloadPath/$videoFileName" ]; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Moving Download to final destination"
+ if [ ! -d "$videoPath/$lidarrArtistFolderNoDisambig" ]; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Creating Destination Directory \"$videoPath/$lidarrArtistFolderNoDisambig\""
+ mkdir -p "$videoPath/$lidarrArtistFolderNoDisambig"
+ chmod 777 "$videoPath/$lidarrArtistFolderNoDisambig"
+ fi
+ mv "$videoDownloadPath/$videoFileName" "$videoPath/$lidarrArtistFolderNoDisambig/${videoFileName}"
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Setting permissions"
+ chmod 666 "$videoPath/$lidarrArtistFolderNoDisambig/${videoFileName}"
+ if [ -f "$nfo" ]; then
+ if [ -f "$existingFileNfo" ]; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Deleting existing video nfo"
+ rm "$existingFileNfo"
+ fi
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Moving video nfo to final destination"
+ mv "$nfo" "$videoPath/$lidarrArtistFolderNoDisambig/${videoTitleClean}${videoType}.nfo"
+ chmod 666 "$videoPath/$lidarrArtistFolderNoDisambig/${videoTitleClean}${videoType}.nfo"
+ fi
+
+ if [ -f "$videoDownloadPath/poster.jpg" ]; then
+ if [ -f "$existingFileJpg" ]; then
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Deleting existing video jpg"
+ rm "$existingFileJpg"
+ fi
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Moving video poster to final destination"
+ mv "$videoDownloadPath/poster.jpg" "$videoPath/$lidarrArtistFolderNoDisambig/${videoTitleClean}${videoType}.jpg"
+ chmod 666 "$videoPath/$lidarrArtistFolderNoDisambig/${videoTitleClean}${videoType}.jpg"
+ fi
+ fi
+
+ if [ ! -d /config/extended/logs/tidal-video ]; then
+ mkdir -p /config/extended/logs/tidal-video
+ chmod 777 /config/extended/logs/tidal-video
+ fi
+ log "$processCount/$lidarrArtistCount :: $lidarrArtistName :: $tidalVideoProcessNumber/$tidalVideoIdsCount :: $videoTitle :: Logging completed download $id to: /config/extended/logs/tidal-video/$id"
+ touch /config/extended/logs/tidal-video/$id
+ chmod 666 "/config/extended/logs/tidal-video/$id"
+ done
+ done
+}
+
+log "Starting Script...."
+for (( ; ; )); do
+ let i++
+ verifyConfig
+ getArrAppInfo
+ verifyApiAccess
+ TidalClientSetup
+ AddFeaturedVideoArtists
+ VideoProcess
+ log "Script sleeping for $videoScriptInterval..."
+ sleep $videoScriptInterval
+done
+exit