App::Mobirc::Web::C::MobileAjax - App::Mobirc::Web::C::MobileAjax documentation


mobirc documentation Contained in the mobirc distribution.

Index


Code Index:

AUTHORS

Top

mayuki-t

Tokuhiro Matsuno


mobirc documentation Contained in the mobirc distribution.

package App::Mobirc::Web::C::MobileAjax;
use Moose;
use App::Mobirc::Web::C;
use App::Mobirc::Util;
use Encode;
use JSON qw/to_json/;
use URI::Escape qw/uri_escape/;

sub dispatch_index {
    my ($class, $req) = @_;

    render_td(
        $req,
        'mobile-ajax/index' => (
            mobile_agent => $req->mobile_agent,
            docroot =>
              ( App::Mobirc->context->{config}->{httpd}->{root} || '/' ),
            channels => [ server->channels ],
        )
    );
}

sub dispatch_channel {
    my ($class, $req) = @_;
    my $channel_name = $req->query_params->{channel} or die 'missing channel name';
    my $channel = server->get_channel($channel_name);

    my $body;
    if (@{$channel->message_log}) {
        my $meth = $req->query_params->{recent} ? 'recent_log' : 'message_log';
        my $json = to_json(
            [
                map {
                    App::Mobirc::Web::View->show( 'irc_message', $_, irc_nick )
                  } reverse $channel->$meth
            ]
        );
        $body = encode($req->mobile_agent->encoding, "Mobirc.callbackChannel($json);" );

        $channel->clear_unread();
    } else {
        $body = '';
    }
    HTTP::Engine::Response->new(
        status       => 200,
        content_type => 'text/plain; charset=UTF-8',
        body         => $body,
    );
}

sub post_dispatch_channel {
    my ( $class, $req, $args) = @_;
    my $channel = $req->params->{'channel'};
    my $message = $req->params->{'msg'};

    context->get_channel($channel)->post_command($message);

    HTTP::Engine::Response->new(
        status       => 200,
        content_type => 'text/plain; charset=UTF-8',
        body         => 'ok',
    );
}

#   sub dispatch_recent {
#       my ($class, $c) = @_;
#       $c->res->body('');
#   }

1;
__END__