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">
<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/pwa/public" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/public/js" />
<excludeFolder url="file://$MODULE_DIR$/publicTest" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/event-manager" />

View File

@ -1,4 +1,4 @@
#!/usr/bin/env bash
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 {
constructor(dbName, version, indexedDB) {
indexedDB = indexedDB || window["myIndexedDB"] || window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB;
console.log("MyDB", indexedDB);
this._conn = indexedDB.open(dbName, version);
constructor(dbName, version) {
this.queryPromise = new Promise(async (resolve, reject) => {
let indexedDB = null;
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;
this._conn.onupgradeneeded = function (upgradeEvent) {
myDB.upgrade(myDB._conn.result, upgradeEvent.oldVersion, upgradeEvent.newVersion, upgradeEvent);
};
this.queryPromise = new Promise(function (resolve) {
let myDB = this;
this._conn.onupgradeneeded = function (upgradeEvent) {
try {
myDB.upgrade(myDB._conn.result, upgradeEvent.oldVersion, upgradeEvent.newVersion, upgradeEvent);
}
catch(e){
reject(e);
throw e;
}
};
myDB._conn.onsuccess = function (e) {
myDB._db = myDB._conn.result;
resolve(e);
@ -3446,7 +3471,6 @@ class MyDb {
transactionMode = "readonly";
}
return this.openTransaction(name, transactionMode, function (t) {
console.log("openStore", name, t);
callback(t.objectStore(name));
});
}
@ -3491,13 +3515,10 @@ class MyDb {
load(key, objectStore) {
let self = this;
return new Promise( (resolve, reject) => {
console.log("load 1");
return new Promise((resolve, reject) => {
self.openStore(objectStore, function (store) {
console.log("load 2");
let request = store.get(key);
request.onsuccess = function (e) {
console.log("load 3");
resolve(e.currentTarget.result);
};
request.onerror = function (e) {
@ -3513,11 +3534,10 @@ class MyDb {
});
});
}
loadAll(objectStore, query, count)
{
loadAll(objectStore, query, count) {
let self = this;
return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => {
self.openStore(objectStore, function (store) {
let request = store.getAll(query, count);
request.onsuccess = function (e) {
@ -3647,13 +3667,13 @@ class MyDb {
});
}
removeAll(objectStore){
removeAll(objectStore) {
return new Promise((resolve) => {
this.openStore(objectStore, "readwrite", (store) => {
let req = store.clear();
req.onerror = (e) => {
throw {
"type":"indexed-db-index-error",
"type": "indexed-db-index-error",
"event": e
}
};

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("date-last-sync");
localStorage.removeItem("levelCounter");
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")) {

View File

@ -2,19 +2,21 @@ import {Helper, MyDb} from "../../../../js/lib/pwa-lib";
export class WordRotatorDb extends MyDb {
static getInstance() {
static async getInstance() {
if (Helper.isNull(WordRotatorDb.instance)) {
WordRotatorDb.instance = new WordRotatorDb();
}
await WordRotatorDb.instance.queryPromise;
return WordRotatorDb.instance;
}
constructor() {
super("wordRotator", 3);
super("wordRotator", 4);
}
upgrade(db, oldVersion, newVersion, e) {
console.log("upgrading!");
if (Helper.isNull(oldVersion) || oldVersion < 1 && newVersion >= 1) {
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);
levelObjectStore.createIndex("played", ["deleted", "played", "difficulty", "id"], {"unique": false});
}
// xhklsfdbnk = 42;
if (Helper.isNull(oldVersion) || oldVersion < 3 && newVersion >= 3) {
let levelObjectStore = e.target.transaction.objectStore(WordRotatorDb.OBJECT_STORE.LEVEL);
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) {
@ -35,7 +42,7 @@ export class WordRotatorDb extends MyDb {
}
async loadLevel(levelId) {
console.log("load Level", levelId);
// console.log("load Level", levelId);
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);
}
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 = {
LEVEL: "level",
SYSTEM_VARS:"vars"
};
WordRotatorDb.instance = null;

View File

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

View File

@ -99,7 +99,7 @@ export class MenuSite extends WordRotatorBaseSite {
async startLevelSite() {
SoundManager.getInstance().resumeContext();
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);
if (level !== null) {
resolve();
@ -147,7 +147,7 @@ export class MenuSite extends WordRotatorBaseSite {
let playMusicButton = this.findBy("#play-music");
playMusicButton.checked = (settingsManager.getSetting("play-music", "1") === "1");
playMusicButton.addEventListener("change", () => {
settingsManager.setSetting("play-music", (playMusicButton.checked)?"1":"0");
settingsManager.setSetting("play-music", (playMusicButton.checked) ? "1" : "0");
soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);
if (playMusicButton.checked) {
soundManager.play(SoundManager.CHANNELS.MUSIC);
@ -158,7 +158,7 @@ export class MenuSite extends WordRotatorBaseSite {
let playSoundButton = this.findBy("#play-sound");
playSoundButton.checked = (settingsManager.getSetting("play-sound", "1") === "1");
playSoundButton.addEventListener("change", () => {
settingsManager.setSetting("play-sound", (playSoundButton.checked)?"1":"0");
settingsManager.setSetting("play-sound", (playSoundButton.checked) ? "1" : "0");
soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND);
Matomo.push(["trackEvent", "MainMenu", "PlaySound", "Play Sound", (playSoundButton.checked) ? 1 : 0]);
});
@ -176,45 +176,53 @@ export class MenuSite extends WordRotatorBaseSite {
}
async loadLevels() {
const dateLastSync = Helper.nonNull(localStorage.getItem("date-last-sync"), 0);
const db = WordRotatorDb.getInstance();
try {
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 newLastSync = null;
let maxRuns = 1;
let levelPromises = [];
for (let run = 0; run < maxRuns; run++) {
let res = await DataManager.load("wordRotator/levels" + DataManager.buildQuery({
"currentRun": run,
"dateLastSync": dateLastSync
}));
if (!res["success"]) {
if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {
FlashMessenger.addMessage("sync-error", null, 6000);
}
newLastSync = null;
break;
}
res = res["result"];
newLastSync = Helper.nonNull(newLastSync, res["currentSyncDate"]);
maxRuns = res["maxRuns"];
let levels = res["levels"];
for (let i = 0; i < levels.length; i++) {
let currentLevel = levels[i];
levelPromises.push(db.loadLevel(levels[i]["id"]).then(level => {
currentLevel["played"] = (Helper.nonNull(Helper.nonNull(level, {}).played, false));
console.log("currentLevel", currentLevel);
return currentLevel;
// let numberLevels = db.countLevels();
let newLastSync = null;
let maxRuns = 1;
let levelPromises = [];
for (let run = 0; run < maxRuns; run++) {
let res = await DataManager.load("wordRotator/levels" + DataManager.buildQuery({
"currentRun": run,
"dateLastSync": dateLastSync
}));
if (!res["success"]) {
if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {
FlashMessenger.addMessage("sync-error", null, 6000);
}
newLastSync = null;
break;
}
res = res["result"];
newLastSync = Helper.nonNull(newLastSync, res["currentSyncDate"]);
maxRuns = res["maxRuns"];
let levels = res["levels"];
for (let i = 0; i < levels.length; i++) {
let currentLevel = levels[i];
levelPromises.push(db.loadLevel(levels[i]["id"]).then(level => {
currentLevel["played"] = (Helper.nonNull(Helper.nonNull(level, {}).played, false));
return currentLevel;
}));
}
}
let levels = await Promise.all(levelPromises);
await db.saveManyLevels(levels);
if (newLastSync != null && newLastSync !== "null") {
localStorage.setItem("date-last-sync", newLastSync);
db.saveDateLastSync(newLastSync);
}
}
let levels = await Promise.all(levelPromises);
console.log("levels to save", levels);
await db.saveManyLevels(levels);
if (newLastSync != null && newLastSync !== "null") {
localStorage.setItem("date-last-sync", 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.FOURTEEN))
.click(Selector('.segment-parent').nth(SEGMENT.NINETEEN))
.click(Selector('.segment-parent').nth(SEGMENT.TWENTYONE))
.drag(Selector('.segment-parent').nth(SEGMENT.TEN).find('div').withText('P'), dragDimen, -3, {
.click(Selector('.segment-parent').nth(SEGMENT.TWENTYONE)).debug()
.drag(Selector('.segment-parent').nth(SEGMENT.TEN), dragDimen, -3, {
offsetX: 10,
offsetY: 10
})