query(sprintf("select * from releaseaudio where releaseid = %d order by audioID ASC", $id)); } public function getBriefByGuid($guid) { $db = new Settings(); return $db->queryOneRow(sprintf("select containerformat,videocodec,videoduration,videoaspect, concat(releasevideo.videowidth,'x',releasevideo.videoheight,' @',format(videoframerate,0),'fps') as size, group_concat(distinct releaseaudio.audiolanguage SEPARATOR ', ') as audio, group_concat(distinct releaseaudio.audiobitrate SEPARATOR ', ') as audiobitrate, group_concat(distinct releaseaudio.audioformat SEPARATOR ', ') as audioformat, group_concat(distinct releaseaudio.audiomode SEPARATOR ', ') as audiomode, group_concat(distinct releaseaudio.audiobitratemode SEPARATOR ', ') as audiobitratemode, group_concat(distinct releasesubs.subslanguage SEPARATOR ', ') as subs from releaseaudio left outer join releasesubs on releaseaudio.releaseid = releasesubs.releaseid left outer join releasevideo on releasevideo.releaseid = releaseaudio.releaseid inner join releases r on r.id = releaseaudio.releaseid where r.guid = %s group by r.id", $db->escapeString($guid))); } public function delete($id) { $db = new Settings(); $db->queryExec(sprintf("DELETE from releaseaudio where releaseid = %d", $id)); $db->queryExec(sprintf("DELETE from releasesubs where releaseid = %d", $id)); $db->queryExec(sprintf("DELETE from releaseextrafull where releaseid = %d", $id)); $db->queryExec(sprintf("DELETE from releasevideo where releaseid = %d", $id)); } /** * Add releasevideo/audio/subs for a release based on the mediainfo xml. */ public function addFromXml($releaseID, $xml) { $xmlObj = @simplexml_load_string($xml); $arrXml = \newznab\utility\Utility::objectsIntoArray($xmlObj); $containerformat = ""; $overallbitrate = ""; if (isset($arrXml["File"]) && isset($arrXml["File"]["track"])) { foreach ($arrXml["File"]["track"] as $track) { if (isset($track["@attributes"]) && isset($track["@attributes"]["type"])) { if ($track["@attributes"]["type"] == "General") { if (isset($track["Format"])) $containerformat = $track["Format"]; if (isset($track["Overall_bit_rate"])) $overallbitrate = $track["Overall_bit_rate"]; $gendata = $track; } elseif ($track["@attributes"]["type"] == "Video") { $videoduration = ""; $videoformat = ""; $videocodec = ""; $videowidth = ""; $videoheight = ""; $videoaspect = ""; $videoframerate = ""; $videolibrary = ""; $gendata = ""; $viddata = ""; $audiodata = ""; if (isset($track["Duration"])) $videoduration = $track["Duration"]; if (isset($track["Format"])) $videoformat = $track["Format"]; if (isset($track["Codec_ID"])) $videocodec = $track["Codec_ID"]; if (isset($track["Width"])) $videowidth = preg_replace("/[^0-9]/", '', $track["Width"]); if (isset($track["Height"])) $videoheight = preg_replace("/[^0-9]/", '', $track["Height"]); if (isset($track["Display_aspect_ratio"])) $videoaspect = $track["Display_aspect_ratio"]; if (isset($track["Frame_rate"])) $videoframerate = str_replace(" fps", "", $track["Frame_rate"]); if (isset($track["Writing_library"])) $videolibrary = $track["Writing_library"]; $viddata = $track; $this->addVideo($releaseID, $containerformat, $overallbitrate, $videoduration, $videoformat, $videocodec, $videowidth, $videoheight, $videoaspect, $videoframerate, $videolibrary ); } elseif ($track["@attributes"]["type"] == "Audio") { $audioID = 1; $audioformat = ""; $audiomode = ""; $audiobitratemode = ""; $audiobitrate = ""; $audiochannels = ""; $audiosamplerate = ""; $audiolibrary = ""; $audiolanguage = ""; $audiotitle = ""; if (isset($track["@attributes"]["streamid"])) $audioID = $track["@attributes"]["streamid"]; if (isset($track["Format"])) $audioformat = $track["Format"]; if (isset($track["Mode"])) $audiomode = $track["Mode"]; if (isset($track["Bit_rate_mode"])) $audiobitratemode = $track["Bit_rate_mode"]; if (isset($track["Bit_rate"])) $audiobitrate = $track["Bit_rate"]; if (isset($track["Channel_s_"])) $audiochannels = $track["Channel_s_"]; if (isset($track["Sampling_rate"])) $audiosamplerate = $track["Sampling_rate"]; if (isset($track["Writing_library"])) $audiolibrary = $track["Writing_library"]; if (isset($track["Language"])) $audiolanguage = $track["Language"]; if (isset($track["Title"])) $audiotitle = $track["Title"]; $audiodata = $track; $this->addAudio($releaseID, $audioID, $audioformat, $audiomode, $audiobitratemode, $audiobitrate, $audiochannels, $audiosamplerate, $audiolibrary, $audiolanguage, $audiotitle); } elseif ($track["@attributes"]["type"] == "Text") { $subsID = 1; $subslanguage = "Unknown"; if (isset($track["@attributes"]["streamid"])) $subsID = $track["@attributes"]["streamid"]; if (isset($track["Language"])) $subslanguage = $track["Language"]; $this->addSubs($releaseID, $subsID, $subslanguage); } } } } } /** * Add a releasevideo row. */ public function addVideo($releaseID, $containerformat, $overallbitrate, $videoduration, $videoformat, $videocodec, $videowidth, $videoheight, $videoaspect, $videoframerate, $videolibrary) { $db = new Settings(); $row = $this->getVideo($releaseID); if ($row) return -1; if (is_numeric($videoframerate)) $videoframerate = number_format($videoframerate, 3, '.', ''); else $videoframerate = 0.0; $sql = sprintf("insert into releasevideo (releaseid, containerformat, overallbitrate, videoduration, videoformat, videocodec, videowidth, videoheight, videoaspect, videoframerate, videolibrary, definition) values ( %d, %s, %s, %s, %s, %s, %d, %d, %s, %s, %s, %d )", $releaseID, $db->escapeString($containerformat), $db->escapeString($overallbitrate), $db->escapeString($videoduration), $db->escapeString($videoformat), $db->escapeString($videocodec), $videowidth, $videoheight, $db->escapeString($videoaspect), $db->escapeString($videoframerate), $db->escapeString($videolibrary), self::determineVideoResolution($videowidth, $videoheight) ); return $db->queryInsert($sql); } public function getVideo($id) { $db = new Settings(); return $db->queryOneRow(sprintf("select * from releasevideo where releaseid = %d", $id)); } /** * Work out the res based on height and width */ public function determineVideoResolution($width, $height) { if ($width == 0 || $height == 0) { return self::VIDEO_RESOLUTION_NA; } elseif ($width <= 720 && $height <= 480) { return self::VIDEO_RESOLUTION_SD; //SD 480 } elseif ($width <= 768 && $height <= 576) // 720x576 (PAL) (768 when rescaled for square pixels) { return self::VIDEO_RESOLUTION_SD; //SD 576 } elseif ($width <= 1048 && $height <= 576) // 1024x576 (PAL) (1048 when rescaled for square pixels) (16x9) { return self::VIDEO_RESOLUTION_SD; //SD 576 16x9 } elseif ($width <= 960 && $height <= 544) // 960x540 (sometimes 544 which is multiple of 16) { return self::VIDEO_RESOLUTION_SD; //SD 540 } elseif ($width <= 1280 && $height <= 720) // 1280x720 { return self::VIDEO_RESOLUTION_720; //HD 720 } else // 1920x1080 { return self::VIDEO_RESOLUTION_1080; //HD 1080 } return self::VIDEO_RESOLUTION_NA; //catch all } /** * Add a releaseaudio row. */ public function addAudio($releaseID, $audioID, $audioformat, $audiomode, $audiobitratemode, $audiobitrate, $audiochannels, $audiosamplerate, $audiolibrary, $audiolanguage, $audiotitle) { $db = new Settings(); $row = $this->getAudioAndChannel($releaseID, $audioID); if ($row) return -1; $sql = sprintf("insert into releaseaudio (releaseid, audioID,audioformat,audiomode, audiobitratemode, audiobitrate, audiochannels,audiosamplerate,audiolibrary,audiolanguage,audiotitle) values ( %d, %d, %s, %s, %s, %s, %s, %s, %s, %s, %s )", $releaseID, $audioID, $db->escapeString($audioformat), $db->escapeString($audiomode), $db->escapeString($audiobitratemode), $db->escapeString($audiobitrate), $db->escapeString($audiochannels), $db->escapeString($audiosamplerate), $db->escapeString(substr($audiolibrary, 0, 255)), $db->escapeString(substr($audiolanguage, 0, 255)), $db->escapeString(substr($audiotitle, 0, 255)) ); return $db->queryInsert($sql); } public function getAudioAndChannel($rid, $aid) { $db = new Settings(); return $db->queryOneRow(sprintf("select * from releaseaudio where releaseid = %d and audioID = %d", $rid, $aid)); } public function addSubs($releaseID, $subsID, $subslanguage) { $db = new Settings(); $row = $this->getSubs($releaseID); if ($row) return -1; $sql = sprintf("insert into releasesubs (releaseid, subsID, subslanguage) values ( %d, %d, %s)", $releaseID, $subsID, $db->escapeString($subslanguage)); return $db->queryInsert($sql); } public function getSubs($id) { $db = new Settings(); return $db->queryOneRow(sprintf("SELECT group_concat(subslanguage SEPARATOR ', ') as subs FROM `releasesubs` WHERE `releaseid` = %d ORDER BY `subsID` ASC", $id)); } public function deleteFull($id) { $db = new Settings(); return $db->queryExec(sprintf("DELETE from releaseextrafull where releaseid = %d", $id)); } public function addFull($id, $xml) { $db = new Settings(); $row = $this->getFull($id); if ($row) return -1; return $db->queryInsert(sprintf("insert into releaseextrafull (releaseid, mediainfo) values (%d, %s)", $id, $db->escapeString($xml))); } public function getFull($id) { $db = new Settings(); return $db->queryOneRow(sprintf("select * from releaseextrafull where releaseid = %d", $id)); } }