———————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
warnings;
use
FindBin;
use
File::BaseDir;
use
Xacobeo::GObject;
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