new version

This commit is contained in:
silas 2018-11-04 23:36:18 +01:00
parent 612aa8168f
commit 71bde38da4
9 changed files with 123 additions and 7733 deletions

1
.idea/wordRotator.iml generated
View File

@ -3,7 +3,6 @@
<component name="NewModuleRootManager"> <component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/module/Application/src" isTestSource="false" packagePrefix="Application\" /> <sourceFolder url="file://$MODULE_DIR$/src/module/Application/src" isTestSource="false" packagePrefix="Application\" />
<sourceFolder url="file://$MODULE_DIR$/src/module/Application/pwa/public" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/public/js" /> <excludeFolder url="file://$MODULE_DIR$/public/js" />
<excludeFolder url="file://$MODULE_DIR$/publicTest" /> <excludeFolder url="file://$MODULE_DIR$/publicTest" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/event-manager" /> <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/event-manager" />

View File

@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
cd $(dirname "$0")/.. cd $(dirname "$0")/..
npm run build npm run build 1

File diff suppressed because one or more lines are too long

View File

@ -3403,16 +3403,41 @@ class GapiHandler {
} }
class MyDb { class MyDb {
constructor(dbName, version, indexedDB) { constructor(dbName, version) {
indexedDB = indexedDB || window["myIndexedDB"] || window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB; this.queryPromise = new Promise(async (resolve, reject) => {
console.log("MyDB", indexedDB); let indexedDB = null;
this._conn = indexedDB.open(dbName, version); if (window["sqlite"]){
indexedDB = new Promise(sqliteResolve => {
function testSqlLiteResolve(){
if (window["sqliteIndexedDB"]){
sqliteResolve(window["sqliteIndexedDB"]);
}
else {
setTimeout(testSqlLiteResolve, 200);
}
console.log("t");
}
testSqlLiteResolve();
});
}
else {
indexedDB = Promise.resolve(window["myIndexedDB"] || window["indexedDB"] || window["mozIndexedDB"]|| window["webkitIndexedDB"]|| window["msIndexedDB"] || window["shimIndexedDB"]);
}
console.log("indexeddb 1");
this.indexeddb = (await indexedDB);
console.log("indexeddb 2");
this._conn = this.indexeddb.open(dbName, version);
let myDB = this; let myDB = this;
this._conn.onupgradeneeded = function (upgradeEvent) { this._conn.onupgradeneeded = function (upgradeEvent) {
try {
myDB.upgrade(myDB._conn.result, upgradeEvent.oldVersion, upgradeEvent.newVersion, upgradeEvent); myDB.upgrade(myDB._conn.result, upgradeEvent.oldVersion, upgradeEvent.newVersion, upgradeEvent);
}
catch(e){
reject(e);
throw e;
}
}; };
this.queryPromise = new Promise(function (resolve) {
myDB._conn.onsuccess = function (e) { myDB._conn.onsuccess = function (e) {
myDB._db = myDB._conn.result; myDB._db = myDB._conn.result;
resolve(e); resolve(e);
@ -3446,7 +3471,6 @@ class MyDb {
transactionMode = "readonly"; transactionMode = "readonly";
} }
return this.openTransaction(name, transactionMode, function (t) { return this.openTransaction(name, transactionMode, function (t) {
console.log("openStore", name, t);
callback(t.objectStore(name)); callback(t.objectStore(name));
}); });
} }
@ -3492,12 +3516,9 @@ class MyDb {
load(key, objectStore) { load(key, objectStore) {
let self = this; let self = this;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
console.log("load 1");
self.openStore(objectStore, function (store) { self.openStore(objectStore, function (store) {
console.log("load 2");
let request = store.get(key); let request = store.get(key);
request.onsuccess = function (e) { request.onsuccess = function (e) {
console.log("load 3");
resolve(e.currentTarget.result); resolve(e.currentTarget.result);
}; };
request.onerror = function (e) { request.onerror = function (e) {
@ -3514,8 +3535,7 @@ class MyDb {
}); });
} }
loadAll(objectStore, query, count) loadAll(objectStore, query, count) {
{
let self = this; let self = this;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
self.openStore(objectStore, function (store) { self.openStore(objectStore, function (store) {

View File

@ -29,12 +29,12 @@ export class WordRotatorSettingFragment extends LocalStorageSettingsFragment {
} }
}); });
this.findBy("#reset-levels").addEventListener("click", () => { this.findBy("#reset-levels").addEventListener("click", async () => {
localStorage.removeItem("currentLevel"); localStorage.removeItem("currentLevel");
localStorage.removeItem("date-last-sync"); localStorage.removeItem("date-last-sync");
localStorage.removeItem("levelCounter"); localStorage.removeItem("levelCounter");
localStorage.removeItem("tutorial-step"); localStorage.removeItem("tutorial-step");
WordRotatorDb.getInstance().removeAll(WordRotatorDb.OBJECT_STORE.LEVEL); (await WordRotatorDb.getInstance()).removeAll(WordRotatorDb.OBJECT_STORE.LEVEL);
}); });
if (location.hostname.includes("beta") || location.hostname.includes("127.0.0.1")) { if (location.hostname.includes("beta") || location.hostname.includes("127.0.0.1")) {

View File

@ -2,19 +2,21 @@ import {Helper, MyDb} from "../../../../js/lib/pwa-lib";
export class WordRotatorDb extends MyDb { export class WordRotatorDb extends MyDb {
static getInstance() { static async getInstance() {
if (Helper.isNull(WordRotatorDb.instance)) { if (Helper.isNull(WordRotatorDb.instance)) {
WordRotatorDb.instance = new WordRotatorDb(); WordRotatorDb.instance = new WordRotatorDb();
} }
await WordRotatorDb.instance.queryPromise;
return WordRotatorDb.instance; return WordRotatorDb.instance;
} }
constructor() { constructor() {
super("wordRotator", 3); super("wordRotator", 4);
} }
upgrade(db, oldVersion, newVersion, e) { upgrade(db, oldVersion, newVersion, e) {
console.log("upgrading!"); console.log("upgrading!");
if (Helper.isNull(oldVersion) || oldVersion < 1 && newVersion >= 1) { if (Helper.isNull(oldVersion) || oldVersion < 1 && newVersion >= 1) {
let levelObjectStore = db.createObjectStore(WordRotatorDb.OBJECT_STORE.LEVEL, {"keyPath": "id"}); let levelObjectStore = db.createObjectStore(WordRotatorDb.OBJECT_STORE.LEVEL, {"keyPath": "id"});
} }
@ -22,10 +24,15 @@ export class WordRotatorDb extends MyDb {
let levelObjectStore = e.target.transaction.objectStore(WordRotatorDb.OBJECT_STORE.LEVEL); let levelObjectStore = e.target.transaction.objectStore(WordRotatorDb.OBJECT_STORE.LEVEL);
levelObjectStore.createIndex("played", ["deleted", "played", "difficulty", "id"], {"unique": false}); levelObjectStore.createIndex("played", ["deleted", "played", "difficulty", "id"], {"unique": false});
} }
// xhklsfdbnk = 42;
if (Helper.isNull(oldVersion) || oldVersion < 3 && newVersion >= 3) { if (Helper.isNull(oldVersion) || oldVersion < 3 && newVersion >= 3) {
let levelObjectStore = e.target.transaction.objectStore(WordRotatorDb.OBJECT_STORE.LEVEL); let levelObjectStore = e.target.transaction.objectStore(WordRotatorDb.OBJECT_STORE.LEVEL);
levelObjectStore.createIndex("difficulty", "difficulty", {"unique": false}); levelObjectStore.createIndex("difficulty", "difficulty", {"unique": false});
} }
if (Helper.isNull(oldVersion) || oldVersion < 3 && newVersion >= 4) {
let levelObjectStore = db.createObjectStore(WordRotatorDb.OBJECT_STORE.SYSTEM_VARS, {"keyPath": "name"});
}
}; };
async saveManyLevels(levels) { async saveManyLevels(levels) {
@ -35,7 +42,7 @@ export class WordRotatorDb extends MyDb {
} }
async loadLevel(levelId) { async loadLevel(levelId) {
console.log("load Level", levelId); // console.log("load Level", levelId);
return this.load(levelId, WordRotatorDb.OBJECT_STORE.LEVEL); return this.load(levelId, WordRotatorDb.OBJECT_STORE.LEVEL);
} }
@ -71,12 +78,21 @@ export class WordRotatorDb extends MyDb {
return await this.saveObj(level, WordRotatorDb.OBJECT_STORE.LEVEL); return await this.saveObj(level, WordRotatorDb.OBJECT_STORE.LEVEL);
} }
async countLevels(){ async loadDateLastSync(){
let dateLastSync = await this.load("date-last-sync", WordRotatorDb.OBJECT_STORE.SYSTEM_VARS);
if (dateLastSync){
return dateLastSync["value"];
}
return null;
}
async saveDateLastSync(value){
return await this.saveObj({"name": "date-last-sync", "value":value}, WordRotatorDb.OBJECT_STORE.SYSTEM_VARS)
} }
} }
WordRotatorDb.OBJECT_STORE = { WordRotatorDb.OBJECT_STORE = {
LEVEL: "level", LEVEL: "level",
SYSTEM_VARS:"vars"
}; };
WordRotatorDb.instance = null; WordRotatorDb.instance = null;

View File

@ -105,7 +105,7 @@ export class LevelSite extends WordRotatorBaseSite {
if (Helper.isNotNull(currentLevelInfo)) { if (Helper.isNotNull(currentLevelInfo)) {
currentLevelInfo = JSON.parse(currentLevelInfo); currentLevelInfo = JSON.parse(currentLevelInfo);
const db = WordRotatorDb.getInstance(); const db = await WordRotatorDb.getInstance();
const levelJson = await db.loadLevel(currentLevelInfo["id"]); const levelJson = await db.loadLevel(currentLevelInfo["id"]);
if (levelJson === null) { if (levelJson === null) {
@ -144,18 +144,23 @@ export class LevelSite extends WordRotatorBaseSite {
return this.nextLevel(); return this.nextLevel();
} }
startEndSite(){
this.startSite(EndSite);
this.finish();
}
async nextLevel() { async nextLevel() {
try { try {
this._siteContent.classList.remove('won'); this._siteContent.classList.remove('won');
this.wonText.style.fontSize = "0"; this.wonText.style.fontSize = "0";
const db = WordRotatorDb.getInstance(); const db = await WordRotatorDb.getInstance();
const nextLevelJson = await db.loadNextLevel(LevelSite.RENDERER_TYPES); const nextLevelJson = await db.loadNextLevel(LevelSite.RENDERER_TYPES);
console.log("nextLevelJson", nextLevelJson); console.log("nextLevelJson", nextLevelJson);
if (nextLevelJson === null) { if (nextLevelJson === null) {
this.startSite(EndSite); this.startEndSite();
this.finish();
return; return;
} }
const level = LevelHelper.inflateLevel(nextLevelJson, this.templateContainer); const level = LevelHelper.inflateLevel(nextLevelJson, this.templateContainer);
@ -193,6 +198,7 @@ export class LevelSite extends WordRotatorBaseSite {
catch (e) { catch (e) {
console.log("Fehler!"); console.log("Fehler!");
console.error(e); console.error(e);
this.startEndSite();
} }
} }
@ -225,7 +231,7 @@ export class LevelSite extends WordRotatorBaseSite {
async levelWon(level) { async levelWon(level) {
try { try {
const db = WordRotatorDb.getInstance(); const db = await WordRotatorDb.getInstance();
const savePromise = db.saveLevelPlayed(level.getId()); const savePromise = db.saveLevelPlayed(level.getId());
this.levelCounter++; this.levelCounter++;

View File

@ -99,7 +99,7 @@ export class MenuSite extends WordRotatorBaseSite {
async startLevelSite() { async startLevelSite() {
SoundManager.getInstance().resumeContext(); SoundManager.getInstance().resumeContext();
this.startSite(LevelSite, Promise.race([this.loadLevelPromise, new Promise(async resolve => { this.startSite(LevelSite, Promise.race([this.loadLevelPromise, new Promise(async resolve => {
const db = WordRotatorDb.getInstance(); const db = await WordRotatorDb.getInstance();
let level = await db.loadNextLevel(LevelSite.RENDERER_TYPES); let level = await db.loadNextLevel(LevelSite.RENDERER_TYPES);
if (level !== null) { if (level !== null) {
resolve(); resolve();
@ -176,8 +176,10 @@ export class MenuSite extends WordRotatorBaseSite {
} }
async loadLevels() { async loadLevels() {
const dateLastSync = Helper.nonNull(localStorage.getItem("date-last-sync"), 0); try {
const db = WordRotatorDb.getInstance(); const db = await WordRotatorDb.getInstance();
const dateLastSync = Helper.nonNull(await db.loadDateLastSync(), 0);
// const dateLastSync = Helper.nonNull(localStorage.getItem("date-last-sync"), 0);
// let numberLevels = db.countLevels(); // let numberLevels = db.countLevels();
let newLastSync = null; let newLastSync = null;
@ -204,17 +206,23 @@ export class MenuSite extends WordRotatorBaseSite {
let currentLevel = levels[i]; let currentLevel = levels[i];
levelPromises.push(db.loadLevel(levels[i]["id"]).then(level => { levelPromises.push(db.loadLevel(levels[i]["id"]).then(level => {
currentLevel["played"] = (Helper.nonNull(Helper.nonNull(level, {}).played, false)); currentLevel["played"] = (Helper.nonNull(Helper.nonNull(level, {}).played, false));
console.log("currentLevel", currentLevel);
return currentLevel; return currentLevel;
})); }));
} }
} }
let levels = await Promise.all(levelPromises); let levels = await Promise.all(levelPromises);
console.log("levels to save", levels);
await db.saveManyLevels(levels); await db.saveManyLevels(levels);
if (newLastSync != null && newLastSync !== "null") { if (newLastSync != null && newLastSync !== "null") {
localStorage.setItem("date-last-sync", newLastSync); localStorage.setItem("date-last-sync", newLastSync);
db.saveDateLastSync(newLastSync);
}
}
catch(e){
// if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {
FlashMessenger.addMessage("sync-error", null, 6000);
// }
console.error(e);
} }
} }
} }

View File

@ -353,8 +353,8 @@ test('Play', async t => {
.click(Selector('.segment-parent').nth(SEGMENT.SIXTEEN)) .click(Selector('.segment-parent').nth(SEGMENT.SIXTEEN))
.click(Selector('.segment-parent').nth(SEGMENT.FOURTEEN)) .click(Selector('.segment-parent').nth(SEGMENT.FOURTEEN))
.click(Selector('.segment-parent').nth(SEGMENT.NINETEEN)) .click(Selector('.segment-parent').nth(SEGMENT.NINETEEN))
.click(Selector('.segment-parent').nth(SEGMENT.TWENTYONE)) .click(Selector('.segment-parent').nth(SEGMENT.TWENTYONE)).debug()
.drag(Selector('.segment-parent').nth(SEGMENT.TEN).find('div').withText('P'), dragDimen, -3, { .drag(Selector('.segment-parent').nth(SEGMENT.TEN), dragDimen, -3, {
offsetX: 10, offsetX: 10,
offsetY: 10 offsetY: 10
}) })