diff options
| author | Darkelarious <darkelarious@333networks.com> | 2021-09-05 20:49:38 +0200 |
|---|---|---|
| committer | Darkelarious <darkelarious@333networks.com> | 2021-09-05 20:49:38 +0200 |
| commit | 153b89b5bc58eb239289698c3f483509911db20d (patch) | |
| tree | 2d902f2e1bfb61b4af0c1b508dbb59f95bdc7de2 /lib/SkinFile.pm | |
| parent | 3470e2605595bf52b3ba07bf0b3886e5a61d3e06 (diff) | |
| download | WebInterface-Perl-153b89b5bc58eb239289698c3f483509911db20d.tar.gz WebInterface-Perl-153b89b5bc58eb239289698c3f483509911db20d.zip | |
functional masterinterface with styles
Diffstat (limited to 'lib/SkinFile.pm')
| -rwxr-xr-x | lib/SkinFile.pm | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/lib/SkinFile.pm b/lib/SkinFile.pm new file mode 100755 index 0000000..b890de2 --- /dev/null +++ b/lib/SkinFile.pm @@ -0,0 +1,67 @@ +package SkinFile; +use strict; +use warnings; +use Fcntl 'LOCK_SH', 'SEEK_SET'; + +sub new { + my($class, $root, $open) = @_; + my $self = bless { root => $root }, $class; + $self->open($open) if $open; + return $self; +} + +sub list { + return map /\/([^\/]+)\/conf/?$1:(), glob "$_[0]{root}/*/conf"; +} + +sub open { + my($self, $dir, $force) = @_; + return if $self->{"s_$dir"} && !$force; + my %o; + open my $F, '<:utf8', "$self->{root}/$dir/conf" or die "$self->{root}/$dir/conf -> $!"; + flock $F, LOCK_SH or die $!; + seek $F, 0, SEEK_SET or die $!; + local $_; + while(<$F>) { + chomp; + s/\r//g; + s{[\t\s]*//.+$}{}; + next if !/^([a-z0-9]+)[\t\s]+(.+)$/; + $o{$1} = $2; + } + close $F; + $self->{"s_$dir"} = \%o; + $self->{opened} = $dir; +} + +sub get { + my($self, $dir, $var) = @_; + $self->open($dir) if defined $var; + $var = $dir if !defined $var; + $var ? $self->{"s_$self->{opened}"}{$var} : keys %{$self->{"s_$self->{opened}"}}; +} + + +1; + +__END__ + +=pod + +=head1 NAME + +SkinFile - Simple object oriented interface to parsing skin configuration files + +=head1 USAGE + + use SkinFile; + my $s = SkinFile->new($dir); + my @skins = $s->list; + + $s->open($skins[0]); + my $name = $s->get('name'); + + # same as above, but in one function + my $name = $s->get($skins[0], 'name'); + + |
