137 lines
4.2 KiB
Bash
137 lines
4.2 KiB
Bash
#!/bin/bash
|
|
## The function of this script is to show you possible wrongly maateched movies in Plex Media Server
|
|
## Copy paste URL result in broser and use Plex feature: Fix Matched
|
|
##
|
|
## Setup
|
|
## 1. chmod a+x plex-matched-wrong.sh
|
|
## 2. Set correct paths in variables
|
|
##
|
|
## More scripts at: https://github.com/ajkis/scripts
|
|
## If you find script useful feel free to buy me a beer at https://paypal.me/ajki
|
|
|
|
if pidof -o %PPID -x "$0"; then
|
|
exit 1
|
|
fi
|
|
LOGFILE="/home/plex/logs/pmsmatchwrong.log"
|
|
DB="/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db"
|
|
PLEXURL="http://XXX:32400/web/index.html#!/server/XXX/details?key=%2Flibrary%2Fmetadata%2F"
|
|
export LD_LIBRARY_PATH=/usr/lib/plexmediaserver
|
|
export PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR=/var/lib/plexmediaserver/Library/Application\ Support
|
|
MOVIESSECTION=1 # SET PLEX SECTION FOR MOVIES
|
|
|
|
echo "Plex Libraries"
|
|
$LD_LIBRARY_PATH/Plex\ Media\ Scanner --list
|
|
|
|
echo "Script movie section setting: $MOVIESSECTION"
|
|
read -n1 -r -p "Press space/enter to continue or any other key to exit..." key
|
|
if [ "$key" != '' ]; then
|
|
echo " "
|
|
echo "EXIT: Aborted"
|
|
exit
|
|
fi
|
|
|
|
if [[ -f $LOGFILE ]]; then
|
|
rm -f $LOGFILE
|
|
fi
|
|
|
|
qcase1=" \
|
|
with \
|
|
movies_only as ( \
|
|
select * \
|
|
from metadata_items \
|
|
where library_section_id = $MOVIESSECTION \
|
|
and title <> '' \
|
|
), \
|
|
duplicates as ( \
|
|
select * \
|
|
from movies_only \
|
|
where title || year in ( \
|
|
select t_y \
|
|
from ( \
|
|
select title || year as t_y, count(*) N \
|
|
from movies_only \
|
|
group by title || year \
|
|
) as x \
|
|
where N >= 2 \
|
|
) \
|
|
) \
|
|
select \
|
|
duplicates.id as metadata_items_id, \
|
|
duplicates.title as metadata_items_title, \
|
|
media_parts.file as media_parts_file \
|
|
from duplicates \
|
|
join media_items \
|
|
on media_items.metadata_item_id = duplicates.id \
|
|
join media_parts \
|
|
on media_parts.media_item_id = media_items.id \
|
|
order by duplicates.title \
|
|
"
|
|
|
|
qcase2="with \
|
|
movies_only as ( \
|
|
select * \
|
|
from metadata_items \
|
|
where library_section_id = $MOVIESSECTION \
|
|
and title <> '' \
|
|
), \
|
|
duplicates as ( \
|
|
select * \
|
|
from movies_only \
|
|
where title || year in ( \
|
|
select t_y \
|
|
from ( \
|
|
select title || year as t_y, count(*) N \
|
|
from movies_only \
|
|
group by title || year \
|
|
) as x \
|
|
where N >= 1 \
|
|
) \
|
|
), \
|
|
merged as ( \
|
|
select \
|
|
duplicates.id as metadata_items_id, \
|
|
duplicates.title as metadata_items_title, \
|
|
media_parts.file as media_parts_file \
|
|
from duplicates \
|
|
join media_items \
|
|
on media_items.metadata_item_id = duplicates.id \
|
|
join media_parts \
|
|
on media_parts.media_item_id = media_items.id \
|
|
) \
|
|
select * \
|
|
from merged \
|
|
where media_parts_file not like '%' || replace(replace(replace(replace(metadata_items_title, ':', ''), '...', ''), '?', ''), ' ', ' ') || '%' \
|
|
order by metadata_items_title \
|
|
"
|
|
|
|
readarray -t case1 < <(sqlite3 "$DB" "$qcase1")
|
|
readarray -t case2 < <(sqlite3 "$DB" "$qcase2")
|
|
|
|
echo "POSSIBLY WRONLGY MATCHED MOVIES WHERE TITLE IS NOT UNIQUE" | tee -a $LOGFILE
|
|
echo "One of the results is correct, check based on file name and manually fix second one"
|
|
echo "Copy paste URL in browser and use Fix Match"
|
|
sqlite3 "$DB" "$query1" |
|
|
|
|
for result in "${case1[@]}"
|
|
do
|
|
echo "$result" | tee -a $LOGFILE
|
|
result=$(echo $result | cut -d "|" -f1)
|
|
echo "URL: ${PLEXURL}$result" | tee -a $LOGFILE
|
|
echo " " | tee -a $LOGFILE
|
|
done
|
|
echo " " | tee -a $LOGFILE
|
|
|
|
echo "POSSIBLY WRONLGY MATCHED MOVIES WHERE PLEX TITLE IS NOT PRESENT IN FOLDER OR FILE NAME" | tee -a $LOGFILE
|
|
echo "Copy paste URL in browser and use Fix Match" | tee -a $LOGFILE
|
|
for result in "${case2[@]}"
|
|
do
|
|
echo "$result" | tee -a $LOGFILE
|
|
result=$(echo $result | cut -d "|" -f1)
|
|
echo "URL: ${PLEXURL}$result" | tee -a $LOGFILE
|
|
echo " " | tee -a $LOGFILE
|
|
done
|
|
|
|
echo "Finished, all results are logged in: $LOGFILE"
|
|
|
|
exit
|