From e06f2dc26674c4edb8faddd15ad774d60beac951 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Fri, 20 May 2016 16:03:30 +0200 Subject: [PATCH] Push testing changes --- misc/testing/DB/populate_unique_id.php | 10 +- misc/testing/Releases/fixReleaseNames.php | 10 +- newznab/NameFixer.php | 113 +++++++++++++++++- newznab/ReleaseExtra.php | 4 +- .../db/patches/mysql/+1~release_unique.sql | 2 +- resources/db/patches/mysql/+2~releases.sql | 3 + 6 files changed, 135 insertions(+), 7 deletions(-) create mode 100644 resources/db/patches/mysql/+2~releases.sql diff --git a/misc/testing/DB/populate_unique_id.php b/misc/testing/DB/populate_unique_id.php index 8f42c7d41..3ed7d7b79 100644 --- a/misc/testing/DB/populate_unique_id.php +++ b/misc/testing/DB/populate_unique_id.php @@ -15,7 +15,6 @@ $count = 0; echo $pdo->log->header("Updating Unique IDs for " . number_format($total) . " releases."); foreach ($releases as $release) { - $count++; $xmlObj = @simplexml_load_string($release['mediainfo']); $arrXml = Utility::objectsIntoArray($xmlObj); if (isset($arrXml['File']) && isset($arrXml['File']['track'])) { @@ -25,12 +24,17 @@ foreach ($releases as $release) { if (isset($track['Unique_ID'])) { if (preg_match('/\d+/', $track['Unique_ID'], $match)){ $uniqueid = $match[0]; - $re->addUID($release['releases_id'], $uniqueid); + if($uniqueid > 0) { + $re->addUID($release['releases_id'], $uniqueid); + $count++; + } } } } } } } + echo "$count / $total\r"; } -echo $pdo->log->primary('Added' . $count . 'Unique IDs'); +echo $pdo->log->primary('Added ' . $count . ' Unique IDs that were not 0'); + diff --git a/misc/testing/Releases/fixReleaseNames.php b/misc/testing/Releases/fixReleaseNames.php index af06b1c96..664d5893c 100755 --- a/misc/testing/Releases/fixReleaseNames.php +++ b/misc/testing/Releases/fixReleaseNames.php @@ -74,6 +74,12 @@ if (isset($argv[1]) && isset($argv[2]) && isset($argv[3]) && isset($argv[4])) { case 10: $namefixer->fixNamesWithSrr(2, $update, $other, $setStatus, $show); break; + case 11: + $namefixer->fixNamesWithMedia(1, $update, $other, $setStatus, $show); + break; + case 12: + $namefixer->fixNamesWithMedia(2, $update, $other, $setStatus, $show); + break; default : exit($pdo->log->error("\nERROR: Wrong argument, type php $argv[0] to see a list of valid arguments." . $n)); break; @@ -93,5 +99,7 @@ if (isset($argv[1]) && isset($argv[2]) && isset($argv[3]) && isset($argv[4])) { . "php $argv[0] 7 false other no ...: Fix release names in misc categories using Par2 Files in the past 6 hours.\n" . "php $argv[0] 8 false other no ...: Fix release names in misc categories using Par2 Files.\n" . "php $argv[0] 9 false other no ...: Fix release names in misc categories using SRR Files in the past 6 hours.\n" - . "php $argv[0] 10 false other no ...: Fix release names in misc categories using SRR Files.\n")); + . "php $argv[0] 10 false other no ...: Fix release names in misc categories using SRR Files.\n" + . "php $argv[0] 11 false other no ...: Fix release names in misc categories using UID in the past 6 hours.\n" + . "php $argv[0] 12 false other no ...: Fix release names in misc categories using UID.\n")); } diff --git a/newznab/NameFixer.php b/newznab/NameFixer.php index c2af78134..197505cf7 100755 --- a/newznab/NameFixer.php +++ b/newznab/NameFixer.php @@ -21,6 +21,8 @@ class NameFixer const PROC_PAR2_DONE = 1; const PROC_SRR_NONE = 0; const PROC_SRR_DONE = 1; + const PROC_UID_NONE = 0; + const PROC_UID_DONE = 1; // Constants for overall rename status const IS_RENAMED_NONE = 0; @@ -474,6 +476,81 @@ class NameFixer } } + /** + * Attempts to fix release names using the NFO. + * + * @param int $time 1: 24 hours, 2: no time limit + * @param boolean $echo 1: change the name, anything else: preview of what could have been changed. + * @param int $cats 1: other categories, 2: all categories + * @param $nameStatus + * @param $show + */ + public function fixNamesWithMedia($time, $echo, $cats, $nameStatus, $show) + { + $this->_echoStartMessage($time, 'mediainfo Unique_IDs'); + $type = 'UID, '; + + // Only select releases we haven't checked here before + $preId = false; + if ($cats === 3) { + $query = sprintf(' + SELECT rel.id AS releases_id + FROM releases rel + INNER JOIN release_unique ru ON (ru.releases_id = rel.id) + WHERE rel.nzbstatus = %d + AND rel.predb_id = 0', + NZB::NZB_ADDED + ); + $cats = 2; + $preId = true; + } else { + $query = sprintf(' + SELECT rel.id AS releases_id + FROM releases rel + INNER JOIN release_unique ru ON (ru.releases_id = rel.id) + WHERE (rel.isrenamed = %d OR rel.categories_id IN (%d, %d)) + AND rel.proc_uid = %d', + self::IS_RENAMED_NONE, + Category::OTHER_MISC, + Category::OTHER_HASHED, + self::PROC_UID_NONE + ); + } + + $releases = $this->_getReleases($time, $cats, $query); + + if ($releases instanceof \Traversable && $releases !== false) { + $total = $releases->rowCount(); + + if ($total > 0) { + $this->_totalReleases = $total; + echo $this->pdo->log->primary(number_format($total) . ' releases to process.'); + + foreach ($releases as $rel) { + $releaseRow = $this->pdo->queryOneRow( + sprintf(' + SELECT ru.releases_id, ru.uniqueid AS uid, rel.groupid, rel.categories_id, rel.name, rel.searchname as textstring, + rel.id AS releases_id + FROM releases rel + INNER JOIN release_unique ru ON (ru.releases_id = rel.id) + WHERE rel.id = %d', + $rel['releases_id'] + ) + ); + + $this->checked++; + + $this->done = $this->matched = false; + $this->checkName($releaseRow, $echo, $type, $nameStatus, $show, $preId); + $this->_echoRenamed($show); + } + $this->_echoFoundCount($echo, ' UID\'s'); + } else { + echo $this->pdo->log->info('Nothing to fix.'); + } + } + } + /** * @param int $time 1: 24 hours, 2: no time limit * @param int $cats 1: other categories, 2: all categories @@ -610,7 +687,6 @@ class NameFixer } } - if ($type === "Srr, ") { $newName = ucwords($newName); if (preg_match('/(.+?)\.(srr)?$/i', $name, $match)) { @@ -689,6 +765,9 @@ class NameFixer case "Srr, ": $status = "isrenamed = 1, iscategorized = 1, proc_srr = 1,"; break; + case "UID, ": + $status = "isrenamed = 1, iscategorized = 1, proc_uid = 1,"; + break; } $this->pdo->queryExec( sprintf(' @@ -1064,6 +1143,9 @@ class NameFixer case "Srr, ": $this->srrCheck($release, $echo, $type, $namestatus, $show); break; + case "UID, ": + $this->uidCheck($release, $echo, $type, $namestatus, $show); + break; case "NFO, ": $this->nfoCheckTV($release, $echo, $type, $namestatus, $show); $this->nfoCheckMov($release, $echo, $type, $namestatus, $show); @@ -1651,4 +1733,33 @@ class NameFixer } } } + /** + * Look for a name based on uid. + * + * @param $release + * @param $release + * @param boolean $echo + * @param string $type + * @param $namestatus + * @param $show + */ + public function uidCheck($release, $echo, $type, $namestatus, $show) + { + if ($this->done === false && $this->relid !== $release["releases_id"]) { + + $proper = $this->pdo->queryExec(sprintf(' + SELECT r.id AS releases_id, r.searchname AS searchname, ru.uniqueid AS uid FROM releases r + INNER JOIN release_unique ru ON (ru.releases_id = r.id) + WHERE (r.isrenamed = %s OR r.categories_id NOT IN(%d))', + self::IS_RENAMED_DONE, + $this->othercats + ) + ); + var_dump($proper['searchname']); + if ($proper['uid'] == $release['uid']) { + $this->updateRelease($release, $proper['searchname'], $method = "uidCheck: Unique_ID", $echo, $type, $namestatus, $show); + } + + } + } } diff --git a/newznab/ReleaseExtra.php b/newznab/ReleaseExtra.php index 3c6789d6b..41950695c 100644 --- a/newznab/ReleaseExtra.php +++ b/newznab/ReleaseExtra.php @@ -156,7 +156,9 @@ class ReleaseExtra if (isset($track['Unique_ID'])) { if(preg_match('/\d+/', $track['Unique_ID'], $match)){ $uniqueid = $match[0]; - $this->addUID($releaseID, $uniqueid); + if($uniqueid > 0) { + $this->addUID($releaseID, $uniqueid); + } } } } else if ($track['@attributes']['type'] == 'Video') { diff --git a/resources/db/patches/mysql/+1~release_unique.sql b/resources/db/patches/mysql/+1~release_unique.sql index d6a726386..a37742e76 100644 --- a/resources/db/patches/mysql/+1~release_unique.sql +++ b/resources/db/patches/mysql/+1~release_unique.sql @@ -2,7 +2,7 @@ DROP TABLE IF EXISTS release_unique; CREATE TABLE release_unique ( releases_id INT(11) UNSIGNED NOT NULL COMMENT 'FK to releases.id.', uniqueid VARCHAR(255) NOT NULL COMMENT 'Unique_ID from mediainfo.', - PRIMARY KEY (releases_id, uniqueid) + PRIMARY KEY (releases_id) ) ENGINE = MyISAM DEFAULT CHARSET = utf8 diff --git a/resources/db/patches/mysql/+2~releases.sql b/resources/db/patches/mysql/+2~releases.sql new file mode 100644 index 000000000..9294534a0 --- /dev/null +++ b/resources/db/patches/mysql/+2~releases.sql @@ -0,0 +1,3 @@ +# This patch will add the proc_uid column to the releases table + +ALTER TABLE releases ADD COLUMN proc_uid TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Has the release been UID processed?' AFTER proc_srr;