Index: server/trunk/web/lib/Sophie.pm
===================================================================
--- server/trunk/web/lib/Sophie.pm	(revision 76)
+++ server/trunk/web/lib/Sophie.pm	(revision 77)
@@ -24,4 +24,5 @@
     Authentication
     Authorization::Roles
+    Prototype
 /;
 
Index: server/trunk/web/lib/Sophie/Controller/Ajax/Forms.pm
===================================================================
--- server/trunk/web/lib/Sophie/Controller/Ajax/Forms.pm	(revision 77)
+++ server/trunk/web/lib/Sophie/Controller/Ajax/Forms.pm	(revision 77)
@@ -0,0 +1,47 @@
+package Sophie::Controller::Ajax::Forms;
+use Moose;
+use namespace::autoclean;
+
+BEGIN {extends 'Catalyst::Controller'; }
+
+=head1 NAME
+
+Sophie::Controller::Ajax::Forms - Catalyst Controller
+
+=head1 DESCRIPTION
+
+Catalyst Controller.
+
+=head1 METHODS
+
+=cut
+
+
+=head2 index
+
+=cut
+
+sub index :Path :Args(0) {
+    my ( $self, $c ) = @_;
+
+    $c->response->body('Matched Sophie::Controller::Ajax::Forms in Ajax::Forms.');
+}
+
+sub distribselect :Path {
+    my ( $self, $c ) = @_;
+}
+
+=head1 AUTHOR
+
+Olivier Thauvin
+
+=head1 LICENSE
+
+This library is free software. You can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+__PACKAGE__->meta->make_immutable;
+
+1;
Index: server/trunk/web/lib/Sophie/Controller/Chat/Cmd.pm
===================================================================
--- server/trunk/web/lib/Sophie/Controller/Chat/Cmd.pm	(revision 76)
+++ server/trunk/web/lib/Sophie/Controller/Chat/Cmd.pm	(revision 77)
@@ -38,5 +38,5 @@
         message => [
             'availlable command:',
-            join(', ', @{ $self->_commands }),
+            join(', ', grep { $_ !~ /^end$/ } @{ $self->_commands }),
         ],
     }
@@ -47,9 +47,14 @@
     my ( $self, $c ) = @_;
     return $c->stash->{xmlrpc} = {
-        message => [ 'Sophie ' . $Sophie::VERSION . ' Chat: ' . q$Rev$ ],
+        message => [ 'Sophie: ' . $Sophie::VERSION . ', Chat ' . q$Rev$ ],
     };
 }
 
+sub end : Private {
+    my ($self, $c ) = @_;
+    my $reqspec = $c->req->arguments->[0];
 
+    $c->forward('/end');
+}
 
 =head1 AUTHOR
Index: server/trunk/web/lib/Sophie/Controller/Explorer.pm
===================================================================
--- server/trunk/web/lib/Sophie/Controller/Explorer.pm	(revision 76)
+++ server/trunk/web/lib/Sophie/Controller/Explorer.pm	(revision 77)
@@ -31,5 +31,10 @@
             arch => $c->req->param('arch') || undef,
         };
+    } else {
+        foreach (qw(distribution release arch)) {
+            $c->req->params->{$_} = $c->session->{explorer}{$_}
+        }
     }
+
     $c->session->{__explorer} = $c->session->{explorer};
 
Index: server/trunk/web/lib/Sophie/Controller/Root.pm
===================================================================
--- server/trunk/web/lib/Sophie/Controller/Root.pm	(revision 76)
+++ server/trunk/web/lib/Sophie/Controller/Root.pm	(revision 77)
@@ -54,5 +54,5 @@
     if ($c->action =~ m/^admin\//) {
         if (!($c->user_exists && $c->check_user_roles($c->user, 'Admin'))) {
-            $c->res->redirect($c->uri_for('/login'));
+            #$c->go('/login/index');
         }
     }
Index: server/trunk/web/root/templates/html/ajax/forms/distribselect.tt
===================================================================
--- server/trunk/web/root/templates/html/ajax/forms/distribselect.tt	(revision 77)
+++ server/trunk/web/root/templates/html/ajax/forms/distribselect.tt	(revision 77)
@@ -0,0 +1,55 @@
+<!-- $Id$ -->
+
+[% FOREACH dist = c.forward('/distrib/list', []) %]
+[% IF loop.first %]
+<select name="distribution">
+<option value="">--</option>
+[% END %]
+<option [% 'selected="selected"' IF c.req.param('distribution') == dist %]>
+[% dist %]
+</option>
+[% IF loop.last %]
+</select>
+[% END %]
+[% END %]
+
+[% IF c.req.param('distribution') %]
+[% FOREACH dist = c.forward('/distrib/list', [
+    { 
+        'distribution' => c.req.param('distribution'),
+    } 
+]) %]
+[% IF loop.first %]
+<select name="release">
+<option value="">--</option>
+[% END %]
+<option [% 'selected="selected"' IF c.req.param('release') == dist %]>
+[% dist %]
+</option>
+[% IF loop.last %]
+</select>
+[% END %]
+[% END %]
+
+
+[% IF c.req.param('release') %]
+[% FOREACH dist = c.forward('/distrib/list', [
+    { 
+        'distribution' => c.req.param('distribution'),
+        'release' => c.req.param('release'),
+    } 
+]) %]
+[% IF loop.first %]
+<select name="arch">
+<option value="">--</option>
+[% END %]
+<option [% 'selected="selected"' IF c.req.param('arch') == dist %]>
+[% dist %]
+</option>
+[% IF loop.last %]
+</select>
+[% END %]
+[% END %]
+[% END %]
+
+[% END %]
Index: server/trunk/web/root/templates/html/explorer/index.html
===================================================================
--- server/trunk/web/root/templates/html/explorer/index.html	(revision 76)
+++ server/trunk/web/root/templates/html/explorer/index.html	(revision 77)
@@ -1,9 +1,17 @@
 
-<!-- <p>
-<a href="[% c.uri_for('/explorer') %]">/</a>
-[% FOREACH p = eachpath %]
-<a href="[% c.uri_for('/explorer', p.path) %]">[% p.dir | html %]</a>
-[% END %]
-</p>-->
+<form action="[% c.uri_for('/', c.req.path) %]" id="explorer_d">
+    <span id="distribselect">
+    [% INCLUDE 'ajax/forms/distribselect.tt' %]
+    </span>
+    <input type="submit" value="Update view...">
+</form>
+[% c.prototype.observe_form('explorer_d',
+    {
+    url => c.uri_for('/ajax/forms/distribselect', { 'ajax' => 1 }),
+    frequency => 1,
+    update => 'distribselect',
+    }
+) %]
+
 
 <div id="exp_dir" style="float: left; border: outset; width: 30%">
Index: server/trunk/web/t/controller_Ajax-Forms.t
===================================================================
--- server/trunk/web/t/controller_Ajax-Forms.t	(revision 77)
+++ server/trunk/web/t/controller_Ajax-Forms.t	(revision 77)
@@ -0,0 +1,9 @@
+use strict;
+use warnings;
+use Test::More;
+
+BEGIN { use_ok 'Catalyst::Test', 'Sophie' }
+BEGIN { use_ok 'Sophie::Controller::Ajax::Forms' }
+
+ok( request('/ajax/forms')->is_success, 'Request should succeed' );
+done_testing();
Index: server/trunk/web/t/controller_Distrib.t
===================================================================
--- server/trunk/web/t/controller_Distrib.t	(revision 76)
+++ server/trunk/web/t/controller_Distrib.t	(revision 77)
@@ -47,3 +47,12 @@
     request("/distrib/$distribution/$release/$arch/media/$media/by-pkgid/$pkgid/changelog")
     ->is_success, "request media/pkgid/changelog");
+
+ok(
+    request("/distrib/$distribution/$release/$arch/rpms/$rpmname")
+    ->is_success, "request rpms/$rpmname");
+ok(
+    request("/distrib/$distribution/$release/$arch/srpms/$rpmname")
+    ->is_success, "request srpms/$rpmname");
+
+
 done_testing();
