243 lines
7.2 KiB
JavaScript
243 lines
7.2 KiB
JavaScript
import {Log} from './debug';
|
|
|
|
const SQL = require('sql.js')
|
|
|
|
|
|
export class DB{
|
|
static cdb;
|
|
static loaded = false;
|
|
static loadedCB = [];
|
|
static newDB(){
|
|
Log.debug('create new database');
|
|
DB.cdb = new SQL.Database();
|
|
DB.cdb.exec(
|
|
`CREATE TABLE settings (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
ke TEXT not null,
|
|
val TEXT not null
|
|
);
|
|
CREATE TABLE days (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
date DATETIME ,
|
|
startTime DATETIME ,
|
|
breakTime INTEGER ,
|
|
endTime DATETIME ,
|
|
taskList TEXT
|
|
);
|
|
CREATE TABLE tasks (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
taskName TEXT not NULL
|
|
);
|
|
INSERT INTO settings (ke,val)
|
|
VALUES ('name','Max');
|
|
INSERT INTO settings (ke,val)
|
|
VALUES ('start','2018-08-01');
|
|
`)
|
|
DB.loaded = true;
|
|
DB.__load()
|
|
DB.storeLocalStorage()
|
|
}
|
|
static storeLocalStorage(){
|
|
var data = DB.cdb.export();
|
|
var buffer = new Buffer(data);
|
|
var blob = new Blob([buffer]);
|
|
var reader = new FileReader();
|
|
reader.onload = function() {
|
|
localStorage.setItem('storage',reader.result)
|
|
}
|
|
reader.readAsBinaryString(blob);
|
|
}
|
|
static loadLocalStorage(){
|
|
var i, l, d, array;
|
|
array = new Uint8Array(localStorage.getItem('storage'));
|
|
for (var i = 0; i < l; i++){
|
|
array[i] = d.charCodeAt(i);
|
|
}
|
|
DB.loadDB(array);
|
|
DB.loaded = true;
|
|
DB.__load()
|
|
}
|
|
/**
|
|
*
|
|
* @param {type:Uint8Array} file Uint8Array
|
|
*/
|
|
static loadDB(file){
|
|
Log.debug('load database');
|
|
|
|
DB.cdb = new SQL.Database(file);
|
|
DB.storeLocalStorage()
|
|
DB.loaded = true;
|
|
DB.__load()
|
|
return "";
|
|
}
|
|
static __load(){
|
|
Log.debug('DB onload EVENT');
|
|
for(var l in DB.loadedCB){
|
|
DB.loadedCB[l]();
|
|
}
|
|
}
|
|
static onLoad(cb){
|
|
Log.debug('added DB onload EVENT');
|
|
DB.loadedCB.push(cb);
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
static exportDB(){
|
|
Log.debug('export database');
|
|
var data = DB.cdb.export();
|
|
var buffer = new Buffer(data);
|
|
console.log(buffer);
|
|
var blob = new Blob([buffer],{type:'application/x-sqlite3'});
|
|
console.log(blob);
|
|
console.log(window.URL.createObjectURL(blob));
|
|
var link = document.createElement('a');
|
|
link.href = window.URL.createObjectURL(blob);
|
|
var fileName = "wbm.sqlite";
|
|
link.download = fileName;
|
|
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
document.body.removeChild(link);
|
|
window.URL.revokeObjectURL(link);
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* @param {*} date
|
|
*/
|
|
static loadDate(date){
|
|
//var re = DB.cdb.exec("SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'");
|
|
//console.log(re)
|
|
console.log(date)
|
|
Log.debug('load from date:'+date.getTime())
|
|
var sql = `SELECT * FROM days WHERE date=:date;`;
|
|
var stmt = DB.cdb.prepare(sql);
|
|
var res = stmt.getAsObject({":date":date.getTime()})
|
|
stmt.free();
|
|
Log.debug(JSON.stringify(res));
|
|
|
|
if(Object.keys(res).length === 0){
|
|
return {breakTime: 0, date: null,startTime:null, endTime: null, taskList:[]}
|
|
}else{
|
|
var tasks = res.taskList.split(',');
|
|
sql = `SELECT * FROM tasks WHERE id=:id`;
|
|
for ( var task in tasks){
|
|
stmt = DB.cdb.prepare(sql);
|
|
tasks[task] = stmt.getAsObject({":id":tasks[task]}).taskName;
|
|
stmt.free();
|
|
}
|
|
res.taskList = tasks;
|
|
return res;
|
|
}
|
|
}
|
|
static saveDate(args){
|
|
Log.debug('save date');
|
|
Log.debug(JSON.stringify(args))
|
|
var sql;
|
|
var stmt;
|
|
var res;
|
|
var tasks = args.taskList;
|
|
var taskss = []
|
|
console.log(tasks);
|
|
for(var t in tasks){
|
|
if(typeof tasks[t] === 'undefined'){
|
|
continue;
|
|
}
|
|
tasks[t] = tasks[t].trim();
|
|
sql = `SELECT * FROM tasks WHERE taskName=:task`;
|
|
stmt = DB.cdb.prepare(sql);
|
|
res = stmt.getAsObject({':task':tasks[t]});
|
|
stmt.free();
|
|
console.log(res);
|
|
if(Object.keys(res).length === 0){
|
|
sql = `INSERT INTO tasks(taskName) VALUES(:task);`;
|
|
stmt = DB.cdb.prepare(sql);
|
|
res = stmt.getAsObject(
|
|
{
|
|
":task":tasks[t]
|
|
}
|
|
)
|
|
stmt.free()
|
|
sql = `SELECT * FROM tasks WHERE taskName=:task`;
|
|
stmt = DB.cdb.prepare(sql);
|
|
res = stmt.getAsObject({':task':tasks[t]});
|
|
stmt.free();
|
|
console.log(res);
|
|
}
|
|
taskss[t]= res.id;
|
|
|
|
}
|
|
sql = `SELECT * FROM days WHERE date=:date;`;
|
|
stmt = DB.cdb.prepare(sql);
|
|
console.log(args);
|
|
res = stmt.getAsObject({":date":args.date})
|
|
stmt.free()
|
|
|
|
if(Object.keys(res).length === 0){
|
|
Log.debug('added new entry');
|
|
Log.debug(JSON.stringify(args))
|
|
sql = `INSERT INTO days(date,startTime,breakTime,endTime,taskList) VALUES(:date,:startTime,:breakTime,:endTime,:taskList);`;
|
|
stmt = DB.cdb.prepare(sql);
|
|
res = stmt.getAsObject(
|
|
{
|
|
":date":args.date,
|
|
":startTime":args.startTime,
|
|
":breakTime":args.breakTime,
|
|
":endTime":args.endTime,
|
|
":taskList":taskss.join()
|
|
}
|
|
)
|
|
stmt.free()
|
|
}else{
|
|
Log.debug('update entry');
|
|
Log.debug(JSON.stringify(args))
|
|
sql = `UPDATE days SET startTime=:startTime,breakTime=:breakTime,endTime=:endTime,taskList=:taskList WHERE date=:date;`;
|
|
stmt = DB.cdb.prepare(sql);
|
|
res = stmt.getAsObject(
|
|
{
|
|
":date":args.date,
|
|
":startTime":args.startTime,
|
|
":breakTime":args.breakTime,
|
|
":endTime":args.endTime,
|
|
":taskList":taskss.join()
|
|
}
|
|
)
|
|
Log.debug(res);
|
|
stmt.free()
|
|
}
|
|
}
|
|
static handleTasks(){
|
|
|
|
}
|
|
|
|
|
|
|
|
static loadSettings(key){
|
|
var sql = `SELECT * FROM settings WHERE ke=:key`;
|
|
var stmt = DB.cdb.prepare(sql);
|
|
var res = stmt.getAsObject({':key':key});
|
|
stmt.free();
|
|
return res;
|
|
|
|
}
|
|
/**
|
|
*
|
|
* @param {*} obj name: Name , start: Date ( 2018-08-01 )
|
|
*/
|
|
static saveSettings(obj){
|
|
var sql = `UPDATE settings SET val=:name WHERE ke="name"`;
|
|
var stmt = DB.cdb.prepare(sql);
|
|
stmt.getAsObject({':name':obj.name});
|
|
stmt.free();
|
|
|
|
sql = `UPDATE settings SET val=:start WHERE ke="start"`;
|
|
stmt = DB.cdb.prepare(sql);
|
|
stmt.getAsObject({':start':obj.start});
|
|
stmt.free();
|
|
return "";
|
|
}
|
|
} |