Skip to content

Instantly share code, notes, and snippets.

@stephenl03
Last active August 28, 2020 13:03
Show Gist options
  • Save stephenl03/298d1086f3f8a1aaa1cc29dbd1905294 to your computer and use it in GitHub Desktop.
Save stephenl03/298d1086f3f8a1aaa1cc29dbd1905294 to your computer and use it in GitHub Desktop.
<?php
/*
* This script will rename all releases posted by 'nonscene@ef.net' to the extracted filename within the rar.
* It will then reset all the values, so PostProcessing will check the release again and download all relevant info
* Written by stephenl03
* updated by Fossil01 and ThePeePs
*/
require_once realpath(dirname(dirname(dirname(__DIR__))) . DIRECTORY_SEPARATOR . 'bootstrap.php');
use nzedb\db\DB;
use nzedb\Categorize;
use nzedb\Category;
use nzedb\ColorCLI;
use nzedb\ConsoleTools;
use nzedb\Groups;
use nzedb\NameFixer;
$pdo = new DB();
$cat = new Categorize(['Settings' => $pdo]);
$pdo->log = new ColorCLI();
$consoletools = new ConsoleTools(['ColorCLI' => $pdo->log]);
$fixer = new NameFixer();
$poster = "nonscene@Ef.net (EF)";
$regex = "^.*[0-9]{6}-.*$";
$count = 0;
$timestart = TIME();
echo $pdo->log->header("Getting releases to process...");
$sql = sprintf("SELECT rf.name AS textstring, rel.name, rel.searchname, rel.searchname, rel.groups_id, rel.categories_id, rel.id AS releases_id FROM releases rel INNER JOIN release_files rf ON (rf.releases_id = rel.id) WHERE nzbstatus = 1 AND predb_id = 0 AND fromname = %s AND searchname REGEXP %s;", $pdo->escapeString($poster), $pdo->escapeString($regex));
$result = $pdo->query($sql);
$cats = new Category();
$groups = new Groups();
foreach ($result as $r) {
$rts = $r['textstring'];
$rts = preg_replace("#\.[a-z0-9]{2,4}$#", "", $rts);
$searchname = sprintf("UPDATE releases SET searchname = %s WHERE id = %d;", $pdo->escapeString($rts), $r['releases_id'], $r['releases_id']);
$releases = sprintf("UPDATE releases SET consoleinfo_id = NULL, gamesinfo_id = 0, imdbid = NULL, musicinfo_id = NULL, bookinfo_id = NULL, videos_id = 0, tv_episodes_id = 0, xxxinfo_id = 0, passwordstatus = -1, haspreview = -1, jpgstatus = 0, videostatus = 0, audiostatus = 0, nfostatus = -1 WHERE id = %d", $r['releases_id']);
$resp = $pdo->queryExec($searchname);
$res = $pdo->queryExec($releases);
$catId = $cat->determineCategory($r['groups_id'], $rts);
if ($r['categories_id'] != $catId) {
$catup = $pdo->queryExec(sprintf("UPDATE releases SET iscategorized = 1, categories_id = %d WHERE id = %d", $catId, $r['releases_id']));
}
$echodata = array('new_name' => $rts, 'old_name' => $r['searchname'], 'old_category' => $cats->getNameByID($r['categories_id']), 'new_category' => $cats->getNameByID($catId), 'group' => $groups->getNameByID($r['groups_id']), 'release_id' => $r['releases_id'], 'method' => 'File Name Match');
$fixer->echoChangedReleaseName($echodata);
if ($resp && $res && $catup) {
echo $pdo->log->info("Done!");
} else {
var_dump($res);
}
$count++;
}
$poster = "yEncBin@Poster.com (yEncBin)";
$regex = "[0-9]{2}[Ee][0-9]{2}[Ss].*\.mkv$";
$regex2 = "^[A-Za-z0-9]*$";
$sql = sprintf("SELECT rf.name AS textstring, rel.name, rel.searchname, rel.id AS releases_id FROM releases rel INNER JOIN release_files rf ON (rf.releases_id = rel.id) WHERE nzbstatus = 1 AND predb_id = 0 AND fromname = %s AND rf.name REGEXP %s AND searchname REGEXP %s;", $pdo->escapeString($poster), $pdo->escapeString($regex), $pdo->escapeString($regex2));
$result = $pdo->query($sql);
foreach ($result as $r) {
$rts = $r['textstring'];
$rts = preg_replace("#\.mkv$#", "", $rts);
$rts = explode("\\", $rts);
$rts = strrev($rts[1]);
$searchname = sprintf("UPDATE releases SET searchname = %s WHERE id = %d;", $pdo->escapeString($rts), $r['releases_id'], $r['releases_id']);
$releases = sprintf("UPDATE releases SET consoleinfo_id = NULL, gamesinfo_id = 0, imdbid = NULL, musicinfo_id = NULL, bookinfo_id = NULL, videos_id = 0, tv_episodes_id = 0, xxxinfo_id = 0, passwordstatus = -1, haspreview = -1, jpgstatus = 0, videostatus = 0, audiostatus = 0, nfostatus = -1 WHERE id = %d", $r['releases_id']);
$resp = $pdo->queryExec($searchname);
$res = $pdo->queryExec($releases);
$catId = $cat->determineCategory($r['groups_id'], $rts);
if ($r['categories_id'] != $catId) {
$catup = $pdo->queryExec(sprintf("UPDATE releases SET iscategorized = 1, categories_id = %d WHERE id = %d", $catId, $r['releases_id']));
}
$echodata = array('new_name' => $rts, 'old_name' => $r['searchname'], 'old_category' => $cats->getNameByID($r['categories_id']), 'new_category' => $cats->getNameByID($catId), 'group' => $groups->getNameByID($r['groups_id']), 'release_id' => $r['releases_id'], 'method' => 'File Name Match');
$fixer->echoChangedReleaseName($echodata);
if ($resp && $res && $catup) {
echo $pdo->log->info("Done!");
} else {
var_dump($res);
}
$count++;
}
$time = $consoletools->convertTime(TIME() - $timestart);
echo $pdo->log->primary("Updated " . $count . " releases in ". $time .".");
@ThePeePs
Copy link

You can also have count going so you know how many releases get renamed.

Before the start of the foreach loop

$count = 0;

At the end of the loop:

printf("Updated %d releases." . PHP_EOL, $count);

@kaibosh
Copy link

kaibosh commented Jan 26, 2017

@stephenl03, tried out this 2nd update. Approx 10% of the renames changed the searchname to blank. I don't immediately see why, so as a quick work-around placed a test to skip those cases for now.

<?php
/*
 * This script will rename all releases posted by 'nonscene@ef.net' to the extracted filename within the rar.
 * It will then reset all the values, so PostProcessing will check the release again and download all relevant info
 * Written by stephenl03
 * updated by Fossil01 and ThePeePs
 */

require_once realpath(dirname(dirname(dirname(__DIR__))) . DIRECTORY_SEPARATOR . 'bootstrap.php');

use nzedb\db\DB;
$pdo = new DB();

$poster = "nonscene@Ef.net (EF)";
$regex = "^.*[0-9]{6}-.*$";
$count = 0;

echo "Getting " . $poster . " releases to process..." . PHP_EOL;
$sql = sprintf("SELECT rf.name AS textstring, rel.name, rel.searchname, rel.id AS releases_id FROM releases rel INNER JOIN release_files rf ON (rf.releases_id = rel.id) WHERE nzbstatus = 1 AND predb_id = 0 AND fromname = %s AND searchname REGEXP %s;", $pdo->escapeString($poster), $pdo->escapeString($regex));
$result = $pdo->query($sql);

foreach ($result as $r) {
        $rts = $r['textstring'];
        $rts = preg_replace("#\.[a-z0-9]{2,4}$#", "", $rts);
        printf("Updating %d to: %s" . PHP_EOL, $r['releases_id'], $rts);

        $searchname = sprintf("UPDATE releases SET searchname = %s WHERE id = %d;", $pdo->escapeString($rts), $r['releases_id'], $r['releases_id']);
        $releases = sprintf("UPDATE releases SET consoleinfo_id = NULL, gamesinfo_id = 0, imdbid = NULL, musicinfo_id = NULL, bookinfo_id = NULL, videos_id = 0, tv_episodes_id = 0, xxxinfo_id = 0, passwordstatus = -1, haspreview = -1, jpgstatus = 0, videostatus = 0, audiostatus = 0, nfostatus = -1 WHERE id =
%d", $r['releases_id']);
        $resp = $pdo->queryExec($searchname);
        $res = $pdo->queryExec($releases);
        if ($resp && $res) {
                echo "Done!" . PHP_EOL;
        } else {
                var_dump($res);
        }
        $count++;
}
printf("Updated %d " . $poster . " releases." . PHP_EOL, $count);

$poster = "yEncBin@Poster.com (yEncBin)";
$regex = "[0-9]{2}[Ee][0-9]{2}[Ss].*\.mkv$";
$regex2 = "^[A-Za-z0-9]*$";
$count = 0;

echo "Getting " . $poster . " releases to process..." . PHP_EOL;
$sql = sprintf("SELECT rf.name AS textstring, rel.name, rel.searchname, rel.id AS releases_id FROM releases rel INNER JOIN release_files rf ON (rf.releases_id = rel.id) WHERE nzbstatus = 1 AND predb_id = 0 AND fromname = %s AND rf.name REGEXP %s AND searchname REGEXP %s;", $pdo->escapeString($poster), $pdo->escapeString($regex), $pdo->escapeString($regex2));
$result = $pdo->query($sql);

foreach ($result as $r) {
        $rts = $r['textstring'];
        $rts = preg_replace("#\.[a-z0-9]{2,4}$#", "", $rts);
        $rts = explode("\\", $rts);
        $rts = strrev($rts[1]);

        if ($rts === "") {
                printf("Skipping %d as replacement searchname is blank" . PHP_EOL, $r['releases_id']);
                } else {
                printf("Updating %d to: %s" . PHP_EOL, $r['releases_id'], $rts);

                $searchname = sprintf("UPDATE releases SET searchname = %s WHERE id = %d;", $pdo->escapeString($rts), $r['releases_id'], $r['releases_id']);
                $releases = sprintf("UPDATE releases SET consoleinfo_id = NULL, gamesinfo_id = 0, imdbid = NULL, musicinfo_id = NULL, bookinfo_id = NULL, videos_id = 0, tv_episodes_id = 0, xxxinfo_id = 0, passwordstatus = -1, haspreview = -1, jpgstatus = 0, videostatus = 0, audiostatus = 0, nfostatus = -1 WHERE id = %d", $r['releases_id']);
                $resp = $pdo->queryExec($searchname);
                $res = $pdo->queryExec($releases);
                if ($resp && $res) {
                        echo "Done!" . PHP_EOL;
                } else {
                        var_dump($res);
                }
                $count++;
        }
}

printf("Updated %d " . $poster . " releases." . PHP_EOL, $count);

@ThePeePs
Copy link

ThePeePs commented Feb 9, 2017

One thing I have noticed while using this script, the releases do not get recategorized, unless you manually run the recategorize script.

Did a quick rewrite adding in a re-categorize check and added in some formating, so the output looks like the other renaming scripts.

<?php
/*
* This script will rename all releases posted by 'nonscene@ef.net' to the extracted filename within the rar.
* It will then reset all the values, so PostProcessing will check the release again and download all relevant info
* Written by stephenl03
* updated by Fossil01 and ThePeePs
*/

require_once realpath(dirname(dirname(dirname(__DIR__))) . DIRECTORY_SEPARATOR . 'bootstrap.php');

use nzedb\db\DB;
use nzedb\Categorize;
use nzedb\Category;
use nzedb\ColorCLI;
use nzedb\ConsoleTools;
use nzedb\Groups;
use nzedb\NameFixer;

$pdo = new DB();
$cat = new Categorize(['Settings' => $pdo]);
$pdo->log = new ColorCLI();
$consoletools = new ConsoleTools(['ColorCLI' => $pdo->log]);
$fixer = new NameFixer();

$poster = "nonscene@Ef.net (EF)";
$regex = "^.*[0-9]{6}-.*$";
$count = 0;

$timestart = TIME();
echo $pdo->log->header("Getting releases to process...");
$sql = sprintf("SELECT rf.name AS textstring, rel.name, rel.searchname, rel.searchname, rel.groups_id, rel.categories_id, rel.id AS releases_id FROM releases rel INNER JOIN release_files rf ON (rf.releases_id = rel.id) WHERE nzbstatus = 1 AND predb_id = 0 AND fromname = %s AND searchname REGEXP %s;", $pdo->escapeString($poster), $pdo->escapeString($regex));
$result = $pdo->query($sql);
$cats = new Category();
$groups = new Groups();

foreach ($result as $r) {
  $rts = $r['textstring'];
  $rts = preg_replace("#\.[a-z0-9]{2,4}$#", "", $rts);

  $searchname = sprintf("UPDATE releases SET searchname = %s WHERE id = %d;", $pdo->escapeString($rts), $r['releases_id'], $r['releases_id']);
  $releases = sprintf("UPDATE releases SET consoleinfo_id = NULL, gamesinfo_id = 0, imdbid = NULL, musicinfo_id = NULL, bookinfo_id = NULL, videos_id = 0, tv_episodes_id = 0, xxxinfo_id = 0, passwordstatus = -1, haspreview = -1, jpgstatus = 0, videostatus = 0, audiostatus = 0, nfostatus = -1 WHERE id = %d", $r['releases_id']);
  $resp = $pdo->queryExec($searchname);
  $res = $pdo->queryExec($releases);
  $catId = $cat->determineCategory($r['groups_id'], $rts);
  if ($r['categories_id'] != $catId) {
    $catup = $pdo->queryExec(sprintf("UPDATE releases SET iscategorized = 1,	categories_id = %d WHERE id = %d",	$catId,	$r['releases_id']));
  }
  $echodata = array('new_name' => $rts, 'old_name' => $r['searchname'], 'old_category' => $cats->getNameByID($r['categories_id']), 'new_category' => $cats->getNameByID($catId), 'group' => $groups->getNameByID($r['groups_id']), 'release_id' => $r['releases_id'], 'method' => 'File Name Match');
  $fixer->echoChangedReleaseName($echodata);
  if ($resp && $res && $catup) {
    echo $pdo->log->info("Done!");
  } else {
    var_dump($res);
  }
  $count++;
}

$poster = "yEncBin@Poster.com (yEncBin)";
$regex = "[0-9]{2}[Ee][0-9]{2}[Ss].*\.mkv$";
$regex2 = "^[A-Za-z0-9]*$";

$sql = sprintf("SELECT rf.name AS textstring, rel.name, rel.searchname, rel.id AS releases_id FROM releases rel INNER JOIN release_files rf ON (rf.releases_id = rel.id) WHERE nzbstatus = 1 AND predb_id = 0 AND fromname = %s AND rf.name REGEXP %s AND searchname REGEXP %s;", $pdo->escapeString($poster), $pdo->escapeString($regex), $pdo->escapeString($regex2));
$result = $pdo->query($sql);

foreach ($result as $r) {
  $rts = $r['textstring'];
  $rts = preg_replace("#\.[a-z0-9]{2,4}$#", "", $rts);
  $rts = explode("\\", $rts);
  $rts = strrev($rts[1]);

  $searchname = sprintf("UPDATE releases SET searchname = %s WHERE id = %d;", $pdo->escapeString($rts), $r['releases_id'], $r['releases_id']);
  $releases = sprintf("UPDATE releases SET consoleinfo_id = NULL, gamesinfo_id = 0, imdbid = NULL, musicinfo_id = NULL, bookinfo_id = NULL, videos_id = 0, tv_episodes_id = 0, xxxinfo_id = 0, passwordstatus = -1, haspreview = -1, jpgstatus = 0, videostatus = 0, audiostatus = 0, nfostatus = -1 WHERE id = %d", $r['releases_id']);
  $resp = $pdo->queryExec($searchname);
  $res = $pdo->queryExec($releases);
  $catId = $cat->determineCategory($r['groups_id'], $rts);
  if ($r['categories_id'] != $catId) {
    $catup = $pdo->queryExec(sprintf("UPDATE releases SET iscategorized = 1,	categories_id = %d WHERE id = %d",	$catId,	$r['releases_id']));
  }
  $echodata = array('new_name' => $rts, 'old_name' => $r['searchname'], 'old_category' => $cats->getNameByID($r['categories_id']), 'new_category' => $cats->getNameByID($catId), 'group' => $groups->getNameByID($r['groups_id']), 'release_id' => $r['releases_id'], 'method' => 'File Name Match');
  $fixer->echoChangedReleaseName($echodata);

  if ($resp && $res && $catup) {
    echo $pdo->log->info("Done!");
  } else {
    var_dump($res);
  }
  $count++;
}

$time = $consoletools->convertTime(TIME() - $timestart);
echo $pdo->log->primary("Updated " . $count . " releases in ". $time .".");

@stephenl03
Copy link
Author

@ThePeePs Thanks for the re-write fixing my errors. I have now updated my script to reflect your changes.

@Fossil01
Copy link

Anyone changed this and added the SphinxUpdate stuff?

@Fossil01
Copy link

Fossil01 commented Feb 20, 2017

Cleaned this up a bit and added SphinxUpdate. Deleted the second part (yEncBin@Poster.com (yEncBin) though as I don't need that.

<?php
/*
 * This script will rename all releases posted by 'nonscene@ef.net' to the extracted filename within the rar.
 * It will then reset all the values, so PostProcessing will check the release again and download all relevant info
 * Written by stephenl03
 * updated by Fossil01 and ThePeePs
 */

require_once realpath(dirname(dirname(dirname(__DIR__))) . DIRECTORY_SEPARATOR . 'bootstrap.php');

use nzedb\Categorize;
use nzedb\Category;
use nzedb\ColorCLI;
use nzedb\ConsoleTools;
use nzedb\db\DB;
use nzedb\Groups;
use nzedb\NameFixer;
use nzedb\SphinxSearch;

$pdo = new DB();
$cat = new Categorize(['Settings' => $pdo]);
$pdo->log = new ColorCLI();
$consoletools = new ConsoleTools(['ColorCLI' => $pdo->log]);
$fixer = new NameFixer();
$sphinxSearch = new SphinxSearch();
$cats = new Category();
$groups = new Groups();

$poster = "nonscene@Ef.net (EF)";
$regex = "^.*[0-9]{6}-.*$";
$count = 0;

$timestart = TIME();
echo $pdo->log->header("Getting releases to process...");
$sql = sprintf("SELECT rf.name AS textstring, rel.name, rel.searchname, rel.searchname, rel.groups_id, rel.categories_id, rel.id AS releases_id FROM releases rel INNER JOIN release_files rf ON (rf.releases_id = rel.id) WHERE nzbstatus = 1 AND predb_id = 0 AND fromname = %s AND searchname REGEXP %s;", $pdo->escapeString($poster), $pdo->escapeString($regex));
$result = $pdo->query($sql);

foreach ($result as $r) {
	$rts = $r['textstring'];
	$rts = preg_replace("#\.[a-z0-9]{2,4}$#", "", $rts);

	$searchname = sprintf("UPDATE releases SET searchname = %s, consoleinfo_id = NULL, gamesinfo_id = 0, imdbid = NULL, musicinfo_id = NULL, bookinfo_id = NULL, videos_id = 0, tv_episodes_id = 0, xxxinfo_id = 0, passwordstatus = -1, haspreview = -1, jpgstatus = 0, videostatus = 0, audiostatus = 0, nfostatus = -1 WHERE id = %d;", $pdo->escapeString($rts), $r['releases_id']);
	$resp = $pdo->queryExec($searchname);
	$search = $sphinxSearch->updateRelease($r['releases_id'], $pdo);
	$catId = $cat->determineCategory($r['groups_id'], $rts);
	if ($r['categories_id'] != $catId) {
		$catup = $pdo->queryExec(sprintf("UPDATE releases SET iscategorized = 1,	categories_id = %d WHERE id = %d", $catId, $r['releases_id']));
	}
	$echodata = array('new_name' => $rts, 'old_name' => $r['searchname'], 'old_category' => $cats->getNameByID($r['categories_id']), 'new_category' => $cats->getNameByID($catId), 'group' => $groups->getNameByID($r['groups_id']), 'release_id' => $r['releases_id'], 'method' => 'File Name Match');
	$fixer->echoChangedReleaseName($echodata);
	if ($resp && $catup) {
		echo $pdo->log->info("Done!");
	} else {
		//var_dump($catup);
	}
	$count++;
}

$time = $consoletools->convertTime(TIME() - $timestart);
echo $pdo->log->primary("Updated " . $count . " releases in " . $time . ".");

@CollinChaffin
Copy link

CollinChaffin commented Apr 11, 2017

EDIT: Spoke too soon - apparently in last few months the fixReleasenames scripts were all rewritten by someone with far better OO skills and now all call NameFixer via class.....but that also must have come with some other (as usual, undocumented) changes that affect the db queries because these fixreleasename php's here regex'ing for posters etc. simply now no longer pull db matches.....so best to avoid these completely since they are all now totally depreciated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment