public function beforeProcessing(&$context) { Database::selectUser($context->key); $user = R::findOne('user', 'LOWER(name) = LOWER(?)', [$context->key]); if (empty($user)) { $user = R::dispense('user'); $user->name = $context->key; R::store($user); } $context->user = $user; }
public static function preWork(&$controllerContext, &$viewContext) { $controllerContext->cache->setPrefix($controllerContext->userName); if (BanHelper::getUserBanState($controllerContext->userName) == BanHelper::USER_BAN_TOTAL) { $controllerContext->cache->bypass(true); $viewContext->userName = $controllerContext->userName; $viewContext->viewName = 'error-user-blocked'; $viewContext->meta->title = 'User blocked — ' . Config::$title; return; } $module = $controllerContext->module; HttpHeadersHelper::setCurrentHeader('Content-Type', $module::getContentType()); $viewContext->media = $controllerContext->media; $viewContext->module = $controllerContext->module; $viewContext->meta->noIndex = true; $viewContext->contentType = $module::getContentType(); if ($viewContext->contentType != 'text/html') { $viewContext->layoutName = 'layout-raw'; } Database::selectUser($controllerContext->userName); $user = R::findOne('user', 'LOWER(name) = LOWER(?)', [$controllerContext->userName]); if (empty($user)) { if (!isset($_GET['referral']) || $_GET['referral'] !== 'search') { $controllerContext->cache->bypass(true); $viewContext->userName = $controllerContext->userName; $viewContext->viewName = 'error-user-not-found'; $viewContext->meta->title = 'User not found — ' . Config::$title; return; } $queue = new Queue(Config::$userQueuePath); $queueItem = new QueueItem(strtolower($controllerContext->userName)); $queue->enqueue($queueItem); $viewContext->queuePosition = $queue->seek($queueItem); $controllerContext->cache->bypass(true); //try to load cache, if it exists $url = $controllerContext->url; if ($controllerContext->cache->exists($url)) { $controllerContext->cache->load($url); flush(); $viewContext->layoutName = null; $viewContext->viewName = null; return; } $viewContext->userName = $controllerContext->userName; $viewContext->viewName = 'error-user-enqueued'; $viewContext->meta->title = 'User enqueued — ' . Config::$title; return; } $viewContext->user = $user; $viewContext->meta->styles[] = '/media/css/menu.css'; $viewContext->updateWait = Config::$userQueueMinWait; $module = $controllerContext->module; $module::preWork($controllerContext, $viewContext); }
require_once __DIR__ . '/../src/core.php'; $processors = ['user' => new UserProcessor(), 'manga' => new MangaProcessor(), 'anime' => new AnimeProcessor()]; array_shift($argv); $pkey = array_shift($argv); if (!isset($processors[$pkey])) { printf('Usage: %s %s KEY1 [KEY2, ...]' . PHP_EOL, __FILE__, join('|', array_keys($processors))); exit(1); } $processor = $processors[$pkey]; $logger = new Logger(); Downloader::setLogger($logger); $exitCode = 0; foreach ($argv as $key) { $logger->log('Processing %s %s', $pkey, is_numeric($key) ? '#' . $key : $key); try { if ($pkey === 'user') { Database::selectUser($key); } $processor->process($key); } catch (BadProcessorKeyException $e) { $logger->log($e->getMessage()); } catch (DocumentException $e) { $logger->log($e->getMessage()); $exitCode = 1; } catch (Exception $e) { $logger->log($e); $exitCode = 1; } } exit($exitCode);
} } CronRunner::run(__FILE__, function ($logger) { $userProcessor = new UserProcessor(); $mediaProcessors = [Media::Anime => new AnimeProcessor(), Media::Manga => new MangaProcessor()]; $userQueue = new Queue(Config::$userQueuePath); $userQueueSize = (new Queue(Config::$userQueuePath))->size(); $mediaQueue = new Queue(Config::$mediaQueuePath); if ($userQueueSize > 30) { Config::$usersPerCronRun = Config::$usersPerCronRunMore; Config::$mediaPerCronRun = Config::$mediaPerCronRunMore; } Downloader::setLogger($logger); #process users processQueue($userQueue, Config::$usersPerCronRun, Config::$userQueueMaxAttempts, $logger, function ($userName) use($userProcessor, $mediaQueue, $logger) { Database::selectUser($userName); $logger->log('Processing user %s... ', $userName); #process the user $userContext = $userProcessor->process($userName); #remove associated cache $cache = new Cache(); $cache->setPrefix($userName); foreach ($cache->getAllFiles() as $path) { unlink($path); } #append media to queue $mediaIds = []; foreach (Media::getConstList() as $media) { foreach ($userContext->user->getMixedUserMedia($media) as $entry) { $mediaAge = time() - strtotime($entry->processed); if ($mediaAge > Config::$mediaQueueMinWait) {