package Xacobeo::Conf;
=head1 NAME
Xacobeo::Conf - Application's configuration.
=head1 SYNOPSIS
use Xacobeo::Conf;
my $conf = Xacobeo::Conf->get_conf;
my $icon = $conf->share_file('images', 'xacobeo.png'); # /usr/share/images/xacobeo.png
my $po_folder = $conf->share_folder('locale'); # /usr/share/locale
=head1 DESCRIPTION
Utility class that provides a way for accessing all configuration parameters
that are needed at runtime..
=head1 PROPERTIES
The following properties are defined:
=head2 dir
The root directory where the application has been installed.
=head1 METHODS
The following methods are available:
=cut
use strict;
use FindBin;
Xacobeo::GObject->register_package('Glib::Object' =>
properties => [
Glib::ParamSpec->scalar(
'dir',
"Dir",
"The root folder of the application's installation",
['readable', 'writable', 'construct-only'],
),
],
);
my $XDG = File::BaseDir->new();
my $INSTANCE = __PACKAGE__->init();
=head2 get_conf
Returns the current configuration instance. This class is a singleton so there's
no constructor.
=cut
sub get_conf {
return $INSTANCE;
}
sub init {
my $class = shift;
my ($dir) = @_;
$dir ||= find_app_folder();
$INSTANCE = $class->SUPER::new(dir => $dir);
}
=head2 share_dir
Returns the path of a folder in the application's I<share> directory.
Parameters:
=over
=item * @path
The path parts relative to the share directory.
=back
=cut
sub share_dir {
my $self = shift;
return catdir($self->dir, 'share', @_);
}
=head2 share_file
Returns the path of a file in the application's I<share> directory.
Parameters:
=over
=item * @path
The path parts relative to the share directory.
=back
=cut
sub share_file {
my $self = shift;
return catfile($self->dir, 'share', @_);
}
=head2 app_name
Returns the application's name.
=cut
sub app_name {
return "Xacobeo";
}
=head2 plugin_folders
Returns the folders that are scanned for plugins.
=cut
sub plugin_folders {
my $self = shift;
my %seen;
return map { $seen{$_}++ ? () : catdir($_, 'xacobeo', 'plugins') }
$XDG->config_home,
$XDG->config_dirs
;
}
# Return the root folder of the application once installed. The 'root' folder is
# the one where the installation is done, the root folder hierarchy is as
# follows:
#
# (root)
# |-- bin
# |-- lib
# | `-- perl5
# | |-- Xacobeo
# | `-- i486-linux-gnu-thread-multi
# | `-- Xacobeo
# | `-- auto
# | `-- Xacobeo
# |-- man
# | |-- man1
# | `-- man3
# `-- share
# |-- applications
# |-- pixmaps
# `-- xacobeo
sub find_app_folder {
return catdir($FindBin::Bin, '..');
}
# A true value
1;
=head1 AUTHORS
Emmanuel Rodriguez E<lt>potyl@cpan.orgE<gt>.
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2008,2009 by Emmanuel Rodriguez.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.8 or,
at your option, any later version of Perl 5 you may have available.
=cut