зеркало из https://github.com/mozilla/pjs.git
Try to handle the disappearing connection problem for the common case.
This commit is contained in:
Родитель
c80fddcee9
Коммит
eb807f13af
|
@ -351,19 +351,37 @@ sub getQuote {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub randomQuote {
|
sub randomQuoteInternal {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($event) = @_;
|
my ($event) = @_;
|
||||||
$self->sanitiseTableName();
|
|
||||||
my($id, $quote, $author, $note);
|
my($id, $quote, $author, $note);
|
||||||
return unless $self->attempt($event, sub { ($id, $quote, $author, $note) = $self->{dbhandle}->selectrow_array("SELECT id, quote, author, note, shown/age AS freq FROM $self->{tableName} ORDER BY freq, RAND() LIMIT 1", undef); }, 'read from the database for some reason', 'read a random quote from');
|
return 0 unless $self->attempt($event, sub { ($id, $quote, $author, $note) = $self->{dbhandle}->selectrow_array("SELECT id, quote, author, note, shown/age AS freq FROM $self->{tableName} ORDER BY freq, RAND() LIMIT 1", undef); }, 'read from the database for some reason', 'read a random quote from');
|
||||||
if (defined $quote) {
|
if (defined $quote) {
|
||||||
$self->markRead($id);
|
$self->markRead($id);
|
||||||
$note = defined $note ? " ($note)" : '';
|
$note = defined $note ? " ($note)" : '';
|
||||||
$self->say($event, "Quote $id: $quote - $author$note");
|
$self->say($event, "Quote $id: $quote - $author$note");
|
||||||
} else {
|
return 0;
|
||||||
$self->say($event, "$event->{from}: There are no quotes in the database yet.");
|
|
||||||
}
|
}
|
||||||
|
return 1; # try again
|
||||||
|
}
|
||||||
|
|
||||||
|
sub randomQuote {
|
||||||
|
my $self = shift;
|
||||||
|
my ($event) = @_;
|
||||||
|
$self->sanitiseTableName();
|
||||||
|
if ($self->randomQuoteInternal($event)) {
|
||||||
|
# no quotes?
|
||||||
|
# weird... let's see if reconnecting helps
|
||||||
|
if ($self->dbconnect()) {
|
||||||
|
if ($self->randomQuoteInternal($event)) {
|
||||||
|
# there must really be no quotes
|
||||||
|
$self->say($event, "$event->{from}: There are no quotes in the database yet.");
|
||||||
|
} # else ok
|
||||||
|
} else {
|
||||||
|
$self->say($event, "$event->{from}: I'm sorry, I can't reach the database right now.");
|
||||||
|
$self->tellAdmin($event, "While trying to get a random quote from the database, I found no quotes, so I tried reconnecting to the database, but it said '$self->{dberror}'!");
|
||||||
|
}
|
||||||
|
} # else ok
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getQuoteById {
|
sub getQuoteById {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче