first try presistent storage
This commit is contained in:
parent
053fdae384
commit
849e79345c
|
@ -6,3 +6,4 @@ export * from './src/utils/datetime';
|
||||||
export * from './src/utils/permission';
|
export * from './src/utils/permission';
|
||||||
export * from './src/utils/validators';
|
export * from './src/utils/validators';
|
||||||
export * from './src/utils/misc';
|
export * from './src/utils/misc';
|
||||||
|
export * from './src/database';
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@flaschengeist/types": "^1.0.0-alpha.5",
|
"@flaschengeist/types": "^1.0.0-alpha.5",
|
||||||
"@types/node": "^12.20.37",
|
"@types/node": "^12.20.37",
|
||||||
|
"@types/cordova-sqlite-storage": "^1.5.5",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.4.0",
|
"@typescript-eslint/eslint-plugin": "^5.4.0",
|
||||||
"@typescript-eslint/parser": "^5.4.0",
|
"@typescript-eslint/parser": "^5.4.0",
|
||||||
"eslint": "^8.3.0",
|
"eslint": "^8.3.0",
|
||||||
|
|
|
@ -0,0 +1,124 @@
|
||||||
|
import { LocalStorage, Platform } from 'quasar';
|
||||||
|
import { api } from '../index';
|
||||||
|
import { useMainStore } from './stores';
|
||||||
|
import { baseURL } from 'src/config';
|
||||||
|
|
||||||
|
export let db: SQLitePlugin.Database | null = null;
|
||||||
|
|
||||||
|
if (Platform.is.cordova) {
|
||||||
|
document.addEventListener('deviceready', onDeviceReady);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ConfigResult {
|
||||||
|
name: string;
|
||||||
|
value: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onDeviceReady() {
|
||||||
|
db = window.sqlitePlugin.openDatabase({ name: 'flaschengeist.db', location: 'default' });
|
||||||
|
db.transaction(function (transaction) {
|
||||||
|
transaction.executeSql(
|
||||||
|
'CREATE TABLE IF NOT EXISTS config_table (name STRING NOT NULL PRIMARY KEY, value STRING NOT NULL)'
|
||||||
|
);
|
||||||
|
transaction.executeSql(`INSERT INTO config_table VALUES ('baseUrl', '${baseURL.value}')`);
|
||||||
|
});
|
||||||
|
console.log('finish init database');
|
||||||
|
const url = loadConfig();
|
||||||
|
console.log('url is', url);
|
||||||
|
if (url) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function insertConfig(config: string, value: string) {
|
||||||
|
console.log('insert config', config, value)
|
||||||
|
console.log(db)
|
||||||
|
db?.transaction((tx) => {
|
||||||
|
|
||||||
|
console.log('insert', config, value)
|
||||||
|
tx.executeSql(
|
||||||
|
`INSERT INTO config_table VALUES ('${config}', '${value}')`,
|
||||||
|
[],
|
||||||
|
(tx1) => {
|
||||||
|
console.log('success insert into database', tx1);
|
||||||
|
},
|
||||||
|
(tx, err) => {
|
||||||
|
console.log('error insert into database', err);
|
||||||
|
console.log('update database', config, value)
|
||||||
|
tx.executeSql(
|
||||||
|
`UPDATE config_table SET value='${value}' WHERE name='${config}'`,
|
||||||
|
[],
|
||||||
|
(tx1) => {
|
||||||
|
console.log('success update database', tx1);
|
||||||
|
},
|
||||||
|
(tx, err) => {
|
||||||
|
console.log('error update databes', err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function deleteConfig(config: string) {
|
||||||
|
db?.transaction((tx) => {
|
||||||
|
tx.executeSql(
|
||||||
|
`DELETE FROM config_table WHERE name='${config}'`,
|
||||||
|
[],
|
||||||
|
(tx1, results) => {
|
||||||
|
console.log('success delete from database', tx1, results, results.rows.item(0));
|
||||||
|
},
|
||||||
|
(tx2, err) => {
|
||||||
|
console.log('error delete from database', tx2, err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function loadConfig() {
|
||||||
|
let result = null;
|
||||||
|
db?.transaction((tx) => {
|
||||||
|
tx.executeSql(
|
||||||
|
'SELECT value FROM config_table WHERE name="baseUrl"',
|
||||||
|
[],
|
||||||
|
(tx1, results) => {
|
||||||
|
console.log('results', tx1, results, results.rows.item(0));
|
||||||
|
result = (<ConfigResult>results.rows.item(0)).value;
|
||||||
|
|
||||||
|
if (result !== LocalStorage.getItem<string>('baseURL')) {
|
||||||
|
console.log('url has to change', result, LocalStorage.getItem<string>('baseURL'));
|
||||||
|
LocalStorage.set('baseURL', result);
|
||||||
|
api.defaults.baseURL = result;
|
||||||
|
setTimeout(() => {
|
||||||
|
window.location.reload();
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(tx2, err) => {
|
||||||
|
console.log('error', tx2, err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
tx.executeSql(
|
||||||
|
'SELECT value FROM config_table WHERE name="session"',
|
||||||
|
[],
|
||||||
|
(tx1, results) => {
|
||||||
|
console.log('results session', tx1, results, results.rows.item(0));
|
||||||
|
let session: string | FG.Session = (<ConfigResult>results.rows.item(0)).value;
|
||||||
|
console.log(session);
|
||||||
|
if (session) {
|
||||||
|
console.log('update session')
|
||||||
|
session = <FG.Session>JSON.parse(session);
|
||||||
|
console.log(session)
|
||||||
|
session.expires = new Date(session.expires);
|
||||||
|
console.log(session)
|
||||||
|
const store = useMainStore();
|
||||||
|
store.session = session;
|
||||||
|
LocalStorage.set('session', store.session);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(tx2, err) => {
|
||||||
|
console.log('error load session', err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import { useSessionStore, useUserStore } from '.';
|
||||||
import { AxiosResponse } from 'axios';
|
import { AxiosResponse } from 'axios';
|
||||||
import { api } from '../internal';
|
import { api } from '../internal';
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
|
import { insertConfig, deleteConfig } from '../database';
|
||||||
|
|
||||||
function loadCurrentSession() {
|
function loadCurrentSession() {
|
||||||
const session = LocalStorage.getItem<FG.Session>('session');
|
const session = LocalStorage.getItem<FG.Session>('session');
|
||||||
|
@ -66,6 +67,8 @@ export const useMainStore = defineStore({
|
||||||
this.session = data;
|
this.session = data;
|
||||||
this.session.expires = new Date(this.session.expires);
|
this.session.expires = new Date(this.session.expires);
|
||||||
LocalStorage.set('session', this.session);
|
LocalStorage.set('session', this.session);
|
||||||
|
console.log('insert config', JSON.stringify(this.session))
|
||||||
|
insertConfig('session', JSON.stringify(this.session));
|
||||||
return true;
|
return true;
|
||||||
} catch ({ response }) {
|
} catch ({ response }) {
|
||||||
return (<AxiosResponse | undefined>response)?.status || false;
|
return (<AxiosResponse | undefined>response)?.status || false;
|
||||||
|
@ -145,7 +148,7 @@ export const useMainStore = defineStore({
|
||||||
},
|
},
|
||||||
handleLoggedOut() {
|
handleLoggedOut() {
|
||||||
LocalStorage.clear();
|
LocalStorage.clear();
|
||||||
|
deleteConfig('session');
|
||||||
this.$patch({
|
this.$patch({
|
||||||
session: undefined,
|
session: undefined,
|
||||||
user: undefined,
|
user: undefined,
|
||||||
|
|
|
@ -74,7 +74,7 @@ export const useUserStore = defineStore({
|
||||||
},
|
},
|
||||||
|
|
||||||
async deleteAvatar(user: FG.User) {
|
async deleteAvatar(user: FG.User) {
|
||||||
await api.delete(`/users/${user.userid}/avatar`)
|
await api.delete(`/users/${user.userid}/avatar`);
|
||||||
},
|
},
|
||||||
|
|
||||||
async getPermissions(force = false) {
|
async getPermissions(force = false) {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
"dom"
|
"dom"
|
||||||
],
|
],
|
||||||
"types": [
|
"types": [
|
||||||
|
"@types/cordova-sqlite-storage",
|
||||||
"@flaschengeist/types",
|
"@flaschengeist/types",
|
||||||
"@quasar/app",
|
"@quasar/app",
|
||||||
"node"
|
"node"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<widget id="de.wu5.flaschengeist" version="2.0.0-alpha.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
<widget id="flaschengeist.wu5.de" version="2.0.0-alpha.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||||
<name>Flaschengeist</name>
|
<name>Flaschengeist</name>
|
||||||
<description>Modular student club administration system</description>
|
<description>Modular student club administration system</description>
|
||||||
<author email="dev@cordova.apache.org" href="http://cordova.io">
|
<author email="dev@cordova.apache.org" href="http://cordova.io">
|
||||||
|
@ -70,6 +70,7 @@
|
||||||
<splash src="res/screen/ios/Default@3x~iphone~comany.png" />
|
<splash src="res/screen/ios/Default@3x~iphone~comany.png" />
|
||||||
<splash src="res/screen/ios/Default@2x~ipad~anyany.png" />
|
<splash src="res/screen/ios/Default@2x~ipad~anyany.png" />
|
||||||
<splash src="res/screen/ios/Default@2x~ipad~comany.png" />
|
<splash src="res/screen/ios/Default@2x~ipad~comany.png" />
|
||||||
|
<preference name="Allow3DTouchLinkPreview" value="false" />
|
||||||
</platform>
|
</platform>
|
||||||
<allow-navigation href="about:*" />
|
<allow-navigation href="about:*" />
|
||||||
<preference name="SplashMaintainAspectRatio" value="true" />
|
<preference name="SplashMaintainAspectRatio" value="true" />
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "de.wu5.flaschengeist",
|
"name": "flaschengeist.wu5.de",
|
||||||
"displayName": "Flaschengeist",
|
"displayName": "flaschengeist-frontend",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "A sample Apache Cordova application that responds to the deviceready event.",
|
"description": "A sample Apache Cordova application that responds to the deviceready event.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
|
@ -13,19 +13,25 @@
|
||||||
"author": "Apache Cordova Team",
|
"author": "Apache Cordova Team",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"cordova-android": "^9.0.0",
|
"cordova-android": "^9.1.0",
|
||||||
"cordova-ios": "^6.1.1",
|
"cordova-browser": "^6.0.0",
|
||||||
|
"cordova-ios": "^6.2.0",
|
||||||
"cordova-plugin-splashscreen": "^6.0.0",
|
"cordova-plugin-splashscreen": "^6.0.0",
|
||||||
"cordova-plugin-whitelist": "^1.3.4"
|
"cordova-plugin-whitelist": "^1.3.4",
|
||||||
|
"cordova-plugin-wkwebview-engine": "^1.2.2",
|
||||||
|
"cordova-sqlite-storage": "^6.0.0"
|
||||||
},
|
},
|
||||||
"cordova": {
|
"cordova": {
|
||||||
"plugins": {
|
"plugins": {
|
||||||
"cordova-plugin-whitelist": {},
|
"cordova-plugin-whitelist": {},
|
||||||
"cordova-plugin-splashscreen": {}
|
"cordova-plugin-wkwebview-engine": {},
|
||||||
|
"cordova-plugin-splashscreen": {},
|
||||||
|
"cordova-sqlite-storage": {}
|
||||||
},
|
},
|
||||||
"platforms": [
|
"platforms": [
|
||||||
"ios",
|
"ios",
|
||||||
"android"
|
"android",
|
||||||
|
"browser"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
import { useMainStore, api } from '@flaschengeist/api';
|
import { useMainStore, api, insertConfig } from '@flaschengeist/api';
|
||||||
import { LocalStorage, Notify } from 'quasar';
|
import { LocalStorage, Notify } from 'quasar';
|
||||||
import { AxiosError } from 'axios';
|
import { AxiosError } from 'axios';
|
||||||
import { boot } from 'quasar/wrappers';
|
import { boot } from 'quasar/wrappers';
|
||||||
|
@ -99,13 +99,14 @@ export { api };
|
||||||
export const setBaseURL = (url: string) => {
|
export const setBaseURL = (url: string) => {
|
||||||
LocalStorage.set('baseURL', url);
|
LocalStorage.set('baseURL', url);
|
||||||
api.defaults.baseURL = url;
|
api.defaults.baseURL = url;
|
||||||
|
insertConfig('baseUrl', url);
|
||||||
Notify.create({
|
Notify.create({
|
||||||
message: 'Serveraddresse gespeichert',
|
message: 'Serveraddresse gespeichert',
|
||||||
position: 'bottom',
|
position: 'bottom',
|
||||||
caption: `${url}`,
|
caption: `${url}`,
|
||||||
color: 'positive',
|
color: 'positive',
|
||||||
});
|
});
|
||||||
setTimeout(() => {
|
/*setTimeout(() => {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}, 5000);
|
}, 5000);*/
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue