Skip to content
Extraits de code Groupes Projets
Valider 2ac328d1 rédigé par Alexandre Morignot's avatar Alexandre Morignot
Parcourir les fichiers

Seperate sites.pm into reusable functions

parent 79d9ca3b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -16,14 +16,12 @@ our $regex;
sub parse {
my ($kernel, $user, $chan, $msg) = @_;
my ($kernel, $user, $chan, $msg, $playlist) = @_;
my ($nick,$mask) = split(/!/,$user);
my $chan_conf = PlayBot::utils::db::chan->new($chan);
my %content;
my $id;
my $dbh = PlayBot::utils::db::main_session();
my $matching_url;
my @matching_tags;
......@@ -49,103 +47,114 @@ sub parse {
# if we get a new content, we must save it
if (%content) {
# we assume it's a new content
my $new = 1;
# insertion de la vidéo dans la bdd
eval {
my $sth = $dbh->prepare('
INSERT INTO playbot (type, url, sender, title, duration)
VALUES (?,?,?,?,?)
');
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
$sth->execute(
$content{'site'},
$content{'url'},
$content{'author'},
$content{'title'},
$content{'duration'}
);
};
if ($@) {
# seems to be already present in database
$new = 0;
my $sth = $dbh->prepare('
UPDATE playbot playbot SET
sender = ?,
title = ?,
duration = ?
WHERE url = ?
');
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
$sth->execute(
$content{'author'},
$content{'title'},
$content{'duration'},
$content{'url'},
);
}
@matching_tags = insert_content($kernel, $nick, $chan, \%content, $msg);
}
# sélection de l'id de la vidéo insérée
my $sth = $dbh->prepare('SELECT id FROM playbot WHERE url = ?');
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
return (
$matching_url,
@matching_tags
);
}
$sth->execute($content{'url'})
or $log->error("Couldn't finish transaction: " . $dbh->errstr);
sub insert_content
{
my ($kernel, $nick, $chan, $content, $msg) = @_;
my $dbh = PlayBot::utils::db::main_session();
my $id;
$id = $sth->fetch->[0];
# we assume it's a new content
my $new = 1;
# insertion du chan
$sth = $dbh->prepare('
INSERT INTO playbot_chan (content, chan, sender_irc)
VALUES (?,?,?)');
# insertion de la vidéo dans la bdd
eval {
my $sth = $dbh->prepare('
INSERT INTO playbot (type, url, sender, title, duration)
VALUES (?,?,?,?,?)
');
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
$sth->execute(
$content->{'site'},
$content->{'url'},
$content->{'author'},
$content->{'title'},
$content->{'duration'}
);
};
if ($@) {
# seems to be already present in database
$new = 0;
my $sth = $dbh->prepare('
UPDATE playbot playbot SET
sender = ?,
title = ?,
duration = ?
WHERE url = ?
');
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
$sth->execute($id, $chan, $nick)
or $log->error("Couldn't finish transaction: " . $dbh->errstr);
$sth->execute(
$content->{'author'},
$content->{'title'},
$content->{'duration'},
$content->{'url'},
);
}
$dbh->commit;
# sélection de l'id de la vidéo insérée
my $sth = $dbh->prepare('SELECT id FROM playbot WHERE url = ?');
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
@matching_tags = PlayBot::commands::parser::tag($msg, $chan);
$sth->execute($content->{'url'})
or $log->error("Couldn't finish transaction: " . $dbh->errstr);
my @tags;
# get tags
$sth = $dbh->prepare("select tag
from playbot_tags
where id = ?
");
$sth->execute($id);
$id = $sth->fetch->[0];
while (my $data = $sth->fetch) {
my $tag = $data->[0];
$tag =~ s/([a-zA-Z0-9_-]+)/#$1/;
push @tags, $tag;
}
$dbh->commit;
# insertion du chan
$sth = $dbh->prepare('
INSERT INTO playbot_chan (content, chan, sender_irc)
VALUES (?,?,?)');
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
if ($new) {
# schedule download
$kernel->post('downloader' => 'ddl' => $id, $content{url});
$sth->execute($id, $chan, $nick)
or $log->error("Couldn't finish transaction: " . $dbh->errstr);
$content{'id'} = '+'.$id;
}
else {
$content{'id'} = $id;
}
$content{'tags'} = \@tags;
delete $content{'url'};
$dbh->commit;
# message sur irc
$irc->yield(privmsg => $chan => PlayBot::utils::print::print(\%content));
my @matching_tags = PlayBot::commands::parser::tag($msg, $chan);
my @tags;
# get tags
$sth = $dbh->prepare("select tag
from playbot_tags
where id = ?
");
$sth->execute($id);
while (my $data = $sth->fetch) {
my $tag = $data->[0];
$tag =~ s/([a-zA-Z0-9_-]+)/#$1/;
push @tags, $tag;
}
$dbh->commit;
return (
$matching_url,
@matching_tags
);
if ($new) {
# schedule download
$kernel->post('downloader' => 'ddl' => $id, $content->{url});
$content->{'id'} = '+'.$id;
}
else {
$content->{'id'} = $id;
}
$content->{'tags'} = \@tags;
delete $content->{'url'};
# message sur irc
$irc->yield(privmsg => $chan => PlayBot::utils::print::print($content));
return @matching_tags;
}
1;
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter