mirror of
https://github.com/NNTmux/newznab-tmux.git
synced 2026-08-29 01:08:56 +00:00
228 lines
6.5 KiB
PHP
228 lines
6.5 KiB
PHP
<?php
|
|
|
|
//This id a modified copy of nzb-import.php, to run this you need to copy it to your /www/admin folder. This script will only import 100 nzb's at a time.
|
|
//The idea is that you can call this script from your update script every run, and your import will go smooth without babysitting.
|
|
|
|
require(dirname(__FILE__)."/config.php");
|
|
require(WWW_DIR.'/lib/adminpage.php');
|
|
require_once(WWW_DIR.'/lib/framework/db.php');
|
|
$db = new DB();
|
|
$using_cli = false;
|
|
|
|
if (empty($argc))
|
|
{
|
|
$page = new AdminPage();
|
|
}
|
|
elseif ($argc == 1)
|
|
{
|
|
echo "no arguments specified - php nzb-import.php /path/to/nzb bool_use_filenames\n";
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
$using_cli = true;
|
|
}
|
|
|
|
$filestoprocess = Array();
|
|
$browserpostednames = Array();
|
|
|
|
if ($using_cli || $page->isPostBack() )
|
|
{
|
|
$retval = "";
|
|
|
|
//
|
|
// Via browser, build an array of all the nzb files uploaded into php /tmp location
|
|
//
|
|
if (isset($_FILES["uploadedfiles"]))
|
|
{
|
|
foreach ($_FILES["uploadedfiles"]["error"] as $key => $error)
|
|
{
|
|
if ($error == UPLOAD_ERR_OK)
|
|
{
|
|
$tmp_name = $_FILES["uploadedfiles"]["tmp_name"][$key];
|
|
$name = $_FILES["uploadedfiles"]["name"][$key];
|
|
$filestoprocess[] = $tmp_name;
|
|
$browserpostednames[$tmp_name] = $name;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($using_cli)
|
|
{
|
|
$strTerminator = "\n";
|
|
$path = $argv[1];
|
|
$usenzbname = (isset($argv[2]) && $argv[2] == 'true') ? true : false;
|
|
}
|
|
else
|
|
{
|
|
$strTerminator = "<br />";
|
|
$path = (isset($_POST["folder"]) ? $_POST["folder"] : "");
|
|
$usenzbname = (isset($_POST['usefilename']) && $_POST["usefilename"] == 'on') ? true : false;
|
|
}
|
|
|
|
if (substr($path, strlen($path) - 1) != '/')
|
|
$path = $path."/";
|
|
|
|
$groups = $db->query("SELECT ID, name FROM groups");
|
|
foreach ($groups as $group)
|
|
$siteGroups[$group["name"]] = $group["ID"];
|
|
|
|
if (!isset($groups) || count($groups) == 0)
|
|
{
|
|
if ($using_cli)
|
|
echo "no groups available in the database, add first.\n";
|
|
else
|
|
$retval.= "no groups available in the database, add first.".$strTerminator;
|
|
}
|
|
else
|
|
{
|
|
$nzbCount = 0;
|
|
|
|
//
|
|
// read from the path, if no files submitted via the browser
|
|
//
|
|
if (count($filestoprocess) == 0)
|
|
$filestoprocess = glob($path."*.nzb");
|
|
$start=date('Y-m-d H:i:s');
|
|
|
|
foreach($filestoprocess as $nzbFile)
|
|
{
|
|
$importfailed = false;
|
|
$nzb = file_get_contents($nzbFile);
|
|
|
|
$xml = @simplexml_load_string($nzb);
|
|
if (!$xml || strtolower($xml->getName()) != 'nzb')
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$i=0;
|
|
foreach($xml->file as $file)
|
|
{
|
|
//file info
|
|
$groupID = -1;
|
|
$name = (string)$file->attributes()->subject;
|
|
$fromname = (string)$file->attributes()->poster;
|
|
$unixdate = (string)$file->attributes()->date;
|
|
$date = date("Y-m-d H:i:s", (string)$file->attributes()->date);
|
|
|
|
//groups
|
|
$groupArr = array();
|
|
foreach($file->groups->group as $group)
|
|
{
|
|
$group = (string)$group;
|
|
if (array_key_exists($group, $siteGroups))
|
|
{
|
|
$groupID = $siteGroups[$group];
|
|
}
|
|
$groupArr[] = $group;
|
|
}
|
|
|
|
if ($groupID != -1)
|
|
{
|
|
$xref = implode(': ', $groupArr).':';
|
|
|
|
$totalParts = sizeof($file->segments->segment);
|
|
|
|
//insert binary
|
|
$binaryHash = md5($name.$fromname.$groupID);
|
|
$binarySql = sprintf("INSERT INTO binaries (name, fromname, date, xref, totalParts, groupID, binaryhash, dateadded, importname) values (%s, %s, %s, %s, %s, %s, %s, NOW(), %s)",
|
|
$db->escapeString($name), $db->escapeString($fromname), $db->escapeString($date),
|
|
$db->escapeString($xref), $db->escapeString($totalParts), $db->escapeString($groupID), $db->escapeString($binaryHash), $db->escapeString($nzbFile) );
|
|
|
|
$binaryId = $db->queryInsert($binarySql);
|
|
|
|
if ($usenzbname)
|
|
{
|
|
$usename = str_replace('.nzb', '', (!$using_cli ? $browserpostednames[$nzbFile] : basename($nzbFile)));
|
|
|
|
$db->query(sprintf("update binaries set relname = replace(%s, '_', ' '), relpart = %d, reltotalpart = %d, procstat=%d, categoryID=%s, regexID=%d, reqID=%s where ID = %d",
|
|
$db->escapeString($usename), 1, 1, 5, "null", "null", "null", $binaryId));
|
|
}
|
|
|
|
//segments (i.e. parts)
|
|
if (count($file->segments->segment) > 0)
|
|
{
|
|
$partsSql = "INSERT INTO parts (binaryID, messageID, number, partnumber, size, dateadded) values ";
|
|
foreach($file->segments->segment as $segment)
|
|
{
|
|
$messageId = (string)$segment;
|
|
$partnumber = $segment->attributes()->number;
|
|
$size = $segment->attributes()->bytes;
|
|
|
|
$partsSql .= sprintf("(%s, %s, 0, %s, %s, NOW()),",
|
|
$db->escapeString($binaryId), $db->escapeString($messageId), $db->escapeString($partnumber),
|
|
$db->escapeString($size));
|
|
}
|
|
$partsSql = substr($partsSql, 0, -1);
|
|
$partsQuery = $db->queryInsert($partsSql);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$importfailed = true;
|
|
if ($using_cli)
|
|
{
|
|
echo ("no group found for ".$name." (one of ".implode(', ', $groupArr)." are missing)".$strTerminator);
|
|
flush();
|
|
}
|
|
else
|
|
{
|
|
$retval.= "no group found for ".$name." (one of ".implode(', ', $groupArr)." are missing)".$strTerminator;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!$importfailed)
|
|
{
|
|
$nzbCount++;
|
|
@unlink($nzbFile);
|
|
|
|
if ($using_cli)
|
|
{
|
|
echo ("imported ".$nzbFile.$strTerminator);
|
|
flush();
|
|
}
|
|
else
|
|
{
|
|
$retval.= "imported ".$nzbFile.$strTerminator;
|
|
}
|
|
}
|
|
|
|
|
|
//get variables from config.sh and defaults.sh
|
|
$path = dirname(__FILE__);
|
|
$varnames = shell_exec("cat ".$path."/../config.sh | grep ^export | cut -d \= -f1 | awk '{print $2;}'");
|
|
$varnames .= shell_exec("cat ".$path."/../defaults.sh | grep ^export | cut -d \= -f1 | awk '{print $2;}'");
|
|
$vardata = shell_exec("cat ".$path."/../config.sh | grep ^export | cut -d \\\" -f2 | awk '{print $1;}'");
|
|
$vardata .= shell_exec("cat ".$path."/../defaults.sh | grep ^export | cut -d \\\" -f2 | awk '{print $1;}'");
|
|
$varnames = explode("\n", $varnames);
|
|
$vardata = explode("\n", $vardata);
|
|
$array = array_combine($varnames, $vardata);
|
|
unset($array['']);
|
|
|
|
if ($nzbCount == $array['NZBCOUNT'])
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
$seconds = strtotime(date('Y-m-d H:i:s')) - strtotime($start);
|
|
$retval.= 'Processed '.$nzbCount.' nzbs in '.$seconds.' second(s)';
|
|
|
|
if ($using_cli)
|
|
{
|
|
echo $retval;
|
|
die();
|
|
}
|
|
|
|
$page->smarty->assign('output', $retval);
|
|
}
|
|
|
|
$page->title = "Import Nzbs";
|
|
$page->content = $page->smarty->fetch('nzb-import.tpl');
|
|
$page->render();
|
|
|
|
|