mirror of
https://github.com/NNTmux/newznab-tmux.git
synced 2026-09-03 03:38:52 +00:00
Remove usage of Blacklight\db\DB class from Backfill, PostProcess and ProcessReleases classes
This commit is contained in:
@@ -6,7 +6,6 @@ use Blacklight\NZB;
|
||||
use Blacklight\NNTP;
|
||||
use App\Models\Group;
|
||||
use App\Models\Predb;
|
||||
use Blacklight\db\DB;
|
||||
use Blacklight\Genres;
|
||||
use App\Models\Release;
|
||||
use App\Models\Category;
|
||||
@@ -20,6 +19,7 @@ use Blacklight\ReleaseImage;
|
||||
use App\Models\ReleasesGroups;
|
||||
use Blacklight\ReleaseCleaning;
|
||||
use App\Models\MultigroupPoster;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ProcessReleases
|
||||
{
|
||||
@@ -61,7 +61,7 @@ class ProcessReleases
|
||||
public $echoCLI;
|
||||
|
||||
/**
|
||||
* @var \Blacklight\db\DB
|
||||
* @var \PDO
|
||||
*/
|
||||
public $pdo;
|
||||
|
||||
@@ -132,11 +132,11 @@ class ProcessReleases
|
||||
|
||||
$this->echoCLI = ($options['Echo'] && config('nntmux.echocli'));
|
||||
|
||||
$this->pdo = ($options['Settings'] instanceof DB ? $options['Settings'] : new DB());
|
||||
$this->pdo = DB::connection()->getPdo();
|
||||
$this->consoleTools = ($options['ConsoleTools'] instanceof ConsoleTools ? $options['ConsoleTools'] : new ConsoleTools());
|
||||
$this->nzb = ($options['NZB'] instanceof NZB ? $options['NZB'] : new NZB());
|
||||
$this->releaseCleaning = ($options['ReleaseCleaning'] instanceof ReleaseCleaning ? $options['ReleaseCleaning'] : new ReleaseCleaning($this->pdo));
|
||||
$this->releases = ($options['Releases'] instanceof Releases ? $options['Releases'] : new Releases(['Settings' => $this->pdo, 'Groups' => null]));
|
||||
$this->releaseCleaning = ($options['ReleaseCleaning'] instanceof ReleaseCleaning ? $options['ReleaseCleaning'] : new ReleaseCleaning());
|
||||
$this->releases = ($options['Releases'] instanceof Releases ? $options['Releases'] : new Releases(['Groups' => null]));
|
||||
$this->releaseImage = ($options['ReleaseImage'] instanceof ReleaseImage ? $options['ReleaseImage'] : new ReleaseImage());
|
||||
|
||||
$dummy = Settings::settingValue('..delaytime');
|
||||
@@ -232,7 +232,7 @@ class ProcessReleases
|
||||
*/
|
||||
public function resetCategorize($where = ''): void
|
||||
{
|
||||
$this->pdo->queryExec(
|
||||
DB::update(
|
||||
sprintf('UPDATE releases SET categories_id = %d, iscategorized = 0 %s', Category::OTHER_MISC, $where)
|
||||
);
|
||||
}
|
||||
@@ -248,9 +248,9 @@ class ProcessReleases
|
||||
*/
|
||||
public function categorizeRelease($type, $where = ''): int
|
||||
{
|
||||
$cat = new Categorize(['Settings' => $this->pdo]);
|
||||
$cat = new Categorize();
|
||||
$categorized = $total = 0;
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'
|
||||
SELECT id, fromname, %s, groups_id
|
||||
@@ -259,11 +259,11 @@ class ProcessReleases
|
||||
$where
|
||||
)
|
||||
);
|
||||
if ($releases && $releases->rowCount()) {
|
||||
$total = $releases->rowCount();
|
||||
if ($releases && \count($releases)) {
|
||||
$total = \count($releases);
|
||||
foreach ($releases as $release) {
|
||||
$catId = $cat->determineCategory($release['groups_id'], $release[$type], $release['fromname']);
|
||||
Release::query()->where('id', $release['id'])->update(['categories_id' => $catId, 'iscategorized' => 1]);
|
||||
$catId = $cat->determineCategory($release->groups_id, $release->{$type}, $release->fromname);
|
||||
Release::query()->where('id', $release->id)->update(['categories_id' => $catId, 'iscategorized' => 1]);
|
||||
$categorized++;
|
||||
if ($this->echoCLI) {
|
||||
$this->consoleTools->overWritePrimary(
|
||||
@@ -303,7 +303,7 @@ class ProcessReleases
|
||||
$this->collectionFileCheckStage6($where);
|
||||
|
||||
if ($this->echoCLI) {
|
||||
$count = $this->pdo->queryOneRow(
|
||||
$count = DB::selectOne(
|
||||
sprintf(
|
||||
'
|
||||
SELECT COUNT(c.id) AS complete
|
||||
@@ -316,7 +316,7 @@ class ProcessReleases
|
||||
);
|
||||
ColorCLI::doEcho(
|
||||
ColorCLI::primary(
|
||||
($count === false ? 0 : $count['complete']).' collections were found to be complete. Time: '.
|
||||
($count === 0 ? 0 : $count->complete).' collections were found to be complete. Time: '.
|
||||
$this->consoleTools->convertTime(time() - $startTime)
|
||||
),
|
||||
true
|
||||
@@ -338,7 +338,7 @@ class ProcessReleases
|
||||
ColorCLI::doEcho(ColorCLI::header('Process Releases -> Calculating collection sizes (in bytes).'), true);
|
||||
}
|
||||
// Get the total size in bytes of the collection for collections where filecheck = 2.
|
||||
$checked = $this->pdo->queryExec(
|
||||
$checked = DB::update(
|
||||
sprintf(
|
||||
'
|
||||
UPDATE %s c
|
||||
@@ -358,11 +358,12 @@ class ProcessReleases
|
||||
(! empty($groupID) ? ' AND c.groups_id = '.$groupID : ' ')
|
||||
)
|
||||
);
|
||||
if ($checked !== false && $this->echoCLI) {
|
||||
if ($checked > 0 && $this->echoCLI) {
|
||||
ColorCLI::doEcho(
|
||||
ColorCLI::primary(
|
||||
$checked->rowCount().' collections set to filecheck = 3(size calculated)'
|
||||
), true
|
||||
$checked.' collections set to filecheck = 3(size calculated)'
|
||||
),
|
||||
true
|
||||
);
|
||||
ColorCLI::doEcho(ColorCLI::primary($this->consoleTools->convertTime(time() - $startTime)), true);
|
||||
}
|
||||
@@ -382,7 +383,8 @@ class ProcessReleases
|
||||
ColorCLI::doEcho(
|
||||
ColorCLI::header(
|
||||
'Process Releases -> Delete collections smaller/larger than minimum size/file count from group/site setting.'
|
||||
), true
|
||||
),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
@@ -407,7 +409,7 @@ class ProcessReleases
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->pdo->queryOneRow(
|
||||
if (DB::selectOne(
|
||||
sprintf(
|
||||
'
|
||||
SELECT SQL_NO_CACHE id
|
||||
@@ -417,9 +419,9 @@ class ProcessReleases
|
||||
$this->tables['cname'],
|
||||
self::COLLFC_SIZED
|
||||
)
|
||||
) !== false
|
||||
) > 0
|
||||
) {
|
||||
$deleteQuery = $this->pdo->queryExec(
|
||||
$deleteQuery = DB::delete(
|
||||
sprintf(
|
||||
'
|
||||
DELETE c FROM %s c
|
||||
@@ -435,12 +437,12 @@ class ProcessReleases
|
||||
$minSizeSetting
|
||||
)
|
||||
);
|
||||
if ($deleteQuery !== false) {
|
||||
$minSizeDeleted += $deleteQuery->rowCount();
|
||||
if ($deleteQuery > 0) {
|
||||
$minSizeDeleted += $deleteQuery;
|
||||
}
|
||||
|
||||
if ($maxSizeSetting > 0) {
|
||||
$deleteQuery = $this->pdo->queryExec(
|
||||
$deleteQuery = DB::delete(
|
||||
sprintf(
|
||||
'
|
||||
DELETE c FROM %s c
|
||||
@@ -451,13 +453,13 @@ class ProcessReleases
|
||||
$maxSizeSetting
|
||||
)
|
||||
);
|
||||
if ($deleteQuery !== false) {
|
||||
$maxSizeDeleted += $deleteQuery->rowCount();
|
||||
if ($deleteQuery > 0) {
|
||||
$maxSizeDeleted += $deleteQuery;
|
||||
}
|
||||
}
|
||||
|
||||
if ($minFilesSetting > 0 || $groupMinFilesSetting > 0) {
|
||||
$deleteQuery = $this->pdo->queryExec(
|
||||
$deleteQuery = DB::delete(
|
||||
sprintf(
|
||||
'
|
||||
DELETE c FROM %s c
|
||||
@@ -472,8 +474,8 @@ class ProcessReleases
|
||||
$minFilesSetting
|
||||
)
|
||||
);
|
||||
if ($deleteQuery !== false) {
|
||||
$minFilesDeleted += $deleteQuery->rowCount();
|
||||
if ($deleteQuery > 0) {
|
||||
$minFilesDeleted += $deleteQuery;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -524,16 +526,14 @@ class ProcessReleases
|
||||
$startTime = time();
|
||||
$this->initiateTableNames($groupID);
|
||||
|
||||
$categorize = new Categorize(['Settings' => $this->pdo]);
|
||||
$categorize = new Categorize();
|
||||
$returnCount = $duplicate = 0;
|
||||
|
||||
if ($this->echoCLI) {
|
||||
ColorCLI::doEcho(ColorCLI::header('Process Releases -> Create releases from complete collections.'), true);
|
||||
}
|
||||
|
||||
$this->pdo->ping(true);
|
||||
|
||||
$collections = $this->pdo->queryDirect(
|
||||
$collections = DB::select(
|
||||
sprintf(
|
||||
'
|
||||
SELECT SQL_NO_CACHE c.*, g.name AS gname
|
||||
@@ -549,70 +549,69 @@ class ProcessReleases
|
||||
)
|
||||
);
|
||||
|
||||
if ($this->echoCLI && $collections !== false) {
|
||||
echo ColorCLI::primary($collections->rowCount().' Collections ready to be converted to releases.');
|
||||
if ($this->echoCLI && $collections > 0) {
|
||||
echo ColorCLI::primary($collections.' Collections ready to be converted to releases.');
|
||||
}
|
||||
|
||||
if ($collections instanceof \Traversable) {
|
||||
foreach ($collections as $collection) {
|
||||
$cleanRelName = utf8_encode(str_replace(['#', '@', '$', '%', '^', '§', '¨', '©', 'Ö'], '', $collection['subject']));
|
||||
$fromName = utf8_encode(
|
||||
trim($collection['fromname'], "'")
|
||||
foreach ($collections as $collection) {
|
||||
$cleanRelName = utf8_encode(str_replace(['#', '@', '$', '%', '^', '§', '¨', '©', 'Ö'], '', $collection->subject));
|
||||
$fromName = utf8_encode(
|
||||
trim($collection->fromname, "'")
|
||||
);
|
||||
|
||||
// Look for duplicates, duplicates match on releases.name, releases.fromname and releases.size
|
||||
// A 1% variance in size is considered the same size when the subject and poster are the same
|
||||
$dupeCheck = Release::query()
|
||||
// Look for duplicates, duplicates match on releases.name, releases.fromname and releases.size
|
||||
// A 1% variance in size is considered the same size when the subject and poster are the same
|
||||
$dupeCheck = Release::query()
|
||||
->where(['name' => $cleanRelName, 'fromname' => $fromName])
|
||||
->whereBetween('size', [$collection['filesize'] * .99, $collection['filesize'] * 1.01])
|
||||
->whereBetween('size', [$collection->filesize * .99, $collection->filesize * 1.01])
|
||||
->first(['id']);
|
||||
|
||||
if ($dupeCheck === null) {
|
||||
$cleanedName = $this->releaseCleaning->releaseCleaner(
|
||||
$collection['subject'],
|
||||
$collection['fromname'],
|
||||
$collection['gname']
|
||||
if ($dupeCheck === null) {
|
||||
$cleanedName = $this->releaseCleaning->releaseCleaner(
|
||||
$collection->subject,
|
||||
$collection->fromname,
|
||||
$collection->gname
|
||||
);
|
||||
|
||||
if (\is_array($cleanedName)) {
|
||||
$properName = $cleanedName['properlynamed'];
|
||||
$preID = $cleanedName['predb'] ?? false;
|
||||
$cleanedName = $cleanedName['cleansubject'];
|
||||
} else {
|
||||
if (\is_array($cleanedName)) {
|
||||
$properName = $cleanedName['properlynamed'];
|
||||
$preID = $cleanedName['predb'] ?? false;
|
||||
$cleanedName = $cleanedName['cleansubject'];
|
||||
} else {
|
||||
$properName = true;
|
||||
$preID = false;
|
||||
}
|
||||
|
||||
if ($preID === false && $cleanedName !== '') {
|
||||
// try to match the cleaned searchname to predb title or filename here
|
||||
$preMatch = Predb::matchPre($cleanedName);
|
||||
if ($preMatch !== false) {
|
||||
$cleanedName = $preMatch['title'];
|
||||
$preID = $preMatch['predb_id'];
|
||||
$properName = true;
|
||||
$preID = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($preID === false && $cleanedName !== '') {
|
||||
// try to match the cleaned searchname to predb title or filename here
|
||||
$preMatch = Predb::matchPre($cleanedName);
|
||||
if ($preMatch !== false) {
|
||||
$cleanedName = $preMatch['title'];
|
||||
$preID = $preMatch['predb_id'];
|
||||
$properName = true;
|
||||
}
|
||||
}
|
||||
|
||||
$releaseID = Release::insertRelease(
|
||||
$releaseID = Release::insertRelease(
|
||||
[
|
||||
'name' => $cleanRelName,
|
||||
'searchname' => ! empty($cleanedName) ? utf8_encode($cleanedName) : $cleanRelName,
|
||||
'totalpart' => $collection['totalfiles'],
|
||||
'groups_id' => $collection['groups_id'],
|
||||
'totalpart' => $collection->totalfiles,
|
||||
'groups_id' => $collection->groups_id,
|
||||
'guid' => createGUID(),
|
||||
'postdate' => $collection['date'],
|
||||
'postdate' => $collection->date,
|
||||
'fromname' => $fromName,
|
||||
'size' => $collection['filesize'],
|
||||
'categories_id' => $categorize->determineCategory($collection['groups_id'], $cleanedName),
|
||||
'size' => $collection->filesize,
|
||||
'categories_id' => $categorize->determineCategory($collection->groups_id, $cleanedName),
|
||||
'isrenamed' => $properName === true ? 1 : 0,
|
||||
'predb_id' => $preID === false ? 0 : $preID,
|
||||
'nzbstatus' => NZB::NZB_NONE,
|
||||
]
|
||||
);
|
||||
|
||||
if ($releaseID !== null) {
|
||||
// Update collections table to say we inserted the release.
|
||||
$this->pdo->queryExec(
|
||||
if ($releaseID !== null) {
|
||||
// Update collections table to say we inserted the release.
|
||||
DB::update(
|
||||
sprintf(
|
||||
'
|
||||
UPDATE %s
|
||||
@@ -621,26 +620,26 @@ class ProcessReleases
|
||||
$this->tables['cname'],
|
||||
self::COLLFC_INSERTED,
|
||||
$releaseID,
|
||||
$collection['id']
|
||||
$collection->id
|
||||
)
|
||||
);
|
||||
|
||||
// Add the id of regex that matched the collection and release name to release_regexes table
|
||||
ReleaseRegex::insertIgnore([
|
||||
// Add the id of regex that matched the collection and release name to release_regexes table
|
||||
ReleaseRegex::insertIgnore([
|
||||
'releases_id' => $releaseID,
|
||||
'collection_regex_id' => $collection['collection_regexes_id'],
|
||||
'collection_regex_id' => $collection->collection_regexes_id,
|
||||
'naming_regex_id' => $cleanedName['id'] ?? 0,
|
||||
]);
|
||||
|
||||
if (preg_match_all('#(\S+):\S+#', $collection['xref'], $matches)) {
|
||||
foreach ($matches[1] as $grp) {
|
||||
//check if the group name is in a valid format
|
||||
$grpTmp = Group::isValidGroup($grp);
|
||||
if ($grpTmp !== false) {
|
||||
//check if the group already exists in database
|
||||
$xrefGrpID = Group::getIDByName($grpTmp);
|
||||
if ($xrefGrpID === '') {
|
||||
$xrefGrpID = Group::addGroup(
|
||||
if (preg_match_all('#(\S+):\S+#', $collection->xref, $matches)) {
|
||||
foreach ($matches[1] as $grp) {
|
||||
//check if the group name is in a valid format
|
||||
$grpTmp = Group::isValidGroup($grp);
|
||||
if ($grpTmp !== false) {
|
||||
//check if the group already exists in database
|
||||
$xrefGrpID = Group::getIDByName($grpTmp);
|
||||
if ($xrefGrpID === '') {
|
||||
$xrefGrpID = Group::addGroup(
|
||||
[
|
||||
'name' => $grpTmp,
|
||||
'description' => 'Added by Release processing',
|
||||
@@ -653,47 +652,46 @@ class ProcessReleases
|
||||
'minsizetoformrelease' => '',
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$relGroupsChk = ReleasesGroups::query()->where(
|
||||
$relGroupsChk = ReleasesGroups::query()->where(
|
||||
[
|
||||
['releases_id', '=', $releaseID],
|
||||
['groups_id', '=', $xrefGrpID],
|
||||
]
|
||||
)->first();
|
||||
|
||||
if ($relGroupsChk === null) {
|
||||
ReleasesGroups::query()->insert(
|
||||
if ($relGroupsChk === null) {
|
||||
ReleasesGroups::query()->insert(
|
||||
[
|
||||
'releases_id' => $releaseID,
|
||||
'groups_id' => $xrefGrpID,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$returnCount++;
|
||||
|
||||
if ($this->echoCLI) {
|
||||
echo "Added $returnCount releases.\r";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// The release was already in the DB, so delete the collection.
|
||||
$this->pdo->queryExec(
|
||||
|
||||
$returnCount++;
|
||||
|
||||
if ($this->echoCLI) {
|
||||
echo "Added $returnCount releases.\r";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// The release was already in the DB, so delete the collection.
|
||||
DB::delete(
|
||||
sprintf(
|
||||
'
|
||||
DELETE c
|
||||
FROM %s c
|
||||
WHERE c.collectionhash = %s',
|
||||
$this->tables['cname'],
|
||||
$this->pdo->escapeString($collection['collectionhash'])
|
||||
$this->pdo->quote($collection->collectionhash)
|
||||
)
|
||||
);
|
||||
$duplicate++;
|
||||
}
|
||||
$duplicate++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -731,7 +729,7 @@ class ProcessReleases
|
||||
ColorCLI::doEcho(ColorCLI::header('Process Releases -> Create the NZB, delete collections/binaries/parts.'), true);
|
||||
}
|
||||
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
"
|
||||
SELECT SQL_NO_CACHE
|
||||
@@ -748,12 +746,12 @@ class ProcessReleases
|
||||
|
||||
$nzbCount = 0;
|
||||
|
||||
if ($releases && $releases->rowCount()) {
|
||||
$total = $releases->rowCount();
|
||||
if ($releases && $releases > 0) {
|
||||
$total = $releases;
|
||||
// Init vars for writing the NZB's.
|
||||
$this->nzb->initiateForWrite($groupID);
|
||||
foreach ($releases as $release) {
|
||||
if ($this->nzb->writeNZBforReleaseId($release['id'], $release['guid'], $release['name'], $release['title']) === true) {
|
||||
if ($this->nzb->writeNZBforReleaseId($release->id, $release->guid, $release->name, $release->title) === true) {
|
||||
$nzbCount++;
|
||||
if ($this->echoCLI) {
|
||||
echo ColorCLI::primaryOver("Creating NZBs and deleting Collections:\t".$nzbCount.'/'.$total."\r");
|
||||
@@ -770,7 +768,8 @@ class ProcessReleases
|
||||
number_format($nzbCount).' NZBs created/Collections deleted in '.
|
||||
$totalTime.' seconds.'.PHP_EOL.
|
||||
'Total time: '.ColorCLI::primary($this->consoleTools->convertTime($totalTime)).PHP_EOL
|
||||
), true
|
||||
),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
@@ -826,16 +825,15 @@ class ProcessReleases
|
||||
public function postProcessReleases($postProcess, &$nntp): void
|
||||
{
|
||||
if ((int) $postProcess === 1) {
|
||||
(new PostProcess(['Echo' => $this->echoCLI, 'Settings' => $this->pdo, 'Groups' => $this->groups]))->processAll($nntp);
|
||||
} else {
|
||||
if ($this->echoCLI) {
|
||||
ColorCLI::doEcho(
|
||||
ColorCLI::info(
|
||||
"\nPost-processing is not running inside the Process Releases class.\n".
|
||||
'If you are using tmux or screen they might have their own scripts running Post-processing.'
|
||||
), true
|
||||
);
|
||||
}
|
||||
(new PostProcess(['Echo' => $this->echoCLI, 'Groups' => $this->groups]))->processAll($nntp);
|
||||
} elseif ($this->echoCLI) {
|
||||
ColorCLI::doEcho(
|
||||
ColorCLI::info(
|
||||
"\nPost-processing is not running inside the Process Releases class.\n".
|
||||
'If you are using tmux or screen they might have their own scripts running Post-processing.'
|
||||
),
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -862,7 +860,7 @@ class ProcessReleases
|
||||
}
|
||||
|
||||
$deleted = 0;
|
||||
$deleteQuery = $this->pdo->queryExec(
|
||||
$deleteQuery = DB::delete(
|
||||
sprintf(
|
||||
'
|
||||
DELETE c
|
||||
@@ -873,8 +871,8 @@ class ProcessReleases
|
||||
)
|
||||
);
|
||||
|
||||
if ($deleteQuery !== false) {
|
||||
$deleted = $deleteQuery->rowCount();
|
||||
if ($deleteQuery > 0) {
|
||||
$deleted = $deleteQuery;
|
||||
$deletedCount += $deleted;
|
||||
}
|
||||
|
||||
@@ -898,7 +896,7 @@ class ProcessReleases
|
||||
}
|
||||
|
||||
$deleted = 0;
|
||||
$deleteQuery = $this->pdo->queryExec(
|
||||
$deleteQuery = DB::delete(
|
||||
sprintf(
|
||||
'
|
||||
DELETE c, b, p
|
||||
@@ -912,8 +910,8 @@ class ProcessReleases
|
||||
)
|
||||
);
|
||||
|
||||
if ($deleteQuery !== false) {
|
||||
$deleted = $deleteQuery->rowCount();
|
||||
if ($deleteQuery > 0) {
|
||||
$deleted = $deleteQuery;
|
||||
$deletedCount += $deleted;
|
||||
}
|
||||
|
||||
@@ -933,7 +931,7 @@ class ProcessReleases
|
||||
}
|
||||
|
||||
$deleted = 0;
|
||||
$deleteQuery = $this->pdo->queryExec(
|
||||
$deleteQuery = DB::delete(
|
||||
sprintf(
|
||||
'DELETE b, p FROM %s b
|
||||
LEFT JOIN %s p ON b.id = p.binaries_id
|
||||
@@ -947,8 +945,8 @@ class ProcessReleases
|
||||
)
|
||||
);
|
||||
|
||||
if ($deleteQuery !== false) {
|
||||
$deleted = $deleteQuery->rowCount();
|
||||
if ($deleteQuery > 0) {
|
||||
$deleted = $deleteQuery;
|
||||
$deletedCount += $deleted;
|
||||
}
|
||||
|
||||
@@ -967,7 +965,7 @@ class ProcessReleases
|
||||
echo ColorCLI::primary('Deleting orphaned parts with no binaries.');
|
||||
}
|
||||
$deleted = 0;
|
||||
$deleteQuery = $this->pdo->queryExec(
|
||||
$deleteQuery = DB::delete(
|
||||
sprintf(
|
||||
'
|
||||
DELETE p
|
||||
@@ -980,8 +978,8 @@ class ProcessReleases
|
||||
$this->maxQueryFormulator($this->tables['bname'], 20000)
|
||||
)
|
||||
);
|
||||
if ($deleteQuery !== false) {
|
||||
$deleted = $deleteQuery->rowCount();
|
||||
if ($deleteQuery > 0) {
|
||||
$deleted = $deleteQuery;
|
||||
$deletedCount += $deleted;
|
||||
}
|
||||
|
||||
@@ -1003,7 +1001,7 @@ class ProcessReleases
|
||||
|
||||
$deleted = 0;
|
||||
// Collections that were missing on NZB creation.
|
||||
$collections = $this->pdo->queryDirect(
|
||||
$collections = DB::select(
|
||||
sprintf(
|
||||
'
|
||||
SELECT SQL_NO_CACHE c.id
|
||||
@@ -1014,22 +1012,20 @@ class ProcessReleases
|
||||
)
|
||||
);
|
||||
|
||||
if ($collections instanceof \Traversable) {
|
||||
foreach ($collections as $collection) {
|
||||
$deleted++;
|
||||
$this->pdo->queryExec(
|
||||
foreach ($collections as $collection) {
|
||||
$deleted++;
|
||||
DB::delete(
|
||||
sprintf(
|
||||
'
|
||||
DELETE c
|
||||
FROM %s c
|
||||
WHERE c.id = %d',
|
||||
$this->tables['cname'],
|
||||
$collection['id']
|
||||
$collection->id
|
||||
)
|
||||
);
|
||||
}
|
||||
$deletedCount += $deleted;
|
||||
}
|
||||
$deletedCount += $deleted;
|
||||
|
||||
if ($this->echoCLI) {
|
||||
ColorCLI::doEcho(
|
||||
@@ -1040,7 +1036,8 @@ class ProcessReleases
|
||||
number_format($deletedCount).
|
||||
' parts/binaries/collection rows in '.
|
||||
$this->consoleTools->convertTime($fourthQuery - $startTime).PHP_EOL
|
||||
), true
|
||||
),
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1070,7 +1067,7 @@ class ProcessReleases
|
||||
$minFilesSetting = Settings::settingValue('.release.minfilestoformrelease');
|
||||
|
||||
foreach ($groupIDs as $grpID) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'
|
||||
SELECT SQL_NO_CACHE r.guid, r.id
|
||||
@@ -1084,15 +1081,13 @@ class ProcessReleases
|
||||
$minSizeSetting
|
||||
)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
$minSizeDeleted++;
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
$minSizeDeleted++;
|
||||
}
|
||||
|
||||
if ($maxSizeSetting > 0) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'
|
||||
SELECT SQL_NO_CACHE id, guid
|
||||
@@ -1103,15 +1098,13 @@ class ProcessReleases
|
||||
$maxSizeSetting
|
||||
)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
$maxSizeDeleted++;
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
$maxSizeDeleted++;
|
||||
}
|
||||
}
|
||||
if ($minFilesSetting > 0) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'
|
||||
SELECT SQL_NO_CACHE r.id, r.guid
|
||||
@@ -1125,11 +1118,9 @@ class ProcessReleases
|
||||
$minFilesSetting
|
||||
)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
$minFilesDeleted++;
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
$minFilesDeleted++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1158,7 +1149,7 @@ class ProcessReleases
|
||||
public function deleteReleases(): void
|
||||
{
|
||||
$startTime = time();
|
||||
$genres = new Genres(['Settings' => $this->pdo]);
|
||||
$genres = new Genres();
|
||||
$passwordDeleted = $duplicateDeleted = $retentionDeleted = $completionDeleted = $disabledCategoryDeleted = 0;
|
||||
$disabledGenreDeleted = $miscRetentionDeleted = $miscHashedDeleted = $categoryMinSizeDeleted = 0;
|
||||
|
||||
@@ -1169,77 +1160,67 @@ class ProcessReleases
|
||||
|
||||
// Releases past retention.
|
||||
if ((int) Settings::settingValue('..releaseretentiondays') !== 0) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'SELECT SQL_NO_CACHE id, guid FROM releases WHERE postdate < (NOW() - INTERVAL %d DAY)',
|
||||
(int) Settings::settingValue('..releaseretentiondays')
|
||||
)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
$retentionDeleted++;
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
$retentionDeleted++;
|
||||
}
|
||||
}
|
||||
|
||||
// Passworded releases.
|
||||
if ((int) Settings::settingValue('..deletepasswordedrelease') === 1) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'SELECT SQL_NO_CACHE id, guid FROM releases WHERE passwordstatus = %d',
|
||||
Releases::PASSWD_RAR
|
||||
)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
$passwordDeleted++;
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
$passwordDeleted++;
|
||||
}
|
||||
}
|
||||
|
||||
// Possibly passworded releases.
|
||||
if ((int) Settings::settingValue('..deletepossiblerelease') === 1) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'SELECT SQL_NO_CACHE id, guid FROM releases WHERE passwordstatus = %d',
|
||||
Releases::PASSWD_POTENTIAL
|
||||
)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
$passwordDeleted++;
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
$passwordDeleted++;
|
||||
}
|
||||
}
|
||||
|
||||
if ((int) $this->crossPostTime !== 0) {
|
||||
// Crossposted releases.
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'SELECT SQL_NO_CACHE id, guid FROM releases WHERE adddate > (NOW() - INTERVAL %d HOUR) GROUP BY name HAVING COUNT(name) > 1',
|
||||
$this->crossPostTime
|
||||
)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
$duplicateDeleted++;
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
$duplicateDeleted++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->completion > 0) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf('SELECT SQL_NO_CACHE id, guid FROM releases WHERE completion < %d AND completion > 0', $this->completion)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
$completionDeleted++;
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
$completionDeleted++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1247,20 +1228,18 @@ class ProcessReleases
|
||||
$disabledCategories = Category::getDisabledIDs();
|
||||
if (\count($disabledCategories) > 0) {
|
||||
foreach ($disabledCategories as $disabledCategory) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf('SELECT SQL_NO_CACHE id, guid FROM releases WHERE categories_id = %d', (int) $disabledCategory['id'])
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$disabledCategoryDeleted++;
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$disabledCategoryDeleted++;
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Delete smaller than category minimum sizes.
|
||||
$categories = $this->pdo->queryDirect(
|
||||
$categories = DB::select(
|
||||
'
|
||||
SELECT SQL_NO_CACHE c.id AS id,
|
||||
CASE WHEN c.minsizetoformrelease = 0 THEN cp.minsizetoformrelease ELSE c.minsizetoformrelease END AS minsize
|
||||
@@ -1269,10 +1248,9 @@ class ProcessReleases
|
||||
WHERE c.parentid IS NOT NULL'
|
||||
);
|
||||
|
||||
if ($categories instanceof \Traversable) {
|
||||
foreach ($categories as $category) {
|
||||
if ((int) $category['minsize'] > 0) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
foreach ($categories as $category) {
|
||||
if ((int) $category->minsize > 0) {
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'
|
||||
SELECT SQL_NO_CACHE r.id, r.guid
|
||||
@@ -1280,16 +1258,13 @@ class ProcessReleases
|
||||
WHERE r.categories_id = %d
|
||||
AND r.size < %d
|
||||
LIMIT 1000',
|
||||
(int) $category['id'],
|
||||
(int) $category['minsize']
|
||||
(int) $category->id,
|
||||
(int) $category->minsize
|
||||
)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
$categoryMinSizeDeleted++;
|
||||
}
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
$categoryMinSizeDeleted++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1298,7 +1273,7 @@ class ProcessReleases
|
||||
$genrelist = $genres->getDisabledIDs();
|
||||
if (\count($genrelist) > 0) {
|
||||
foreach ($genrelist as $genre) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'
|
||||
SELECT SQL_NO_CACHE id, guid
|
||||
@@ -1312,18 +1287,16 @@ class ProcessReleases
|
||||
(int) $genre['id']
|
||||
)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$disabledGenreDeleted++;
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$disabledGenreDeleted++;
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Misc other.
|
||||
if (Settings::settingValue('..miscotherretentionhours') > 0) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'
|
||||
SELECT SQL_NO_CACHE id, guid
|
||||
@@ -1334,17 +1307,15 @@ class ProcessReleases
|
||||
(int) Settings::settingValue('..miscotherretentionhours')
|
||||
)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
$miscRetentionDeleted++;
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
$miscRetentionDeleted++;
|
||||
}
|
||||
}
|
||||
|
||||
// Misc hashed.
|
||||
if ((int) Settings::settingValue('..mischashedretentionhours') > 0) {
|
||||
$releases = $this->pdo->queryDirect(
|
||||
$releases = DB::select(
|
||||
sprintf(
|
||||
'
|
||||
SELECT SQL_NO_CACHE id, guid
|
||||
@@ -1355,11 +1326,9 @@ class ProcessReleases
|
||||
(int) Settings::settingValue('..mischashedretentionhours')
|
||||
)
|
||||
);
|
||||
if ($releases instanceof \Traversable) {
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
|
||||
$miscHashedDeleted++;
|
||||
}
|
||||
foreach ($releases as $release) {
|
||||
$this->releases->deleteSingle(['g' => $release->guid, 'i' => $release->id], $this->nzb, $this->releaseImage);
|
||||
$miscHashedDeleted++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1388,7 +1357,8 @@ class ProcessReleases
|
||||
? ', '.number_format($completionDeleted).' under '.$this->completion.'% completion.'
|
||||
: '.'
|
||||
)
|
||||
), true
|
||||
),
|
||||
true
|
||||
);
|
||||
|
||||
$totalDeleted = (
|
||||
@@ -1401,7 +1371,8 @@ class ProcessReleases
|
||||
ColorCLI::primary(
|
||||
'Removed '.number_format($totalDeleted).' releases in '.
|
||||
$this->consoleTools->convertTime(time() - $startTime)
|
||||
), true
|
||||
),
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1417,7 +1388,7 @@ class ProcessReleases
|
||||
*/
|
||||
private function maxQueryFormulator($groupName, $difference): string
|
||||
{
|
||||
$maxID = $this->pdo->queryOneRow(
|
||||
$maxID = DB::selectOne(
|
||||
sprintf(
|
||||
'
|
||||
SELECT IFNULL(MAX(id),0) AS max
|
||||
@@ -1426,7 +1397,7 @@ class ProcessReleases
|
||||
)
|
||||
);
|
||||
|
||||
return empty($maxID['max']) || $maxID['max'] < $difference ? 0 : $maxID['max'] - $difference;
|
||||
return empty($maxID->max) || $maxID->max < $difference ? 0 : $maxID->max - $difference;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1441,7 +1412,7 @@ class ProcessReleases
|
||||
*/
|
||||
private function collectionFileCheckStage1(&$where): void
|
||||
{
|
||||
$this->pdo->queryExec(
|
||||
DB::update(
|
||||
sprintf(
|
||||
'
|
||||
UPDATE %s c
|
||||
@@ -1480,7 +1451,7 @@ class ProcessReleases
|
||||
*/
|
||||
private function collectionFileCheckStage2(&$where): void
|
||||
{
|
||||
$this->pdo->queryExec(
|
||||
DB::update(
|
||||
sprintf(
|
||||
'
|
||||
UPDATE %s c
|
||||
@@ -1503,7 +1474,7 @@ class ProcessReleases
|
||||
self::COLLFC_ZEROPART
|
||||
)
|
||||
);
|
||||
$this->pdo->queryExec(
|
||||
DB::update(
|
||||
sprintf(
|
||||
'
|
||||
UPDATE %s c
|
||||
@@ -1527,7 +1498,7 @@ class ProcessReleases
|
||||
*/
|
||||
private function collectionFileCheckStage3($where): void
|
||||
{
|
||||
$this->pdo->queryExec(
|
||||
DB::update(
|
||||
sprintf(
|
||||
'
|
||||
UPDATE %s b
|
||||
@@ -1551,7 +1522,7 @@ class ProcessReleases
|
||||
self::FILE_COMPLETE
|
||||
)
|
||||
);
|
||||
$this->pdo->queryExec(
|
||||
DB::update(
|
||||
sprintf(
|
||||
'
|
||||
UPDATE %s b
|
||||
@@ -1588,7 +1559,7 @@ class ProcessReleases
|
||||
*/
|
||||
private function collectionFileCheckStage4(&$where): void
|
||||
{
|
||||
$this->pdo->queryExec(
|
||||
DB::update(
|
||||
sprintf(
|
||||
'
|
||||
UPDATE %s c INNER JOIN
|
||||
@@ -1618,7 +1589,7 @@ class ProcessReleases
|
||||
*/
|
||||
private function collectionFileCheckStage5(&$where): void
|
||||
{
|
||||
$this->pdo->queryExec(
|
||||
DB::update(
|
||||
sprintf(
|
||||
'
|
||||
UPDATE %s c
|
||||
@@ -1643,7 +1614,7 @@ class ProcessReleases
|
||||
*/
|
||||
private function collectionFileCheckStage6(&$where): void
|
||||
{
|
||||
$this->pdo->queryExec(
|
||||
DB::update(
|
||||
sprintf(
|
||||
"
|
||||
UPDATE %s c SET filecheck = %d, totalfiles = (SELECT COUNT(b.id) FROM %s b WHERE b.collections_id = c.id)
|
||||
@@ -1672,22 +1643,23 @@ class ProcessReleases
|
||||
{
|
||||
$lastRun = Settings::settingValue('indexer.processing.last_run_time');
|
||||
|
||||
$obj = $this->pdo->queryExec(
|
||||
$obj = DB::delete(
|
||||
sprintf(
|
||||
"
|
||||
DELETE c FROM %s c
|
||||
WHERE
|
||||
c.added <
|
||||
DATE_SUB({$this->pdo->escapeString($lastRun)}, INTERVAL %d HOUR)
|
||||
DATE_SUB({$this->pdo->quote($lastRun)}, INTERVAL %d HOUR)
|
||||
%s",
|
||||
$this->tables['cname'],
|
||||
$this->collectionTimeout,
|
||||
$where
|
||||
)
|
||||
);
|
||||
if ($this->echoCLI && \is_object($obj) && $obj->rowCount()) {
|
||||
if ($this->echoCLI && \is_object($obj) && $obj > 0) {
|
||||
ColorCLI::doEcho(
|
||||
ColorCLI::primary('Deleted '.$obj->rowCount().' broken/stuck collections.'), true
|
||||
ColorCLI::primary('Deleted '.$obj.' broken/stuck collections.'),
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user