private function makeVideo(VideoServiceDetector $detector)
 {
     $user = Session::get('user');
     $video = new Video();
     $video->setSourceId($detector->getId());
     $video->setUserid($user->getId());
     $video->setAdded(null);
     $video->setType($detector->getType()->getId());
     $video->setFeed(Serializer::serialize($detector->getFeed()));
     return $video;
 }
Exemple #2
0
 if (strlen($Searchstring) > 3) {
     if (stripos($CurrentVideo->getTitle(), $Searchstring) === false) {
         continue;
     }
 }
 $ActiveSubtitleXML = FetchXML($xmlrowsub['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);
         }
     }
 }
 $CurrentVideo->setLibraryID($CurrentLibraryID);
 $CurrentVideo->setType($xmlrowsub['type']);
 $CurrentVideo->setEpisodeIndex(0);
 $CurrentVideo->setHash($CurrentMediaPart->attributes()->hash);
 $CurrentVideo->setPath($CurrentMediaPart->attributes()->file);
 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 (isset($subtitle->attributes()->url)) {
             $LocalSubtitle = false;
             $Folder = SepFilename($subtitle->attributes()->url);
             // Subtitles - All of them
             if (strpos($Folder[0], "media://") !== false) {
Exemple #3
0
 public function castToVideo($obj)
 {
     $v = new Video();
     if (isset($obj->videoID)) {
         $v->setVideoID($obj->videoID);
     }
     if (isset($obj->youTubeVideoID)) {
         $v->setYouTubeVideoID($obj->youTubeVideoID);
     }
     if (isset($obj->isPrimary)) {
         $v->setIsPrimary($obj->isPrimary);
     }
     if (isset($obj->typeID)) {
         $v->setTypeID($obj->typeID);
     }
     if (isset($obj->type)) {
         $v->setType($obj->type);
     }
     if (isset($obj->typeicon)) {
         $v->setTypeicon($obj->typeicon);
     }
     return $v;
 }
Exemple #4
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;
    }
}