App-SpreadRevolutionaryDate
view release on metacpan or search on metacpan
lib/App/SpreadRevolutionaryDate/Config.pm view on Meta::CPAN
'help' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'h|?'},
'targets' => {ARGCOUNT => ARGCOUNT_LIST, ALIAS => 'tg'},
'msgmaker' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'mm', default => 'RevolutionaryDate'},
'test' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'no|n'},
'locale' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'l', default => 'fr'},
'acab' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'a'},
# Overwrite found attributes for default targets
# for backward compatibility with aliases
'bluesky' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'b'},
'twitter' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 't'},
'mastodon' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'm'},
'freenode' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'f'},
'liberachat' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'lt'},
'bluesky_identifier' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'bi'},
'bluesky_password' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'bp'},
'twitter_consumer_key' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'tck'},
'twitter_consumer_secret' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'tcs'},
'twitter_access_token' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'tat'},
'twitter_access_token_secret' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'tats'},
'twitter_api' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'tapi'},
'mastodon_instance' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'mi'},
'mastodon_client_id' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'mci'},
'mastodon_client_secret' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'mcs'},
'mastodon_access_token' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'mat'},
'freenode_nickname' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'fn'},
'freenode_password' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'fp'},
'freenode_test_channels' => {ARGCOUNT => ARGCOUNT_LIST, ALIAS => 'ftc'},
'freenode_channels' => {ARGCOUNT => ARGCOUNT_LIST, ALIAS => 'fc'},
'liberachat_nickname' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'ln'},
'liberachat_password' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'lp'},
'liberachat_test_channels' => {ARGCOUNT => ARGCOUNT_LIST, ALIAS => 'ltc'},
'liberachat_channels' => {ARGCOUNT => ARGCOUNT_LIST, ALIAS => 'lc'},
'revolutionarydate_acab' => {ARGCOUNT => ARGCOUNT_NONE, ALIAS => 'ra'},
'promptuser_default' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'pud'},
'promptuser_img_path' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'pui'},
'promptuser_img_alt' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'pua'},
'promptuser_img_url' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'puu'},
'gemini_api_key' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'ga'},
'gemini_process' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'g'},
'gemini_prompt' => {ARGCOUNT => ARGCOUNT_HASH, ALIAS => 'gp'},
'gemini_intro' => {ARGCOUNT => ARGCOUNT_HASH, ALIAS => 'gi'},
'gemini_search' => {ARGCOUNT => ARGCOUNT_HASH, ALIAS => 'gs'},
'gemini_img_path' => {ARGCOUNT => ARGCOUNT_HASH, ALIAS => 'gip'},
'gemini_img_alt' => {ARGCOUNT => ARGCOUNT_HASH, ALIAS => 'gia'},
'gemini_img_url' => {ARGCOUNT => ARGCOUNT_HASH, ALIAS => 'giu'},
'special_birthday_name' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'bn'},
'special_birthday_day' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'bd'},
'special_birthday_month' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'bm'},
'special_birthday_url' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'bu'},
'special_birthday_gemini' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'bg'},
'special_birthday_prefix' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'bp'},
'special_birthday_plural' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'bpl'},
'special_birthday_gender' => {ARGCOUNT => ARGCOUNT_ONE, ALIAS => 'bge'},
);
# Rewind configuration file if needed and read it
seek $filename, $file_start, 0 if $file_start;
$self->parse_file($filename);
# Backup multivalued options so command line arguments can override them
my %args_list_backup;
my %args_list = $config_targets->varlist(".");
foreach my $arg_list (keys %args_list) {
next unless $self->_argcount($arg_list) == ARGCOUNT_LIST;
push @{$args_list_backup{$arg_list}}, @{$self->$arg_list};
$self->_default($arg_list);
}
# Rewind command line arguments and process them
@ARGV = @orig_argv;
$self->parse_command_line;
# Restore multivalued options if not overridden by command line arguments
foreach my $arg_list (keys %args_list_backup) {
unless (scalar @{$self->$arg_list}) {
$self->$arg_list($_) foreach (@{$args_list_backup{$arg_list}});
}
}
# Add targets defined with targets option
@targets = @{$self->targets};
# For backward compatibility, add targets defined directly
my %confvars = $self->varlist(".");
foreach my $potential_target (keys %confvars) {
next unless $confvars{$potential_target};
next if $potential_target =~ /_/;
if ($potential_target !~ /^(?:acab|test|locale|targets|msgmaker|conf|version|help)$/) {
push @targets, $potential_target;
$self->targets($potential_target);
}
}
# Set default targets if no target specified
if (!$self->bluesky && !$self->twitter && !$self->mastodon && !$self->freenode && !$self->liberachat && !scalar(@targets)) {
push @targets, 'bluesky', 'twitter', 'mastodon', 'freenode', 'liberachat';
map { $self->targets($_); } @targets;
$self->bluesky(1);
$self->twitter(1);
$self->mastodon(1);
$self->freenode(1);
$self->liberachat(1);
}
# Check mandatory arguments for each target
foreach my $target (@targets) {
$self->check_target_mandatory_options($target);
}
return $self;
}
sub parse_file {
my ($self, $filename) = @_;
foreach my $default_path (
File::HomeDir->my_home . '/.config/spread-revolutionary-date/spread-revolutionary-date.conf',
File::HomeDir->my_home . '/.spread-revolutionary-date.conf') {
$filename = $default_path if (!$filename && -f $default_path)
}
if ($filename && !ref($filename)) {
my $fh;
open($fh, '<:encoding(UTF-8)', $filename);
$self->file($fh);
} else {
$self->file($filename);
}
}
sub parse_command_line {
my $self = shift;
$self->args;
}
( run in 2.081 seconds using v1.01-cache-2.11-cpan-c966e8aa7e8 )