Commit 9e150245 authored by Cerdic's avatar Cerdic

Lancer un rebuild automatique du service worker quand on enregistre la configuration

parent 47d40d92
......@@ -5,6 +5,8 @@
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<INCLURE{fond=formulaires/inc-building-services,ajax} />
<form method="post" action="#ENV{action}">
<div>
#ACTION_FORMULAIRE
......
<?php
/**
* Formulaire de configuration
*
* @plugin Offline
* @copyright 2018
* @author Cedric
* @licence GNU/GPL
* @package SPIP\Offline\Formulaires
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* traiter le formulaire de configuration : traitement par defaut + lancer le cron de reconstruction des services
* @return string
*/
function formulaires_configurer_offline_traiter_dist() {
include_spip('inc/cvt_configurer');
$args = func_get_args();
$res = cvtconf_formulaires_configurer_enregistre('configurer_offline', $args);
// lancer la reconstruction du service
include_spip('offline_fonctions');
offline_start_build_services();
return $res;
}
\ No newline at end of file
[<div class="notice building-in-progress">
[<div style="float: right">(#CHEMIN_IMAGE{searching.gif}|balise_img)</div>]
<:offlineconfig:info_building_in_progress:> \((#REM|offline_building_services_in_progress)\)
</div>
<script>setTimeout(function(){jQuery('.building-in-progress').ajaxReload()}, 2000)</script>
][<p class="success"><:offlineconfig:info_service_version:> (#REM|offline_services_last_version)</p>]
\ No newline at end of file
......@@ -337,6 +337,8 @@ function offline_build_services($force_refresh=false, $time_out=null) {
$dir_config = sous_repertoire(_DIR_ETC, 'offline');
$file_urls_load = $dir_config . "urls_to_cache.txt";
$file_in_progress = $dir_config . "building.tmp";
@touch($file_in_progress);
$file_urls_load_progress = $file_urls_load . '.tmp';
if (!file_exists($file_urls_load_progress)) {
......@@ -359,15 +361,17 @@ function offline_build_services($force_refresh=false, $time_out=null) {
$config = offline_config_js();
if ($config['debug']) {
@unlink($file_in_progress);
return true;
}
// recontruire le cache du serviceworker ( ne fera rien si on est en debug)
$api_offline = charger_fonction('api_offline', 'action');
$api_offline('install.js', true);
$api_offline('service.js', true);
$api_offline('sw.js', true);
$api_offline('uninstall.js', true);
@unlink($file_in_progress);
return true;
}
......@@ -379,11 +383,14 @@ function offline_build_services($force_refresh=false, $time_out=null) {
function offline_background_build_services($force_refresh=false, $iteration=1) {
$time_out = $_SERVER['REQUEST_TIME'] + 20;
spip_log("offline_background_build_services iteration $iteration", 'offline');
if (!offline_build_services($force_refresh, $time_out)) {
spip_log("offline_background_build_services iteration $iteration : pas finie, on relance", 'offline');
// si pas fini il faut relancer
$iteration++;
job_queue_add('offline_background_build_services', "Build Services offline (iter $iteration)", array($force_refresh, $iteration), 'inc/offline', true, time(), -1);
}
spip_log("offline_background_build_services iteration $iteration : finie !", 'offline');
}
/**
......
......@@ -14,6 +14,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'explication_cacher_ressources' => 'Par défaut la home page et l\'URL 404 offline du site ainsi que leurs ressources seront mise en cache lors de l\'activation.
<br />Si certaines ressources spécifiques manquaient ou si vous voulez mettre en cache d\'autres pages par défaut, indiquez les URLs ici',
'info_building_in_progress' => 'Le service worker est en cours de mise à jour…',
'info_service_version' => 'Dernière version du service :',
'label_version_cache_edito' => 'Version du cache',
'label_mode' => 'Activation du mode offline',
'label_mode_auto_all' => 'Activer le mode offline pour tous les visiteurs',
......
......@@ -13,12 +13,52 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function offline_building_services_in_progress() {
$file_in_progress = _DIR_ETC . 'offline/building.tmp';
if (file_exists($file_in_progress)) {
return date('H:i:s',filemtime($file_in_progress));
}
return '';
}
function offline_services_last_version() {
$file_in_progress = _DIR_ETC . 'offline/building.tmp';
if (file_exists($file_in_progress)) {
return '';
}
$fichiers = array(
_DIR_ETC . 'offline/urls_to_cache.txt',
_DIR_VAR . 'offline/install.js',
_DIR_VAR . 'offline/sw.js',
_DIR_VAR . 'offline/uninstall.js',
);
$t = null;
foreach ($fichiers as $f) {
if (file_exists($f) and $modified = filemtime($f)) {
if (is_null($t) or $modified>$t) {
$t = $modified;
}
}
}
if ($t) {
return date('Y-m-d H:i:s',$t);
}
return '';
}
/**
* Construire les services, en tache de fond
* @param bool $force_refresh
* @param int $iteration
*/
function offline_start_build_services($force_refresh=false) {
// on touch pour l'interface dans la page de configuration
$dir_config = sous_repertoire(_DIR_ETC, 'offline');
$file_in_progress = $dir_config . "building.tmp";
@touch($file_in_progress);
job_queue_add('offline_background_build_services', "Build Services offline", array($force_refresh), 'inc/offline', true);
}
......
......@@ -11,7 +11,7 @@
* [x] build du service worker en spip-cli
* [x] prompt pour pesistence du storage quand l'utilisateur demande a stocker du contenu pour plus tard
* [x] mise en cache d'une liste d'URL sur demande de l'utilisateur
* [ ] build du service worker lorsqu'on enregistre la configuration
* [x] build du service worker lorsqu'on enregistre la configuration
* [x] spip-cli de rebuild complet pour appeler en cron
* [ ] permettre de mettre un tag dans une url d'image (?1234&offline-cache) pour forcer la mise en cache même si taille supérieure au seuil
\ No newline at end of file
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