Commit 8fb9533a authored by Eric Seigne's avatar Eric Seigne
Browse files

version ios 1.6.7

parent d96c3f3c
<?xml version='1.0' encoding='utf-8'?>
<widget id="fr.caprel.doliscan" version="1.6.6" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget id="fr.caprel.doliscan" version="1.6.7" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>doliscan</name>
<description>DoliSCAN is a tiny app for french people looking for a free and self hosting "notes de frais/expenses report" solution.</description>
<author email="eric.seigne@cap-rel.fr" href="https://cap-rel.fr">Eric Seigne</author>
......@@ -146,5 +146,5 @@
</feature>
</platform>
<plugin name="cordova-plugin-calendar" />
<preference name="OverrideUserAgent" value="Mozilla/5.0 OpenNDF/1.6.6 Android" />
<preference name="OverrideUserAgent" value="Mozilla/5.0 OpenNDF/1.6.7 Android" />
</widget>
......@@ -6,5 +6,5 @@ echo 'adb logcat | grep NDFDEBUG | grep chromium | sed s/".*NDFDEBUG : "/""/ '
echo ""
echo ""
echo "pour regarder le contenu de la base de données :"
echo "sqlite3 /data/data/fr.caprel.doliscan/databases/doliscan.db"
# echo "pour regarder le contenu de la base de données :"
# echo "sqlite3 /data/data/fr.caprel.doliscan/databases/doliscan.db"
......@@ -42,26 +42,11 @@
<ons-navigator swipeable animation="fade" id="myNavigator" page="loading.html"></ons-navigator>
</ons-splitter-content>
</ons-splitter>
<template id="loading.html">
<ons-page id="loadingPage">
<div style="text-align: right;">
<h1 style="font-family: Penna,sans-serif; font-size: 600%; padding: 0; margin-top: 100px;">DoliSCAN</h1>
</div>
<div style="text-align: center">
<p>
<ons-icon icon="md-spinner" size="45px" spin></ons-icon>
</p>
<p id="loadingmessage"> Chargement en cours ... </p>
<p><i id="loadingStep"></i></p>
</div>
</ons-page>
</template>
</body>
<script type="text/javascript">
function switchLoginOrMenu() {
myDebug("switchLoginOrMenu [" + switchLoginOrMenuNb + "] ... do nothing, wait for ohers ons.ready ...");
myDebug("switchLoginOrMenu ...");
$('#loadingPage').fadeOut(1000);
//On affiche le message de nouvelle version si l'utilisateur ne l'a pas déjà eu
......@@ -70,29 +55,33 @@
showChangelog();
}
else {
setTimeout(function () {
realLoginOrMenu();
}, 1150);
switchLoginOrMenuNb++;
myDebug(" switchLoginOrMenu timeout dans 1150ms");
let bing = setTimeout(realLoginOrMenu(), 1150);
}
}
function realLoginOrMenu() {
myDebug("realLoginOrMenu ...");
if (compareVersions(localGetData("official_app_version"), globalAppVersion) > 0) {
myDebug("index.html : " + localGetData("official_app_message"));
ons.notification.alert(localGetData("official_app_message"), { title: "Nouvelle version" });
}
// if (compareVersions(localGetData("official_app_version"), globalAppVersion) > 0) {
// myDebug(" compare version, nouvelle version dispo on affiche le message : " + localGetData("official_app_message"));
// ons.notification.alert(localGetData("official_app_message"), { title: "Nouvelle version" });
// }
if (globalMyNavigator === undefined) globalMyNavigator = document.getElementById('myNavigator');
if (globalMyNavigator === undefined) {
myDebug(" globalMyNavigator undef, on le recupere");
globalMyNavigator = document.getElementById('myNavigator');
}
if (globalMyNavigator !== undefined) {
// $('#loadingStep').text('Etape 9a');
$('#loadingStep').text('Etape 9a');
myDebug(" realLoginOrMenu resetToPage login.html");
// myDebug(" realLoginOrMenu globalMyNavigator stack : " + JSON.stringify(globalMyNavigator.pages));
globalMyNavigator.resetToPage('login.html', { data: { title: 'avenir', name: "login.html" } });
}
// else {
// $('#loadingStep').text('Etape 9b');
// }
else {
myDebug(" realLoginOrMenu pas de navigator :-(");
$('#loadingStep').text('Etape 9b');
}
}
var showChangelog = function () {
......@@ -107,6 +96,22 @@
ons.ready(function () {
myDebug("ONS ready in index.html");
myDebug(' Device Name: ' + device.name);
myDebug(' Device Cordova: ' + device.cordova);
myDebug(' Device Platform: ' + device.platform);
myDebug(' Device Model: ' + device.model);
myDebug(' Device UUID: ' + device.uuid);
myDebug(' Device Version: ' + device.version);
//sur iPad on dégage l'utilisation de la base de données pour le moment
if (device.model.startsWith("iPad")) {
myDebug(" on est sur iPad ... -> zero bdd !!!");
databaseEngine = "none";
databaseName = "";
databaseVersion = "";
}
screen.orientation.lock('portrait');
//A reflechir si on veut mettre un logo partenaire sur le login ... il faudra trouver une idée !
......@@ -178,20 +183,21 @@
//On nettoie l'historique au lancement de l'appli
cleanHistorique();
if (globalIndexDB == null) {
if (globalIndexDB == null && databaseEngine == 'IndexDB') {
$('#loadingStep').text('Etape 3a');
// myDebug("SQL : On essaye d'ouvrir la base de données ...");
var openRequest = window.indexedDB.open(databaseName, databaseVersion);
openRequest.onerror = function (event) {
myDebug(" global db openRequest.onerror " + event.error);
myDebug(openRequest.errorCode);
};
openRequest.onsuccess = function (event) {
// Database is open and initialized - we're good to proceed.
globalIndexDB = openRequest.result;
myDebug("global db type indexDB open ok");
myDebug(" global db type indexDB open ok");
$('#loadingStep').text('Etape 4a');
var transaction = globalIndexDB.transaction(["config"], "readwrite");
var transaction = globalIndexDB.transaction(['config'], "readwrite");
transaction.oncomplete = function (event) {
myDebug("global db transaction.oncomplete ok");
}
......@@ -201,7 +207,7 @@
};
var objectStore = transaction.objectStore("config");
var objectStore = transaction.objectStore('config');
objectStore.openCursor().onsuccess = function (event) {
$('#loadingStep').text('Etape 5a');
var cursor = event.target.result;
......@@ -238,7 +244,7 @@
openRequest.onupgradeneeded = function (event) {
$('#loadingStep').text('Etape 4b');
myDebug("global db upgrade or create");
myDebug(" global db upgrade or create");
// This is either a newly created database, or a new version number
// has been submitted to the open() call.
var db = event.target.result;
......@@ -294,10 +300,10 @@
};
}
else {
$('#loadingStep').text('Etape 3b');
$('#loadingStep').text('Etape 3b ** ');
switchLoginOrMenu();
}
myDebug("index.html : " + localGetData("official_app_message"));
// myDebug("index.html : " + localGetData("official_app_message"));
});
</script>
......
This diff is collapsed.
......@@ -2,7 +2,7 @@
* (c) Éric Seigne <eric.seigne@cap-rel.fr> - 2019 - GNU AGPLv3
*/
var globalDevMode = true; // on est en mode dev ou prod ? par defaut oui pour la page d'index
var globalDevMode = false; // on est en mode dev ou prod ? par defaut oui pour la page d'index
var globalMyCamera; // l'appareil photo
var globalpictureSource; // picture source
var globaldestinationType; // sets the format of returned value
......@@ -13,8 +13,7 @@ var globalDB = null; // Le connecteur vers la base de donnée
var globalIndexDB = null; // Le connecteur vers la base de données IndexDB
var databaseEngine = 'IndexDB';
var databaseName = 'doliscanDB';
var databaseVersion = 1;
var switchLoginOrMenuNb = 0;
var databaseVersion = 4;
var globalTenMinuts = 60 * 10 * 1000; // 10 minutes pour l'implementation du keepalive (avant de basculer en full API je pense)
var globalCompatibleWithAPIVersion = 4; // On incrémentera la version de l'API compatible quand on modifie des choses importantes sur le serveur
var globalDoliScanDomain = ""; // Pour basculer sur un serveur auto-hebergé
......@@ -23,7 +22,7 @@ var globalSyncInProgress = false; // Pour savoir si on est en phase de syn
var globalPictureFileName = ""; // Le nom du fichier sans résolution (depuis ios wkbidule app:// ... on garde dans cette variable le path basique pour resumable & sync)
// **********************************************************************
//Ne pas toucher, mis à jour automatiquement à partir du config.xml
var globalAppVersion = "1.6.6"; // mis à jour automatiquement à partir du fichier config.xml lors du build android
var globalAppVersion = "1.6.7"; // mis à jour automatiquement à partir du fichier config.xml lors du build android
// **********************************************************************
var dataLDF = "";
var dataIK = "";
......
......@@ -106,7 +106,7 @@ function feedToSync(formField) {
let htmlFTS = "";
// myDebug("feedToSync pour " + formField);
$(formField).empty();
if (globalIndexDB !== null) {
if (globalIndexDB !== null && databaseEngine == 'IndexDB') {
// myDebug("ldfsToSync : select * from ldfsToSync");
let objectStore = globalIndexDB.transaction("ldfsToSync").objectStore("ldfsToSync");
......@@ -149,8 +149,6 @@ function feedToSync(formField) {
objectStore.openCursor().onerror = function (event) {
myDebug(" feedToSync Error " + error.message);
}
myDebug(" feedToSync : read OK, append HTML done");
}
......
......@@ -205,7 +205,8 @@ function endSendForm(formdata, filename) {
//On sauvegarde dans la base pour pouvoir faire une synchro plus tard si jamais ca a foiré
//Bien entendu on ne fait pas ça si on est en cours de synchronisation :)
if (globalIndexDB !== null && globalSyncInProgress == false) {
if (globalIndexDB !== null && databaseEngine == 'IndexDB' && globalSyncInProgress == false) {
let url = localGetData("api_server") + "/api/LdeFrais";
localStoreLDFtoSync(url, formDataInJSON, filename).then((value) => {
globalLastInsertId = value;
......@@ -485,7 +486,7 @@ function newResumable(ajaxURL, result, filename) {
//Si on a pas de nom de fichier c'est qu'on est peut-être sur des IK donc on short-return
if (typeof filename === undefined || filename == "") {
if (globalIndexDB !== null) {
if (globalIndexDB !== null && databaseEngine == 'IndexDB') {
myDebug("globalLastInsertId : " + globalLastInsertId);
if (globalLastInsertId > 0) {
localDeleteLDFtoSync(globalLastInsertId);
......@@ -543,7 +544,7 @@ function newResumable(ajaxURL, result, filename) {
myDebug("resumable : fileSuccess ");
globalProgressBar.finish();
if (globalIndexDB !== null) {
if (globalIndexDB !== null && databaseEngine == 'IndexDB') {
myDebug("globalLastInsertId : " + globalLastInsertId);
if (globalLastInsertId > 0) {
localDeleteLDFtoSync(globalLastInsertId);
......
......@@ -14,15 +14,15 @@ ons.ready(function () {
var path = window.location.pathname;
var page = path.split("/").pop();
if (page != "index.html") {
if (globalIndexDB == null) {
if (globalIndexDB == null && databaseEngine == 'IndexDB') {
var openRequest = window.indexedDB.open(databaseName, databaseVersion);
openRequest.onerror = function (event) {
myDebug(openRequest.errorCode);
myDebug("global db type indexDB open err (ndf-head)" + openRequest.errorCode);
};
openRequest.onsuccess = function (event) {
// Database is open and initialized - we're good to proceed.
globalIndexDB = openRequest.result;
myDebug("global db type indexDB open ok");
myDebug("global db type indexDB open ok (ndf-head)");
}
}
}
......
......@@ -130,8 +130,9 @@ function computeHTAmount(taux, destination) {
* 1 si a > b
*/
function compareVersions(a, b) {
// myDebug(" On compare " + a + " et " + b + ";")
myDebug("compare version " + a + " et " + b + ";")
if (a == "" || a === undefined || a == null || b === undefined || b == null || b == "") {
myDebug(" retour -2");
return -2;
}
var pa = a.split('.');
......@@ -139,11 +140,24 @@ function compareVersions(a, b) {
for (var i = 0; i < 3; i++) {
var na = Number(pa[i]);
var nb = Number(pb[i]);
if (na > nb) return 1;
if (nb > na) return -1;
if (!isNaN(na) && isNaN(nb)) return 1;
if (isNaN(na) && !isNaN(nb)) return -1;
if (na > nb) {
myDebug(" retour 1");
return 1;
}
if (nb > na) {
myDebug(" retour -1");
return -1;
}
if (!isNaN(na) && isNaN(nb)) {
myDebug(" retour 1");
return 1;
}
if (isNaN(na) && !isNaN(nb)) {
myDebug(" retour -1");
return -1;
}
}
myDebug(" retour 0");
return 0;
};
......
......@@ -54,7 +54,11 @@ function localStoreData(lakey, lavalue) {
return;
}
if (globalIndexDB == null) {
//shortcut
if (databaseEngine != 'IndexDB') {
return;
}
if (globalIndexDB == null && databaseEngine == 'IndexDB') {
// myDebug("SQL : On essaye d'ouvrir la base de données ...");
// if (databaseEngine == 'IndexDB') {
let openRequest = window.indexedDB.open(databaseName, databaseVersion);
......@@ -66,68 +70,59 @@ function localStoreData(lakey, lavalue) {
// Database is open and initialized - we're good to proceed.
globalIndexDB = openRequest.result;
myDebug("global db type indexDB re-open ok");
localStoreDataNext(lakey, lavalue);
};
// }
// else {
// if (typeof window.sqlitePlugin != 'undefined') {
// globalDB = window.sqlitePlugin.openDatabase({
// name: 'doliscan.db',
// location: 'default',
// androidDatabaseProvider: 'system'
// }, function () {
// myDebug("SQL : re-ouverture OK");
// });
// }
// }
}
else {
localStoreDataNext(lakey, lavalue);
}
}
if (globalIndexDB !== null) {
function localStoreDataNext(lakey, lavalue) {
if (globalIndexDB !== null && databaseEngine == 'IndexDB') {
// if (databaseEngine == 'IndexDB') {
myDebug(" localStoreData put data asked for " + lakey + ":" + lavalue);
let transaction = globalIndexDB.transaction(["config"], "readwrite");
let objectStore = transaction.objectStore("config");
let request = objectStore.put({ key: lakey, data: lavalue });
request.oncomplete = function (event) {
myDebug(" localStoreData put oncomplete ok pour " + lakey + ":" + lavalue);
};
request.onsuccess = function (event) {
myDebug(" localStoreData put onsuccess ok pour " + lakey + ":" + lavalue);
};
request.onerror = function (event) {
myDebug(" localStoreData put err pour " + lakey + " : " + lavalue);
if ((typeof lavalue != 'undefined') && (lavalue !== null) && (lavalue != "")) {
myDebug(" localStoreData on a une valeur non nulle a stocker : " + lavalue);
}
else {
myDebug(" localStoreData on a une valeur vide ou nulle a stocker");
lavalue = "none";
}
let transaction = globalIndexDB.transaction(['config'], "readwrite");
transaction.oncomplete = function (event) {
myDebug(" localStoreData global db transaction.oncomplete ok");
let objectStore = transaction.objectStore('config');
objectStore.oncomplete = function (event) {
let request = objectStore.put({ key: lakey, data: lavalue });
request.oncomplete = function (event) {
myDebug(" localStoreData put oncomplete ok pour " + lakey + ":" + lavalue);
};
request.onsuccess = function (event) {
myDebug(" localStoreData put onsuccess ok pour " + lakey + ":" + lavalue);
};
request.onerror = function (event) {
myDebug(" localStoreData put err pour " + lakey + " : " + lavalue);
};
}
objectStore.onerror = function (event) {
myDebug(" localStoreData objectStore.onerror : " + event.error);
}
}
transaction.onerror = function (event) {
myDebug(" localStoreData global db transaction.onerror : " + event.error);
};
// }
// else {
// // myDebug(' SQL on stocke : ' + key + ' et ' + value);
// globalDB.transaction(function (tx) {
// tx.executeSql('DELETE FROM config WHERE key=?;', [lakey],
// // globalDB.executeSql('INSERT OR REPLACE INTO config (key, value) VALUES (?, ?);', [key, value],
// function (res) {
// // myDebug(" SQL delete ok, " + res.rowsAffected + " rows affected");
// },
// function (error) {
// myDebug(' SQL delete error: ' + error.message);
// });
// });
// if (value !== null) {
// globalDB.transaction(function (tx) {
// tx.executeSql('INSERT INTO config VALUES(?,?);', [lakey, lavalue],
// // globalDB.executeSql('INSERT OR REPLACE INTO config (key, value) VALUES (?, ?);', [key, value],
// function (res) {
// // myDebug(" SQL insert ok for " + key + ":" + value + ", " + res.insertId + "id, rows affected: " + res.rowsAffected);
// },
// function (error) {
// myDebug(' SQL insert error: ' + error.message);
// });
// });
// }
// }
}
else {
myDebug(" ERR: Accès à globalIndexDB impossible pour stocker " + lakey + " val " + lavalue);
myDebug(" ERR: Accès à globalIndexDB impossible (1) pour stocker " + lakey + " val " + lavalue + " *** ");
}
}
......@@ -164,7 +159,7 @@ function localStoreLDFtoSync(urlIN, jsonDataIN, localFileNameIN) {
let lavalue = { url: urlIN, jsonData: jsonDataIN, localFileName: localFileNameIN, ladate: ladateIN };
let id = -1;
if (globalIndexDB == null) {
if (globalIndexDB == null && databaseEngine == 'IndexDB') {
myDebug(" localStoreLDFtoSync On essaye de ré-ouvrir la base de données ...");
// if (databaseEngine == 'IndexDB') {
let openRequest = window.indexedDB.open(databaseName, databaseVersion);
......@@ -179,7 +174,7 @@ function localStoreLDFtoSync(urlIN, jsonDataIN, localFileNameIN) {
};
}
if (globalIndexDB !== null) {
if (globalIndexDB !== null && databaseEngine == 'IndexDB') {
myDebug(" localStoreLDFtoSync db type indexDB put data asked pour " + JSON.stringify(lavalue));
let transaction = globalIndexDB.transaction(["ldfsToSync"], "readwrite");
let objectStore = transaction.objectStore("ldfsToSync");
......@@ -199,7 +194,7 @@ function localStoreLDFtoSync(urlIN, jsonDataIN, localFileNameIN) {
};
}
else {
myDebug(" localStoreLDFtoSync ERR: Accès à globalIndexDB impossible pour stocker " + urlIN);
myDebug(" localStoreLDFtoSync ERR: Accès à globalIndexDB (2) impossible pour stocker " + urlIN);
reject(null);
}
});
......@@ -210,7 +205,7 @@ function localDeleteLDFtoSync(idIN) {
//dev time
myDebug("localDeleteLDFtoSync :" + idIN);
if (globalIndexDB == null) {
if (globalIndexDB == null && databaseEngine == 'IndexDB') {
myDebug("globalIndexDB : On essaye d'ouvrir la base de données ...");
// if (databaseEngine == 'IndexDB') {
let openRequest = window.indexedDB.open(databaseName, databaseVersion);
......@@ -225,7 +220,7 @@ function localDeleteLDFtoSync(idIN) {
};
}
if (globalIndexDB !== null) {
if (globalIndexDB !== null && databaseEngine == 'IndexDB') {
myDebug(" localDeleteLDFtoSync db type indexDB put data asked ...");
let transaction = globalIndexDB.transaction(["ldfsToSync"], "readwrite");
let objectStore = transaction.objectStore("ldfsToSync");
......@@ -240,13 +235,13 @@ function localDeleteLDFtoSync(idIN) {
};
}
else {
myDebug(" localDeleteLDFtoSync ERR: Accès à globalIndexDB impossible pour stocker " + urlIN);
myDebug(" localDeleteLDFtoSync ERR: Accès à globalIndexDB impossible (3) pour stocker " + urlIN);
}
}
function localUpdateLDFfileName(idIN, newFileName) {
if (idIN > 0) {
if (globalIndexDB !== null) {
if (globalIndexDB !== null && databaseEngine == 'IndexDB') {
myDebug("localUpdateLDFfileName id=" + idIN);
let objectStore = globalIndexDB.transaction("ldfsToSync").objectStore("ldfsToSync");
......
......@@ -4,7 +4,7 @@
//Supprime un id en attente de synchronisation
function rSyncDelete(idToDelete) {
if (globalIndexDB !== null) {
if (globalIndexDB !== null && databaseEngine == 'IndexDB') {
localDeleteLDFtoSync(idToDelete);
// myDebug(" ldfsToSync SQL DELETE FROM ldfsToSync WHERE ID=" + idToDelete);
// globalDB.executeSql('DELETE FROM ldfsToSync WHERE ID=?;', [idToDelete]);
......@@ -29,7 +29,7 @@ function rSyncOne(idToSync) {
//et le flag suivant pour eviter de passer en boucle infinie "sync/sync/sync"
globalSyncInProgress = true;
myDebug("start rsyncOne ... pour globalLastInsertId = " + globalLastInsertId);
if (globalIndexDB !== null) {
if (globalIndexDB !== null && databaseEngine == 'IndexDB') {
myDebug(" ldfsToSync SQL : select * from ldfsToSync WHERE id=" + idToSync);
let objectStore = globalIndexDB.transaction("ldfsToSync").objectStore("ldfsToSync");
......
<ons-page id="loadingPage">
<div style="text-align: right;">
<h1 style="font-family: Penna,sans-serif; font-size: 600%; padding: 0; margin-top: 100px;">DoliSCAN</h1>
</div>
<div style="text-align: center">
<p>
<ons-icon icon="md-spinner" size="45px" spin></ons-icon>
</p>
<p id="loadingmessage"> Chargement en cours ... </p>
<p><i id="loadingStep"></i></p>
</div>
</ons-page>
Supports Markdown
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