+sub cmd_connector {
+ my $subcmd = shift;
+ my $connconf = $conf->{'videosite'}->{'connectors'};
+
+ unless(defined($subcmd)) {
+ $subcmd = "help";
+ }
+
+ $subcmd = lc($subcmd);
+
+ if ($subcmd eq 'list') {
+ write_irssi("Defined connectors");
+ foreach (keys(%{$connconf})) {
+ write_irssi($_);
+ my $schemas = $connconf->{$_}->{'schemas'};
+ if (scalar(keys(%{$schemas})) == 0) {
+ write_irssi(" No schemas defined");
+ } else {
+ foreach (keys(%{$schemas})) {
+ write_irssi(' %s: %s', $_, $schemas->{$_});
+ }
+ }
+ }
+
+ write_irssi();
+ write_irssi("Selected connectors: %s", join(", ", @{$conf->{'videosite'}->{'connectorlist'}}));
+ } elsif ($subcmd eq 'add') {
+ my ($name) = @_;
+
+ unless(defined($name)) {
+ write_irssi("No name given");
+ return;
+ }
+
+ $name = lc($name);
+
+ if (exists($connconf->{$_})) {
+ write_irssi("Connector already exists");
+ return;
+ }
+
+ $connconf->{$name} = {'name' => $name, 'schemas' => {}};
+ } elsif ($subcmd eq 'del') {
+ my ($name) = @_;
+
+ unless(defined($name)) {
+ write_irssi("No name given");
+ return;
+ }
+
+ $name = lc($name);
+
+ if ($name eq 'direct') {
+ write_irssi("Cannot remove direct connector");
+ return;
+ }
+
+ unless (exists($connconf->{$_})) {
+ write_irssi("Connector does not exist");
+ return;
+ }
+
+ delete($connconf->{$name});
+
+ # Remove from list of active connectors
+ $conf->{'videosite'}->{'connectorlist'} =
+ [ grep { $_ ne $name } @{$conf->{'videosite'}->{'connectorlist'}} ];
+
+ if (scalar(@{$conf->{'videosite'}->{'connectorlist'}}) == 0) {
+ write_irssi("List of selected connectors is empty, resetting to direct");
+ $conf->{'videosite'}->{'connectorlist'} = [ 'direct' ];
+ }
+ } elsif ($subcmd eq 'addschema') {
+ my ($conn, $schema, $proxy) = @_;
+
+ unless(defined($conn)) {
+ write_irssi("No connector name given");
+ return;
+ }
+
+ $conn = lc($conn);
+
+ if ($conn eq 'direct') {
+ write_irssi("Connector is not modifiable");
+ return;
+ }
+
+ unless(defined($schema)) {
+ write_irssi("No schema given");
+ return;
+ }
+
+ $schema = lc($schema);
+
+ unless(defined($proxy)) {
+ write_irssi("No proxy given");
+ return;
+ }
+
+ unless(exists($connconf->{$conn})) {
+ write_irssi("Connector does not exist");
+ return;
+ }
+
+ $connconf->{$conn}->{'schemas'}->{$schema} = $proxy;
+ } elsif ($subcmd eq 'delschema') {
+ my ($conn, $schema) = @_;
+
+ unless(defined($conn)) {
+ write_irssi("No connector name given");
+ return;
+ }
+
+ $conn = lc($conn);
+
+ if ($conn eq 'direct') {
+ write_irssi("Connector is not modifiable");
+ return;
+ }
+
+ unless(defined($schema)) {
+ write_irssi("No schema given");
+ return;
+ }
+
+ $schema = lc($schema);
+
+ unless(exists($connconf->{$conn})) {
+ write_irssi("Connector does not exist");
+ return;
+ }
+
+ delete($connconf->{$conn}->{'schemas'}->{$schema});
+ } elsif ($subcmd eq 'select') {
+ my @connlist = map { lc } @_;
+
+ if (scalar(@connlist) == 0) {
+ write_irssi("No connectors given");
+ return;
+ }
+
+ foreach (@connlist) {
+ unless(exists($connconf->{$_})) {
+ write_irssi("Connector %s does not exist", $_);
+ return;
+ }
+ }
+
+ $conf->{'videosite'}->{'connectorlist'} = [ @connlist ];
+ } else {
+ write_irssi("connector [list|add|del|addschema|delschema|help] <options>");
+ write_irssi(" help: Show this help");
+ write_irssi(" list: List the defined connectors");
+ write_irssi(" add <name>: Add a connector with name <name>");
+ write_irssi(" del <name>: Delete the connector with name <name>");
+ write_irssi(" addschema <name> <schema> <proxy>: Add proxy to connector for the given schema");
+ write_irssi(" delschema <name> <schema>: Remove the schema from the connector");
+ write_irssi(" select <name> [<name>...]: Select the connectors to use");
+ }
+}
+
+
+