consolidate notifications caching and loading

This commit is contained in:
Mario Vavti 2018-01-24 22:46:36 +01:00
parent add9890754
commit 93259e4e92
3 changed files with 34 additions and 26 deletions

View File

@ -51,7 +51,7 @@ require_once('include/attach.php');
require_once('include/bbcode.php');
define ( 'PLATFORM_NAME', 'hubzilla' );
define ( 'STD_VERSION', '3.1.3' );
define ( 'STD_VERSION', '3.1.4' );
define ( 'ZOT_REVISION', '1.3' );
define ( 'DB_UPDATE_VERSION', 1198 );

View File

@ -68,14 +68,11 @@ $(document).ready(function() {
$('a.notification-link').click(function(e){
var notifyType = $(this).data('type');
if (!$(this).data('clicked') && (sessionStorage.getItem(notifyType + '_notifications_cache') !== null)) {
var cached_data = JSON.parse(sessionStorage.getItem(notifyType + '_notifications_cache'));
loadNotificationItems(notifyType, cached_data);
$(this).data('clicked', true);
}
else {
if(! $('#nav-' + notifyType + '-sub').hasClass('show')) {
loadNotificationItems(notifyType);
}
$(this).data('clicked', true);
});
// Allow folks to stop the ajax page updates with the pause/break key
@ -391,6 +388,15 @@ function notificationsUpdate(cached_data) {
});
}
var notifyType = null;
if($('.notification-content.show').length)
notifyType = $('.notification-content.show').data('type');
if(notifyType !== null) {
loadNotificationItems(notifyType);
}
if(timer) clearTimeout(timer);
timer = setTimeout(updateInit,updateInterval);
}
@ -924,33 +930,35 @@ function justifyPhotosAjax(id) {
$('#' + id).justifiedGallery('norewind').on('jg.complete', function(e){ justifiedGalleryActive = false; });
}
function loadNotificationItems(notifyType, cached_data) {
function loadNotificationItems(notifyType) {
var pingExCmd = 'ping/' + notifyType + ((localUser != 0) ? '?f=&uid=' + localUser : '');
if(cached_data !== undefined) {
var clicked = $('[data-type=\'' + notifyType + '\']').data('clicked');
if((clicked === undefined) && (sessionStorage.getItem(notifyType + '_notifications_cache') !== null)) {
var cached_data = JSON.parse(sessionStorage.getItem(notifyType + '_notifications_cache'));
handleNotificationsItems(notifyType, cached_data);
console.log('updating ' + notifyType + ' notifications from cache...');
}
else {
$.get(pingExCmd, function(data) {
if(data.invalid == 1) {
window.location.href=window.location.href;
}
$("." + notifyType + "-update").html(data.notify.length);
sessionStorage.setItem(notifyType + '_notifications_cache', JSON.stringify(data.notify));
handleNotificationsItems(notifyType, data.notify);
});
var cached_data = [];
}
setTimeout(function() {
if($('#nav-' + notifyType + '-sub').hasClass('show')) {
console.log('updating ' + notifyType + ' notifications...');
setTimeout(loadNotificationItems, updateInterval, notifyType);
console.log('updating ' + notifyType + ' notifications...');
$.get(pingExCmd, function(data) {
if(data.invalid == 1) {
window.location.href=window.location.href;
}
}, 1000);
if(JSON.stringify(cached_data[0]) === JSON.stringify(data.notify[0])) {
console.log(notifyType + ' notifications cache up to date - update deferred');
}
else {
handleNotificationsItems(notifyType, data.notify);
sessionStorage.setItem(notifyType + '_notifications_cache', JSON.stringify(data.notify));
}
});
}
// Since our ajax calls are asynchronous, we will give a few

View File

@ -129,7 +129,7 @@
<i class="fa fa-fw fa-{{$notification.icon}}"></i> {{$notification.label}}
<span class="float-right badge badge-{{$notification.severity}} {{$notification.type}}-update"></span>
</a>
<div id="nav-{{$notification.type}}-sub" class="collapse notification-content">
<div id="nav-{{$notification.type}}-sub" class="collapse notification-content" data-type="{{$notification.type}}">
{{if $notification.viewall}}
<a class="list-group-item text-dark" id="nav-{{$notification.type}}-see-all" href="{{$notification.viewall.url}}">
<i class="fa fa-fw fa-external-link"></i> {{$notification.viewall.label}}