X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=lib%2FMojoFacets%2FChanges.pm;h=1fb2cde5879f011007b28cc6b08fa928b510077a;hb=d4bbe80b856264ff4ff92b15a6727a3d84c792a1;hp=9c07764e08f094221678de8c1ff6df3d107a4be5;hpb=88f36e93420390b7e3d42a3fdba2fd05abf720c4;p=MojoFacets.git diff --git a/lib/MojoFacets/Changes.pm b/lib/MojoFacets/Changes.pm index 9c07764..1fb2cde 100644 --- a/lib/MojoFacets/Changes.pm +++ b/lib/MojoFacets/Changes.pm @@ -6,6 +6,8 @@ use warnings; use base 'Mojolicious::Controller'; use Storable; +use Data::Dump qw(dump); +use MojoFacets::Data; sub index { my $self = shift; @@ -40,4 +42,60 @@ sub view { $self->render( change => retrieve( "/tmp/changes/$uid" ), uid => $uid ); } +sub _edit_path { + my $self = shift; + my $path = $self->param('path') || $self->session('path'); + $self->app->home->rel_dir('data') . '/' . $path . '.edits'; +} + +sub edits { + my ( $self ) = @_; + my $path = $self->param('path') || $self->session('path'); + my $commit = $self->param('commit'); + my ( $items, $unique2id ); + if ( my $apply_on_path = $self->param('apply_on_path') ) { + $items = $MojoFacets::Data::loaded->{$apply_on_path}->{data}->{items}; + die "no $apply_on_path" unless $items; + warn "using $items for $apply_on_path\n"; + } + my $edits; + my $stats; + my $glob = $self->_edit_path . '/*'; + foreach my $t ( sort { $b cmp $a } glob $glob ) { + my $e = retrieve($t); + if ( $items ) { + my ($pk,$id) = %{ $e->{unique} }; + if ( ! defined $unique2id->{$pk} ) { + warn "unique2id $pk on ", $#$items + 1 ," items\n"; + foreach my $i ( 0 .. $#$items ) { + $unique2id->{$pk}->{ $items->[$i]->{$pk}->[0] } = $i; + } + } + my $status = 'missing'; + if ( my $i = $unique2id->{$pk}->{$id} ) { + $status = 'found'; + $items->[$i]->{$pk} = $e->{new} if $commit; + } + $e->{_status} = $status; + $stats->{$status}++; + } + push @$edits, $e; + } + + my @loaded = MojoFacets::Data::__loaded_paths(); + warn "# loaded paths ",dump @loaded; + + $self->render( edits => $edits, loaded => \@loaded, stats => $stats ); +} + +sub edit { + my $self = shift; + + if ( my $t = $self->param('remove') ) { + unlink $self->_edit_path . '/' . $t; + } + + $self->redirect_to('/changes/edits'); +} + 1;