App-Chart
view release on metacpan or search on metacpan
lib/App/Chart/Download.pm view on Meta::CPAN
require App::Chart::DownloadHandler;
my $all_ok = 1;
foreach my $handler (@App::Chart::DownloadHandler::handler_list) {
my @this_list = grep {$handler->match($_)} @symbol_list;
my $ok = $handler->download (\@this_list);
if (! $ok) { $all_ok = 0; }
}
# my %handler_result = ();
# foreach my $symbol (@symbol_list) {
#
# my @handlers = App::Chart::DownloadHandler->handlers_for_symbol ($symbol);
# foreach my $handler (@handlers) {
# if (exists $handler_result{$handler}) {
# if (! $handler_result{$handler}) { $all_ok = 0; }
# next;
# }
#
# my @this_list = grep { my $symbol = $_;
# List::MoreUtils::all
# {$_->match($symbol)} @handlers
# } @symbol_list;
# my $ok = $handler->download (\@this_list);
# $handler_result{$handler} = $ok;
# }
#
# }
status (__('Checking historical'));
if ($all_ok) {
consider_historical (\@symbol_list);
}
}
# return a list of symbols, either just ($symbol), or if $symbol has
# wildcards then the result of matching that in the "all" list
sub symbol_glob {
my ($symbol) = @_;
if ($symbol =~ /[*?]/) {
require Text::Glob;
require App::Chart::Gtk2::Symlist::All;
my $symlist = App::Chart::Gtk2::Symlist::All->instance;
my $regexp = Text::Glob::glob_to_regex ($symbol);
my @list = grep {$_ =~ $regexp} $symlist->symbols;
if (! @list) {
print __x("Warning, pattern \"{pattern}\" doesn't match anything in the database, ignoring\n",
pattern => $symbol);
}
return @list;
} else {
return ($symbol);
}
}
sub command_line_download {
my ($class, $output, $args) = @_;
my $hash;
if ($output eq 'tty') {
if (-t STDOUT) {
binmode (STDOUT, ':via(EscStatus)')
or die 'Cannot push EscStatus';
} else {
require PerlIO::via::EscStatus::ShowNone;
binmode (STDOUT, ':via(EscStatus::ShowNone)')
or die 'Cannot push EscStatus::ShowNone';
}
} elsif ($output eq 'all-status') {
require PerlIO::via::EscStatus::ShowAll;
binmode (STDOUT, ':via(EscStatus::ShowAll)')
or die 'Cannot push EscStatus::ShowAll';
}
if (! @$args) {
print __"No symbols specified to download\n";
return;
}
my @symbol_list = ();
foreach my $arg (@$args) {
if (ref $arg) {
# only what's already in the database
$hash ||= App::Chart::Database::database_symbols_hash();
my @list = grep {exists $hash->{$_}} $arg->symbols;
push @symbol_list, @list;
if (! @list) {
print __x("Warning, no symbols in \"{symlist}\" are currently in the database\n(only symbols already in the database are downloaded from lists)\n",
symlist => $arg->name);
}
} else {
push @symbol_list, symbol_glob ($arg);
}
}
App::Chart::Download::download (symbol_list => \@symbol_list);
require App::Chart::LatestHandler;
App::Chart::LatestHandler->download (\@symbol_list);
status ('');
}
#------------------------------------------------------------------------------
sub iso_to_tdate_floor {
my ($str) = @_;
my ($year, $month, $day) = App::Chart::iso_to_ymd ($str);
return App::Chart::ymd_to_tdate_floor ($year, $month, $day);
}
sub iso_to_tdate_ceil {
my ($str) = @_;
my ($year, $month, $day) = App::Chart::iso_to_ymd ($str);
return App::Chart::ymd_to_tdate_ceil ($year, $month, $day);
}
sub tdate_today {
my ($timezone) = @_;
$timezone //= App::Chart::TZ->loco;
my ($year, $month, $day) = $timezone->ymd;
return App::Chart::ymd_to_tdate_floor ($year, $month, $day);
}
my $default_download_tdates = 5 * 265; # 5 years
sub start_tdate_for_update {
my (@symbol_list) = @_;
if (! @symbol_list) { croak "start_tdate_for_update(): no symbols"; }
my $ret;
foreach my $symbol (@symbol_list) {
( run in 0.590 second using v1.01-cache-2.11-cpan-39bf76dae61 )