userManager = $userManager; $this->streamRequest = $streamRequest; $this->accountService = $accountService; $this->cacheActorService = $cacheActorService; $this->configService = $configService; } /** * */ protected function configure() { parent::configure(); $this->setName('social:timeline') ->addArgument('userId', InputArgument::REQUIRED, 'viewer') ->addArgument('timeline', InputArgument::REQUIRED, 'timeline') ->addOption('local', '', InputOption::VALUE_NONE, 'public') ->addOption('min_id', '', InputOption::VALUE_REQUIRED, 'min_id', 0) ->addOption('max_id', '', InputOption::VALUE_REQUIRED, 'max_id', 0) ->addOption('since', '', InputOption::VALUE_REQUIRED, 'since', 0) ->addOption('limit', '', InputOption::VALUE_REQUIRED, 'limit', 5) ->addOption('account', '', InputOption::VALUE_REQUIRED, 'account', '') ->addOption('crop', '', InputOption::VALUE_REQUIRED, 'crop', 0) ->setDescription('Get stream by timeline and viewer'); } /** * @param InputInterface $input * @param OutputInterface $output * * @throws Exception */ protected function execute(InputInterface $input, OutputInterface $output): int { $output = new ConsoleOutput(); $this->output = $output->section(); $this->asJson = (strtolower($input->getOption('output')) === 'json'); $this->crop = intval($input->getOption('crop')); $userId = $input->getArgument('userId'); if ($this->userManager->get($userId) === null) { throw new Exception('Unknown user'); } $actor = $this->accountService->getActorFromUserId($userId); if (!$this->asJson) { $this->outputActor($actor); } $this->streamRequest->setViewer($actor); $options = new ProbeOptions(); $options->setFormat(Stream::FORMAT_LOCAL); $options->setLimit(intval($input->getOption('limit'))) ->setMinId(intval($input->getOption('min_id'))) ->setMaxId(intval($input->getOption('max_id'))) ->setSince(intval($input->getOption('since'))); if ($input->getOption('local')) { $options->setLocal(true); } $timeline = $input->getArgument('timeline'); if (str_starts_with($timeline, '#')) { $options->setProbe(ProbeOptions::HASHTAG) ->setArgument(substr($timeline, 1)); } else { $options->setProbe($timeline); } if ($input->getOption('account') !== '') { $local = $this->cacheActorService->getFromLocalAccount($input->getOption('account')); $options->setAccountId($local->getId()); } $this->outputStreams($this->streamRequest->getTimeline($options)); return 0; } }