/**
  * Filter the query by a related \Jalle19\StatusManager\Database\Subscription object
  *
  * @param \Jalle19\StatusManager\Database\Subscription|ObjectCollection $subscription the related object to use as filter
  * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
  *
  * @return ChildChannelQuery The current query, for fluid interface
  */
 public function filterBySubscription($subscription, $comparison = null)
 {
     if ($subscription instanceof \Jalle19\StatusManager\Database\Subscription) {
         return $this->addUsingAlias(ChannelTableMap::COL_ID, $subscription->getChannelId(), $comparison);
     } elseif ($subscription instanceof ObjectCollection) {
         return $this->useSubscriptionQuery()->filterByPrimaryKeys($subscription->getPrimaryKeys())->endUse();
     } else {
         throw new PropelException('filterBySubscription() only accepts arguments of type \\Jalle19\\StatusManager\\Database\\Subscription or Collection');
     }
 }
 /**
  * @param string             $instanceName
  * @param SubscriptionStatus $status
  *
  * @return $this|\Propel\Runtime\ActiveQuery\Criteria
  */
 public function filterBySubscriptionStatus($instanceName, SubscriptionStatus $status)
 {
     return $this->filterByInstanceName($instanceName)->filterByNetwork(Subscription::parseNetwork($status))->filterByMux(Subscription::parseMux($status))->addDescendingOrderByColumn('started');
 }
 /**
  * @param ChildSubscription $subscription The ChildSubscription object to add.
  */
 protected function doAddSubscription(ChildSubscription $subscription)
 {
     $this->collSubscriptions[] = $subscription;
     $subscription->setChannel($this);
 }
 /**
  * Exclude object from result
  *
  * @param   ChildSubscription $subscription Object to remove from the list of results
  *
  * @return $this|ChildSubscriptionQuery The current query, for fluid interface
  */
 public function prune($subscription = null)
 {
     if ($subscription) {
         $this->addUsingAlias(SubscriptionTableMap::COL_ID, $subscription->getId(), Criteria::NOT_EQUAL);
     }
     return $this;
 }
 /**
  * @param ChildSubscription $subscription The ChildSubscription object to add.
  */
 protected function doAddSubscription(ChildSubscription $subscription)
 {
     $this->collSubscriptions[] = $subscription;
     $subscription->setInstance($this);
 }
 /**
  * @param SubscriptionSeenEvent $event
  *
  * @throws \Propel\Runtime\Exception\PropelException
  */
 public function onSubscriptionSeen(SubscriptionSeenEvent $event)
 {
     $instanceName = $event->getInstance();
     $status = $event->getSubscription();
     // Ignore certain subscriptions
     if (in_array($status->getType(), [SubscriptionStatus::TYPE_EPGGRAB, SubscriptionStatus::TYPE_SERVICE_OR_MUX])) {
         return;
     }
     // Determine the username to store for the subscription
     $username = $status->username;
     switch ($status->getType()) {
         case SubscriptionStatus::TYPE_RECORDING:
             $username = User::NAME_DVR;
             break;
     }
     // Get the instance, user and channel
     $instance = InstanceQuery::create()->findPk($instanceName);
     $user = UserQuery::create()->filterByInstance($instance)->filterByName($username)->findOne();
     // Ensure the channel exists
     $this->onChannelSeen($instanceName, $status->channel);
     $channel = ChannelQuery::create()->filterByInstance($instance)->filterByName($status->channel)->findOne();
     if (SubscriptionQuery::create()->hasSubscription($instance, $user, $channel, $status)) {
         return;
     }
     // Try to determine which input is used by the subscription
     $input = InputQuery::create()->filterBySubscriptionStatus($instanceName, $status)->findOne();
     if ($input === null) {
         $this->logger->warning('Got subscription that cannot be tied to an input ({instanceName}, user: {userName}, channel: {channelName})', ['instanceName' => $instanceName, 'userName' => $user !== null ? $user->getName() : 'N/A', 'channelName' => $channel->getName()]);
     }
     $subscription = new Subscription();
     $subscription->setInstance($instance)->setInput($input)->setUser($user)->setChannel($channel)->setSubscriptionId($status->id)->setStarted($status->start)->setTitle($status->title)->setService($status->service);
     $subscription->save();
     $this->logger->info('Stored new subscription (instance: {instanceName}, user: {userName}, channel: {channelName})', ['instanceName' => $instanceName, 'userName' => $user !== null ? $user->getName() : 'N/A', 'channelName' => $channel->getName()]);
 }