App-FirefoxMultiAccountContainersUtils
view release on metacpan or search on metacpan
lib/App/FirefoxMultiAccountContainersUtils.pm view on Meta::CPAN
},
);
sub _get_containers_json {
require App::FirefoxUtils;
require File::Copy;
require File::Slurper;
require Firefox::Util::Profile;
require JSON::MaybeXS;
my ($args, $do_backup) = @_;
my $res;
if ($do_backup) {
$res = App::FirefoxUtils::firefox_is_running();
return [500, "Can't check if Firefox is running: $res->[0] - $res->[1]"]
unless $res->[0] == 200;
if ($args->{-dry_run}) {
log_info "[DRY-RUN] Note that Firefox is still running, ".
"you should stop Firefox first when actually modifying containers";
} else {
return [412, "Please stop Firefox first"] if $res->[2];
}
}
lib/App/FirefoxMultiAccountContainersUtils.pm view on Meta::CPAN
}
return [404, "No such Firefox profile '$args->{profile}', ".
"available profiles include: ".
join(", ", map {$_->{name}} @{$res->[2]})]
unless defined $path;
$path = "$path/containers.json";
return [412, "Can't find '$path', is this Firefox using Multi-Account Containers?"]
unless (-f $path);
unless ($args->{-dry_run} || !$do_backup) {
log_info "Backing up $path to $path~ ...";
File::Copy::copy($path, "$path~") or
return [500, "Can't backup $path to $path~: $!"];
}
my $json = JSON::MaybeXS::decode_json(File::Slurper::read_text($path));
[200, "OK", {path=>$path, content=>$json}];
}
sub _complete_container {
require Firefox::Util::Profile;
lib/App/FirefoxMultiAccountContainersUtils.pm view on Meta::CPAN
my %args = @_;
my $code = $args{code};
unless (ref $code eq 'CODE') {
$code = "no strict; no warnings; package main; sub { $code }";
$code = eval $code; ## no critic: BuiltinFunctions::ProhibitStringyEval
return [400, "Cannot compile string code: $@"] if $@;
}
my $res;
$res = _get_containers_json(\%args, 'backup');
return $res unless $res->[0] == 200;
my $path = $res->[2]{path};
my $json = $res->[2]{content};
my $new_identities = [];
for my $identity (@{ $json->{identities} }) {
local $_ = $identity;
my $code_res = $code->($identity);
if (!$code_res) {
next;
lib/App/FirefoxMultiAccountContainersUtils.pm view on Meta::CPAN
require App::FirefoxUtils;
require File::Copy;
require File::Slurper;
require Firefox::Util::Profile;
require JSON::MaybeXS;
my %args = @_;
defined(my $name = $args{name}) or return [400, "Please specify name for new container"];
my $res;
$res = _get_containers_json(\%args, 'backup');
return $res unless $res->[0] == 200;
my $path = $res->[2]{path};
my $json = $res->[2]{content};
# we currently need one existing identity
@{ $json->{identities} } or return [412, "I need at least one existing identity"];
my $new_identity = { %{$json->{identities}[-1]} };
$new_identity->{name} = $name;
lib/App/FirefoxMultiAccountContainersUtils.pm view on Meta::CPAN
require Firefox::Util::Profile;
require JSON::MaybeXS;
my %args = @_;
my $sort_sub = $args{sort_sub} // 'asciibetically';
my $sort_args = $args{sort_args} // [];
my $cmp = Sort::Sub::get_sorter($sort_sub, { map { split /=/, $_, 2 } @$sort_args });
my $res;
$res = _get_containers_json(\%args, 'backup');
return $res unless $res->[0] == 200;
my $path = $res->[2]{path};
my $json = $res->[2]{content};
$json->{identities} = [
sort {
my $a_name = defined$a->{name} ? $a->{name} : do { my $name = lc $a->{l10nID}; $name =~ s/^usercontext//; $name =~ s/\.label$//; $name };
my $b_name = defined$b->{name} ? $b->{name} : do { my $name = lc $b->{l10nID}; $name =~ s/^usercontext//; $name =~ s/\.label$//; $name };
$sort_sub eq 'by_perl_code' ? $cmp->($a, $b) : $cmp->($a_name, $b_name)
} @{ $json->{identities} }
( run in 2.361 seconds using v1.01-cache-2.11-cpan-49f99fa48dc )