ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/MP/Config.pm
Revision: 1.6
Committed: Fri Sep 4 21:01:22 2009 UTC (14 years, 8 months ago) by root
Branch: MAIN
Changes since 1.5: +2 -0 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 =head1 NAME
2
3 AnyEvent::MP::Config - configuration handling
4
5 =head1 SYNOPSIS
6
7 # see the "aemp" command line utility
8
9 =head1 DESCRIPTION
10
11 Move along please, nothing to see here at the moment.
12
13 =cut
14
15 package AnyEvent::MP::Config;
16
17 use common::sense;
18
19 use Carp ();
20 use AnyEvent ();
21 use JSON::XS ();
22
23 our $CONFIG_FILE = $ENV{HOME} ? "$ENV{HOME}/.perl-anyevent-mp"
24 : "$ENV{APPDATA}/perl-anyevent-mp";
25
26 our %CFG;
27
28 sub load {
29 if (open my $fh, "<:raw", $CONFIG_FILE) {
30 return if eval {
31 local $/;
32 %CFG = %{ JSON::XS->new->utf8->relaxed->decode (scalar <$fh>) };
33 1
34 };
35 }
36
37 %CFG = (
38 version => 1,
39 dirty => 1,
40 );
41 }
42
43 sub save {
44 return unless delete $CFG{dirty};
45
46 open my $fh, ">:raw", "$CONFIG_FILE~new~"
47 or Carp::croak "$CONFIG_FILE~new~: $!";
48
49 syswrite $fh, JSON::XS->new->pretty->utf8->encode (\%CFG) . "\n"
50 or Carp::croak "$CONFIG_FILE~new~: $!";
51
52 close $fh
53 or Carp::croak "$CONFIG_FILE~new~: $!";
54
55 unlink "$CONFIG_FILE~";
56 link $CONFIG_FILE, "$CONFIG_FILE~";
57 rename "$CONFIG_FILE~new~", $CONFIG_FILE
58 or Carp::croak "$CONFIG_FILE: $!";
59 }
60
61 sub config {
62 \%CFG
63 }
64
65 sub _find_profile($);
66 sub _find_profile($) {
67 my ($name) = @_;
68
69 if (defined $name) {
70 my $profile = $CFG{profile}{$name};
71 return _find_profile $profile->{parent}, %$profile;
72 } else {
73 return %CFG;
74 }
75 }
76
77 sub find_profile($;%) {
78 my ($name, %kv) = @_;
79
80 +{
81 monitor_timeout => 30,
82 connect_interval => 2,
83 %kv,
84 _find_profile $name,
85 }
86 }
87
88 load;
89 END { save }
90
91 =head1 SEE ALSO
92
93 L<AnyEvent::MP>.
94
95 =head1 AUTHOR
96
97 Marc Lehmann <schmorp@schmorp.de>
98 http://home.schmorp.de/
99
100 =cut
101
102 1
103