Skip to content
Snippets Groups Projects
Verified Commit 411d4c6a authored by Andrej Ramašeuski's avatar Andrej Ramašeuski
Browse files

Pridan kalendar

parent b084bc2c
No related branches found
No related tags found
No related merge requests found
Pipeline #2625 passed
......@@ -2,7 +2,7 @@ image: docker:19.03.12
variables:
DOCKER_TLS_CERTDIR: "/certs"
IMAGE_VER: 1.7.0
IMAGE_VER: 1.8.0
services:
- docker:19.03.12-dind
......
......@@ -79,6 +79,9 @@ sub startup {
$r->get('/streams/:id')->to('Stream#info');
$r->put('/streams/:id/recording')->to('Stream#recording');
$r->get('/calendar')->to(cb => sub { shift->render('calendar'); });
$r->get('/api/calendar')->to('Calendar#list');
$r->get('/archive')->to(cb => sub { shift->render('archive'); });
$r->get('/api/records')->to('Record#list');
$r->delete('/api/records/:id')->to('Record#delete');
......
package PiTube::Controller::Calendar;
use feature 'signatures';
no warnings qw{ experimental::signatures };
use Mojo::Base 'Mojolicious::Controller';
use Mojo::UserAgent;
sub list {
my $c = shift;
my $ua = Mojo::UserAgent->new;
my $res;
eval { $res = $ua->get( $c->config->{calendar}{iapi} )->result; };
# TODO: OpenAPI error
if ( $@ || ! $res->is_success ) {
$c->app->log->error( $@ ? $@ : $res->message);
$c->render( json => {
total => 0,
rows => [],
});
return;
}
my @calendar;
my @days = sort { $a->{date} cmp $b->{date} } @{ $res->json->{days} };
DAY:
foreach my $day ( @days ) {
my @events = sort { $a->{start} cmp $b->{start} } @{ $day->{events} };
EVENT:
foreach my $event ( @events ) {
# cistka nejhakeho bordelu z iCal. asi radsi v iAPI
$event->{summary} =~ s/\\\W/$1/g;
my $item = {
date => $day->{date_cz},
time => $event->{start} . '-' . $event->{end},
description => $event->{summary},
};
if (
$event->{summary} =~ s/^\s*stream\s+(\w+)\W+//i
||
$event->{summary} =~ s/^\s*(\w+)\W+//i
) {
my $key = lc($1);
my $stream = $c->schema->resultset('Stream')->search({
key => $key
})->first;
if ( $stream ) {
$item->{description} = ucfirst($event->{summary});
$item->{stream_name} = $stream->name;
if ( $stream->is_live ) {
$item->{stream_key} = $stream->key;
}
}
}
push @calendar, $item;
}
}
$c->render( json => {
total => scalar @calendar,
rows => \@calendar,
});
};
1;
......@@ -36,6 +36,10 @@
nginx => {
base_url => $ENV{NGINX_BASE_URL} // 'http://nginx-rtmp',
},
calendar => {
url => $ENV{CALENDAR_URL},
iapi => $ENV{CALENDAR_IAPI},
},
redis => {
server => $ENV{REDIS_SERVER},
},
......
% layout 'default';
% title 'Kalendar vysílání';
<div class="container pt-2 lg:pb-2 ">
<table id="Calendar"
class="table table--bordered"
data-url="/api/calendar">
<thead>
<tr>
<th data-field="date" data-width="14" data-width-unit="em">Datum</th>
<th data-field="time" data-width="4" data-width-unit="em">Čas</th>
<th data-field="stream_name" data-width="12" data-width-unit="em" data-formatter="formatterStream">Stream</th>
<th data-field="description">Popis</th>
</tr>
</thead>
</table>
</div>
<script>
$('#Calendar').bootstrapTable({});
function formatterStream(value, row) {
if ( row.stream_key ) {
return '<a href="/play/'+row.stream_key+'">'+value+'</a>';
}
else {
return value;
}
}
</script>
......@@ -55,6 +55,7 @@
% if ( $c->is_user_authenticated ) {
<li class="navbar-menu__item"><a href="/streams" data-href="/streams" class="navbar-menu__link">Streamy</a></li>
% }
<li class="navbar-menu__item"><a href="/calendar" data-href="/calendar" class="navbar-menu__link">Kalendář</a></li>
%# <li class="navbar-menu__item"><a href="/help" data-href="/help" class="navbar-menu__link">Nápověda</a></li>
<li class="navbar-menu__item">
% if ( $c->is_user_authenticated ) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment