App-Codit
view release on metacpan or search on metacpan
lib/App/Codit/Plugins/Backups.pm view on Meta::CPAN
package App::Codit::Plugins::Backups;
=head1 NAME
App::Codit::Plugins::Backups - plugin for App::Codit
=cut
use strict;
use warnings;
use Carp;
use vars qw( $VERSION );
$VERSION = '0.19';
use File::Basename;
use File::Path qw(make_path);
use base qw( Tk::AppWindow::BaseClasses::PluginJobs );
=head1 DESCRIPTION
Protect yourself against crashes. This plugin keeps backups of your unsaved files.
=head1 DETAILS
The Backups plugin protects you against crashes of all kinds.
It silently does it's job in the background and only reports when it
finds an existing backup of a file you open.
It keeps backups of all open and unsaved files. Whenever a file is saved or closed
the backup is removed.
It keeps the backups in the configuration folder, it does not pollute your working folders.
=cut
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_);
return undef unless defined $self;
$self->interval(1000);
$self->{MODIFIED} = {};
$self->{ACTIVE} = {};
$self->cmdHookBefore('deferred_open', 'openDocBefore', $self);
$self->cmdHookAfter('doc_close', 'closeDocAfter', $self);
$self->cmdHookBefore('doc_rename', 'docRenameBefore', $self);
$self->cmdHookAfter('doc_save', 'saveDocAfter', $self);
$self->backupFolder;
return $self;
}
sub backupCheck {
my ($self, $name) = @_;
croak 'Name not defined' unless defined $name;
my $mdi = $self->extGet('CoditMDI');
unless ($mdi->docExists($name)) {
$self->jobEnd($name);
return
}
my $mod = $self->{MODIFIED};
if ($mdi->docModified($name)) {
my $widg = $mdi->docGet($name)->CWidg;
my $em = $widg->editModified;
my $modified = $mod->{$name};
if (defined $modified) {
$self->backupSave($name) if $em ne $modified
} else {
$self->backupSave($name);
}
$mod->{$name} = $em;
} else {
$self->backupRemove($name);
}
}
sub backupExists {
my ($self, $name) = @_;
croak 'Name not defined' unless defined $name;
my @list = $self->backupList;
( run in 0.501 second using v1.01-cache-2.11-cpan-fe3c2283af0 )