From a613bde1f49d97a339f8b436337f59c3dd147d60 Mon Sep 17 00:00:00 2001
From: Hyleus
Date: Wed, 27 Dec 2017 23:01:40 +0100
Subject: [PATCH 1/4] Use a since parameter for limiting shout messages
---
app/Http/Controllers/ShoutboxController.php | 12 ++++++++----
routes/web.php | 2 +-
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/app/Http/Controllers/ShoutboxController.php b/app/Http/Controllers/ShoutboxController.php
index 2fe9288250..516fdf9aea 100755
--- a/app/Http/Controllers/ShoutboxController.php
+++ b/app/Http/Controllers/ShoutboxController.php
@@ -103,13 +103,17 @@ public function send()
*
*
*/
- public function fetch()
+ public function fetch($since = null)
{
+ $since = $since ?? 0;
if (Request::ajax()) {
- $getData = Cache::remember('shoutbox_messages', 1440, function () {
+ $timestamp = time();
+ $getData = Cache::remember('shoutbox_messages', 1440, function () use ($since) {
return Shoutbox::orderBy('created_at', 'desc')->take(50)->get();
});
- $getData = $getData->reverse();
+ $getData = $getData->reverse()->filter(function ($value, $key) use ($since) {
+ return strtotime($value->created_at) > $since;
+ });
$data = [];
$flag = false;
foreach ($getData as $messages) {
@@ -156,7 +160,7 @@ public function fetch()
' . ($flag ? $delete : "") . '
';
}
- return Response::json(['success' => true, 'data' => $data]);
+ return Response::json(['success' => true, 'data' => $data, 'timestamp' => $timestamp]);
}
}
diff --git a/routes/web.php b/routes/web.php
index bb5c95b11b..41082cc700 100755
--- a/routes/web.php
+++ b/routes/web.php
@@ -253,7 +253,7 @@
*/
Route::group(['prefix' => 'shoutbox', 'middleware' => 'auth'], function () {
Route::get('/', 'HomeController@home')->name('shoutbox-home');
- Route::get('/messages', 'ShoutboxController@fetch')->name('shoutbox-fetch');
+ Route::get('/messages/{since?}', 'ShoutboxController@fetch')->name('shoutbox-fetch');
Route::post('/send', 'ShoutboxController@send')->name('shoutbox-send');
Route::get('/delete/{id}', 'ShoutboxController@deleteShout')->name('shout-delete');
});
From 29805cd9fa87a55a91e42a1e6c02257eeacf4651 Mon Sep 17 00:00:00 2001
From: Hyleus
Date: Wed, 27 Dec 2017 23:03:51 +0100
Subject: [PATCH 2/4] Fix the shoutbox update function
---
public/js/shout.js | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/public/js/shout.js b/public/js/shout.js
index a9ae55746d..47be524a84 100644
--- a/public/js/shout.js
+++ b/public/js/shout.js
@@ -1,5 +1,6 @@
var scollBox = $('.shoutbox');
var height = 0;
+var since = 0;
$("ul li").each(function() {
height += $(this).outerHeight(true); // to include margins
});
@@ -18,13 +19,22 @@ $.ajaxSetup({
window.setInterval(function() {
$('.chat-messages .list-group');
$.ajax({
- url: "shoutbox/messages",
- type: 'get',
- data: load_data,
- dataType: 'json',
- success: function(data) {
- $('.chat-messages .list-group').html(data.data);
+ url: "shoutbox/messages/" + parseInt(since),
+ type: 'get',
+ data: load_data,
+ dataType: 'json',
+ success: function(data) {
+ if (since === 0) {
+ since = data.timestamp;
+ } else {
+ since = data.timestamp;
+ let messages = $('.chat-messages .list-group');
+ data.data.forEach(function(h) {
+ let message = $(h);
+ messages.append(message);
+ });
}
+ }
});
}, 3000);
@@ -40,7 +50,6 @@ $("#chat-message").keypress(function(evt) {
data: post_data,
dataType: 'json',
success: function(data) {
- $(data.data).hide().appendTo('.chat-messages .list-group').fadeIn();
$('#chat-error').addClass('hidden');
$('#chat-message').removeClass('invalid');
$('#chat-message').val('');
From a12ff3510fab4f8978155ead25ad794fe29316b4 Mon Sep 17 00:00:00 2001
From: Hyleus
Date: Thu, 28 Dec 2017 15:01:54 +0100
Subject: [PATCH 3/4] Use IDs instead of time for getting new messages
---
app/Http/Controllers/ShoutboxController.php | 23 ++++++++++++++-------
public/js/shout.js | 10 ++++-----
2 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/app/Http/Controllers/ShoutboxController.php b/app/Http/Controllers/ShoutboxController.php
index 516fdf9aea..8d38e48212 100755
--- a/app/Http/Controllers/ShoutboxController.php
+++ b/app/Http/Controllers/ShoutboxController.php
@@ -103,17 +103,24 @@ public function send()
*
*
*/
- public function fetch($since = null)
+ public function fetch($after = null)
{
- $since = $since ?? 0;
if (Request::ajax()) {
- $timestamp = time();
- $getData = Cache::remember('shoutbox_messages', 1440, function () use ($since) {
+ $getData = Cache::remember('shoutbox_messages', 1440, function () {
return Shoutbox::orderBy('created_at', 'desc')->take(50)->get();
});
- $getData = $getData->reverse()->filter(function ($value, $key) use ($since) {
- return strtotime($value->created_at) > $since;
- });
+
+ $getData = $getData->reverse();
+ $next_batch = null;
+ if ($getData->count() !== 0) {
+ $next_batch = $getData->last()->id;
+ }
+ if ($after !== null) {
+ $getData = $getData->filter(function ($value, $key) use ($after) {
+ return $value->id > $after;
+ });
+ }
+
$data = [];
$flag = false;
foreach ($getData as $messages) {
@@ -160,7 +167,7 @@ public function fetch($since = null)
' . ($flag ? $delete : "") . '
';
}
- return Response::json(['success' => true, 'data' => $data, 'timestamp' => $timestamp]);
+ return Response::json(['success' => true, 'data' => $data, 'next_batch' => $next_batch]);
}
}
diff --git a/public/js/shout.js b/public/js/shout.js
index 47be524a84..256de91b0b 100644
--- a/public/js/shout.js
+++ b/public/js/shout.js
@@ -1,6 +1,6 @@
var scollBox = $('.shoutbox');
var height = 0;
-var since = 0;
+var next_batch = null;
$("ul li").each(function() {
height += $(this).outerHeight(true); // to include margins
});
@@ -19,15 +19,15 @@ $.ajaxSetup({
window.setInterval(function() {
$('.chat-messages .list-group');
$.ajax({
- url: "shoutbox/messages/" + parseInt(since),
+ url: "shoutbox/messages/" + parseInt(next_batch),
type: 'get',
data: load_data,
dataType: 'json',
success: function(data) {
- if (since === 0) {
- since = data.timestamp;
+ if (next_batch === null) {
+ next_batch = data.next_batch;
} else {
- since = data.timestamp;
+ next_batch = data.next_batch;
let messages = $('.chat-messages .list-group');
data.data.forEach(function(h) {
let message = $(h);
From b68afcb015d652d7053b1cb81299ce0fb9ee62d5 Mon Sep 17 00:00:00 2001
From: Hyleus
Date: Thu, 28 Dec 2017 16:15:30 +0100
Subject: [PATCH 4/4] Rename parameter for messages route
---
routes/web.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/routes/web.php b/routes/web.php
index f5319f6e6c..7166c3f1ea 100755
--- a/routes/web.php
+++ b/routes/web.php
@@ -258,7 +258,7 @@
*/
Route::group(['prefix' => 'shoutbox', 'middleware' => 'auth'], function () {
Route::get('/', 'HomeController@home')->name('shoutbox-home');
- Route::get('/messages/{since?}', 'ShoutboxController@fetch')->name('shoutbox-fetch');
+ Route::get('/messages/{after?}', 'ShoutboxController@fetch')->name('shoutbox-fetch');
Route::post('/send', 'ShoutboxController@send')->name('shoutbox-send');
Route::get('/delete/{id}', 'ShoutboxController@deleteShout')->name('shout-delete');
});