189 lines
4.6 KiB
JavaScript
189 lines
4.6 KiB
JavaScript
|
|
importScripts('/synclib.js');
|
|
|
|
var request = new RequestData(false);
|
|
var requestWHash = new RequestData(true);
|
|
var SWInterval = {};
|
|
|
|
|
|
function postCustomReqUpdate(url, cachecontent = '', datavalue = '', object = '') {
|
|
self.postMessage({
|
|
type: 'reqcacheupdate', data: {
|
|
url: url,
|
|
datavalue: datavalue,
|
|
object: object,
|
|
content: cachecontent
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
function LoadANDSendReqCache(url, datavalue = '', object = '') {
|
|
let cachecontent = reqcacheload(url, datavalue, object);
|
|
if (!cachedetails) { return false; }
|
|
postCustomReqUpdate(url, cachecontent, datavalue, object);
|
|
}
|
|
|
|
function postcacheHASHupdate(hashkey, content) {
|
|
if (!hashkey) { return false; }
|
|
self.postMessage({
|
|
type: 'cachehashupdate', data: {
|
|
hash: hashkey,
|
|
data: content
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
function FetchAndUpdateDatatoMainThread(urlstring, reqmethod = 'GET', objectdata = '', datavalue = '') {
|
|
let requestWHash = new RequestData(true);
|
|
requestWHash
|
|
.url(urlstring)
|
|
.type(reqmethod)
|
|
.data(objectdata)
|
|
.fromVarCache(false)
|
|
.success((response, responsehash) => {
|
|
if (responsehash) { postcacheHASHupdate(responsehash, response); }
|
|
postCustomReqUpdate(urlstring, response, datavalue, objectdata);
|
|
})
|
|
.error((err) => {
|
|
console.error(err);
|
|
})
|
|
.go();
|
|
}
|
|
|
|
function FetchCachePostInterval(url, interval, method, objectdata, datavalue) {
|
|
if (SWInterval[url]) {
|
|
console.log('Interval for ', url, 'is already set aborting');
|
|
return false;
|
|
}
|
|
SWInterval[url] = setInterval(() => {
|
|
FetchAndUpdateDatatoMainThread(url, method, objectdata, datavalue);
|
|
}, interval);
|
|
}
|
|
|
|
async function saveBlobToOPFS(Filename, blobcontent) {
|
|
|
|
if (!Filename || !blobcontent) {
|
|
console.error("Filename and blob content are required.");
|
|
return false;
|
|
}
|
|
try {
|
|
const opfsRoot = await navigator.storage.getDirectory();
|
|
const fileHandle = await opfsRoot.getFileHandle(Filename, { create: true });
|
|
const writableStream = await fileHandle.createWritable();
|
|
await writableStream.write(blobcontent);
|
|
await writableStream.close();
|
|
console.log('Blob saved to OPFS successfully!');
|
|
return true;
|
|
} catch (error) {
|
|
console.error('Error saving blob to OPFS:', error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
var FileRequestUrl = '/RequestData/File/';
|
|
|
|
function fetchfileBlob(Hashkey, success, error = false, reqmethod = 'GET') {
|
|
|
|
|
|
if (!Hashkey) { return false; }
|
|
let requestWHash = new RequestData(true);
|
|
requestWHash
|
|
.url(FileRequestUrl + Hashkey)
|
|
.type(reqmethod)
|
|
.data(null)
|
|
.fromVarCache(false)
|
|
.success(async (response) => {
|
|
if (!response) { return false; }
|
|
if (success) {
|
|
success(response, Hashkey);
|
|
}
|
|
|
|
|
|
sendBlobfromOPFS(Hashkey,response);
|
|
|
|
|
|
saveBlobToOPFS(Hashkey, response);
|
|
})
|
|
.error((err) => {
|
|
// console.error(err);
|
|
if (error) {
|
|
error(err);
|
|
}
|
|
})
|
|
.go();
|
|
|
|
}
|
|
|
|
async function fetchDataFromOPFS(filename) {
|
|
try {
|
|
const opfsRoot = await navigator.storage.getDirectory();
|
|
|
|
// Access the file handle
|
|
const fileHandle = await opfsRoot.getFileHandle(filename, { create: false });
|
|
|
|
const file = await fileHandle.getFile();
|
|
const blob = await file.arrayBuffer();
|
|
const contentsBlob = new Blob([blob]);
|
|
return contentsBlob;
|
|
} catch (error) {
|
|
console.error('Error fetching data from OPFS:', error);
|
|
return null; // Return null in case of error
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function sendBlobfromOPFS(hashkey,blobdata){
|
|
if (!hashkey || !blobdata){return false;}
|
|
self.postMessage({
|
|
type: 'BlobfromOPFS', data: {
|
|
hash: hashkey,
|
|
blob: blobdata
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
|
|
|
|
function InitializeAutoSyncFunctions() {
|
|
FetchDataAndPostInterval('/get/isloggedin', 'loggedin', 30000);
|
|
FetchDataAndPostInterval('/get/isExec', 'exec', 30000);
|
|
FetchCachePostInterval('/account_settings/details', 60000);
|
|
//FetchCachePostInterval('/ListLeads/List/data', 60000, 'POST');
|
|
//FetchCachePostInterval('/NewLeads/Form/PreferredSitesOption', 60000, 'POST');
|
|
|
|
}
|
|
|
|
InitializeAutoSyncFunctions();
|
|
|
|
|
|
self.onmessage = async function (event) {
|
|
|
|
|
|
const eventdata = event.data;
|
|
const eventtype = event.data.type;
|
|
if (eventtype === 'FileblobOPFS') {
|
|
fetchfileBlob(event.data.hash, event.data.success, event.error);
|
|
return false;
|
|
}
|
|
|
|
if (eventtype === 'GetBlobOPFSfromHash') {
|
|
const filename = eventdata.hash;
|
|
const blob = await fetchDataFromOPFS(filename);
|
|
|
|
if (blob) {
|
|
|
|
sendBlobfromOPFS(eventdata.hash, blob);
|
|
} else {
|
|
console.error('Failed to fetch blob for:', filename);
|
|
self.postMessage({ type: 'error', message: 'Failed to fetch blob' });
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
|