Skip to content
Snippets Groups Projects

Resolve "Can't send email when the gmail was left open and the pc went to sleep for a while"

1 file
+ 87
102
Compare changes
  • Side-by-side
  • Inline
@@ -215,32 +215,24 @@ const handleIdentityLogin = (identity, uuid, token) => {
setKeyForUUID(uuid, publicKey);
};
function executeRestfulFunction(type, that, fn, ...args) {
async function executeRestfulFunction(type, that, fn, ...args) {
const { currentlyAuthenticatedIdentity, viamApi, currentlyLoadedIdentity } = window;
const response = await fn.apply(that, args);
return new Penpal.Promise(executeResult => {
fn.apply(that, args).then((response) => {
const identity = currentlyAuthenticatedIdentity || currentlyLoadedIdentity;
if (type === "private" && identity && response.data.code === "400" && response.data.status === "Bad session") {
viamApi.identityLogin("previousaddeddevice")
.then((response) => {
if (response.data.code === "200") {
const uuid = response.data.data["Uuid"];
const token = response.data.data["Session"];
handleIdentityLogin(identity, uuid, token);
// TODO: Previously there was fn.apply(null, args) where null is probably wrong context for fn.apply()
fn.apply(that, args).then(({data}) => executeResult(data));
} else {
executeResult(response.data);
}
})
.catch(console.warn);
} else {
executeResult(response.data);
}
});
});
const identity = currentlyAuthenticatedIdentity || currentlyLoadedIdentity;
const badSession = type === "private" && identity && response.data.code === "400" &&
response.data.status === "Bad session";
if (!badSession) return response.data;
const loginResponse = await viamApi.identityLogin("previousaddeddevice");
if (loginResponse.data.code !== "200") return loginResponse.data;
const uuid = loginResponse.data.data["Uuid"];
const token = loginResponse.data.data["Session"];
handleIdentityLogin(identity, uuid, token);
const { data } = await fn.apply(that, args);
return data;
}
window.executeRestfulFunction = executeRestfulFunction;
@@ -1101,17 +1093,17 @@ connection.promise.then(parent => {
}
}
var anynomousDeviceKeyEventsProcessing = false;
var maxDeviceKeyAnonymousEventTime = 0;
let anynomousDeviceKeyEventsProcessing = false;
let maxDeviceKeyAnonymousEventTime = 0;
var eventsDeviceEventsProcessing = false;
var maxDeviceKeyEventTime = 0;
let eventsDeviceEventsProcessing = false;
let maxDeviceKeyEventTime = 0;
var eventsEntityEventsProcessing = false;
var maxEntityEventTime = 0;
let eventsEntityEventsProcessing = false;
let maxEntityEventTime = 0;
var identityLoadedEvent = false;
var identityAuthenticatedEvent = false;
let identityLoadedEvent = false;
let identityAuthenticatedEvent = false;
setInterval(async function () {
if (window.currentlyAuthenticatedIdentity) {
@@ -1170,15 +1162,16 @@ connection.promise.then(parent => {
}
}, 50);
setInterval(function() {
setInterval(async () => {
if (window.currentlyLoadedIdentity && !anynomousDeviceKeyEventsProcessing && !window.currentlyAuthenticatedIdentity) {
anynomousDeviceKeyEventsProcessing = true;
executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, "devicekey").then(async executeResult => {
try {
const executeResult = await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, "devicekey");
if(executeResult.code === "200") {
var eventsLen = executeResult.data.length;
const eventsLen = executeResult.data.length;
let changedMaxDeviceKeyAnonymousEventTime = false;
for (var i = 0; i < eventsLen; i++) {
var event = executeResult.data[i];
for (let i = 0; i < eventsLen; i++) {
const event = executeResult.data[i];
switch (event.type) {
case "Authenticated" : {
const uuid = event.payloads[0];
@@ -1186,25 +1179,23 @@ connection.promise.then(parent => {
handleIdentityLogin(window.currentlyLoadedIdentity, uuid, token);
const identityToStore = window.currentlyAuthenticatedIdentity;
event.payloads = [{fromQRCode: true}];
setIdentityInLocalStorage(identityToStore).then(() => {
getProfileData(identityToStore).then(() => {
parent.onEvent(event);
});
});
await setIdentityInLocalStorage(identityToStore);
await getProfileData(identityToStore);
parent.onEvent(event);
break;
}
case "QRCodeUpdated" : {
var actionID = event["actionID"];
var QrCode = event["payloads"][1];
const actionID = event["actionID"];
const QrCode = event["payloads"][1];
var eventCopy = JSON.parse(JSON.stringify(event));
const eventCopy = JSON.parse(JSON.stringify(event));
QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
eventCopy["payloads"].push(url);
parent.onEvent(eventCopy)
parent.onEvent(eventCopy);
});
break
break;
}
case "KeyDeleted" : {
@@ -1219,106 +1210,100 @@ connection.promise.then(parent => {
window.lastTimeGetProfile = 0;
destroyIdentityFromLocalStorage(authenticationPublicKey);
break
break;
}
default : {
parent.onEvent(event)
parent.onEvent(event);
}
}
changedMaxDeviceKeyAnonymousEventTime = true;
maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp)
maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp);
}
if(changedMaxDeviceKeyAnonymousEventTime) {
executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession,
"devicekey", maxDeviceKeyAnonymousEventTime.toString()).then(() => {
anynomousDeviceKeyEventsProcessing = false;
});
} else {
anynomousDeviceKeyEventsProcessing = false;
await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession,
"devicekey", maxDeviceKeyAnonymousEventTime.toString());
}
} else {
anynomousDeviceKeyEventsProcessing = false;
}
});
} catch (e) {
console.warn(e);
}
anynomousDeviceKeyEventsProcessing = false;
}
if (window.currentlyAuthenticatedIdentity != null && eventsDeviceEventsProcessing === false) {
eventsDeviceEventsProcessing = true;
executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, "devicekey").then(executeResult => {
if(executeResult.code === "200") {
var eventsLen = executeResult.data.length;
try {
const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, "devicekey");
if (executeResult.code === "200") {
const eventsLen = executeResult.data.length;
const changedMaxDeviceKeyEventTime = false;
for(var i = 0; i < eventsLen; i++) {
var event = executeResult.data[i];
if(event.type === "QRCodeUpdated") {
var actionID = event["actionID"];
var QrCode = event["payloads"][1];
for (let i = 0; i < eventsLen; i++) {
const event = executeResult.data[i];
if (event.type === "QRCodeUpdated") {
const actionID = event["actionID"];
const QrCode = event["payloads"][1];
var eventCopy = JSON.parse(JSON.stringify(event));
const eventCopy = JSON.parse(JSON.stringify(event));
QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
eventCopy["payloads"].push(url);
parent.onEvent(eventCopy)
})
parent.onEvent(eventCopy);
});
} else {
parent.onEvent(event)
parent.onEvent(event);
}
maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp)
maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp);
}
if(changedMaxDeviceKeyEventTime) {
executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, "devicekey",
maxDeviceKeyEventTime.toString()).then(executeResult1 => {
eventsDeviceEventsProcessing = false
})
} else {
eventsDeviceEventsProcessing = false
await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, "devicekey",
maxDeviceKeyEventTime.toString());
}
} else {
eventsDeviceEventsProcessing = false
}
});
} catch (e) {
console.warn(e);
}
eventsDeviceEventsProcessing = false;
}
if (window.currentlyAuthenticatedIdentity != null && eventsEntityEventsProcessing === false) {
eventsEntityEventsProcessing = true;
executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, "entity").then(executeResult => {
if(executeResult.code === "200") {
var eventsLen = executeResult.data.length;
try {
const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, "entity");
if (executeResult.code === "200") {
const eventsLen = executeResult.data.length;
let changedMaxEntityEventTime = false;
for(var i = 0; i < eventsLen; i++) {
event = executeResult.data[i];
if(event.type === "QRCodeUpdated") {
var actionID = event["actionID"];
var QrCode = event["payloads"][1];
for (let i = 0; i < eventsLen; i++) {
const event = executeResult.data[i];
if (event.type === "QRCodeUpdated") {
const actionID = event["actionID"];
const QrCode = event["payloads"][1];
var eventCopy = JSON.parse(JSON.stringify(event));
const eventCopy = JSON.parse(JSON.stringify(event));
QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
eventCopy["payloads"].push(url);
parent.onEvent(eventCopy)
parent.onEvent(eventCopy);
});
continue
continue;
}
parent.onEvent(event);
changedMaxEntityEventTime = true;
maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp)
maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp);
}
if(changedMaxEntityEventTime) {
executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, "entity",
maxEntityEventTime.toString()).then(executeResult1 => {
eventsEntityEventsProcessing = false
})
} else {
eventsEntityEventsProcessing = false
await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, "entity",
maxEntityEventTime.toString());
}
} else {
eventsEntityEventsProcessing = false
}
});
} catch (e) {
console.warn(e);
}
eventsEntityEventsProcessing = false;
}
}, 1000);
});
Loading