belongsTo(Release::class, 'releases_id'); } /** * Get releasefiles row by id. * * * @return \Illuminate\Database\Eloquent\Collection|static[] */ public static function getReleaseFiles($id) { return self::query()->where('releases_id', $id)->orderBy('name')->get(); } /** * @return \Illuminate\Database\Eloquent\Collection|static[] */ public static function getByGuid($guid) { return self::query() ->join('releases', 'releases.id', '=', 'release_files.releases_id') ->where('releases.guid', $guid) ->orderBy('release_files.name')->get(); } /** * Add new files for a release ID. * * * * @throws \Exception */ public static function addReleaseFiles($id, $name, $size, $createdTime, $hasPassword, string $hash = '', string $crc = ''): int { // Check if we already have this data in table $duplicateCheck = self::query()->where('releases_id', $id)->where('name', $name)->first(); // Check if the release exists in releases table to prevent foreign key error $releaseCheck = Release::query()->where('id', $id)->first(); if (is_int($createdTime)) { if ($createdTime === 0) { $adjustedCreatedTime = now()->format('Y-m-d H:i:s'); } else { $adjustedCreatedTime = Carbon::createFromTimestamp($createdTime, date_default_timezone_get())->format('Y-m-d H:i:s'); } } else { $adjustedCreatedTime = $createdTime; } if ($duplicateCheck === null && $releaseCheck !== null) { try { $insert = self::insertOrIgnore([ 'releases_id' => $id, 'name' => $name, 'size' => $size, 'created_at' => $adjustedCreatedTime, 'updated_at' => now()->timestamp, 'passworded' => $hasPassword, 'crc32' => $crc, ]); } catch (\PDOException $e) { Log::alert($e->getMessage()); } if (\strlen($hash) === 32) { ParHash::insertOrIgnore(['releases_id' => $id, 'hash' => $hash]); } if (config('nntmux.elasticsearch_enabled') === true) { (new ElasticSearchSiteSearch())->updateRelease($id); } else { (new ManticoreSearch())->updateRelease($id); } } return $insert ?? 0; } }