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