parse($res['updated'])->lt(now()->subMonths(6))) { $res = self::getFromDatabase(); } else { if ($res['version'] === self::CACHE_FILE_VERSION) { $res = $res['data']; } else { $res = self::getFromDatabase(); } } } else { $res = self::getFromDatabase(); } } } else { $res = self::getFromDatabase(); } if (! $res) { return []; } $filteredList = []; foreach ($res as $value) { if (! $value || ! str_starts_with($value, 'https://')) { continue; } $passed = self::add($value); if ($passed) { $filteredList[] = $value; } } self::saveCacheToDisk($filteredList); Cache::remember(self::CACHE_KEY_CHECK, 86400, function () { return true; }); return $res; } public static function parseCacheFileData() { if (Storage::has(self::CACHE_FILE_NAME)) { $res = Storage::get(self::CACHE_FILE_NAME); if (! $res) { return false; } else { $res = json_decode($res, true); if (! $res || isset($res['version'], $res['data'], $res['created'], $res['updated'])) { if (now()->parse($res['updated'])->lt(now()->subMonths(6))) { return false; } else { if ($res['version'] === self::CACHE_FILE_VERSION) { return $res; } else { return false; } } } else { return false; } } } return false; } public static function transformCacheFileData($res) { return [ 'id' => 'pixelfed/storage/app/'.self::CACHE_FILE_NAME, 'version' => self::CACHE_FILE_VERSION, 'created' => now()->format('c'), 'updated' => now()->format('c'), 'length' => count($res), 'data' => $res, ]; } public static function updateCacheFileData() { $res = self::parseCacheFileData(); if (! $res) { return false; } $diff = []; $nodes = $res['data']; $latest = self::getFromDatabase(); $merge = array_merge($nodes, $latest); foreach ($merge as $val) { if (! in_array($val, $nodes)) { if (self::add($val)) { $nodes[] = $val; } else { unset($nodes[$val]); } } } $data = [ 'id' => 'pixelfed/storage/app/'.self::CACHE_FILE_NAME, 'version' => self::CACHE_FILE_VERSION, 'created' => $res['created'], 'updated' => now()->format('c'), 'length' => count($nodes), 'data' => $nodes, ]; $contents = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); Storage::put(self::CACHE_FILE_NAME, $contents); return 1; } public static function saveCacheToDisk($res = false) { if (! $res) { return; } $contents = json_encode(self::transformCacheFileData($res), JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); Storage::put(self::CACHE_FILE_NAME, $contents); } public static function getFromDatabase() { return Profile::whereNotNull('sharedInbox')->groupBy('sharedInbox')->pluck('sharedInbox')->toArray(); } public static function scanForUpdates() { $res = self::getFromDatabase(); $filteredList = []; foreach ($res as $value) { if (! $value || ! str_starts_with($value, 'https://')) { continue; } Redis::sadd(self::CACHE_KEY, $value); $filteredList[] = $value; } self::saveCacheToDisk($filteredList); return 1; } }