Ejemplo n.º 1
0
    /**
     * Delete unwanted releases based on admin settings.
     * This deletes releases based on group.
     *
     * @param int|string $groupID (optional)
     *
     * @void
     * @access public
     */
    public function deletedReleasesByGroup($groupID = '')
    {
        $startTime = time();
        $minSizeDeleted = $maxSizeDeleted = $minFilesDeleted = 0;
        if ($this->echoCLI) {
            echo $this->pdo->log->header("Process Releases -> Delete releases smaller/larger than minimum size/file count from group/site setting.");
        }
        if ($groupID == '') {
            $groupIDs = $this->groups->getActiveIDs();
        } else {
            $groupIDs = [['id' => $groupID]];
        }
        $maxSizeSetting = $this->pdo->getSetting('maxsizetoformrelease');
        $minSizeSetting = $this->pdo->getSetting('minsizetoformrelease');
        $minFilesSetting = $this->pdo->getSetting('minfilestoformrelease');
        foreach ($groupIDs as $groupID) {
            $releases = $this->pdo->queryDirect(sprintf("\n\t\t\t\t\tSELECT SQL_NO_CACHE r.guid, r.id\n\t\t\t\t\tFROM releases r\n\t\t\t\t\tINNER JOIN groups g ON g.id = r.group_id\n\t\t\t\t\tWHERE r.group_id = %d\n\t\t\t\t\tAND greatest(IFNULL(g.minsizetoformrelease, 0), %d) > 0\n\t\t\t\t\tAND r.size < greatest(IFNULL(g.minsizetoformrelease, 0), %d)", $groupID['id'], $minSizeSetting, $minSizeSetting));
            if ($releases instanceof \Traversable) {
                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(sprintf('
						SELECT SQL_NO_CACHE id, guid
						FROM releases
						WHERE group_id = %d
						AND size > %d', $groupID['id'], $maxSizeSetting));
                if ($releases instanceof \Traversable) {
                    foreach ($releases as $release) {
                        $this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
                        $maxSizeDeleted++;
                    }
                }
            }
            $releases = $this->pdo->queryDirect(sprintf("\n\t\t\t\t\tSELECT SQL_NO_CACHE r.id, r.guid\n\t\t\t\t\tFROM releases r\n\t\t\t\t\tINNER JOIN groups g ON g.id = r.group_id\n\t\t\t\t\tWHERE r.group_id = %d\n\t\t\t\t\tAND greatest(IFNULL(g.minfilestoformrelease, 0), %d) > 0\n\t\t\t\t\tAND r.totalpart < greatest(IFNULL(g.minfilestoformrelease, 0), %d)", $groupID['id'], $minFilesSetting, $minFilesSetting));
            if ($releases instanceof \Traversable) {
                foreach ($releases as $release) {
                    $this->releases->deleteSingle(['g' => $release['guid'], 'i' => $release['id']], $this->nzb, $this->releaseImage);
                    $minFilesDeleted++;
                }
            }
        }
        if ($this->echoCLI) {
            $this->pdo->log->doEcho($this->pdo->log->primary('Deleted ' . ($minSizeDeleted + $maxSizeDeleted + $minFilesDeleted) . ' releases: ' . PHP_EOL . $minSizeDeleted . ' smaller than, ' . $maxSizeDeleted . ' bigger than, ' . $minFilesDeleted . ' with less files than site/groups setting in: ' . $this->consoleTools->convertTime(time() - $startTime)), true);
        }
    }