diff --git a/GitVersion.yml b/GitVersion.yml index d984e63..f3dad2e 100644 --- a/GitVersion.yml +++ b/GitVersion.yml @@ -3,4 +3,4 @@ ignore: sha: [] merge-message-formats: {} mode: ContinuousDelivery -next-version: 2.11.4 +next-version: 2.11.5 diff --git a/assets/plexmovieposter/PMPDLib.php b/assets/plexmovieposter/PMPDLib.php index 8ece9cf..330d594 100644 --- a/assets/plexmovieposter/PMPDLib.php +++ b/assets/plexmovieposter/PMPDLib.php @@ -285,10 +285,11 @@ function SetFullScreenMode($SetMode = FALSE) { } } -function PMPD_DisplayMediaInfo(){ +function PMPD_DisplayMediaInfo() { // Global Variables - Input global $mediaContentRating, $mediaVideoCodec, $mediaVideoResolution, $mediaAudioCodec, $mediaAudioChannelLayout; - + global $bottomSize; + // Global Variables - Output global $bottomLine; @@ -296,76 +297,76 @@ function PMPD_DisplayMediaInfo(){ $title = "PRESENTED IN"; - $iconSizeWidth = "20%"; - // https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions/ + $iconChangeID = "2021-03-31"; + switch ($mediaContentRating) { case "TV-Y": - $contentRatingProfile = "$iconPath/Rated-TVY.png"; + $contentRatingProfile = "$iconPath/Rated-TVY.png?$iconChangeID"; break; case "TV-Y7": - $contentRatingProfile = "$iconPath/Rated-TVY7.png"; + $contentRatingProfile = "$iconPath/Rated-TVY7.png?$iconChangeID"; break; case "TV-Y7 FV": - $contentRatingProfile = "$iconPath/Rated-TVY7FV.png"; + $contentRatingProfile = "$iconPath/Rated-TVY7FV.png?$iconChangeID"; break; case "G": - $contentRatingProfile = "$iconPath/Rated-G.png"; + $contentRatingProfile = "$iconPath/Rated-G.png?$iconChangeID"; break; case "TV-G": - $contentRatingProfile = "$iconPath/Rated-TVG.png"; + $contentRatingProfile = "$iconPath/Rated-TVG.png?$iconChangeID"; break; case "PG": - $contentRatingProfile = "$iconPath/Rated-PG.png"; + $contentRatingProfile = "$iconPath/Rated-PG.png?$iconChangeID"; break; case "TV-PG": - $contentRatingProfile = "$iconPath/Rated-TVPG.png"; + $contentRatingProfile = "$iconPath/Rated-TVPG.png?$iconChangeID"; break; case "PG-13": - $contentRatingProfile = "$iconPath/Rated-PG13.png"; + $contentRatingProfile = "$iconPath/Rated-PG13.png?$iconChangeID"; break; case "TV-14": - $contentRatingProfile = "$iconPath/Rated-TV14.png"; + $contentRatingProfile = "$iconPath/Rated-TV14.png?$iconChangeID"; break; case "R": - $contentRatingProfile = "$iconPath/Rated-R.png"; + $contentRatingProfile = "$iconPath/Rated-R.png?$iconChangeID"; break; case "TV-MA": - $contentRatingProfile = "$iconPath/Rated-TVMA.png"; + $contentRatingProfile = "$iconPath/Rated-TVMA.png?$iconChangeID"; break; case "NC-17": - $contentRatingProfile = "$iconPath/Rated-NC17.png"; + $contentRatingProfile = "$iconPath/Rated-NC17.png?$iconChangeID"; break; case "XXX": - $contentRatingProfile = "$iconPath/Rated-XXX.png"; + $contentRatingProfile = "$iconPath/Rated-XXX.png?$iconChangeID"; break; default: - $contentRatingProfile = "$iconPath/Rated-NA.png"; + $contentRatingProfile = "$iconPath/Rated-NA.png?$iconChangeID"; break; } switch ($mediaVideoResolution) { case "sd": - $videoResolutionProfile = "$iconPath/Res-SD.png"; + $videoResolutionProfile = "$iconPath/Res-SD.png?$iconChangeID"; break; case "720": - $videoResolutionProfile = "$iconPath/Res-HD720.png"; + $videoResolutionProfile = "$iconPath/Res-HD720.png?$iconChangeID"; break; case "720p": - $videoResolutionProfile = "$iconPath/Res-HD720.png"; + $videoResolutionProfile = "$iconPath/Res-HD720.png?$iconChangeID"; break; case "1080": - $videoResolutionProfile = "$iconPath/Res-HD1080.png"; + $videoResolutionProfile = "$iconPath/Res-HD1080.png?$iconChangeID"; break; case "1080p": - $videoResolutionProfile = "$iconPath/Res-HD1080.png"; + $videoResolutionProfile = "$iconPath/Res-HD1080.png?$iconChangeID"; break; case "4k": - $videoResolutionProfile = "$iconPath/Res-UHD4K.png"; + $videoResolutionProfile = "$iconPath/Res-UHD4K.png?$iconChangeID"; break; case "8k": - $videoResolutionProfile = "$iconPath/Res-UHD8K.png"; + $videoResolutionProfile = "$iconPath/Res-UHD8K.png?$iconChangeID"; break; default: $videoResolutionProfile = ""; @@ -416,16 +417,17 @@ function PMPD_DisplayMediaInfo(){ switch ($mediaAudioChannelLayout) { case "mono": - $audioChannelLayoutProfile = ""; + $audioChannelLayoutProfile = "$iconPath/Sound-Mono.png?$iconChangeID"; break; case "stereo": - $audioChannelLayoutProfile = ""; + $audioChannelLayoutProfile = "$iconPath/Sound-2.0.png?$iconChangeID"; break; - case "5.1": - $audioChannelLayoutProfile = ""; + // case "5.1": + case (preg_match('/5.1.*/', $mediaAudioChannelLayout) ? TRUE : FALSE): + $audioChannelLayoutProfile = "$iconPath/Sound-5.1.png?$iconChangeID"; break; case "7.1": - $audioChannelLayoutProfile = "$iconPath/Dolby_TRUEHD71.png"; + $audioChannelLayoutProfile = "$iconPath/Dolby_TRUEHD71.png?$iconChangeID"; break; default: $audioCodecProfile = ""; @@ -433,17 +435,17 @@ function PMPD_DisplayMediaInfo(){ } $profileHeader = ""; - $titleProfile = "
$title

"; + $titleProfile = "

$title

"; - $contentRatingProfile = ""; - $videoResolutionProfile = ""; - $videoCodecProfile = ""; - $audioCodecProfile = ""; - $audioChannelLayoutProfile = ""; + $contentRatingProfile = ""; + $videoResolutionProfile = ""; + $videoCodecProfile = ""; + $audioCodecProfile = ""; + $audioChannelLayoutProfile = ""; $profileFooter = "

"; - $mediaProfiles = "$videoResolutionProfile $videoCodecProfile $audioChannelLayoutProfile $contentRatingProfile"; + $mediaProfiles = $videoResolutionProfile . $videoCodecProfile . $audioChannelLayoutProfile . $contentRatingProfile; $masterProfile = "$profileHeader $titleProfile $mediaProfiles $profileFooter"; diff --git a/assets/plexmovieposter/PlexLib.php b/assets/plexmovieposter/PlexLib.php index 6438359..a078a76 100644 --- a/assets/plexmovieposter/PlexLib.php +++ b/assets/plexmovieposter/PlexLib.php @@ -3,6 +3,8 @@ // NEED TO SUPPORT "movie" and "show" as well as "clients" function plex_metadata_base($mediaType = "episode", $mediaLogMode = "") { + // Global Variables - Input + global $PLEXMetadata; switch ($mediaType) { case "episode": @@ -25,9 +27,12 @@ function plex_metadata_base($mediaType = "episode", $mediaLogMode = "") { break; } + $PLEXMetadata['LogClass'] = $media_logClass; + switch ($mediaLogMode) { case "START": pmp_Logging("$media_logClass", "\n--- Media START Point ---"); + pmp_Logging("$media_logClass", "\tmediaURL @ $mediaType - " . $PLEXMetadata['rootMediaURL']); break; case "END": pmp_Logging("$media_logClass", "--- Media END Point ---"); @@ -40,7 +45,8 @@ function plex_metadata_base($mediaType = "episode", $mediaLogMode = "") { } function plex_metadata_title($mediaType = "episode") { - global $clients; + // Global Variables - Input + global $PLEXMetadata; global $mediaTitle, $mediaTitle_MetadataID; $media_MetadataID_STR = ""; @@ -48,42 +54,43 @@ function plex_metadata_title($mediaType = "episode") { // Title switch ($mediaType) { case "episode": - $media_logClass = "PLEX_getTVMetadata"; $media_metadata_name = 'title'; break; case "season": - $media_logClass = "PLEX_getTVMetadata"; $media_metadata_name = 'parentTitle'; break; case "series": - $media_logClass = "PLEX_getTVMetadata"; $media_metadata_name = 'grandparentTitle'; break; case "movie": - $media_logClass = "PLEX_getMovieMetadata"; $media_metadata_name = 'title'; break; case "track": - $media_logClass = "PLEX_getMusicMetadata"; $media_metadata_name = 'title'; // Track Title (future - title, parentTitle (Album), grandparentTitle (Artist)) break; default: - $media_logClass = "PLEX_getTVMetadata"; $media_metadata_name = 'title'; + break; } - $mediaTitle = $clients[$media_metadata_name]; + $media_logClass = $PLEXMetadata['LogClass']; + + $rootElement = $PLEXMetadata['rootXMLData']; + $subElement = $rootElement; + $mediaTitle = $subElement[$media_metadata_name]; // $media_MetadataID_TMP = preg_split("#/#", $mediaTitle); // $media_MetadataID = $media_MetadataID_TMP[3]; // $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; // $mediaTitle_MetadataID = $media_MetadataID; + $PLEXMetadata['title'] = $mediaTitle; pmp_Logging("$media_logClass", "\tmediaTitle @ $mediaType ($media_metadata_name) $media_MetadataID_STR - $mediaTitle"); } function plex_metadata_summary($mediaType = "episode") { - global $clients; + // Global Variables - Input + global $PLEXMetadata; global $mediaSummary, $mediaSummary_MetadataID; $media_MetadataID_STR = ""; @@ -92,41 +99,42 @@ function plex_metadata_summary($mediaType = "episode") { switch ($mediaType) { case "episode": $media_metadata_name = 'summary'; - $media_logClass = "PLEX_getTVMetadata"; break; case "season": $media_metadata_name = 'summary'; - $media_logClass = "PLEX_getTVMetadata"; break; case "series": $media_metadata_name = 'summary'; - $media_logClass = "PLEX_getTVMetadata"; break; case "movie": $media_metadata_name = 'summary'; - $media_logClass = "PLEX_getMovieMetadata"; break; case "track": $media_metadata_name = 'summary'; - $media_logClass = "PLEX_getMusicMetadata"; break; default: $media_metadata_name = 'summary'; - $media_logClass = "PLEX_getTVMetadata"; + break; } - $mediaSummary = $clients[$media_metadata_name]; + $media_logClass = $PLEXMetadata['LogClass']; + + $rootElement = $PLEXMetadata['rootXMLData']; + $subElement = $rootElement; + $mediaSummary = $subElement[$media_metadata_name]; // $media_MetadataID_TMP = preg_split("#/#", $mediaSummary); // $media_MetadataID = $media_MetadataID_TMP[3]; // $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; // $mediaSummary_MetadataID = $media_MetadataID; + $PLEXMetadata['summary'] = $mediaSummary; pmp_Logging("$media_logClass", "\tmediaSummary @ $mediaType ($media_metadata_name) $media_MetadataID_STR - \n $mediaSummary"); } function plex_metadata_tagline($mediaType = "episode") { - global $clients; + // Global Variables - Input + global $PLEXMetadata; global $mediaTagline, $mediaTagline_MetadataID; $media_MetadataID_STR = ""; @@ -137,41 +145,42 @@ function plex_metadata_tagline($mediaType = "episode") { switch ($mediaType) { case "episode": $media_metadata_name = 'tagline'; - $media_logClass = "PLEX_getTVMetadata"; break; case "season": $media_metadata_name = 'tagline'; - $media_logClass = "PLEX_getTVMetadata"; break; case "series": $media_metadata_name = 'tagline'; - $media_logClass = "PLEX_getTVMetadata"; break; case "movie": $media_metadata_name = 'tagline'; - $media_logClass = "PLEX_getMovieMetadata"; break; case "track": $media_metadata_name = 'tagline'; - $media_logClass = "PLEX_getMusicMetadata"; break; default: $media_metadata_name = 'tagline'; - $media_logClass = "PLEX_getTVMetadata"; + break; } - $mediaTagline = $clients[$media_metadata_name]; + $media_logClass = $PLEXMetadata['LogClass']; + + $rootElement = $PLEXMetadata['rootXMLData']; + $subElement = $rootElement; + $mediaTagline = $subElement[$media_metadata_name]; // $media_MetadataID_TMP = preg_split("#/#", $mediaTagline); // $media_MetadataID = $media_MetadataID_TMP[3]; // $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; // $mediaTagline_MetadataID = $media_MetadataID; + $PLEXMetadata['tagline'] = $mediaTagline; pmp_Logging("$media_logClass", "\tmediaTagline @ $mediaType ($media_metadata_name) $media_MetadataID_STR - \n $mediaTagline"); } function plex_metadata_art($mediaType = "episode") { - global $clients; + // Global Variables - Input + global $PLEXMetadata; global $mediaArt, $mediaArt_MetadataID; $media_MetadataID_STR = ""; @@ -180,41 +189,42 @@ function plex_metadata_art($mediaType = "episode") { switch ($mediaType) { case "episode": $media_metadata_name = 'art'; - $media_logClass = "PLEX_getTVMetadata"; break; case "season": $media_metadata_name = 'art'; - $media_logClass = "PLEX_getTVMetadata"; break; case "series": $media_metadata_name = 'art'; - $media_logClass = "PLEX_getTVMetadata"; break; case "movie": $media_metadata_name = 'art'; - $media_logClass = "PLEX_getMovieMetadata"; break; case "track": $media_metadata_name = 'art'; - $media_logClass = "PLEX_getMusicMetadata"; break; default: $media_metadata_name = 'art'; - $media_logClass = "PLEX_getTVMetadata"; + break; } - $mediaArt = $clients[$media_metadata_name]; + $media_logClass = $PLEXMetadata['LogClass']; + + $rootElement = $PLEXMetadata['rootXMLData']; + $subElement = $rootElement; + $mediaArt = $subElement[$media_metadata_name]; $media_MetadataID_TMP = preg_split("#/#", $mediaArt); $media_MetadataID = $media_MetadataID_TMP[3]; $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; $mediaArt_MetadataID = $media_MetadataID; + $PLEXMetadata['art'] = $mediaArt; pmp_Logging("$media_logClass", "\tmediaArt @ $mediaType ($media_metadata_name) $media_MetadataID_STR - $mediaArt"); } function plex_metadata_contentRating($mediaType = "episode") { - global $clients; + // Global Variables - Input + global $PLEXMetadata; global $mediaContentRating, $mediaContentRating_MetadataID; $media_MetadataID_STR = ""; @@ -225,77 +235,80 @@ function plex_metadata_contentRating($mediaType = "episode") { switch ($mediaType) { case "episode": $media_metadata_name = 'contentRating'; - $media_logClass = "PLEX_getTVMetadata"; break; case "season": $media_metadata_name = 'contentRating'; - $media_logClass = "PLEX_getTVMetadata"; break; case "series": $media_metadata_name = 'contentRating'; - $media_logClass = "PLEX_getTVMetadata"; break; case "movie": $media_metadata_name = 'contentRating'; - $media_logClass = "PLEX_getMovieMetadata"; break; case "track": $media_metadata_name = 'contentRating'; - $media_logClass = "PLEX_getMusicMetadata"; break; default: $media_metadata_name = 'contentRating'; - $media_logClass = "PLEX_getTVMetadata"; + break; } - $mediaContentRating = $clients[$media_metadata_name]; + $media_logClass = $PLEXMetadata['LogClass']; + + $rootElement = $PLEXMetadata['rootXMLData']; + $subElement = $rootElement; + $mediaContentRating = $subElement[$media_metadata_name]; // $media_MetadataID_TMP = preg_split("#/#", $mediaContentRating); // $media_MetadataID = $media_MetadataID_TMP[3]; // $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; // $mediaContentRating_MetadataID = $media_MetadataID; + $PLEXMetadata['contentRating'] = $mediaContentRating; pmp_Logging("$media_logClass", "\tmediaContentRating @ $mediaType ($media_metadata_name) - \"$mediaContentRating\""); } function plex_metadata_decision($mediaType = "episode", $isPlayingMode = FALSE) { - global $clients, $isPlaying; + // Global Variables - Input + global $PLEXMetadata; + global $isPlaying, $clients; global $mediaDecision, $mediaDecision_MetadataID; $media_MetadataID_STR = ""; // Notes: decision -> directplay/transcode // DirectPlay/Transcode (Only for Playing) + // Requires clients because the decision is not part of the main metadata of the media. - // contentRating + // decision switch ($mediaType) { case "episode": $media_metadata_name = 'decision'; - $media_logClass = "PLEX_getTVMetadata"; break; case "season": $media_metadata_name = 'decision'; - $media_logClass = "PLEX_getTVMetadata"; break; case "series": $media_metadata_name = 'decision'; - $media_logClass = "PLEX_getTVMetadata"; break; case "movie": $media_metadata_name = 'decision'; - $media_logClass = "PLEX_getMovieMetadata"; break; case "track": $media_metadata_name = 'decision'; - $media_logClass = "PLEX_getMusicMetadata"; break; default: $media_metadata_name = 'decision'; - $media_logClass = "PLEX_getTVMetadata"; + break; } + $media_logClass = $PLEXMetadata['LogClass']; + if ($isPlayingMode == TRUE) { - $mediaDecision = $clients->Media->Part[$media_metadata_name]; + $rootElement = $PLEXMetadata['rootXMLData']; + $rootElement = $clients; + $subElement = $rootElement->Media->Part; + $mediaDecision = $subElement[$media_metadata_name]; } else { $mediaDecision = "N/A"; @@ -306,11 +319,14 @@ function plex_metadata_decision($mediaType = "episode", $isPlayingMode = FALSE) // $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; // $mediaDecision_MetadataID = $media_MetadataID; - pmp_Logging("$media_logClass", "\tmediaDecision @ $mediaType ($media_metadata_name) - \"$mediaDecision\""); + $PLEXMetadata['decision'] = $mediaDecision; + pmp_Logging("$media_logClass", "\tmediaDecision @ $mediaType -- isPlaying -- ($media_metadata_name) - \"$mediaDecision\""); } function plex_metadata_audioCodec($mediaType = "episode", $isPlayingMode = FALSE) { - global $clients, $isPlaying; + // Global Variables - Input + global $PLEXMetadata; + global $isPlaying; global $mediaAudioCodec, $mediaAudioCodec_MetadataID; $media_MetadataID_STR = ""; @@ -322,31 +338,30 @@ function plex_metadata_audioCodec($mediaType = "episode", $isPlayingMode = FALSE switch ($mediaType) { case "episode": $media_metadata_name = 'audioCodec'; - $media_logClass = "PLEX_getTVMetadata"; break; case "season": $media_metadata_name = 'audioCodec'; - $media_logClass = "PLEX_getTVMetadata"; break; case "series": $media_metadata_name = 'audioCodec'; - $media_logClass = "PLEX_getTVMetadata"; break; case "movie": $media_metadata_name = 'audioCodec'; - $media_logClass = "PLEX_getMovieMetadata"; break; case "track": $media_metadata_name = 'audioCodec'; - $media_logClass = "PLEX_getMusicMetadata"; break; default: $media_metadata_name = 'audioCodec'; - $media_logClass = "PLEX_getTVMetadata"; + break; } + $media_logClass = $PLEXMetadata['LogClass']; + // if ($isPlayingMode == TRUE) { - $mediaAudioCodec = $clients->Media[$media_metadata_name]; + $rootElement = $PLEXMetadata['rootXMLData']; + $subElement = $rootElement->Media; + $mediaAudioCodec = $subElement[$media_metadata_name]; // } // else { // $mediaAudioCodec = "N/A"; @@ -357,11 +372,14 @@ function plex_metadata_audioCodec($mediaType = "episode", $isPlayingMode = FALSE // $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; // $mediaAudioCodec_MetadataID = $media_MetadataID; + $PLEXMetadata['audioCodec'] = $mediaAudioCodec; pmp_Logging("$media_logClass", "\tmediaAudioCodec @ $mediaType ($media_metadata_name) - \"$mediaAudioCodec\""); } function plex_metadata_audioChannelLayout($mediaType = "episode", $isPlayingMode = FALSE) { - global $clients, $isPlaying; + // Global Variables - Input + global $PLEXMetadata; + global $isPlaying; global $mediaAudioChannelLayout, $mediaAudioChannelLayout_MetadataID; $media_MetadataID_STR = ""; @@ -373,32 +391,30 @@ function plex_metadata_audioChannelLayout($mediaType = "episode", $isPlayingMode switch ($mediaType) { case "episode": $media_metadata_name = 'audioChannelLayout'; - $media_logClass = "PLEX_getTVMetadata"; break; case "season": $media_metadata_name = 'audioChannelLayout'; - $media_logClass = "PLEX_getTVMetadata"; break; case "series": $media_metadata_name = 'audioChannelLayout'; - $media_logClass = "PLEX_getTVMetadata"; break; case "movie": $media_metadata_name = 'audioChannelLayout'; - $media_logClass = "PLEX_getMovieMetadata"; break; case "track": $media_metadata_name = 'audioChannelLayout'; - $media_logClass = "PLEX_getMusicMetadata"; break; default: $media_metadata_name = 'audioChannelLayout'; - $media_logClass = "PLEX_getTVMetadata"; + break; } + $media_logClass = $PLEXMetadata['LogClass']; + // if ($isPlayingMode == TRUE) { - $rootElement = $clients->Media->Part->Stream[0]; - $mediaAudioChannelLayout = $rootElement[$media_metadata_name]; + $rootElement = $PLEXMetadata['rootXMLData']; + $subElement = $rootElement->Media->Part->Stream[1]; + $mediaAudioChannelLayout = $subElement[$media_metadata_name]; // } // else { // $mediaAudioChannelLayout = "N/A"; @@ -409,11 +425,14 @@ function plex_metadata_audioChannelLayout($mediaType = "episode", $isPlayingMode // $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; // $mediaAudioChannelLayout_MetadataID = $media_MetadataID; + $PLEXMetadata['audioChannelLayout'] = $mediaAudioChannelLayout; pmp_Logging("$media_logClass", "\tmediaAudioChannelLayout @ $mediaType ($media_metadata_name) - \"$mediaAudioChannelLayout\""); } function plex_metadata_videoCodec($mediaType = "episode", $isPlayingMode = FALSE) { - global $clients, $isPlaying; + // Global Variables - Input + global $PLEXMetadata; + global $isPlaying; global $mediaVideoCodec, $mediaVideoCodec_MetadataID; $media_MetadataID_STR = ""; @@ -425,31 +444,30 @@ function plex_metadata_videoCodec($mediaType = "episode", $isPlayingMode = FALSE switch ($mediaType) { case "episode": $media_metadata_name = 'videoCodec'; - $media_logClass = "PLEX_getTVMetadata"; break; case "season": $media_metadata_name = 'videoCodec'; - $media_logClass = "PLEX_getTVMetadata"; break; case "series": $media_metadata_name = 'videoCodec'; - $media_logClass = "PLEX_getTVMetadata"; break; case "movie": $media_metadata_name = 'videoCodec'; - $media_logClass = "PLEX_getMovieMetadata"; break; case "track": $media_metadata_name = 'videoCodec'; - $media_logClass = "PLEX_getMusicMetadata"; break; default: $media_metadata_name = 'videoCodec'; - $media_logClass = "PLEX_getTVMetadata"; + break; } + $media_logClass = $PLEXMetadata['LogClass']; + // if ($isPlayingMode == TRUE) { - $mediaVideoCodec = $clients->Media[$media_metadata_name]; + $rootElement = $PLEXMetadata['rootXMLData']; + $subElement = $rootElement->Media; + $mediaVideoCodec = $subElement[$media_metadata_name]; // } // else { // $mediaVideoCodec = "N/A"; @@ -460,11 +478,14 @@ function plex_metadata_videoCodec($mediaType = "episode", $isPlayingMode = FALSE // $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; // $mediaVideoCodec_MetadataID = $media_MetadataID; + $PLEXMetadata['videoCodec'] = $mediaVideoCodec; pmp_Logging("$media_logClass", "\tmediaVideoCodec @ $mediaType ($media_metadata_name) - \"$mediaVideoCodec\""); } function plex_metadata_videoResolution($mediaType = "episode", $isPlayingMode = FALSE) { - global $clients, $isPlaying; + // Global Variables - Input + global $PLEXMetadata; + global $isPlaying; global $mediaVideoResolution, $mediaVideoResolution_MetadataID; $media_MetadataID_STR = ""; @@ -476,31 +497,30 @@ function plex_metadata_videoResolution($mediaType = "episode", $isPlayingMode = switch ($mediaType) { case "episode": $media_metadata_name = 'videoResolution'; - $media_logClass = "PLEX_getTVMetadata"; break; case "season": $media_metadata_name = 'videoResolution'; - $media_logClass = "PLEX_getTVMetadata"; break; case "series": $media_metadata_name = 'videoResolution'; - $media_logClass = "PLEX_getTVMetadata"; break; case "movie": $media_metadata_name = 'videoResolution'; - $media_logClass = "PLEX_getMovieMetadata"; break; case "track": $media_metadata_name = 'videoResolution'; - $media_logClass = "PLEX_getMusicMetadata"; break; default: $media_metadata_name = 'videoResolution'; - $media_logClass = "PLEX_getTVMetadata"; + break; } + $media_logClass = $PLEXMetadata['LogClass']; + // if ($isPlayingMode == TRUE) { - $mediaVideoResolution = $clients->Media[$media_metadata_name]; + $rootElement = $PLEXMetadata['rootXMLData']; + $subElement = $rootElement->Media; + $mediaVideoResolution = $subElement[$media_metadata_name]; // } // else { // $mediaVideoResolution = "N/A"; @@ -511,11 +531,14 @@ function plex_metadata_videoResolution($mediaType = "episode", $isPlayingMode = // $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; // $mediaVideoResolution_MetadataID = $media_MetadataID; + $PLEXMetadata['videoResolution'] = $mediaVideoResolution; pmp_Logging("$media_logClass", "\tmediaVideoResolution @ $mediaType ($media_metadata_name) - \"$mediaVideoResolution\""); } function plex_metadata_audioDisplay($mediaType = "episode", $isPlayingMode = FALSE) { - global $clients, $isPlaying; + // Global Variables - Input + global $PLEXMetadata; + global $isPlaying, $clients; global $mediaAudioDisplay, $mediaAudioDisplay_MetadataID; $media_MetadataID_STR = ""; @@ -527,32 +550,31 @@ function plex_metadata_audioDisplay($mediaType = "episode", $isPlayingMode = FAL switch ($mediaType) { case "episode": $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getTVMetadata"; break; case "season": $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getTVMetadata"; break; case "series": $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getTVMetadata"; break; case "movie": $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getMovieMetadata"; break; case "track": $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getMusicMetadata"; break; default: $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getTVMetadata"; + break; } + $media_logClass = $PLEXMetadata['LogClass']; + if ($isPlayingMode == TRUE) { - $rootElement = $clients->Media->Part->Stream[1]; - $mediaAudioDisplay = $rootElement[$media_metadata_name]; + $rootElement = $PLEXMetadata['rootXMLData']; + $rootElement = $clients; + $subElement = $rootElement->Media->Part->Stream[1]; + $mediaAudioDisplay = $subElement[$media_metadata_name]; } else { $mediaAudioDisplay = "N/A"; @@ -563,11 +585,14 @@ function plex_metadata_audioDisplay($mediaType = "episode", $isPlayingMode = FAL // $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; // $mediaAudioDisplay_MetadataID = $media_MetadataID; - pmp_Logging("$media_logClass", "\tmediaAudioDisplay @ $mediaType ($media_metadata_name) - \"$mediaAudioDisplay\""); + $PLEXMetadata['audioDisplay'] = $mediaAudioDisplay; + pmp_Logging("$media_logClass", "\tmediaAudioDisplay @ $mediaType -- isPlaying -- ($media_metadata_name) - \"$mediaAudioDisplay\""); } function plex_metadata_videoDisplay($mediaType = "episode", $isPlayingMode = FALSE) { - global $clients, $isPlaying; + // Global Variables - Input + global $PLEXMetadata; + global $isPlaying, $clients; global $mediaVideoDisplay, $mediaVideoDisplay_MetadataID; $media_MetadataID_STR = ""; @@ -579,32 +604,31 @@ function plex_metadata_videoDisplay($mediaType = "episode", $isPlayingMode = FAL switch ($mediaType) { case "episode": $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getTVMetadata"; break; case "season": $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getTVMetadata"; break; case "series": $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getTVMetadata"; break; case "movie": $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getMovieMetadata"; break; case "track": $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getMusicMetadata"; break; default: $media_metadata_name = 'displayTitle'; - $media_logClass = "PLEX_getTVMetadata"; + break; } + $media_logClass = $PLEXMetadata['LogClass']; + if ($isPlayingMode == TRUE) { - $rootElement = $clients->Media->Part->Stream[0]; - $mediaVideoDisplay = $rootElement[$media_metadata_name]; + $rootElement = $PLEXMetadata['rootXMLData']; + $rootElement = $clients; + $subElement = $rootElement->Media->Part->Stream[0]; + $mediaVideoDisplay = $subElement[$media_metadata_name]; } else { $mediaVideoDisplay = "N/A"; @@ -615,36 +639,39 @@ function plex_metadata_videoDisplay($mediaType = "episode", $isPlayingMode = FAL // $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; // $mediaVideoDisplay_MetadataID = $media_MetadataID; - pmp_Logging("$media_logClass", "\tmediaVideoDisplay @ $mediaType ($media_metadata_name) - \"$mediaVideoDisplay\""); + $PLEXMetadata['videoDisplay'] = $mediaVideoDisplay; + pmp_Logging("$media_logClass", "\tmediaVideoDisplay @ $mediaType -- isPlaying -- ($media_metadata_name) - \"$mediaVideoDisplay\""); } function plex_metadata_thumb($mediaType = "episode", $ComingSoonMode = FALSE) { - global $clients, $comingSoonShowSelection; + // Global Variables - Input + global $PLEXMetadata; + global $comingSoonShowSelection; global $mediaThumb, $mediaThumb_MetadataID; $media_MetadataID_STR = ""; + $rootElement = $PLEXMetadata['rootXMLData']; + $subElement = $rootElement; + // Thumb switch ($mediaType) { case "episode": $media_metadata_name = 'thumb'; - $media_logClass = "PLEX_getTVMetadata"; - $mediaThumb = $clients[$media_metadata_name]; + $mediaThumb = $subElement[$media_metadata_name]; if ($mediaThumb == '') { $media_metadata_name = 'parentThumb'; - $mediaThumb = $clients[$media_metadata_name]; + $mediaThumb = $subElement[$media_metadata_name]; } if ($mediaThumb == '') { $media_metadata_name = 'grandparentThumb'; - $mediaThumb = $clients[$media_metadata_name]; + $mediaThumb = $subElement[$media_metadata_name]; } break; case "season": - $media_logClass = "PLEX_getTVMetadata"; - if ($ComingSoonMode == TRUE) { switch ($comingSoonShowSelection) { case "all": @@ -659,27 +686,25 @@ function plex_metadata_thumb($mediaType = "episode", $ComingSoonMode = FALSE) { // break; default: $media_metadata_name = 'parentThumb'; - $mediaThumb = $clients[$media_metadata_name]; + $mediaThumb = $subElement[$media_metadata_name]; if ($mediaThumb == '') { $media_metadata_name = 'grandparentThumb'; - $mediaThumb = $clients[$media_metadata_name]; + $mediaThumb = $subElement[$media_metadata_name]; } } } else { $media_metadata_name = 'parentThumb'; - $mediaThumb = $clients[$media_metadata_name]; + $mediaThumb = $subElement[$media_metadata_name]; if ($mediaThumb == '') { $media_metadata_name = 'grandparentThumb'; - $mediaThumb = $clients[$media_metadata_name]; + $mediaThumb = $subElement[$media_metadata_name]; } } break; case "series": - $media_logClass = "PLEX_getTVMetadata"; - if ($ComingSoonMode == TRUE) { switch ($comingSoonShowSelection) { case "all": @@ -701,43 +726,46 @@ function plex_metadata_thumb($mediaType = "episode", $ComingSoonMode = FALSE) { } break; case "movie": - $media_logClass = "PLEX_getMovieMetadata"; $media_metadata_name = 'thumb'; - break; case "track": - $media_logClass = "PLEX_getMusicMetadata"; - $media_metadata_name = 'thumb'; // Track Thumb (Poster) (future - thumb, parentThumb (Album), grandparentThumb (Artist)) - $mediaThumb = $clients[$media_metadata_name]; + $mediaThumb = $subElement[$media_metadata_name]; if ($mediaThumb == '') { $media_metadata_name = 'parentThumb'; - $mediaThumb = $clients[$media_metadata_name]; + $mediaThumb = $subElement[$media_metadata_name]; } if ($mediaThumb == '') { $media_metadata_name = 'grandparentThumb'; - $mediaThumb = $clients[$media_metadata_name]; + $mediaThumb = $subElement[$media_metadata_name]; } break; default: $media_metadata_name = 'thumb'; - $media_logClass = "PLEX_getTVMetadata"; + break; } - $mediaThumb = $clients[$media_metadata_name]; + $media_logClass = $PLEXMetadata['LogClass']; + + $rootElement = $PLEXMetadata['rootXMLData']; + $subElement = $rootElement; + $mediaThumb = $subElement[$media_metadata_name]; $media_MetadataID_TMP = preg_split("#/#", $mediaThumb); $media_MetadataID = $media_MetadataID_TMP[3]; $media_MetadataID_STR = "(metadata ID: $media_MetadataID)"; $mediaThumb_MetadataID = $media_MetadataID; + $PLEXMetadata['thumb'] = $mediaThumb; pmp_Logging("$media_logClass", "\tmediaTagline @ $mediaType ($media_metadata_name) $media_MetadataID_STR - $mediaThumb"); } function plex_metadata_template($mediaType = "episode") { - global $mediaTitle, $clients; + // Global Variables - Input + global $PLEXMetadata; + global $mediaTitle; // Template // switch ($mediaType) { @@ -756,6 +784,10 @@ function plex_metadata_template($mediaType = "episode") { // default: // } + + // $rootElement = $PLEXMetadata['rootXMLData']; + // $subElement = $rootElement; + // $mediaThumb = $subElement[$media_metadata_name]; } function plex_random_media($mediaAttempt = 0) { @@ -804,8 +836,6 @@ function plex_variable_presets($mode = "comingSoon") { // $mediaArt_Status = $comingSoonBackgroundArt; // $mediaArt_ShowTVThumb = $comingSoonShowTVThumb; - - } function plex_getMedia_thumb() { @@ -1063,10 +1093,15 @@ function plex_isPlaying_dataProcess() { function plex_metadata_PROCESS() { // Global Variables - Input - global $isPlaying, $clients; + global $isPlaying; global $mediaType_Display, $elementType, $mediaType; global $isPlayingMode, $ComingSoonMode; + // Global Variables - Output + global $PLEXMetadata; + + $PLEXMetadata = []; // Variables - Future + if ($isPlaying == TRUE) { $isPlayingMode = TRUE; $ComingSoonMode = FALSE; @@ -1076,6 +1111,8 @@ function plex_metadata_PROCESS() { $ComingSoonMode = TRUE; } + plex_metadata_getMediaKeys(); + plex_metadata_base("$mediaType", "START"); plex_metadata_title("$mediaType"); @@ -1089,15 +1126,36 @@ function plex_metadata_PROCESS() { plex_metadata_videoCodec("$mediaType"); plex_metadata_videoResolution("$mediaType"); - if ($isPlaying == TRUE) { + // if ($isPlaying == TRUE) { plex_metadata_decision("$mediaType", $isPlayingMode); // isPlaying Mode plex_metadata_audioDisplay("$mediaType", $isPlayingMode); // isPlaying Mode plex_metadata_videoDisplay("$mediaType", $isPlayingMode); // isPlaying Mode - } + // } plex_metadata_base("$mediaType", "END"); } +function plex_metadata_getMediaKeys() { + // Global Variables - Input + global $PLEXMetadata; + global $clients; + global $URLScheme, $plexServer, $plexToken; + + $PLEXMetadata['rootMediaKey'] = $clients[key]; + pmp_Logging("PLEX_getMediaMetadata", "rootMediaKey @ ". $PLEXMetadata['rootMediaKey']); + + $PLEXMetadata['rootMediaURL'] = "${URLScheme}://${plexServer}:32400". $PLEXMetadata['rootMediaKey'] . "?X-Plex-Token=${plexToken}"; + pmp_Logging("PLEX_getMediaMetadata", "rootMediaURL @ ". $PLEXMetadata['rootMediaURL']); + + $getXMLDataRAW = file_get_contents($PLEXMetadata['rootMediaURL']); + $getXMLData = simplexml_load_string($getXMLDataRAW); + + $PLEXMetadata['readMediaType'] = "Video"; + $mediaCode = $PLEXMetadata['readMediaType']; + + $PLEXMetadata['rootXMLData'] = $getXMLData->$mediaCode; +} + function plex_metadata_viewGroup() { // Global Variables - Input global $viewGroup, $mediaArt_ShowTVThumb; diff --git a/assets/plexmovieposter/css/DisplayStyle.css b/assets/plexmovieposter/css/DisplayStyle.css index 9fd2a8d..ac4bac2 100644 --- a/assets/plexmovieposter/css/DisplayStyle.css +++ b/assets/plexmovieposter/css/DisplayStyle.css @@ -67,21 +67,38 @@ .modal-dialog { width: 90%; height: 90%; - } +} - .modal-content { +.modal-content { width: 90%; height: 90%; - } - - .modal-body { +} + +.modal-body { padding: 0; - } - - #settingFrame { +} + +#settingFrame { width: 100%; height: 100%; - } +} + +.showMetadata { + font-size: 10px; +} + +@media screen and (orientation: landscape) { + .showMetadata img { + width: 20%; + } +} + +@media screen and (orientation: portrait) { + .showMetadata img { + width: 40%; + } +} + /* -------------------------------------------------- */ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Rated-G.png b/assets/plexmovieposter/images/icons/mediaInfo/Rated-G.png index 4181735..fab9ba1 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/Rated-G.png and b/assets/plexmovieposter/images/icons/mediaInfo/Rated-G.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Rated-NC17.png b/assets/plexmovieposter/images/icons/mediaInfo/Rated-NC17.png index 80e7c85..9fe4120 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/Rated-NC17.png and b/assets/plexmovieposter/images/icons/mediaInfo/Rated-NC17.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Rated-PG.png b/assets/plexmovieposter/images/icons/mediaInfo/Rated-PG.png index d1011dc..e8bab7e 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/Rated-PG.png and b/assets/plexmovieposter/images/icons/mediaInfo/Rated-PG.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Rated-PG13.png b/assets/plexmovieposter/images/icons/mediaInfo/Rated-PG13.png index 6dbd9be..cc5f14e 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/Rated-PG13.png and b/assets/plexmovieposter/images/icons/mediaInfo/Rated-PG13.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Rated-R.png b/assets/plexmovieposter/images/icons/mediaInfo/Rated-R.png index 989823d..7797732 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/Rated-R.png and b/assets/plexmovieposter/images/icons/mediaInfo/Rated-R.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Rated-XXX.png b/assets/plexmovieposter/images/icons/mediaInfo/Rated-XXX.png index c0b26b9..48b8ac0 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/Rated-XXX.png and b/assets/plexmovieposter/images/icons/mediaInfo/Rated-XXX.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Res-HD1080.png b/assets/plexmovieposter/images/icons/mediaInfo/Res-HD1080.png index 9739c87..4ea5d2e 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/Res-HD1080.png and b/assets/plexmovieposter/images/icons/mediaInfo/Res-HD1080.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Res-HD720.png b/assets/plexmovieposter/images/icons/mediaInfo/Res-HD720.png index 97d37ae..0b0d332 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/Res-HD720.png and b/assets/plexmovieposter/images/icons/mediaInfo/Res-HD720.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Res-SD.png b/assets/plexmovieposter/images/icons/mediaInfo/Res-SD.png index fb97bba..a1464b2 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/Res-SD.png and b/assets/plexmovieposter/images/icons/mediaInfo/Res-SD.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Res-UHD4K.png b/assets/plexmovieposter/images/icons/mediaInfo/Res-UHD4K.png index f87c01a..5d540ad 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/Res-UHD4K.png and b/assets/plexmovieposter/images/icons/mediaInfo/Res-UHD4K.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Res-UHD8K.png b/assets/plexmovieposter/images/icons/mediaInfo/Res-UHD8K.png index 5b27ad3..74ce526 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/Res-UHD8K.png and b/assets/plexmovieposter/images/icons/mediaInfo/Res-UHD8K.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Sound-2.0.png b/assets/plexmovieposter/images/icons/mediaInfo/Sound-2.0.png new file mode 100644 index 0000000..8c8b6b9 Binary files /dev/null and b/assets/plexmovieposter/images/icons/mediaInfo/Sound-2.0.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Sound-5.1.png b/assets/plexmovieposter/images/icons/mediaInfo/Sound-5.1.png new file mode 100644 index 0000000..0a193d6 Binary files /dev/null and b/assets/plexmovieposter/images/icons/mediaInfo/Sound-5.1.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/Sound-Mono.png b/assets/plexmovieposter/images/icons/mediaInfo/Sound-Mono.png new file mode 100644 index 0000000..3d7efc4 Binary files /dev/null and b/assets/plexmovieposter/images/icons/mediaInfo/Sound-Mono.png differ diff --git a/assets/plexmovieposter/images/icons/mediaInfo/_MediaInfo_Template.xcf b/assets/plexmovieposter/images/icons/mediaInfo/_MediaInfo_Template.xcf index 18c9c10..2984177 100644 Binary files a/assets/plexmovieposter/images/icons/mediaInfo/_MediaInfo_Template.xcf and b/assets/plexmovieposter/images/icons/mediaInfo/_MediaInfo_Template.xcf differ diff --git a/build/DockerSetup.config b/build/DockerSetup.config index c47d55e..b03a859 100644 --- a/build/DockerSetup.config +++ b/build/DockerSetup.config @@ -3,7 +3,7 @@ portexternal = 80 portinternal = 80 osplatform = linux imagenameroot = plexmovieposterdisplay -tag = 2.11.4 +tag = 2.11.5 dockerfileroot = ../. imagetype = networktype = diff --git a/build/UpdateVersion.py b/build/UpdateVersion.py index c808230..4c55282 100644 --- a/build/UpdateVersion.py +++ b/build/UpdateVersion.py @@ -80,7 +80,7 @@ def UpdatePHP(DisplayMSG=False,ConfigSegment="DEFAULT",ConfigKey="version",Confi # there for there might be trailing data we need to truncate away. DisplayMSG = False -SetVersion = "2.11.4" +SetVersion = "2.11.5" PYScriptRoot = os.path.abspath(os.path.dirname(__file__)) diff --git a/docs/ChangeLogs.md b/docs/ChangeLogs.md index 88280e4..a9a1192 100644 --- a/docs/ChangeLogs.md +++ b/docs/ChangeLogs.md @@ -400,3 +400,22 @@ Enhancement: Images to the bottom of Now Showing for resolution, sound format, a - Add icons for 720p & 1080p (explicit) - BUG(s): - If playing a lower quality video the 'current' video resolution is not displayed. + +**v2.11.5 Community Updates**\ +Enhancement: Images to the bottom of Now Showing for resolution, sound format, and aspect ratio (Issue #74) +- Update icons to be better color coded and easier to read +- Update to support audio information +- Update CSS to support size of icons depending on screen orientation +- Add support for font size 'Presented In' to use bottom font. +- Add iconChangeID code to icon links to force a non-cache image so that when updating to newer versions of the project the new icons will be displayed. +- TODO: + - Update TV Ratings icons to better match film icons + - Look at spacing between icons + +Enhancement: Full Path Logging (Issue #75) +- Update logging system to provide full URL to media XML + +Enhancement: Plex Function Isolation (Issue #64) +- Isolate PLEX read from using 'clients' variable and converted to PLEX object. Full conversion still in progress. +- Clean up duplicated variables for 'logName' to use as part of PLEX object. +- Move away from reading media session information xml to direct media information for much richer metadata. Media session information still required to get direct media library ID for direct read. diff --git a/settings/PMPInfo.php b/settings/PMPInfo.php index 213e7fd..253b699 100644 --- a/settings/PMPInfo.php +++ b/settings/PMPInfo.php @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/tests/logging/ShowLog.php b/tests/logging/ShowLog.php new file mode 100644 index 0000000..0c4cd17 --- /dev/null +++ b/tests/logging/ShowLog.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/tests/logging/TestLogging.php b/tests/logging/TestLogging.php index 540b7c4..f5776f3 100644 --- a/tests/logging/TestLogging.php +++ b/tests/logging/TestLogging.php @@ -19,7 +19,7 @@ $files = array_diff(scandir($path), array('.', '..')); foreach ($files as $file) { - echo "$file
"; + echo "$file
"; } ?> \ No newline at end of file