diff --git a/www/common/cryptpad-common.js b/www/common/cryptpad-common.js index 8874871d8..82ea2991f 100644 --- a/www/common/cryptpad-common.js +++ b/www/common/cryptpad-common.js @@ -992,6 +992,8 @@ define([ pad.onJoinEvent = Util.mkEvent(); pad.onLeaveEvent = Util.mkEvent(); pad.onDisconnectEvent = Util.mkEvent(); + pad.onCacheEvent = Util.mkEvent(); + pad.onCacheReadyEvent = Util.mkEvent(); pad.onConnectEvent = Util.mkEvent(); pad.onErrorEvent = Util.mkEvent(); pad.onMetadataEvent = Util.mkEvent(); @@ -1957,6 +1959,8 @@ define([ PAD_JOIN: common.padRpc.onJoinEvent.fire, PAD_LEAVE: common.padRpc.onLeaveEvent.fire, PAD_DISCONNECT: common.padRpc.onDisconnectEvent.fire, + PAD_CACHE: common.padRpc.onCacheEvent.fire, + PAD_CACHE_READY: common.padRpc.onCacheReadyEvent.fire, PAD_CONNECT: common.padRpc.onConnectEvent.fire, PAD_ERROR: common.padRpc.onErrorEvent.fire, PAD_METADATA: common.padRpc.onMetadataEvent.fire, diff --git a/www/common/outer/async-store.js b/www/common/outer/async-store.js index a39734dc4..599d1d3b3 100644 --- a/www/common/outer/async-store.js +++ b/www/common/outer/async-store.js @@ -1592,6 +1592,12 @@ define([ }; var conf = { Cache: Cache, + onCacheStart: function () { + postMessage(clientId, "PAD_CACHE"); + }, + onCacheReady: function (info) { + postMessage(clientId, "PAD_CACHE_READY"); + }, onReady: function (pad) { var padData = pad.metadata || {}; channel.data = padData; diff --git a/www/common/sframe-app-framework.js b/www/common/sframe-app-framework.js index 3097cf6d2..81ab18d45 100644 --- a/www/common/sframe-app-framework.js +++ b/www/common/sframe-app-framework.js @@ -467,7 +467,44 @@ define([ }); }; + var onCacheReady = function () { + stateChange(STATE.DISCONNECTED); + toolbar.offline(true); + var newContentStr = cpNfInner.chainpad.getUserDoc(); + if (toolbar) { + // Check if we have a new chainpad instance + toolbar.resetChainpad(cpNfInner.chainpad); + } +console.log(newContentStr); + + // Invalid cache? abort + // XXX tell outer/worker to invalidate cache + if (newContentStr === '') { return; } + + var privateDat = cpNfInner.metadataMgr.getPrivateData(); + var type = privateDat.app; + + var newContent = JSON.parse(newContentStr); + var metadata = extractMetadata(newContent); +console.log('OKOK'); + + // Make sure we're using the correct app for this cache + if (metadata && typeof(metadata.type) !== 'undefined' && metadata.type !== type) { + console.error('return'); + return; + } + + cpNfInner.metadataMgr.updateMetadata(metadata); + newContent = normalize(newContent); + if (!unsyncMode) { + contentUpdate(newContent, function () { return function () {}}); + } + + UI.removeLoadingScreen(emitResize); + }; var onReady = function () { + toolbar.offline(false); + console.error('READY'); var newContentStr = cpNfInner.chainpad.getUserDoc(); if (state === STATE.DELETED) { return; } @@ -732,6 +769,7 @@ define([ onRemote: onRemote, onLocal: onLocal, onInit: onInit, + onCacheReady: onCacheReady, onReady: function () { evStart.reg(onReady); }, onConnectionChange: onConnectionChange, onError: onError, diff --git a/www/common/sframe-chainpad-netflux-inner.js b/www/common/sframe-chainpad-netflux-inner.js index abb1cebdf..57689b7ea 100644 --- a/www/common/sframe-chainpad-netflux-inner.js +++ b/www/common/sframe-chainpad-netflux-inner.js @@ -34,6 +34,7 @@ define([ var onLocal = config.onLocal || function () { }; var setMyID = config.setMyID || function () { }; var onReady = config.onReady || function () { }; + var onCacheReady = config.onCacheReady || function () { }; var onError = config.onError || function () { }; var userName = config.userName; var initialState = config.initialState; @@ -93,6 +94,14 @@ define([ evInfiniteSpinner.fire(); }, 2000); + sframeChan.on('EV_RT_CACHE', function (isPermanent) { + // XXX + }); + sframeChan.on('EV_RT_CACHE_READY', function (isPermanent) { + // XXX + onCacheReady({realtime: chainpad}); + console.error('PEWPEWPEW'); + }); sframeChan.on('EV_RT_DISCONNECT', function (isPermanent) { isReady = false; chainpad.abort(); @@ -134,6 +143,7 @@ define([ evConnected.fire(); }); sframeChan.on('Q_RT_MESSAGE', function (content, cb) { + console.log(content); if (isReady) { onLocal(true); // should be onBeforeMessage } diff --git a/www/common/sframe-chainpad-netflux-outer.js b/www/common/sframe-chainpad-netflux-outer.js index 72cfdef9a..056b9cd28 100644 --- a/www/common/sframe-chainpad-netflux-outer.js +++ b/www/common/sframe-chainpad-netflux-outer.js @@ -89,6 +89,7 @@ define([], function () { validateKey = msgObj.validateKey; } var message = msgIn(msgObj.user, msgObj.msg); + console.log(message); if (!message) { return; } lastTime = msgObj.time; @@ -114,16 +115,26 @@ define([], function () { if (firstConnection) { firstConnection = false; // Add the handlers to the WebChannel - padRpc.onMessageEvent.reg(function (msg) { onMessage(msg); }); padRpc.onJoinEvent.reg(function (m) { sframeChan.event('EV_RT_JOIN', m); }); padRpc.onLeaveEvent.reg(function (m) { sframeChan.event('EV_RT_LEAVE', m); }); } }; + padRpc.onMessageEvent.reg(function (msg) { onMessage(msg); }); + padRpc.onDisconnectEvent.reg(function (permanent) { sframeChan.event('EV_RT_DISCONNECT', permanent); }); + padRpc.onCacheReadyEvent.reg(function () { + console.log('ONCACHEREADY'); + sframeChan.event('EV_RT_CACHE_READY'); + }); + + padRpc.onCacheEvent.reg(function () { + sframeChan.event('EV_RT_CACHE'); + }); + padRpc.onConnectEvent.reg(function (data) { onOpen(data); }); diff --git a/www/common/toolbar.js b/www/common/toolbar.js index 78e4e91f3..0927cde21 100644 --- a/www/common/toolbar.js +++ b/www/common/toolbar.js @@ -1365,6 +1365,18 @@ MessengerUI, Messages) { } }; + toolbar.offline = function (bool) { + toolbar.connected = !bool; // Can't edit title + toolbar.history = bool; // Stop "Initializing" state + toolbar.isErrorState = bool; // Stop kickSpinner + toolbar.title.toggleClass('cp-toolbar-unsync', bool); // "read only" next to the title + if (bool && toolbar.spinner) { + toolbar.spinner.text("OFFLINE"); // XXX + } else { + kickSpinner(toolbar, config); + } + }; + // On log out, remove permanently the realtime elements of the toolbar Common.onLogout(function () { failed();