suspend
This commit is contained in:
197
src/libs/page.js
Normal file
197
src/libs/page.js
Normal file
@@ -0,0 +1,197 @@
|
||||
import { getStoreKey } from "@/api/lock";
|
||||
import storage from "@/libs/storage";
|
||||
import { getNoteMetaNew, getNoteBlob } from "@/api/note";
|
||||
import { reject } from "bluebird";
|
||||
import { unwrap, md5 } from '@/libs/secret'
|
||||
|
||||
|
||||
export async function initPageData(view) {
|
||||
|
||||
let noteKey = view.noteForm.key;
|
||||
|
||||
let storeKey = getStoreKey(noteKey);
|
||||
view.secret.storeKey = storeKey;
|
||||
|
||||
let keyMeta = storage.session.getObject("keyMeta");
|
||||
if (keyMeta) {
|
||||
view.state.lock = 0;
|
||||
view.secret.cipher = keyMeta.cipher;
|
||||
view.secret.secretKey = keyMeta.secretKey;
|
||||
view.state.serverTime = keyMeta.serverTime;
|
||||
// key init Time
|
||||
view.state.initTime = keyMeta.serverTime;
|
||||
|
||||
await storage.local.setText(storeKey, "0|" + view.secret.cipher + "|0|" + view.state.initTime + "|");
|
||||
storage.session.delete("keyMeta");
|
||||
return "000000";
|
||||
}
|
||||
|
||||
let noteMeta = storage.session.getObject(noteKey+".noteMeta");
|
||||
|
||||
if(null==noteMeta){
|
||||
let resp = await getNoteMetaNew(view.noteForm.key);
|
||||
if (null == resp || null == resp.data) {
|
||||
return "100006";
|
||||
}
|
||||
let result = resp.data;
|
||||
if (result.code != '000000') {
|
||||
return result.code;
|
||||
}
|
||||
let noteMeta = result.data;
|
||||
if (null == noteMeta) {
|
||||
return "100001";
|
||||
}
|
||||
if (null == noteMeta.key) {
|
||||
return "100002";
|
||||
}
|
||||
storage.session.setObject(noteKey+".noteMeta",noteMeta);
|
||||
}else{
|
||||
getNoteMetaNew(view.noteForm.key).then(function(resp){
|
||||
if (null == resp || null == resp.data) {
|
||||
return "100006";
|
||||
}
|
||||
let result = resp.data;
|
||||
if (result.code != '000000') {
|
||||
return result.code;
|
||||
}
|
||||
let noteMeta = result.data;
|
||||
if (null == noteMeta) {
|
||||
return "100001";
|
||||
}
|
||||
if (null == noteMeta.key) {
|
||||
return "100002";
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//view
|
||||
if (1 == noteMeta.state) {
|
||||
|
||||
view.secret.secretKey = noteMeta.secretKey;
|
||||
|
||||
view.state.lock = noteMeta.lock;
|
||||
view.state.initTime = new Date().getTime();
|
||||
view.state.initTtl = noteMeta.ttl;
|
||||
view.state.ttl = noteMeta.ttl;
|
||||
view.state.serverTime = noteMeta.serverTime;
|
||||
|
||||
view.secret.cipher = "00000000000000000000000000000000";//noteMeta.cipher; //读者有没有值可配置
|
||||
view.secret.md5 = noteMeta.md5;
|
||||
|
||||
await loadText(view);
|
||||
return "000000";
|
||||
}
|
||||
|
||||
//deleted
|
||||
if (0 == noteMeta.state) {
|
||||
let storeKey = getStoreKey(noteKey);
|
||||
storage.local.delete(storeKey);
|
||||
// user deleted
|
||||
if (noteMeta.ttl > 0) {
|
||||
// errorMeta = 100003;
|
||||
return "100003";
|
||||
//return errorRouter(100003);
|
||||
} else {// timeout
|
||||
// errorMeta = 100004;
|
||||
return "100004";
|
||||
//return errorRouter(100004);
|
||||
}
|
||||
}
|
||||
|
||||
//edit or unsubmitted
|
||||
if (null == noteMeta.state) {
|
||||
let storeKey = getStoreKey(noteKey);
|
||||
const storeInfo = await storage.local.getText(storeKey);
|
||||
|
||||
//if has storage , then edit
|
||||
if (null != storeInfo) {
|
||||
view.secret.secretKey = noteMeta.secretKey;
|
||||
|
||||
let starray = storeInfo.split('|');
|
||||
view.state.lock = parseInt(starray[0]);
|
||||
view.secret.cipher = starray[1];
|
||||
view.state.initTime = parseInt(starray[3]);
|
||||
//draw text;
|
||||
if (starray[4]) {
|
||||
view.noteForm.text = unwrap(starray[4], view.secret.secretKey);
|
||||
}
|
||||
|
||||
return "000000";
|
||||
}
|
||||
|
||||
//storage is empty
|
||||
let df = storage.session.getText(storeKey + "_delete")
|
||||
if (df) {//unsubmitted,user deleted.
|
||||
// errorMeta = 100003;
|
||||
return "100003";
|
||||
} else {//unsubmitted
|
||||
// errorMeta = 100005;
|
||||
return "100005";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
async function loadText(view) {
|
||||
|
||||
let storeInfo = await storage.local.getText(view.secret.storeKey);
|
||||
|
||||
let starray = [];
|
||||
if (storeInfo) {
|
||||
starray = storeInfo.split('|');
|
||||
}
|
||||
|
||||
if (!storeInfo || !starray[4] || (md5(starray[4]) != view.secret.md5)) {
|
||||
|
||||
let bytesString = await getServerNote(view.noteForm.key);
|
||||
view.noteForm.text = unwrap(bytesString, view.secret.secretKey);
|
||||
} else {
|
||||
starray = storeInfo.split('|');
|
||||
|
||||
if (!starray[4]) {
|
||||
return;
|
||||
}
|
||||
|
||||
view.noteForm.text = unwrap(starray[4], view.secret.secretKey);
|
||||
//this.noteForm.escapeText = getEscapeText(this.noteForm.text);
|
||||
|
||||
// local is usable, and set commited flag
|
||||
if ("0" == starray[2]) {
|
||||
storage.local.setText(this.secret.storeKey, starray[0] + "|" + starray[1] + "|1|" + starray[3] + "|" + starray[4]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function getServerNote(key) {
|
||||
let resp = await getNoteBlob(key)
|
||||
if (!resp.data || resp.data.size == 0) {
|
||||
return "100006";
|
||||
}
|
||||
|
||||
let blob = new Blob([resp.data], {
|
||||
type: resp.data.type
|
||||
});
|
||||
|
||||
let bytesString = await fileReader(blob);
|
||||
|
||||
return bytesString;
|
||||
|
||||
|
||||
}
|
||||
|
||||
async function fileReader(blob) {
|
||||
return new Promise(function (resolve) {
|
||||
let reader = new FileReader();
|
||||
reader.onload = function (e) {
|
||||
if (!e.target.result || e.target.result.byteLength == 0) {
|
||||
reject("");
|
||||
}
|
||||
var bytes = new Uint8Array(e.target.result);
|
||||
bytes = bytes.subarray(7, bytes.length - 7);
|
||||
let bytesString = bytes.join(",");
|
||||
resolve(bytesString);
|
||||
};
|
||||
reader.readAsArrayBuffer(blob)
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user