Commit e92d40b4 authored by Vincent Bechu's avatar Vincent Bechu

[erp5_officejs] Bootloader retry and inform on error

parent e01625fd
<!DOCTYPE html>
<html manifest="gadget_officejs_bootloader.appcache">
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
......@@ -21,7 +21,5 @@
<script data-install-configuration="redirect_url" type="text/x-renderjs-configuration">${redirect_url}/</script>
<script data-install-configuration="cache_file" type="text/x-renderjs-configuration">${cache_file}</script>
<script data-install-configuration="app_name" type="text/x-renderjs-configuration">${application_name}</script>
<script data-install-configuration="landing_page" type="text/x-renderjs-configuration">${landing_page}</script>
<script data-install-configuration="sub_app_installer" type="text/x-renderjs-configuration">${sub_gadget_installer}</script>
</body>
</html>
\ No newline at end of file
......@@ -241,7 +241,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>959.27737.62903.2116</string> </value>
<value> <string>961.282.28573.14114</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -259,7 +259,7 @@
</tuple>
<state>
<tuple>
<float>1496242886.73</float>
<float>1501754635.21</float>
<string>UTC</string>
</tuple>
</state>
......
......@@ -236,7 +236,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>960.25484.60987.38638</string> </value>
<value> <string>961.10581.61261.18995</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -254,7 +254,7 @@
</tuple>
<state>
<tuple>
<float>1499245437.8</float>
<float>1501763880.35</float>
<string>UTC</string>
</tuple>
</state>
......
......@@ -5,18 +5,8 @@ var IMAGE = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABUCAYAAAACoiByA
"use strict";
rJS(window)
.ready(function (g) {
g.props = {};
})
.ready(function (g) {
return g.getElement()
.push(function (element) {
g.props.element = element;
});
})
.declareMethod('render', function (options) {
this.props.element.querySelector("center")
.innerHTML =
var inner =
"<header>OfficeJS Installer</header>" +
"<br>" +
"<br>" +
......@@ -27,10 +17,21 @@ var IMAGE = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABUCAYAAAACoiByA
"<br>" +
'<img width="100" height="100" title="" alt="" src="' + IMAGE + '" />' +
"<br>" +
'<div>Installing ' + options.app_name + '</div>' +
'<div> Preparing ' + options.app_name + '</div>' +
"<br> We prepare your application for a 100 % offline mode" +
'<div class="loader"></div>';
return {};
'<div class="loader"></div>',
error_message;
if (options.retry > 0) {
error_message = options.error.message || 'Unknow Error';
inner += "<br>" +
"<div> Last Error: " + error_message + "</div>" +
"<div>Retry n° " + options.retry + "</div>";
}
inner += '<div><a href="' +
options.redirect_url + '">Skip</a></div>';
this.element.querySelector("center")
.innerHTML = inner;
return;
});
}(window, rJS));
\ No newline at end of file
......@@ -236,7 +236,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>956.64509.32061.2201</string> </value>
<value> <string>961.10577.42640.30924</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -254,7 +254,7 @@
</tuple>
<state>
<tuple>
<float>1485770737.14</float>
<float>1501764672.06</float>
<string>UTC</string>
</tuple>
</state>
......
......@@ -5,8 +5,6 @@ var global = self, window = self;
(function (self, fetch, Request, Response) {
"use strict";
self.IDBTransaction = self.IDBTransaction || self.webkitIDBTransaction || self.msIDBTransaction || {READ_WRITE: "readwrite"};
self.IDBKeyRange = self.IDBKeyRange || self.webkitIDBKeyRange || self.msIDBKeyRange;
self.DOMParser = {};
self.sessionStorage = {};
self.localStorage = {};
......@@ -41,13 +39,17 @@ var global = self, window = self;
if (relative_url === "") {
relative_url = "/";
}
if (relative_url === 'no-cache') {
event.respondWith(new Response(self.cache_list));
return;
}
event.respondWith(
new self.RSVP.Queue()
.push(function () {
if (self.storage.get === undefined) {
self.storage = createStorage(self.registration.scope);
self.storage = createStorage("ojs_source_code");
}
return self.storage.getAttachment("/", relative_url)
return self.storage.getAttachment(self.registration.scope, relative_url)
.push(function (blob) {
return new Response(blob, {
'headers': {
......@@ -58,12 +60,11 @@ var global = self, window = self;
})
.push(undefined, function (error) {
if (error instanceof self.jIO.util.jIOError) {
self.console.log(
"Relative_Url: ",
relative_url,
"\nCause: ",
error.message
);
if (relative_url.indexOf('http') === -1) {
if (self.cache_list.indexOf(relative_url) === -1) {
self.cache_list.push(relative_url);
}
}
return fetch(event.request);
}
return new Response(error, {"statusText": error.message, "status": 500});
......
......@@ -227,7 +227,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>960.4199.25759.2730</string> </value>
<value> <string>961.10426.22931.29952</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -245,7 +245,7 @@
</tuple>
<state>
<tuple>
<float>1497613210.46</float>
<float>1501754543.53</float>
<string>UTC</string>
</tuple>
</state>
......
/*jslint indent:2, maxlen: 80, nomen: true */
/*global jIO, RSVP, window, console, Blob */
(function (window, jIO, RSVP, console, Blob) {
/*global jIO, RSVP, window, Rusha, Blob, URL */
(function (window, jIO, RSVP, Rusha, Blob, URL) {
"use strict";
var rusha = new Rusha();
function AppCacheStorage(spec) {
this._manifest = spec.manifest;
this._gadget = spec.gadget;
this._take_installer = spec.take_installer || false;
this._origin_url = spec.origin_url !== undefined ? spec.origin_url :
(window.location.origin + window.location.pathname +
(window.location.pathname.endsWith('/') ? '' : '/') +
((spec.version !== undefined) ?
(spec.version + (spec.version.endsWith('/') ? '' : '/')) : ""));
this._prefix = spec.prefix || "";
this._relative_url_list = ["/", this._prefix + spec.manifest];
if (this._take_installer) {
this._relative_url_list = [
this._prefix || "/",
this._prefix + "development/" + spec.manifest,
this._prefix + "development/",
this._prefix + "gadget_officejs_bootloader.js",
this._prefix + "gadget_officejs_bootloader.appcache",
this._prefix + "gadget_officejs_bootloader_presentation.html",
this._prefix + "gadget_officejs_bootloader_presentation.js",
this._prefix + "gadget_officejs_bootloader_presentation.css",
this._prefix + "gadget_officejs_bootloader_serviceworker.js",
this._prefix + "gadget_erp5_nojqm.css",
this._prefix + "jio_appcachestorage.js"
];
}
this._origin_url = spec.origin_url !== undefined ?
spec.origin_url : new URL(window.location);
this._version = spec.version || "";
this._gadget_list = [];
this._documents = {};
// Harcoded here, find a better way.
this._relative_url_list = [
"/",
"gadget_officejs_bootloader.js",
"gadget_officejs_bootloader_presentation.html",
"gadget_officejs_bootloader_presentation.js",
"gadget_officejs_bootloader_presentation.css",
"gadget_officejs_bootloader_serviceworker.js",
"gadget_erp5_nojqm.css",
"jio_appcachestorage.js"
];
}
AppCacheStorage.prototype.get = function (id) {
return {};
if (this._documents.hasOwnProperty(id)) {
return this._documents[id];
}
throw new jIO.util.jIOError('can not find document : ' + id, 404);
};
AppCacheStorage.prototype.hasCapacity = function (name) {
return (name === "list");
AppCacheStorage.prototype.hasCapacity = function () {
return true;
};
AppCacheStorage.prototype.getAttachment = function (doc_id, attachment_id) {
var storage = this, url = attachment_id;
AppCacheStorage.prototype.getAttachment = function (origin_url,
relative_url) {
var storage = this;
if (storage._gadget_list.indexOf(relative_url) >= 0) {
return window.Bootloader.declareAndInstall(relative_url)
.push(function () {
return new Blob([]);
});
}
return new RSVP.Queue()
.push(function () {
return jIO.util.ajax({
type: "GET",
url: ((url.startsWith("http") || url.startsWith("//")) ?
url : storage._origin_url) + url,
dataType: "blob"
.push(function () {
return jIO.util.ajax({
type: "GET",
url: (relative_url.startsWith("http") ||
relative_url.startsWith("//")) ?
relative_url : origin_url + relative_url,
dataType: "blob"
});
})
.push(function (result) {
return result.target.response;
});
})
.push(function (result) {
return result.target.response;
});
};
AppCacheStorage.prototype.allAttachments = function (url) {
AppCacheStorage.prototype.allAttachments = function () {
var result = {}, i, len = this._relative_url_list.length;
for (i = 0; i < len; i += 1) {
result[this._relative_url_list[i]] = {};
}
for (i = 0; i < this._gadget_list.length; i += 1) {
result[this._gadget_list[i]] = {};
}
return result;
};
AppCacheStorage.prototype.buildQuery = function (options) {
return [{id: "/", doc: {}, value: {}}];
AppCacheStorage.prototype.buildQuery = function () {
var result = [], id;
for (id in this._documents) {
if (this._documents.hasOwnProperty(id)) {
result.push({
'id': id,
'value': this._documents[id],
'doc': this._documents[id]
});
}
}
return result;
};
AppCacheStorage.prototype.repair = function () {
var storage = this,
prefix = storage._prefix +
(storage._take_installer ? "development/" : "");
var storage = this;
return new RSVP.Queue()
.push(function () {
return jIO.util.ajax({
type: "GET",
url: storage._origin_url + storage._prefix + storage._manifest
url: storage._origin_url + storage._version + storage._manifest
});
})
.push(function (response) {
var text = response.target.responseText,
relative_url_list = text.split('\r\n'),
relative_url_list = text.split('\n'),
i,
take = false;
if (relative_url_list.length === 1) {
relative_url_list = text.split('\n');
}
if (relative_url_list.length === 1) {
relative_url_list = text.split('\r');
}
take = false,
hash = rusha.digestFromString(text);
storage._documents[storage._origin_url] = {'hash': hash};
storage._relative_url_list.push(storage._version);
storage._relative_url_list.push(storage._version + storage._manifest);
for (i = 0; i < relative_url_list.length; i += 1) {
if (relative_url_list[i].indexOf("NETWORK:") >= 0) {
take = false;
}
if (take &&
relative_url_list[i] !== "" &&
take = 3;
} else if (relative_url_list[i].indexOf('GADGET:') >= 0) {
take = 2;
} else if (relative_url_list[i] !== "" &&
relative_url_list[i].charAt(0) !== '#' &&
relative_url_list[i].charAt(0) !== ' ') {
relative_url_list[i].replace("\r", "");
storage._relative_url_list.push(prefix + relative_url_list[i]);
if (take === 1) {
storage._relative_url_list.push(
storage._version + relative_url_list[i]
);
} else if (take === 2) {
storage._gadget_list.push(relative_url_list[i]);
}
}
if (relative_url_list[i].indexOf("CACHE:") >= 0) {
take = true;
take = 1;
}
}
})
.push(undefined, function (error) {
if (!error.message) {
error.message = "Can't get manifest";
}
throw error;
});
};
jIO.addStorage('appcache', AppCacheStorage);
}(window, jIO, RSVP, console, Blob));
\ No newline at end of file
}(window, jIO, RSVP, Rusha, Blob, URL));
......@@ -239,7 +239,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>960.14254.57744.3293</string> </value>
<value> <string>961.10590.54524.11827</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -257,7 +257,7 @@
</tuple>
<state>
<tuple>
<float>1498139825.46</float>
<float>1501764524.91</float>
<string>UTC</string>
</tuple>
</state>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment