use strict;
use warnings;

package BarnOwl::Module::AutoUn;

use BarnOwl;
use BarnOwl::Hooks;

my %existing_subs = ();
my $loaded_subs = 0;

sub _getsubs {
  %existing_subs = map { $_ => 1 } split("\n", BarnOwl::zephyr_getsubs());
}

sub addun {
  my $msg = shift;
  return unless $msg->is_zephyr;
  return if (lc $msg->class eq "message");
  return if (lc $msg->class eq "mail");
  return if (lc $msg->class eq "login");
  if ($loaded_subs == 0){
    _getsubs;
    $loaded_subs = 1;
  }


  _addun(lc "un".$msg->class);
}

sub _addun {
  my $class = shift;
  if (not exists $existing_subs{"<$class,*,*>"}) {
    BarnOwl::command("sub", $class);
    $existing_subs{"<$class,*,*>"} = 1;
  }
}

$BarnOwl::Hooks::newMessage->add(
    'BarnOwl::Module::AutoUn::addun');

1;
