function handle($channel)
 {
     $cur = $this->user;
     $searchsub = SearchSub::pkeyGet(array('search' => $this->keyword, 'profile_id' => $cur->id));
     if ($searchsub) {
         // TRANS: Error text shown a user tries to track a search query they're already subscribed to.
         $channel->error($cur, sprintf(_m('You are already tracking the search "%s".'), $this->keyword));
         return;
     }
     try {
         SearchSub::start($cur->getProfile(), $this->keyword);
     } catch (Exception $e) {
         // TRANS: Message given having failed to set up a search subscription by track command.
         $channel->error($cur, sprintf(_m('Could not start a search subscription for query "%s".'), $this->keyword));
         return;
     }
     // TRANS: Message given having added a search subscription by track command.
     $channel->output($cur, sprintf(_m('You are subscribed to the search "%s".'), $this->keyword));
 }
 /**
  * Handle request
  *
  * Does the subscription and returns results.
  *
  * @param Array $args unused.
  *
  * @return void
  */
 function handle($args)
 {
     // Throws exception on error
     SearchSub::start($this->user->getProfile(), $this->search);
     if ($this->boolean('ajax')) {
         $this->startHTML('text/xml;charset=utf-8');
         $this->elementStart('head');
         // TRANS: Page title when search subscription succeeded.
         $this->element('title', null, _m('Subscribed'));
         $this->elementEnd('head');
         $this->elementStart('body');
         $unsubscribe = new SearchUnsubForm($this, $this->search);
         $unsubscribe->show();
         $this->elementEnd('body');
         $this->endHTML();
     } else {
         $url = common_local_url('search', array('search' => $this->search));
         common_redirect($url, 303);
     }
 }