- Fix some bugs in the XML config handling
[videosite.git] / videosite / Base.pm
1 # (c) 2007 by Ralf Ertzinger <ralf@camperquake.de>
2 # licensed under GNU GPL v2
3
4 package Base;
5
6 use strict;
7 use Irssi;
8
9 sub new {
10     my $class = shift;
11     my $self = {'_DEBUG' => 0};
12
13     bless($self, $class);
14
15     $self->_prepare_parameters();
16
17     return $self;
18 }
19
20 sub error {
21     my $self = shift;
22     my @data = @_;
23
24     Irssi::print(sprintf(shift(@_), @_));
25 }
26
27 sub debug {
28     my $self = shift;
29     my @data = @_;
30
31     $data[0] = "DEBUG: " . $data[0];
32     if ($self->{'_DEBUG'} != 0) {$self->error(@data)};
33 }
34
35 sub mergeconfig {
36     my $self = shift;
37     my $c = shift;
38     my $o;
39
40     return $self->{'_CONFIG'} unless defined($c);
41
42     foreach $o (keys(%{$c->{'option'}})) {
43         if (exists($self->{'_CONFIG'}->{'option'}->{$o})) {
44             $self->{'_CONFIG'}->{'option'}->{$o}->{'content'} = $c->{'option'}->{$o}->{'content'};
45         }
46     }
47
48     return $self->{'_CONFIG'};
49 }
50
51 sub _prepare_parameters {
52     my $self = shift;
53     my $p;
54
55     $self->{'_CONFIG'} = {'option' => {}};
56
57     foreach $p (keys(%{$self->{'_PARAMS'}})) {
58         $self->{'_CONFIG'}->{'option'}->{$p}->{'content'} = $self->{'_PARAMS'}->{$p}->[0];
59     }
60 }
61
62 sub _getval {
63     my $self = shift;
64     my $key = shift;
65
66     return $self->{'_CONFIG'}->{'option'}->{$key}->{'content'}
67 }
68
69 sub setval {
70     my $self = shift;
71     my $key = shift;
72     my $val = shift;
73
74     if (exists($self->{'_CONFIG'}->{'option'}->{$key})) {
75         $self->{'_CONFIG'}->{'option'}->{$key}->{'content'} = $val;
76     } else {
77         $self->error('Module %s does not have a parameter named %s', $self->{'NAME'}, $key);
78     }
79 }
80
81 sub getconfstr {
82     my $self = shift;
83     my $s = 'Options for ' . $self->{'NAME'} . ":\n";
84     my $k;
85     my $p;
86
87     foreach $k (keys(%{$self->{'_CONFIG'}->{'option'}})) {
88         $p = $self->{'_CONFIG'}->{'option'}->{$k}->{'content'};
89         $p =~ s/%/%%/g;
90         $s .= sprintf("  %s: %s", $k, $p);
91         if ($self->{'_CONFIG'}->{'option'}->{$k}->{'content'} == $self->{'_PARAMS'}->{$k}->[0]) {
92             $s .= " (default)\n";
93         } else {
94             $s .= "\n";
95         }
96     }
97
98     return $s;
99 }
100
101 sub gethelpstr {
102     my $self = shift;
103     my $s = 'Help for ' . $self->{'NAME'} . ":\n";
104     my $k;
105     my $p;
106
107     if (exists($self->{'DESC'})) {
108         $s .= "Description:\n " . $self->{'DESC'};
109     }
110
111     $s .= " Options:\n";
112     foreach $k (keys(%{$self->{'_CONFIG'}->{'option'}})) {
113         $p = $self->{'_PARAMS'}->{$k}->[0];
114         $p =~ s/%/%%/g;
115         $s .= sprintf("  %s: %s (default: %s)\n", $k, $self->{'_PARAMS'}->{$k}->[1], $p);
116     }
117
118     return $s;
119 }
120
121 sub setdebug {
122     my $self = shift;
123
124     $self->{'_DEBUG'} = shift;
125 }
126
127 1;