Beispiel #1
0
 /**
  * Process all untagged movies to link them to a movieinfo row.
  */
 public function processMovieReleases()
 {
     $ret = 0;
     $nfo = new Nfo();
     $res = $this->pdo->queryDirect(sprintf("SELECT searchname, id from releases where imdbid IS NULL and categoryid in ( select id from category where parentid = %d ) ORDER BY postdate DESC LIMIT 100", Category::CAT_PARENT_MOVIE));
     if ($this->pdo->getNumRows($res) > 0) {
         if ($this->echooutput) {
             echo "MovProc : Processing " . $this->pdo->getNumRows($res) . " movie releases\n";
         }
         while ($arr = $this->pdo->getAssocArray($res)) {
             $imdbID = false;
             /* Preliminary IMDB id Detection from NFO file */
             $rawnfo = '';
             if ($nfo->getNfo($arr['id'], $rawnfo)) {
                 $imdbID = $this->parseImdbFromNfo($rawnfo);
             }
             if ($imdbID !== false) {
                 // Set IMDB (if found in nfo) and move along
                 $this->pdo->queryExec(sprintf("update releases set imdbid = %s where id = %d", $this->pdo->escapeString($imdbID), $arr["id"]));
                 //check for existing movie entry
                 $movCheck = $this->getMovieInfo($imdbID);
                 if ($movCheck === false || isset($movCheck['updateddate']) && time() - strtotime($movCheck['updateddate']) > 2592000) {
                     $movieId = $this->updateMovieInfo($imdbID);
                 }
                 continue;
             }
             $moviename = $this->parseMovieName($arr['searchname']);
             if ($moviename !== false) {
                 if ($this->echooutput) {
                     echo 'MovProc : ' . $moviename . ' [' . $arr['searchname'] . ']' . "\n";
                 }
                 //$buffer = getUrl("https://www.google.com/search?source=ig&hl=en&rlz=&btnG=Google+Search&aq=f&oq=&q=".urlencode($moviename.' site:imdb.com'));
                 $buffer = Utility::getUrl(['url' => 'http://www.bing.com/search?&q=' . urlencode($moviename . ' site:imdb.com')]);
                 // make sure we got some data
                 if ($buffer !== false && strlen($buffer)) {
                     $imdbId = $this->parseImdbFromNfo($buffer);
                     if ($imdbId !== false) {
                         //update release with imdb id
                         $this->pdo->queryExec(sprintf("update releases SET imdbid = %s WHERE id = %d", $this->pdo->escapeString($imdbId), $arr["id"]));
                         //check for existing movie entry
                         $movCheck = $this->getMovieInfo($imdbId);
                         if ($movCheck === false || isset($movCheck['updateddate']) && time() - strtotime($movCheck['updateddate']) > 2592000) {
                             $movieId = $this->updateMovieInfo($imdbId);
                         }
                     } else {
                         //no imdb id found, set to all zeros so we dont process again
                         $this->pdo->queryExec(sprintf("update releases SET imdbid = %d WHERE id = %d", 0, $arr["id"]));
                     }
                 } else {
                     //url fetch failed, will try next run
                 }
             } else {
                 //no valid movie name found, set to all zeros so we dont process again
                 $this->pdo->queryExec(sprintf("update releases SET imdbid = %d WHERE id = %d", 0, $arr["id"]));
             }
         }
     }
 }
Beispiel #2
0
 /**
  * Removes funky chars from beginning and end of string
  */
 public function removeSpecial()
 {
     $sql = "select id, searchname from releases where 1 = 1 ";
     $sql .= $this->limited ? "AND adddate BETWEEN NOW() - INTERVAL 1 DAY AND NOW()" : "";
     $sql .= " order by postdate desc";
     $res = $this->pdo->queryDirect($sql);
     while ($r = $this->pdo->getAssocArray($res)) {
         $oldname = $r['searchname'];
         if (preg_match('/^(\\:|\\"|\\-| )+/', $r['searchname'])) {
             while (preg_match('/^(\\:|\\"|\\-| |\\_)+/', $r['searchname'])) {
                 $r['searchname'] = substr($r['searchname'], 1);
             }
             $this->updateName($this->pdo, $r['id'], $oldname, $r['searchname']);
         }
         if (preg_match('/^000\\-/', $r['searchname'])) {
             while (preg_match('/^000\\-/', $r['searchname'])) {
                 $r['searchname'] = substr($r['searchname'], 4);
             }
             $this->updateName($this->pdo, $r['id'], $oldname, $r['searchname']);
         }
         if (preg_match('/(\\:|\\"|\\-| |\\/)$/', $r['searchname'])) {
             while (preg_match('/(\\:|\\"|\\-| |\\/)$/', $r['searchname'])) {
                 $r['searchname'] = substr($r['searchname'], 0, -1);
             }
             $this->updateName($this->pdo, $r['id'], $oldname, $r['searchname']);
         }
         if (preg_match('/\\"/', $r['searchname'])) {
             while (preg_match('/\\"/', $r['searchname'])) {
                 $r['searchname'] = str_replace('"', '', $r['searchname']);
             }
             $this->updateName($this->pdo, $r['id'], $oldname, $r['searchname']);
         }
         if (preg_match('/\\-\\d{1}$/', $r['searchname'])) {
             while (preg_match('/\\-\\d{1}$/', $r['searchname'])) {
                 $r['searchname'] = preg_replace('/\\-\\d{1}$/', '', $r['searchname']);
             }
             $this->updateName($this->pdo, $r['id'], $oldname, $r['searchname']);
         }
         if (preg_match('/\\!+.*?mom.*?\\!+/i', $r['searchname'])) {
             while (preg_match('/\\!+.*?mom.*?\\!+/i', $r['searchname'])) {
                 $r['searchname'] = preg_replace('/\\!+.*?mom.*?\\!+/i', '', $r['searchname']);
             }
             $this->updateName($this->pdo, $r['id'], $oldname, $r['searchname']);
         }
         if (preg_match('/(\\/)/i', $r['searchname'])) {
             while (preg_match('/(\\/)/i', $r['searchname'])) {
                 $r['searchname'] = preg_replace('/(\\/)/i', '', $r['searchname']);
             }
             $this->updateName($this->pdo, $r['id'], $oldname, $r['searchname']);
         }
     }
 }
Beispiel #3
0
    /**
     * @param int|string $groupID (optional)
     */
    public function applyRegex($groupID)
    {
        //
        // Get all regexes for all groups which are to be applied to new binaries
        // in order of how they should be applied
        //
        $group = $this->groups->getCBPTableNames($this->tablePerGroup, $groupID);
        $activeGroups = $this->groups->getActive();
        $this->releaseRegex->get();
        $this->pdo->log->doEcho($this->pdo->log->primary('Applying regex to binaries'), true);
        foreach ($activeGroups as $groupArr) {
            //check if regexes have already been applied during update binaries
            if ($groupArr['regexmatchonly'] == 1) {
                continue;
            }
            $groupRegexes = $this->releaseRegex->getForGroup($groupArr['name']);
            $this->pdo->log->doEcho($this->pdo->log->primary('Applying ' . sizeof($groupRegexes) . ' regexes to group ' . $groupArr['name']), true);
            // Get out all binaries of STAGE0 for current group
            $newUnmatchedBinaries = array();
            $ressql = sprintf('SELECT id, name, date, totalparts, procstat, fromname FROM %s b
 								WHERE groupid = %d AND procstat IN (%d, %d) AND regexid IS NULL ORDER BY b.date ASC', $group['bname'], $groupArr['id'], Releases::PROCSTAT_NEW, Releases::PROCSTAT_TITLENOTMATCHED);
            $resbin = $this->pdo->queryDirect($ressql);
            $matchedbins = 0;
            while ($rowbin = $this->pdo->getAssocArray($resbin)) {
                $regexMatches = array();
                foreach ($groupRegexes as $groupRegex) {
                    $regexCheck = $this->releaseRegex->performMatch($groupRegex, $rowbin['name']);
                    if ($regexCheck !== false) {
                        $regexMatches = $regexCheck;
                        break;
                    }
                }
                if (!empty($regexMatches)) {
                    $matchedbins++;
                    $relparts = explode("/", $regexMatches['parts']);
                    $this->pdo->queryExec(sprintf("UPDATE %s SET relname = replace(%s, '_', ' '), relpart = %d, reltotalpart = %d, procstat=%d, categoryid=%s, regexid=%d, reqid=%s WHERE id = %d", $group['bname'], $this->pdo->escapeString($regexMatches['name']), $relparts[0], $relparts[1], Releases::PROCSTAT_TITLEMATCHED, $regexMatches['regcatid'], $regexMatches['regexid'], $this->pdo->escapeString($regexMatches['reqid']), $rowbin["id"]));
                } else {
                    if ($rowbin['procstat'] == Releases::PROCSTAT_NEW) {
                        $newUnmatchedBinaries[] = $rowbin['id'];
                    }
                }
            }
            //mark as not matched
            if (!empty($newUnmatchedBinaries)) {
                $this->pdo->queryExec(sprintf("UPDATE %s SET procstat=%d WHERE id IN (%s)", $group['bname'], Releases::PROCSTAT_TITLENOTMATCHED, implode(',', $newUnmatchedBinaries)));
            }
        }
    }
Beispiel #4
0
 public function testRegex($regex, $groupname, $poster, $ignorematched, $matchagainstbins)
 {
     $cat = new Categorize();
     $groups = new Groups();
     $groupID = $groups->getByNameByID($groupname);
     $group = $groups->getCBPTableNames($this->tablePerGroup, $groupID);
     $catList = $cat->getForSelect();
     $matches = [];
     if ($groupname === 0) {
         $groupname = '.*';
     }
     if ($matchagainstbins !== '') {
         $sql = sprintf("select b.*, '0' as size, '0' as blacklistID, g.name as groupname from %s b left join groups g on g.id = b.groupid where b.groupid IN (select g.id from groups g where g.name REGEXP %s) order by b.date desc", $group['bname'], $this->pdo->escapeString('^' . $groupname . '$'));
     } else {
         $sql = sprintf("select rrt.* from releaseregextesting rrt where rrt.groupname REGEXP %s order by rrt.date desc", $this->pdo->escapeString('^' . $groupname . '$'));
     }
     $resbin = $this->pdo->queryDirect($sql);
     while ($rowbin = $this->pdo->getAssocArray($resbin)) {
         if ($ignorematched !== '' && ($rowbin['regexid'] != '' || $rowbin['blacklistid'] == 1)) {
             continue;
         }
         $regexarr = ["id" => "", 'regex' => $regex, 'poster' => $poster, "categoryid" => ""];
         $regexCheck = $this->performMatch($regexarr, $rowbin['name'], $rowbin['fromname']);
         if ($regexCheck !== false) {
             $relname = $regexCheck['name'];
             $relparts = explode("/", $regexCheck['parts']);
             $matches[$relname]['name'] = $relname;
             $matches[$relname]['parts'] = $regexCheck['parts'];
             $matches[$relname]['bincount'] = isset($matches[$relname]['bincount']) ? $matches[$relname]['bincount'] + 1 : 1;
             $matches[$relname]['bininfo'][] = $rowbin;
             $matches[$relname]['binsize'][] = $rowbin['size'];
             $matches[$relname]['totalsize'] = array_sum($matches[$relname]['binsize']);
             $matches[$relname]['relparts'][$relparts[1]] = $relparts[1];
             $matches[$relname]['reltotalparts'] = array_sum($matches[$relname]['relparts']);
             $matches[$relname]['regexid'] = $regexCheck['regexid'];
             if (ctype_digit($regexCheck['regcatid'])) {
                 $matches[$relname]['catname'] = $catList[$regexCheck['regcatid']];
             } else {
                 $matches[$relname]['catname'] = $catList[$cat->determineCategory($groupname, $relname)];
             }
         }
     }
     //echo '<pre>';
     //print_r(array_pop($matches));
     //echo '</pre>';
     return $matches;
 }
Beispiel #5
0
 /**
  * Process all untagged releases to see if they are found in predb.
  */
 public function processReleases($daysback = 3)
 {
     if ($this->echooutput) {
         echo "Predb   : Updating releases with pre data\n";
     }
     $matched = 0;
     $releasesQuery = $this->pdo->queryDirect(sprintf('SELECT id, searchname FROM releases WHERE preid IS NULL AND adddate > DATE_SUB(NOW(), INTERVAL %d DAY)', $daysback));
     while ($arr = $this->pdo->getAssocArray($releasesQuery)) {
         $arr['searchname'] = str_replace(' ', '_', $arr['searchname']);
         $sql = sprintf("SELECT id FROM predb WHERE dirname = %s LIMIT 1", $this->pdo->escapeString($arr['searchname']));
         $predbQuery = $this->pdo->queryOneRow($sql);
         if ($predbQuery) {
             $this->pdo->queryExec(sprintf('UPDATE releases SET preid = %d WHERE id = %d', $predbQuery['id'], $arr['id']));
             $matched++;
         }
     }
     if ($this->echooutput) {
         echo "Predb   : Matched pre data to " . $matched . " releases\n";
     }
 }
Beispiel #6
0
 /**
  * Check all untagged console releases for their extended metadata.
  */
 public function processConsoleReleases()
 {
     $ret = 0;
     $numlookedup = 0;
     $res = $this->pdo->queryDirect(sprintf("SELECT searchname, id from releases where consoleinfoid IS NULL and categoryid in ( select id from category where parentid = %d ) ORDER BY postdate DESC LIMIT 100", Category::CAT_PARENT_GAME));
     if ($this->pdo->getNumRows($res) > 0) {
         if ($this->echooutput) {
             echo "ConsPrc : Processing " . $this->pdo->getNumRows($res) . " console releases\n";
         }
         while ($arr = $this->pdo->getAssocArray($res)) {
             if ($numlookedup > Console::NUMTOPROCESSPERTIME) {
                 return;
             }
             $gameInfo = $this->parseTitle($arr['searchname']);
             if ($gameInfo !== false) {
                 if ($this->echooutput) {
                     echo 'ConsPrc : ' . $gameInfo["title"] . ' (' . $gameInfo["platform"] . ')' . "\n";
                 }
                 //check for existing console entry
                 $gameCheck = $this->getConsoleInfoByName($gameInfo["title"], $gameInfo["platform"]);
                 if ($gameCheck === false) {
                     $numlookedup++;
                     $gameId = $this->updateConsoleInfo($gameInfo);
                     if ($gameId === false) {
                         $gameId = -2;
                     }
                 } else {
                     $gameId = $gameCheck["id"];
                 }
                 //update release
                 $this->pdo->queryExec(sprintf("update releases SET consoleinfoid = %d WHERE id = %d", $gameId, $arr["id"]));
             } else {
                 //could not parse release title
                 $this->pdo->queryExec(sprintf("update releases SET consoleinfoid = %d WHERE id = %d", -2, $arr["id"]));
             }
         }
     }
 }
Beispiel #7
0
 /**
  * Process all untagged releases to see if musicinfo exists for them.
  */
 public function processMusicReleases()
 {
     $ret = 0;
     $numlookedup = 0;
     $res = $this->pdo->queryDirect(sprintf("SELECT searchname, id from releases where musicinfoid IS NULL and categoryid in ( select id from category where parentid = %d ) ORDER BY postdate DESC LIMIT 1000", Category::CAT_PARENT_MUSIC));
     if ($this->pdo->getNumRows($res) > 0) {
         if ($this->echooutput) {
             echo "MusicPr : Processing " . $this->pdo->getNumRows($res) . " audio releases\n";
         }
         while ($arr = $this->pdo->getAssocArray($res)) {
             if ($numlookedup > Music::NUMTOPROCESSPERTIME) {
                 return;
             }
             $albumId = -2;
             $album = $this->parseArtist($arr['searchname']);
             if ($album !== false) {
                 if ($this->echooutput) {
                     echo 'MusicPr : Looking up: ' . $album["artist"] . ' - ' . $album["album"] . "\n";
                 }
                 //check for existing music entry
                 $albumCheck = $this->getMusicInfoByName($album["artist"], $album["album"]);
                 if ($albumCheck === false) {
                     //
                     // get from amazon
                     //
                     $numlookedup++;
                     $ret = $this->updateMusicInfo($album["artist"], $album["album"], $album['year']);
                     if ($ret !== false) {
                         $albumId = $ret;
                     }
                 } else {
                     $albumId = $albumCheck["id"];
                 }
             }
             $this->pdo->queryExec(sprintf("update releases SET musicinfoid = %d WHERE id = %d", $albumId, $arr["id"]));
         }
     }
 }
Beispiel #8
0
 /**
  * Process all untagged book releases for additional metadata.
  */
 public function processBookReleases()
 {
     $numlookedup = 0;
     $res = $this->pdo->queryDirect(sprintf("SELECT searchname, id from releases where bookinfoid IS NULL and categoryid = %d ORDER BY postdate DESC LIMIT 100", Category::CAT_BOOK_EBOOK));
     if ($this->pdo->getNumRows($res) > 0) {
         if ($this->echooutput) {
             echo "BookPrc : Processing " . $this->pdo->getNumRows($res) . " book releases\n";
         }
         while ($arr = $this->pdo->getAssocArray($res)) {
             if ($numlookedup > Book::NUMTOPROCESSPERTIME) {
                 return;
             }
             $bookId = -2;
             $book = $this->parseAuthor($arr['searchname']);
             if ($book !== false) {
                 if ($this->echooutput) {
                     echo 'BookPrc : ' . $book["author"] . ' - ' . $book["title"] . "\n";
                 }
                 //check for existing book entry
                 $bookCheck = $this->getBookInfoByName($book["author"], $book["title"]);
                 if ($bookCheck === false) {
                     //
                     // get from amazon
                     //
                     $numlookedup++;
                     $ret = $this->updateBookInfo($book["author"], $book["title"]);
                     if ($ret !== false) {
                         $bookId = $ret;
                     }
                 } else {
                     $bookId = $bookCheck["id"];
                 }
             }
             $this->pdo->queryExec(sprintf("update releases SET bookinfoid = %d WHERE id = %d", $bookId, $arr["id"]));
         }
     }
 }
Beispiel #9
0
 /**
  *
  */
 public function processReleases()
 {
     $results = $this->pdo->queryDirect(sprintf("SELECT id, searchname, rageid, anidbid, seriesfull, season, episode, tvtitle FROM releases WHERE episodeinfoid IS NULL AND categoryid IN ( SELECT id FROM category WHERE parentid = %d ) LIMIT 150", Category::CAT_PARENT_TV));
     if ($this->pdo->getNumRows($results) > 0) {
         if ($this->echooutput) {
             echo "TheTVDB : Looking up last " . $this->pdo->getNumRows($results) . " releases\n";
         }
         while ($arr = $this->pdo->getAssocArray($results)) {
             unset($TheTVDBAPIArray, $episodeArray, $fullep, $epabsolute, $additionalSql);
             $seriesName = '';
             if ($arr['rageid'] > 0) {
                 $seriesName = $this->pdo->queryOneRow(sprintf('SELECT releasetitle AS seriesName FROM tvrage WHERE rageid = %d', $arr['rageid']));
             } elseif ($arr['anidbid'] > 0) {
                 $seriesName = $this->pdo->queryOneRow(sprintf('SELECT title AS seriesName FROM anidb WHERE anidbid = %d', $arr['anidbid']));
             }
             if (empty($seriesName) || !$seriesName) {
                 $this->notFound($seriesName, "", $arr['id'], false);
                 continue;
             }
             $seriesName = str_replace('`', '\'', $seriesName['seriesName']);
             if (!preg_match('/[21]\\d{3}\\/\\d{2}\\/\\d{2}/', $arr['seriesfull'])) {
                 $fullep = str_pad(str_replace('S', '', $arr['season']), 2, '0', STR_PAD_LEFT) . 'x' . str_pad(str_replace('E', '', $arr['episode']), 2, '0', STR_PAD_LEFT);
             } else {
                 $fullep = str_replace('/', '-', $arr['seriesfull']);
             }
             $TheTVDBAPIArray = $this->getSeriesInfoByName($seriesName);
             if (!$TheTVDBAPIArray) {
                 $seriesid = $this->lookupSeriesID($seriesName);
                 if ($seriesid > 0) {
                     $TheTVDBAPIArray = $this->TheTVDBAPI($seriesid, $seriesName);
                     if ($TheTVDBAPIArray) {
                         $this->addSeries($TheTVDBAPIArray);
                         $this->addEpisodes($TheTVDBAPIArray);
                     } else {
                         $this->addEmptySeries($seriesName);
                         $this->notFound($seriesName, $fullep, $arr['id']);
                         continue;
                     }
                 } else {
                     $this->addEmptySeries($seriesName);
                     $this->notFound($seriesName, $fullep, $arr['id']);
                     continue;
                 }
             } else {
                 if ($TheTVDBAPIArray['tvdbid'] > 0 && time() - strtotime($TheTVDBAPIArray['createddate']) > 604800) {
                     $TheTVDBAPIArray = $this->TheTVDBAPI($TheTVDBAPIArray['tvdbid'], $seriesName);
                     $this->updateSeries($TheTVDBAPIArray['tvdbid'], $TheTVDBAPIArray['actors'], $TheTVDBAPIArray['airsday'], $TheTVDBAPIArray['airstime'], $TheTVDBAPIArray['contentrating'], $TheTVDBAPIArray['firstaired'], $TheTVDBAPIArray['genre'], $TheTVDBAPIArray['imdbid'], $TheTVDBAPIArray['network'], $TheTVDBAPIArray['overview'], $TheTVDBAPIArray['rating'], $TheTVDBAPIArray['ratingcount'], $TheTVDBAPIArray['runtime'], $TheTVDBAPIArray['seriesname'], $TheTVDBAPIArray['status']);
                     $this->addEpisodes($TheTVDBAPIArray);
                 }
             }
             if ($TheTVDBAPIArray['tvdbid'] > 0) {
                 $epabsolute = '0';
                 if ($arr['anidbid'] > 0) {
                     if (preg_match('/S(?P<season>\\d+)[ED](?P<episode>\\d+)/', $arr['episode'], $seasonEpisode)) {
                         $arr['season'] = $seasonEpisode['season'];
                         $arr['episode'] = $seasonEpisode['episode'];
                     } else {
                         $epabsolute = $arr['episode'];
                     }
                 }
                 $Episode = new Episode();
                 $episodeArray = $Episode->getEpisodeInfoByName($seriesName, $fullep, (string) $epabsolute);
                 if (!$episodeArray) {
                     $this->notFound($seriesName, $fullep, $arr['id']);
                     continue;
                 }
             } else {
                 $this->notFound($seriesName, $fullep, $arr['id']);
                 continue;
             }
             $additionalSql = '';
             if ($arr['anidbid'] > 0 && $episodeArray['epabsolute'] > 0) {
                 $additionalSql = sprintf(', season = NULL, episode = %d, tvtitle = %s, tvairdate = %s', $episodeArray['epabsolute'], $this->pdo->escapeString($episodeArray['epabsolute'] . ' - ' . str_replace('\'', '`', $episodeArray['eptitle'])), $this->pdo->escapeString($episodeArray['airdate']));
             }
             $this->pdo->queryExec(sprintf('UPDATE releases SET tvdbid = %d, episodeinfoid = %d %s WHERE id = %d', $TheTVDBAPIArray['tvdbid'], $episodeArray['id'], $additionalSql, $arr['id']));
             if ($this->echooutput) {
                 echo 'TheTVDB : ' . $seriesName . ' ' . $fullep . " returned " . $episodeArray['tvdbid'] . "\n";
             }
         }
     }
 }
//This script will rerun all releases against Category.php
require_once dirname(__FILE__) . '/../../www/config.php';
use newznab\db\Settings;
$db = new Settings();
$category = new Categorize();
$changedcount = 0;
$rescount = 0;
//
// [1] change for all where the regex isnt aimed at a specific category (affects most releases)
//
//$res = $db->queryDirect("select r.id as id, r.searchname as searchname, g.name as groupname, r.categoryID as rcat from releases r, releaseregex rr, groups g where r.regexid=rr.id and g.ID = r.groupID and rr.categoryid is null");
//
// [2] update for all in a category
//
//$res = $db->queryDirect("select r.id as id, r.searchname as searchname, g.name as groupname, r.categoryID as rcat from releases r inner join groups g on g.ID = r.groupID where r.categoryID in (6010, 6020, 6030, 6040)");
//
// [3] reset all flac with hashed names
//
//$res = $db->queryDirect("select releases.ID as id, searchname as searchname, groups.name as groupname, releases.categoryID as rcat from releases join groups on groups.ID = releases.groupID where length(searchname) = 40 and groups.name like 'alt.binaries.sounds.flac'");
while ($rel = $db->getAssocArray($res)) {
    $rescount++;
    $categoryID = $category->determineCategory($rel['groupname'], $rel['searchname']);
    if ($categoryID != $rel['rcat'] && $categoryID != '7900') {
        $changedcount++;
        echo "Changing category for " . $rel['searchname'] . " New (" . $categoryID . ") Old (" . $rel['rcat'] . ")\n";
        $db->exec(sprintf("update releases SET categoryID = %d WHERE ID = %d", $categoryID, $rel['id']));
    }
}
echo $rescount . " releases \n";
echo $changedcount . " releases changed\n";
Beispiel #11
0
    $i["isdir"] = is_dir($f) ? 1 : 0;
    $i["fullname"] = $f;
    $i["webpath"] = $webpath . "/" . $i["name"] . ($i["isdir"] == 1 ? "/" : "");
    $i["mtime"] = filemtime($f);
    $i["pathinfo"] = pathinfo($f);
    if ($i["isdir"] == 1) {
        $i["pathinfo"]["extension"] = "";
        $dirs[] = $i["name"];
    } else {
        $i["size"] = filesize($f);
    }
    $items[$i["name"]] = $i;
}
if (!$listmode) {
    $relres = $r->getByNames($dirs);
    while ($rel = $pdo->getAssocArray($relres)) {
        if (isset($items[$rel["searchname"]])) {
            $items[$rel["searchname"]]["release"] = $rel;
        }
    }
}
uasort($items, 'sortbymodified');
$page->smarty->assign('results', $items);
$page->smarty->assign('lm', $listmode);
if ($subpath != "") {
    $page->smarty->assign('subpath', $subpath . "/");
}
$parentpath = "";
if ($subpath != "") {
    $pos = strrpos($subpath, "/");
    if ($pos !== false) {
Beispiel #12
0
<?php

require_once "config.php";
use newznab\db\Settings;
$page = new AdminPage();
$page->title = "Admin Hangout";
$statusmsgs = array();
//
// status messages
//
//
// mysql config settings
//
$db = new Settings();
$result = $db->queryDirect("SELECT @@group_concat_max_len, @@max_allowed_packet");
$data = $db->getAssocArray($result);
if ($data['@@group_concat_max_len'] < 8192) {
    $statusmsgs[] = addmsg("MySql my.cnf setting group_concat_max_len is too low, should be >= 8192.", "http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_group_concat_max_len");
}
if ($data['@@max_allowed_packet'] < 12582912) {
    $statusmsgs[] = addmsg("MySql my.cnf setting max_allowed_packet is too low, should be >= 12582912.", "http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_allowed_packet");
}
//
// default keys not changed
//
if ($page->settings->getSetting('amazonpubkey') == "AKIAIPDNG5EU7LB4AD3Q" && $page->settings->getSetting('lookupmusic') + $page->settings->getSetting('lookupgames') + $page->settings->getSetting('lookupbooks') != 0) {
    $statusmsgs[] = addmsg("Amazon shared key in use. Not using your own Amazon API key will result in failed amazon lookups.", "http://newznab.readthedocs.org/en/latest/faq/");
}
if ($page->settings->getSetting('rawretentiondays') > 10) {
    $statusmsgs[] = addmsg("Binary header retention is set at " . $page->settings->getSetting('rawretentiondays') . ". Having this value any higher than 2 can cause the database to grow very large.", "site-edit.php");
}
Beispiel #13
0
 /**
  * Query the indexer directly.  Returns an array of the results, unless
  * there was an error in which case ``false`` is returned.  However, if
  * Sphinx returns an "invalid query" error (1064), then an empty result
  * array is returned.  Note that an empty "result array" is not the same as
  * an empty array and will instead look like::
  *
  *      array({"_totalrows": 0})
  *
  * If  ``$lookupQuery`` is an empty string, then the results returned will
  * be the data from the index--this is not guaranteed to be the most recent
  * data that is in the MySQL database.  If you absolutely need the most
  * recent data from MySQL, then ``$lookupQuery`` should be a valid SQL
  * query that has contains "releases.id IN (%s)".
  *
  * @param   string      $sphinxQuery    The raw SphinxQL query.
  * @param   string      $lookupQuery    The SQL to use to lookup the results.
  * @param   bool/int    $useCache    	The ttl to store the item in the cache.
  * @return  array|false
  */
 public function searchDirect($sphinxQuery, $lookupQuery = "", $useCache = false)
 {
     $cache = new Cache();
     if ($useCache !== false && $cache->enabled && $cache->exists($sphinxQuery)) {
         $ret = $cache->fetch($sphinxQuery);
         if ($ret !== false) {
             return $ret;
         }
     }
     // Connect to Sphinx
     $hostport = explode(":", $this->pdo->getSetting('sphinxserverhost'));
     $sdb = mysqli_connect($hostport[0], "root", "", "", $hostport[1]);
     if (!$sdb) {
         // Couldn't connect to Sphinx.
         return false;
     }
     // Get the results from Sphinx.
     $lev = error_reporting();
     error_reporting(0);
     $result = mysqli_query($sdb, $sphinxQuery);
     error_reporting($lev);
     $error = mysqli_error($sdb);
     // A 1064 error means that the query is invalid, so we don't care
     // about that.
     if ($error && mysqli_errno($sdb) != 1064) {
         // All other errors we will considered a failure.
         return false;
     }
     // Get the query metadata.
     $meta = [];
     $mresult = mysqli_query($sdb, "SHOW META");
     if (!$mresult) {
         return false;
     }
     while ($row = mysqli_fetch_row($mresult)) {
         $meta[$row[0]] = $row[1];
     }
     $results = [];
     if ($result) {
         while ($row = mysqli_fetch_assoc($result)) {
             if ($lookupQuery) {
                 // Save the IDs for a batch lookup.
                 $results[] = $row["id"];
             } else {
                 $results[] = $row;
             }
         }
     }
     if ($lookupQuery && count($results) > 0) {
         $ndb = new newznab\db\Settings();
         $sql = sprintf($lookupQuery, implode(",", $results));
         $result = $ndb->queryDirect($sql);
         if ($result) {
             $results = [];
             while ($row = $ndb->getAssocArray($result)) {
                 $results[] = $row;
             }
         }
     }
     $count = 0;
     if (count($results) > 0 && array_key_exists("total", $meta)) {
         $count = (int) $meta["total_found"];
         $results[0]["_totalrows"] = $count > MAX_MATCHES ? MAX_MATCHES : $count;
     }
     if ($useCache !== false && $cache->enabled) {
         $cache->store($sphinxQuery, $results, $useCache);
     }
     return $results;
 }
Beispiel #14
0
    /**
     * Writes out the nzb when processing releases. Performed outside of smarty due to memory issues
     * of holding all parts in an array.
     */
    function writeNZBforReleaseId($relid, $name, $catId, $path, $groupID)
    {
        $db = new Settings();
        $cat = new Category();
        $this->groupID = $groupID;
        // Set table names
        if ($this->tablePerGroup === true) {
            if ($this->groupID == '') {
                exit("{$this->groupID} is missing\n");
            }
            $bName = 'binaries_' . $this->groupID;
            $pName = 'parts_' . $this->groupID;
        } else {
            $bName = 'binaries';
            $pName = 'parts';
        }
        $catrow = $cat->getById($catId);
        $site = new Sites();
        $fp = gzopen($path, "w");
        if ($fp) {
            $nzb_guid = '';
            gzwrite($fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
            gzwrite($fp, "<!DOCTYPE nzb PUBLIC \"-//newzBin//DTD NZB 1.1//EN\" \"http://www.newzbin.com/DTD/nzb/nzb-1.1.dtd\">\n");
            gzwrite($fp, "<nzb xmlns=\"http://www.newzbin.com/DTD/2003/nzb\">\n\n");
            gzwrite($fp, "<head>\n");
            if ($catrow) {
                gzwrite($fp, " <meta type=\"category\">" . htmlspecialchars($catrow["title"], ENT_QUOTES, 'utf-8') . "</meta>\n");
            }
            if ($name != "") {
                gzwrite($fp, " <meta type=\"name\">" . htmlspecialchars($name, ENT_QUOTES, 'utf-8') . "</meta>\n");
            }
            gzwrite($fp, "</head>\n\n");
            $result = $db->queryDirect(sprintf("SELECT %s.*, UNIX_TIMESTAMP(date) AS unixdate, groups.name as groupname FROM %s inner join groups on %s.groupid = groups.id WHERE %s.releaseid = %d ORDER BY %s.name", $bName, $bName, $bName, $bName, $relid, $bName));
            while ($binrow = $this->pdo->getAssocArray($result)) {
                $groups = array();
                $groupsRaw = explode(' ', $binrow['xref']);
                foreach ($groupsRaw as $grp) {
                    if (preg_match('/^([a-z0-9\\.\\-_]+):(\\d+)?$/i', $grp, $match) && strtolower($grp) !== 'xref') {
                        $groups[] = $match[1];
                    }
                }
                if (count($groups) == 0) {
                    $groups[] = $binrow["groupname"];
                }
                gzwrite($fp, "<file poster=\"" . htmlspecialchars($binrow["fromname"], ENT_QUOTES, 'utf-8') . "\" date=\"" . $binrow["unixdate"] . "\" subject=\"" . htmlspecialchars($binrow["name"], ENT_QUOTES, 'utf-8') . " (1/" . $binrow["totalparts"] . ")\">\n");
                gzwrite($fp, " <groups>\n");
                foreach ($groups as $group) {
                    gzwrite($fp, "  <group>" . $group . "</group>\n");
                }
                gzwrite($fp, " </groups>\n");
                gzwrite($fp, " <segments>\n");
                $resparts = $db->queryDirect(sprintf("SELECT DISTINCT(messageid), size, partnumber FROM %s WHERE binaryid = %d ORDER BY partnumber", $pName, $binrow["id"]));
                while ($partsrow = $db->getAssocArray($resparts)) {
                    if ($nzb_guid === '') {
                        $nzb_guid = $partsrow['messageid'];
                    }
                    gzwrite($fp, "  <segment bytes=\"" . $partsrow["size"] . "\" number=\"" . $partsrow["partnumber"] . "\">" . htmlspecialchars($partsrow["messageid"], ENT_QUOTES, 'utf-8') . "</segment>\n");
                }
                gzwrite($fp, " </segments>\n</file>\n");
            }
            gzwrite($fp, "<!-- generated by newznab " . $site->version() . " -->\n</nzb>");
            gzclose($fp);
            if (is_file($path)) {
                $this->pdo->queryExec(sprintf('
						UPDATE releases SET nzbstatus = %d %s WHERE id = %d', NZB::NZB_ADDED, $nzb_guid === '' ? '' : ', nzb_guid = UNHEX( ' . $this->pdo->escapestring(md5($nzb_guid)) . ' )', $relid));
                // Chmod to fix issues some users have with file permissions.
                chmod($path, 0777);
                return true;
            } else {
                echo "ERROR: {$path} does not exist.\n";
            }
        }
    }
Beispiel #15
0
<?php

//This script will update all records in the cosole table
require_once dirname(__FILE__) . '/../../www/config.php';
use newznab\db\Settings;
$console = new Console(['Echo' => true, 'Settings' => $pdo]);
$db = new Settings();
$res = $db->queryDirect(sprintf("SELECT searchname, id from releases where consoleinfoid IS NULL and categoryid in ( select ID from category where parentid = %d ) ORDER BY id DESC LIMIT %d", Category::CAT_PARENT_GAME, Console::NUMTOPROCESSPERTIME));
if ($res != null) {
    while ($arr = $db->getAssocArray($res)) {
        $gameInfo = $console->parseTitle($arr['searchname']);
        if ($gameInfo !== false) {
            echo 'Searching ' . $gameInfo['release'] . '<br />';
            $game = $console->updateConsoleInfo($gameInfo);
            if ($game !== false) {
                echo "<pre>";
                print_r($game);
                echo "</pre>";
            } else {
                echo '<br />Game not found<br /><br />';
            }
        }
    }
}
Beispiel #16
0
 public function processTvReleases($lookupTvRage = true, $numtoProcess = 100)
 {
     $ret = 0;
     $nfo = new Nfo();
     // get all releases without a rageid which are in a tv category.
     $result = $this->pdo->queryDirect(sprintf("SELECT searchname, id from releases where rageid = -1 and categoryid in ( select id from category where parentid = %d ) order by postdate desc limit %d ", Category::CAT_PARENT_TV, $numtoProcess));
     if ($this->pdo->getNumRows($result) > 0) {
         if ($this->echooutput) {
             echo "TVRage  : Looking up " . $this->pdo->getNumRows($result) . " releases" . ($lookupTvRage ? " using local and web\n" : " local only\n");
         }
         while ($arr = $this->pdo->getAssocArray($result)) {
             $rageID = false;
             /* Preliminary Rage id Detection from NFO file */
             $rawnfo = '';
             if ($nfo->getNfo($arr['id'], $rawnfo)) {
                 $rageID = $this->parseRageIdFromNfo($rawnfo);
             }
             if ($rageID) {
                 // Set RageID (if matched db) and move along
                 $res = $this->pdo->query(sprintf("SELECT count(id) as cnt from tvrage where rageid = %d", $rageID));
                 if (count($res) >= 1 && intval($res[0]['cnt']) > 1) {
                     $this->pdo->queryExec(sprintf("update releases set rageid = %d where id = %d", $rageID, $arr["id"]));
                     continue;
                 }
             }
             $show = $this->parseNameEpSeason($arr['searchname']);
             if (is_array($show) && $show['name'] != '') {
                 // update release with season, ep, and airdate info (if available) from releasetitle
                 $this->updateEpInfo($show, $arr['id']);
                 // find the rageid
                 $id = $this->getByTitle($show['cleanname']);
                 if ($id === false && $lookupTvRage) {
                     // if it doesnt exist locally and lookups are allowed lets try to get it
                     if ($this->echooutput) {
                         echo "TVRage  : Didnt find " . $show['cleanname'] . " locally, checking web\n";
                     }
                     $tvrShow = $this->getRageMatch($show);
                     if ($tvrShow !== false && is_array($tvrShow)) {
                         // get all tv info and add show
                         $this->updateRageInfo($tvrShow['showid'], $show, $tvrShow, $arr['id']);
                     } elseif ($tvrShow === false) {
                         // no match
                         //add to tvrage with rageid = -2 and $show['cleanname'] title only
                         $this->add(-2, $show['cleanname'], '', '', '', '');
                     } else {
                         // $tvrShow probably equals -1 but we'll do this as a catchall instead of a specific elseif
                         //skip because we couldnt connect to tvrage.com
                     }
                 } elseif ($id > 0) {
                     $tvairdate = isset($show['airdate']) && !empty($show['airdate']) ? $this->pdo->escapeString($show['airdate']) : "null";
                     $tvtitle = "null";
                     if ($lookupTvRage) {
                         if ($tvairdate == "null") {
                             //check local releases to see if we already have the data
                             $epinfo = $this->pdo->queryOneRow(sprintf("select tvtitle as title, tvairdate as airdate from releases where tvairdate is not null and season = %s and episode = %s and rageid = %d", $this->pdo->escapeString($show['season']), $this->pdo->escapeString($show['episode']), $id));
                             //check tvdb episodeinfo data
                             if ($epinfo == false) {
                                 $sql = sprintf("select eptitle as title, airdate as airdate from episodeinfo where airdate is not null and fullep = %s and rageid = %d", $this->pdo->escapeString(str_replace('S', '', $show['season']) . 'x' . str_replace('E', '', $show['episode'])), $id);
                                 $epinfo = $this->pdo->queryOneRow($sql);
                             }
                             if ($epinfo == false) {
                                 $epinfo = $this->getEpisodeInfo($id, $show['season'], $show['episode']);
                             }
                             if ($epinfo !== false) {
                                 if (!empty($epinfo['airdate'])) {
                                     $tvairdate = $this->pdo->escapeString($epinfo['airdate']);
                                 }
                                 if (!empty($epinfo['title'])) {
                                     $tvtitle = $this->pdo->escapeString($epinfo['title']);
                                 }
                             }
                         }
                     }
                     $this->pdo->queryExec(sprintf("update releases set tvtitle=trim(%s), tvairdate=%s, rageid = %d where id = %d", $tvtitle, $tvairdate, $id, $arr["id"]));
                 } else {
                     // cant find rageid, so set rageid to n/a
                     $this->pdo->queryExec(sprintf("update releases set rageid = -2 where id = %d", $arr["id"]));
                 }
             } else {
                 // not a tv episode, so set rageid to n/a
                 $this->pdo->queryExec(sprintf("update releases set rageid = -2 where id = %d", $arr["id"]));
             }
             $ret++;
         }
     }
     return $ret;
 }