source: server/trunk/web/lib/Sophie/Controller/0Explorer.pm @ 76

Last change on this file since 76 was 76, checked in by nanardon, 14 years ago
  • add file contents view
File size: 2.7 KB
Line 
1package Sophie::Controller::0Explorer;
2use Moose;
3use namespace::autoclean;
4
5BEGIN {extends 'Catalyst::Controller'; }
6
7=head1 NAME
8
9Sophie::Controller::0Explorer - Catalyst Controller
10
11=head1 DESCRIPTION
12
13Catalyst Controller.
14
15=head1 METHODS
16
17=cut
18
19
20=head2 index
21
22=cut
23
24sub dir :Local {
25    my ( $self, $c, @args ) = @_;
26    my $dir = join('/', map { "$_" } grep { $_ } @args);
27    $c->stash->{path} = $dir;
28    $c->stash->{explorerurl} = '/explorer' . ($dir ? "/$dir" : '');
29
30    my $rsdist = $c->forward('/search/distrib_search', [ $c->session->{__explorer} ]);
31    $c->stash->{xmlrpc} = [ $c->model('Base')
32      ->resultset('Files')
33      ->search(
34          {
35              dirname => '/' . ($dir ? "$dir/" : ''),
36              pkgid => { IN => $rsdist->get_column('pkgid')->as_query, },
37          },
38          {
39              order_by => [ 'basename' ],
40              group_by => [ 'basename' ], 
41              select => [ 'basename' ],
42          }
43      )->get_column('basename')->all ];
44}
45
46sub file :Local {
47    my ( $self, $c, @args ) = @_;
48    my $basename = pop(@args);
49    my $dir = join('/', map { "$_" } grep { $_ } @args);
50    $c->stash->{path} = $dir;
51    $c->stash->{explorerurl} = '/explorer' . ($dir ? "/$dir" : '');
52
53    my $rsdist = $c->forward('/search/distrib_search', [ $c->session->{__explorer} ]);
54
55    my @col = qw(dirname basename md5 size pkgid count);
56    $c->stash->{xmlrpc} = [ 
57        map { {
58            pkgid => $_->get_column('pkgid'),
59            filename => $_->get_column('dirname') . $_->get_column('basename'),
60            dirname => $_->get_column('dirname'),
61            basename => $_->get_column('basename'),
62            md5 => $_->get_column('md5'),
63            perm => $_->get_column('perm'),
64            size => $_->get_column('size'),
65            user => $_->get_column('user'),
66            group => $_->get_column('group'),
67            has_content => $_->get_column('has_content'),
68            count => $_->get_column('count')
69            } }
70        $c->model('Base')
71      ->resultset('Files')
72      ->search({
73              dirname => '/' . ($dir ? "$dir/" : ''), basename => $basename,
74              pkgid => { IN => $rsdist->get_column('pkgid')->as_query, },
75          },
76          { 
77              'select' => [ 'contents is NOT NULL as has_content', 'rpmfilesmode(mode) as perm', @col, '"group"',
78                  '"user"' ],
79              as => [ qw(has_content perm), @col, 'group', 'user' ],
80              order_by => [ 'pkgid' ],
81
82          },
83      )->all ];
84}
85
86=head1 AUTHOR
87
88Olivier Thauvin
89
90=head1 LICENSE
91
92This library is free software. You can redistribute it and/or modify
93it under the same terms as Perl itself.
94
95=cut
96
97__PACKAGE__->meta->make_immutable;
98
991;
Note: See TracBrowser for help on using the repository browser.