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::Spec::Functions; 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 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 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 Epotyl@cpan.orgE. =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