示例#1
0
 foreach ($xmlsub as $xmlrowsub) {
     $AddVideo = true;
     $xmlsub2 = FetchXML($xmlrowsub['key'] . '/tree');
     if ($xmlrowsub['type'] == "show") {
         /**
          * If it is a show, we don't need to search for subtitles.
          */
         if (strlen($Searchstring) > 3) {
             /**
              * If it is a show, we don't need to search for subtitles.
              */
             $CurrentVideo = new Video($xmlrowsub['key'], $xmlrowsub['title']);
             USMLog("debug", "[" . __FILE__ . " Line:" . __LINE__ . "] Found Show: '" . $xmlrowsub['title'] . "'");
             $CurrentVideo->setLibraryID($CurrentLibraryID);
             $CurrentVideo->setType($xmlrowsub['type']);
             $CurrentVideo->setRatingKey($xmlrowsub['ratingKey']);
             $CurrentVideo->setSeasonIndex('0');
             $CurrentVideo->setEpisodeIndex('0');
             $CurrentVideo->setActiveSubtitle(0);
             $MatchingEpisodes = false;
             $SeasonXML = FetchXML($CurrentVideo->getID() . '/all');
             foreach ($SeasonXML as $Season) {
                 if (isset($Season->attributes()->index) !== false) {
                     $MatchingEpisodes_Temp = get_show_episodes($Season->attributes()->key, $Season->attributes(), $CurrentVideo, $Searchstring);
                     if ($MatchingEpisodes === false and $MatchingEpisodes_Temp) {
                         $MatchingEpisodes = true;
                     }
                 }
             }
             if ($MatchingEpisodes or stripos($CurrentVideo->getTitle(), $Searchstring) !== false) {
                 $ArrayVideos[] = $CurrentVideo;
示例#2
0
/**
 * This functions lists all episodes for the provided show and season.
 */
function get_show_episodes($ShowKey, $SeasonIndex = false, $ShowRatingKey = "", $SearchString = false)
{
    global $Server, $ArrayVideos, $PathToPlexMediaFolder, $SearchSubtitleProviderFiles;
    $MatchedEpisodes = false;
    $xmlsub = FetchXML($ShowKey);
    foreach ($xmlsub as $xmlrowsub) {
        $AddVideo = true;
        $Episode = $xmlrowsub->attributes();
        USMLog("debug", "[" . __FILE__ . " Line:" . __LINE__ . "] Found episode: '" . $Episode->title . "'");
        $CurrentVideo = new Video($Episode->ratingKey, $Episode->title);
        $CurrentVideo->setType("movie");
        $CurrentVideo->setEpisodeIndex($Episode->index);
        if ($SearchString !== false) {
            if (stripos($CurrentVideo->getTitle(), $SearchString) === false) {
                continue;
            }
            $MatchedEpisodes = true;
        }
        /**
         * Get some information about the season. Title, index(number) and RatingKey.
         * A object can be provided if we are searching, but otherwise it's not provided.
         */
        if ($SeasonIndex !== false) {
            $CurrentVideo->setSeasonIndex($SeasonIndex->index);
            $CurrentVideo->setTitleShow($ShowRatingKey->getTitle());
            $CurrentVideo->setTitleSeason($SeasonIndex->title);
            $CurrentVideo->setRatingKey($ShowRatingKey->getRatingKey());
        } else {
            $Season_XML = FetchXML($Episode->parentKey);
            foreach ($Season_XML as $Season) {
                if ((int) $Season->attributes()->ratingKey == (int) $Episode->parentRatingKey) {
                    $CurrentVideo->setSeasonIndex($Season->attributes()->index);
                    $CurrentVideo->setTitleSeason($Season->attributes()->title);
                    $CurrentVideo->setSeasonKey($Season->attributes()->key);
                    $CurrentVideo->setRatingKey($Season->attributes()->ratingKey);
                    $CurrentVideo->setTitleShow($Season->attributes()->parentTitle);
                    $CurrentVideo->setShowKey($Season->attributes()->parentKey);
                }
            }
        }
        /**
         * Figure out what subtitle is selected in plex.
         */
        $ActiveSubtitleXML = FetchXML($Episode->key);
        foreach ($ActiveSubtitleXML as $ActiveSubtitle) {
            $Streams = $ActiveSubtitle->Media->Part->Stream;
            foreach ($Streams as $ActiveSubtitle) {
                if ($ActiveSubtitle->attributes()->streamType == 3 and isset($ActiveSubtitle->attributes()->selected)) {
                    $CurrentVideo->setActiveSubtitle($ActiveSubtitle->attributes()->id);
                }
            }
        }
        /**
         * Fetch subtitles for  the current episode
         */
        $xmlsub3 = FetchXML($Episode->key . '/tree');
        foreach ($xmlsub3 as $xmlrowsub3) {
            $CurrentMediaPart = $xmlrowsub3->MetadataItem->MetadataItem->MediaItem->MediaPart;
            $CurrentVideo->setPath($CurrentMediaPart->attributes()->file);
            $CurrentVideo->setHash($CurrentMediaPart->attributes()->hash);
            foreach ($CurrentMediaPart->MediaStream as $Subtitle) {
                if ($Subtitle->attributes()->type == 3) {
                    // Filter out VOBSUB by checking that there is a url connected to the subtitle.
                    $Language = "-";
                    if (strlen($Subtitle->attributes()->language) > 0) {
                        $Language = $Subtitle->attributes()->language;
                    }
                    /**
                     * If url is set, it's a external subtitle. (agent or local).
                     * Else it's a integrated one.
                     */
                    if (isset($Subtitle->attributes()->url)) {
                        $LocalSubtitle = false;
                        $Folder = SepFilename(preg_replace("/\\\\/i", "/", $Subtitle->attributes()->url));
                        if (strpos($Folder[0], "media://") !== false) {
                            $Folder[0] = $PathToPlexMediaFolder . substr($Folder[0], 8);
                        } else {
                            $LocalSubtitle = true;
                        }
                        if ($_SESSION['Option_HideLocal']['set'] === false) {
                            $CurrentVideo->setNewSubtitle(new Subtitle($Subtitle->attributes()->id, $Folder[1], $Language, $Folder[0] . $Folder[1], $Subtitle->attributes()->codec, $LocalSubtitle));
                            USMLog("debug", "[" . __FILE__ . " Line:" . __LINE__ . "] Found subtitle: '" . $Folder[0] . $Folder[1] . "'");
                        } else {
                            if ($LocalSubtitle === false) {
                                $CurrentVideo->setNewSubtitle(new Subtitle($Subtitle->attributes()->id, $Folder[1], $Language, $Folder[0] . $Folder[1], $Subtitle->attributes()->codec, $LocalSubtitle));
                                USMLog("debug", "[" . __FILE__ . " Line:" . __LINE__ . "] Found subtitle: '" . $Folder[0] . $Folder[1] . "'");
                            }
                        }
                    } else {
                        if ($_SESSION['Option_HideIntegrated']['set'] === false) {
                            $CurrentVideo->setNewSubtitle(new Subtitle($Subtitle->attributes()->id, "Integrated subtitle", $Language, false, $Subtitle->attributes()->codec, $LocalSubtitle));
                        }
                    }
                }
            }
        }
        CheckForDuplicates($CurrentVideo);
        if ($_SESSION['Option_MultipleSubtitlesOnly']['set'] === true) {
            $AddVideo = false;
            foreach ($CurrentVideo->getSubtitles() as $SubtitleLanguageArray) {
                if (count($SubtitleLanguageArray) < 2) {
                    /* Current language has less than 2 subtitles */
                    foreach ($SubtitleLanguageArray as $Subtitle) {
                        $Subtitle->setHideSubtitle(true);
                    }
                } else {
                    $AddVideo = true;
                }
            }
        }
        if ($_SESSION['Option_HideEmpty']['set'] === true and count($CurrentVideo->getSubtitles()) < 1) {
            $AddVideo = false;
        }
        if ($AddVideo) {
            $ArrayVideos[] = $CurrentVideo;
        }
    }
    if ($SearchString !== false) {
        return $MatchedEpisodes;
    }
}