diff --git a/Changelog b/Changelog index c65085b04..e18e521a5 100755 --- a/Changelog +++ b/Changelog @@ -1,3 +1,5 @@ +2015-12-29 DariusIII + Chg: Add release renaming based on included srr filename, fix one long standing bug in NameFixer 2015-12-28 DariusIII Upd: Update fileInfo function in Utility.php 2015-12-23 DariusIII diff --git a/misc/testing/Releases/fixReleaseNames.php b/misc/testing/Releases/fixReleaseNames.php index b310f318e..da1c499bc 100755 --- a/misc/testing/Releases/fixReleaseNames.php +++ b/misc/testing/Releases/fixReleaseNames.php @@ -68,6 +68,12 @@ if (isset($argv[1]) && isset($argv[2]) && isset($argv[3]) && isset($argv[4])) { case 8: $namefixer->fixNamesWithPar2(2, $update, $other, $setStatus, $show, $nntp); break; + case 9: + $namefixer->fixNamesWithSrr(1, $update, $other, $setStatus, $show); + break; + case 10: + $namefixer->fixNamesWithSrr(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; @@ -85,5 +91,7 @@ if (isset($argv[1]) && isset($argv[2]) && isset($argv[3]) && isset($argv[4])) { . "php $argv[0] 5 false other no ...: Fix release names in misc categories using File Name in the past 6 hours.\n" . "php $argv[0] 6 false other no ...: Fix release names in misc categories using File Name.\n" . "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] 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 file in the past 6 hours.\n" + . "php $argv[0] 10 false other no ...: Fix release names in misc categories using srr file.\n")); } diff --git a/misc/update_scripts/nix_scripts/multiprocessing/fixrelnames.php b/misc/update_scripts/nix_scripts/multiprocessing/fixrelnames.php index 4598619de..24dd2ad04 100644 --- a/misc/update_scripts/nix_scripts/multiprocessing/fixrelnames.php +++ b/misc/update_scripts/nix_scripts/multiprocessing/fixrelnames.php @@ -1,9 +1,10 @@ Attempt to fix release name using the nfo.' . PHP_EOL . 'filename => Attempt to fix release name using the filenames.' . PHP_EOL . + 'srr => Attempt to fix release name using the srr file.' . PHP_EOL . 'md5 => Attempt to fix release name using the MD5.' . PHP_EOL . 'par2 => Attempt to fix release name using the par2.' . PHP_EOL . 'miscsorter => Attempt to fix release name using magic.' . PHP_EOL . diff --git a/misc/update_scripts/nix_scripts/tmux/bin/fixreleasenames.php b/misc/update_scripts/nix_scripts/tmux/bin/fixreleasenames.php index b6d825ec5..3a923b412 100644 --- a/misc/update_scripts/nix_scripts/tmux/bin/fixreleasenames.php +++ b/misc/update_scripts/nix_scripts/tmux/bin/fixreleasenames.php @@ -8,6 +8,7 @@ use newznab\ColorCLI; use newznab\NameFixer; use newznab\NNTP; use newznab\NZBContents; +use newznab\Nfo; $c = new ColorCLI(); if (!isset($argv[1])) { @@ -45,7 +46,18 @@ if (!isset($argv[1])) { } $namefixer->checked++; } - } else if (isset($pieces[1]) && $pieces[0] == 'md5') { + } else if (isset($pieces[1]) && $pieces[0] == 'srr') { + $release = $pieces[1]; + if ($res = $db->queryOneRow(sprintf('SELECT relfiles.name AS textstring, rel.categoryid, rel.searchname, ' + . 'rel.groupid, relfiles.releaseid AS fileid, rel.id AS releaseid, rel.name FROM releases rel ' + . 'INNER JOIN release_files relfiles ON (relfiles.releaseid = rel.id) WHERE rel.id = %d', $release))) { + $namefixer->done = $namefixer->matched = false; + if ($namefixer->checkName($res, true, 'Srr, ', 1, 1) !== true) { + echo '.'; + } + $namefixer->checked++; + } + }else if (isset($pieces[1]) && $pieces[0] == 'md5') { $release = $pieces[1]; if ($res = $db->queryOneRow(sprintf('SELECT r.id AS releaseid, r.name, r.searchname, r.categoryid, r.groupid, dehashstatus, rf.name AS filename FROM releases r LEFT JOIN release_files rf ON r.id = rf.releaseid WHERE r.id = %d', $release))) { if (preg_match('/[a-fA-F0-9]{32,40}/i', $res['name'], $matches)) { diff --git a/misc/update_scripts/nix_scripts/tmux/bin/groupfixrelnames.php b/misc/update_scripts/nix_scripts/tmux/bin/groupfixrelnames.php index 7b4019f06..c47dffbd0 100644 --- a/misc/update_scripts/nix_scripts/tmux/bin/groupfixrelnames.php +++ b/misc/update_scripts/nix_scripts/tmux/bin/groupfixrelnames.php @@ -84,6 +84,33 @@ if (!isset($argv[1])) { } } break; + case $pieces[0] === 'srr' && isset($guidChar) && isset($maxperrun) && is_numeric($maxperrun): + $releases = $pdo->queryDirect( + sprintf(' + SELECT rf.name AS textstring, rf.releaseid AS fileid, + r.id AS releaseid, r.name, r.searchname, r.categoryid, r.groupid + FROM releases r + INNER JOIN release_files rf ON r.id = rf.releaseid + WHERE r.guid %s + AND r.nzbstatus = 1 AND r.proc_srr = 0 + AND r.prehashid = 0 + ORDER BY r.postdate ASC + LIMIT %s', + $pdo->likeString($guidChar, false, true), + $maxperrun + ) + ); + + if ($releases instanceof Traversable) { + foreach ($releases as $release) { + $namefixer->done = $namefixer->matched = false; + if ($namefixer->checkName($release, true, 'Srr, ', 1, 1) !== true) { + echo '.'; + } + $namefixer->checked++; + } + } + break; case $pieces[0] === 'md5' && isset($guidChar) && isset($maxperrun) && is_numeric($maxperrun): $releases = $pdo->queryDirect( sprintf(' diff --git a/newznab/NameFixer.php b/newznab/NameFixer.php index e05ffc501..3f9d9c89a 100755 --- a/newznab/NameFixer.php +++ b/newznab/NameFixer.php @@ -19,6 +19,8 @@ class NameFixer const PROC_FILES_DONE = 1; const PROC_PAR2_NONE = 0; const PROC_PAR2_DONE = 1; + const PROC_SRR_NONE = 0; + const PROC_SRR_DONE = 1; // Constants for overall rename status const IS_RENAMED_NONE = 0; @@ -141,9 +143,9 @@ class NameFixer $this->echooutput = ($options['Echo'] && NN_ECHOCLI); $this->relid = $this->fixed = $this->checked = 0; $this->pdo = ($options['Settings'] instanceof Settings ? $options['Settings'] : new Settings()); - $this->timeother = ' AND rel.adddate > (NOW() - INTERVAL 6 HOUR) AND rel.categoryid IN (1090, 2020, 3050, 6050, 5050, 7010, 7020, 8050) GROUP BY rel.id ORDER BY postdate DESC'; + $this->timeother = ' AND rel.adddate > (NOW() - INTERVAL 6 HOUR) AND rel.categoryid IN (1090, 2020, 3050, 6050, 5050, 7050, 8010, 8020) GROUP BY rel.id ORDER BY postdate DESC'; $this->timeall = ' AND rel.adddate > (NOW() - INTERVAL 6 HOUR) GROUP BY rel.id ORDER BY postdate DESC'; - $this->fullother = ' AND rel.categoryid IN (1090, 2020, 3050, 6050, 5050, 7010, 7020, 8050) GROUP BY rel.id'; + $this->fullother = ' AND rel.categoryid IN (1090, 2020, 3050, 6050, 5050, 7050, 8010, 8020) GROUP BY rel.id'; $this->fullall = ''; $this->_fileName = ''; $this->done = $this->matched = false; @@ -297,6 +299,69 @@ class NameFixer } } + /** + * Attempts to fix release names using the File name. + * + * @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 fixNamesWithSrr($time, $echo, $cats, $nameStatus, $show) + { + $this->_echoStartMessage($time, 'srr files'); + $type = 'Srr, '; + + $preId = false; + if ($cats === 3) { + $query = sprintf(' + SELECT rf.name AS textstring, rel.categoryid, rel.name, rel.searchname, rel.groupid, + rf.releaseid AS fileid, rel.id AS releaseid + FROM releases rel + INNER JOIN release_files rf ON (rf.releaseid = rel.id) + WHERE nzbstatus = %d + AND prehashid = 0', + NZB::NZB_ADDED + ); + $cats = 2; + $preId = true; + } else { + $query = sprintf(' + SELECT rf.name AS textstring, rel.categoryid, rel.name, rel.searchname, rel.groupid, + rf.releaseid AS fileid, rel.id AS releaseid + FROM releases rel + INNER JOIN release_files rf ON (rf.releaseid = rel.id) + WHERE (isrenamed = %d OR rel.categoryid IN (%d, %d)) + AND proc_srr = %d', + self::IS_RENAMED_NONE, + Category::CAT_MISC_OTHER, + Category::CAT_MISC_HASHED, + self::PROC_SRR_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) . ' srr files to process.'); + + foreach ($releases as $release) { + $this->done = $this->matched = false; + $this->checkName($release, $echo, $type, $nameStatus, $show, $preId); + $this->checked++; + $this->_echoRenamed($show); + } + + $this->_echoFoundCount($echo, ' files'); + } else { + echo $this->pdo->log->info('Nothing to fix.'); + } + } + } /** * Attempts to fix release names using the Par2 File. * @@ -490,6 +555,13 @@ class NameFixer } } + if ($type === "Srr, ") { + $newName = ucwords($newName); + if (preg_match('/(.+?)\.(srr)?$/i', $name, $match)) { + $newName = $match[1]; + } + } + $this->fixed++; $newName = explode("\\", $newName); @@ -555,9 +627,12 @@ class NameFixer case "PreDB FT Exact, ": $status = "isrenamed = 1, iscategorized = 1,"; break; - case "sorter ": + case "sorter, ": $status = "isrenamed = 1, iscategorized = 1, proc_sorter = 1,"; break; + case "Srr, ": + $status = "isrenamed = 1, iscategorized = 1, proc_srr = 1,"; + break; } $this->pdo->queryExec( sprintf(' @@ -925,6 +1000,9 @@ class NameFixer case "PAR2, ": $this->fileCheck($release, $echo, $type, $namestatus, $show); break; + case "Srr, ": + $this->srrCheck($release, $echo, $type, $namestatus, $show); + break; case "NFO, ": $this->nfoCheckTV($release, $echo, $type, $namestatus, $show); $this->nfoCheckMov($release, $echo, $type, $namestatus, $show); @@ -954,6 +1032,9 @@ class NameFixer case "PAR2, ": $this->_updateSingleColumn('proc_par2', self::PROC_FILES_DONE, $release['releaseid']); break; + case "Srr, ": + $this->_updateSingleColumn('proc_srr', self::PROC_SRR_DONE, $release['releaseid']); + break; } } } @@ -1492,4 +1573,24 @@ class NameFixer } } } + + /** + * Look for a name based on srr filename. + * + * @param $release + * @param boolean $echo + * @param string $type + * @param $namestatus + * @param $show + */ + public function srrCheck($release, $echo, $type, $namestatus, $show) + { + $result = []; + + if ($this->done === false && $this->relid !== $release["releaseid"]) { + if (preg_match('/(.+?)\.(srr)$/i', $release["textstring"], $result)) { + $this->updateRelease($release, $result["1"], $method = "srrCheck: Srr filename", $echo, $type, $namestatus, $show); + } + } + } } diff --git a/newznab/TmuxRun.php b/newznab/TmuxRun.php index d8674ac87..818f1be3c 100644 --- a/newznab/TmuxRun.php +++ b/newznab/TmuxRun.php @@ -175,6 +175,7 @@ class TmuxRun extends Tmux shell_exec("tmux respawnp -t{$runVar['constants']['tmux_session']}:1.0 ' \ {$runVar['commands']['_php']} {$runVar['paths']['misc']}update_scripts/nix_scripts/multiprocessing/fixrelnames.php md5 $log; \ {$runVar['commands']['_php']} {$runVar['paths']['misc']}update_scripts/nix_scripts/multiprocessing/fixrelnames.php filename $log; \ + {$runVar['commands']['_php']} {$runVar['paths']['misc']}update_scripts/nix_scripts/multiprocessing/fixrelnames.php srr $log; \ {$runVar['commands']['_php']} {$runVar['paths']['misc']}update_scripts/nix_scripts/multiprocessing/fixrelnames.php nfo $log; \ {$runVar['commands']['_php']} {$runVar['paths']['misc']}update_scripts/nix_scripts/multiprocessing/fixrelnames.php par2 $log; \ {$runVar['commands']['_php']} {$runVar['paths']['misc']}update_scripts/nix_scripts/multiprocessing/fixrelnames.php miscsorter $log; \ diff --git a/newznab/build/nntmux.xml b/newznab/build/nntmux.xml index 6ae7ae7b4..88f7535f3 100755 --- a/newznab/build/nntmux.xml +++ b/newznab/build/nntmux.xml @@ -2,8 +2,8 @@ - 230 - 230 + 231 + 231 0.0.0 diff --git a/newznab/libraries/Forking.php b/newznab/libraries/Forking.php index 429084144..13b091741 100644 --- a/newznab/libraries/Forking.php +++ b/newznab/libraries/Forking.php @@ -148,6 +148,7 @@ class Forking extends \fork_daemon case 'fixRelNames_nfo': case 'fixRelNames_filename': + case 'fixRelNames_srr': case 'fixRelNames_md5': case 'fixRelNames_par2': case 'fixRelNames_miscsorter': @@ -514,10 +515,15 @@ class Forking extends \fork_daemon break; case "filename": - $join = "INNER JOIN release_files rf ON r.id = rf.releaseid"; + $join = "INNER JOIN release_files rf ON r.id = rf.releaseid AND r.isrenamed = 0"; $where = "r.proc_files = 0"; break; + case "srr": + $join = "INNER JOIN release_files rf ON r.id = rf.releaseid AND r.isrenamed = 0"; + $where = "r.proc_srr = 0"; + break; + case "par2": $where = "r.proc_par2 = 0"; break; diff --git a/resources/db/patches/mysql/+1~releases.sql b/resources/db/patches/mysql/+1~releases.sql new file mode 100644 index 000000000..d96b0126b --- /dev/null +++ b/resources/db/patches/mysql/+1~releases.sql @@ -0,0 +1,2 @@ +#Add proc_srr column to releases table, it might take some time +ALTER TABLE releases ADD proc_srr TINYINT(1) NOT NULL DEFAULT '0'; diff --git a/resources/db/patches/mysql/0231~releases.sql b/resources/db/patches/mysql/0231~releases.sql new file mode 100644 index 000000000..d96b0126b --- /dev/null +++ b/resources/db/patches/mysql/0231~releases.sql @@ -0,0 +1,2 @@ +#Add proc_srr column to releases table, it might take some time +ALTER TABLE releases ADD proc_srr TINYINT(1) NOT NULL DEFAULT '0'; diff --git a/resources/db/schema/nntmux_fi_schema.sql b/resources/db/schema/nntmux_fi_schema.sql index b9db86eef..341b596ae 100644 --- a/resources/db/schema/nntmux_fi_schema.sql +++ b/resources/db/schema/nntmux_fi_schema.sql @@ -2532,9 +2532,10 @@ CREATE TABLE IF NOT EXISTS releases ( proc_par2 TINYINT(1) NOT NULL DEFAULT '0', proc_nfo TINYINT(1) NOT NULL DEFAULT '0', proc_files TINYINT(1) NOT NULL DEFAULT '0', + proc_sorter TINYINT(1) NOT NULL DEFAULT '0', + proc_srr TINYINT(1) NOT NULL DEFAULT '0', gamesinfo_id INT(10) NOT NULL DEFAULT '0', xxxinfo_id INT(10) NOT NULL DEFAULT '0', - proc_sorter TINYINT(1) NOT NULL DEFAULT '0', nzbstatus TINYINT(1) NOT NULL DEFAULT '0', nzb_guid BINARY(16) DEFAULT NULL, PRIMARY KEY (id,categoryid), @@ -4099,7 +4100,7 @@ INSERT INTO settings (setting, value, section, subsection, name, hint) VALUES ('spotnabsiteprvkey', '', '', '', 'spotnabsiteprvkey', ''), ('spotnabsitepubkey', '', '', '', 'spotnabsitepubkey', ''), ('spotnabuser', '', '', '', 'spotnabuser', ''), -('sqlpatch', '230', '', '', 'sqlpatch', ''), +('sqlpatch', '231', '', '', 'sqlpatch', ''), ('storeuserips', '0', '', '', 'storeuserips', ''), ('strapline', 'A great usenet indexer','', '', 'strapline', ''), ('style', 'Omicron', '', '', 'style', ''),