Example #1
0
 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;
 }
Example #2
0
 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);
 }
Example #3
0
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);
Example #4
0
    }
}
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) {