From 8a94628c86daf743c31f4dcfcf6d592cefaaa9d2 Mon Sep 17 00:00:00 2001
From: Alexandre Morignot <erdnaxeli@cervoi.se>
Date: Tue, 9 Feb 2016 22:53:18 +0100
Subject: [PATCH] Set a timeout to a query (6h)

---
 PlayBot/commands/get/query.pm | 12 ++++++++++++
 PlayBot/utils/db/get.pm       | 11 +++++++++--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/PlayBot/commands/get/query.pm b/PlayBot/commands/get/query.pm
index 40b7871..176823e 100644
--- a/PlayBot/commands/get/query.pm
+++ b/PlayBot/commands/get/query.pm
@@ -59,6 +59,14 @@ has 'id' => (
     init_arg    => undef
 );
 
+has 'date' => (
+    is          => 'ro',
+    isa         => 'Int',
+    lazy        => 0,
+    builder     => '_build_date',
+    init_arg    => undef,
+);
+
 
 sub _build_is_global {
     my $self = shift;
@@ -109,6 +117,10 @@ sub _build_id {
     }
 }
 
+sub _build_date {
+    return time;
+}
+
 sub _equals {
     my ($self, $query) = @_;
 
diff --git a/PlayBot/utils/db/get.pm b/PlayBot/utils/db/get.pm
index 73b3568..57af3bd 100644
--- a/PlayBot/utils/db/get.pm
+++ b/PlayBot/utils/db/get.pm
@@ -36,14 +36,21 @@ sub get {
     my $result;
 
     if (defined $self->_queries->{$chan} and $self->_queries->{$chan} ~~ $query) {
-        $result = $self->_get_next($query);
+        if ($self->_queries->{$chan}->date < time - 3600*6) {
+            $self->_clean($chan);
+            $self->_init($query);
+            $self->_queries->{$chan} = $query;
+        }
+
+        $query = $self->_queries->{$chan};
     }
     else {
         $self->_init($query);
         $self->_queries->{$chan} = $query;
-        $result = $self->_get_next($query);
     }
 
+    $result = $self->_get_next($query);
+
     # if id was precised, we (and so the user) know there is no more results
     $self->_clean($chan) if ($query->id >= 0);
 
-- 
GitLab