RecentInfo-Manager
view release on metacpan or search on metacpan
lib/RecentInfo/Manager/XBEL.pm view on Meta::CPAN
$res->modified($modified) if $modified;
$res->visited($when);
# Check if we are in the group, otherwise add ourselves
if(! grep { $_->group eq $app } $res->groups->@*) {
push $res->groups->@*, RecentInfo::GroupEntry->new( group => $app );
};
if(! grep { $_->name eq $app } $res->applications->@*) {
push $res->applications->@*,
RecentInfo::Application->new( name => $app, exec => $info->{exec}, count => 1, modified => $when )
} else {
# Update our most recent entry in ->applications
my $app_entry = first { $_->name eq $app } $res->applications->@*;
$app_entry->modified($when);
$app_entry->count( $app_entry->count+1);
};
};
$self->entries->@* = sort { $a->visited cmp $b->visited } $self->entries->@*;
return $res
}
=head2 C<< ->remove $filename >>
$mgr->remove('output.pdf');
Removes the filename from the list of recently used files.
=cut
sub remove( $self, $filename ) {
$filename = File::Spec->rel2abs($filename);
# Ugh - do we really want to do this?!
my $href = "file://$filename";
my $res;
$self->entries->@* = map {
if( $_->href eq $href ) {
$res = $_;
(); # discard the item
} else {
say $_->href;
say $href;
$_; # keep the item
}
} $self->entries->@*;
$self->entries->@* = sort { $a->visited cmp $b->visited } $self->entries->@*;
return $res
}
sub toString( $self ) {
my $doc = XML::LibXML::Document->new('1.0', 'UTF-8');
my $xbel = $doc->createElement('xbel');
$doc->setDocumentElement($xbel);
$xbel->setAttribute("version" => '1.0');
$xbel->setAttribute("xmlns:bookmark" => "http://www.freedesktop.org/standards/desktop-bookmarks");
$xbel->setAttribute("xmlns:mime" => "http://www.freedesktop.org/standards/shared-mime-info");
for my $bm ($self->entries->@*) {
$xbel->addChild($bm->as_XML_fragment( $doc ));
};
my $pp = XML::LibXML::PrettyPrint->new(
indent_string => ' ',
element => {
compact => [qw[ bookmark:group ]],
},
);
$pp->pretty_print( $xbel );
#validate_xml( $doc );
my $str = $doc->toString(); # so we encode some entities?!
# Now hardcore encode some entities within attributes/double quotes back
# because I can't find how to coax XML::LibXML to properly encode entities:
$str =~ s!exec="'!exec="'!g;
$str =~ s!'"( |>)!'"$1!g;
return $str
}
sub save( $self, $filename=$self->recent_path ) {
my $str = $self->toString;
my $fh = IO::AtomicFile->open( $filename, '>:raw' );
print $fh $str;
$fh->close;
}
1;
=head1 REPOSITORY
The public repository of this module is
L<https://github.com/Corion/RecentInfo-Manager>.
=head1 SUPPORT
The public support forum of this module is L<https://perlmonks.org/>.
=head1 BUG TRACKER
Please report bugs in this module via Github
at L<https://github.com/Corion/RecentInfo-Manager/issues>
=head1 AUTHOR
Max Maischein C<corion@cpan.org>
=head1 COPYRIGHT (c)
Copyright 2024-2024 by Max Maischein C<corion@cpan.org>.
=head1 LICENSE
This module is released under the same terms as Perl itself.
=cut
( run in 1.241 second using v1.01-cache-2.11-cpan-39bf76dae61 )