1const DB_NAME = 'data-store'; 2const DB_VERSION = 1; 3let db; 4 5// Open IndexedDB 6function openDatabase() { 7 return new Promise((resolve, reject) => { 8 const request = indexedDB.open(DB_NAME, DB_VERSION); 9 10 request.onupgradeneeded = function(event) { 11 db = event.target.result; 12 }; 13 14 request.onsuccess = function(event) { 15 db = event.target.result; 16 // console.log('Database opened successfully'); 17 resolve(db); 18 }; 19 20 request.onerror = function(event) { 21 console.error('Database error:', event.target.errorCode); 22 reject(event.target.errorCode); 23 }; 24 }); 25} 26 27// Function to get data from IndexedDB 28async function getData(id) { 29 await openDatabase(); 30 31 return new Promise((resolve, reject) => { 32 const transaction = db.transaction(['sync-data']); 33 const objectStore = transaction.objectStore('sync-data'); 34 35 const request = objectStore.get(id); 36 37 request.onsuccess = function(event) { 38 if (event.target.result) { 39 // console.log('Data retrieved:', event.target.result); 40 resolve(event.target.result); 41 } else { 42 // console.log('No data found for ID:', id); 43 resolve(null); 44 } 45 }; 46 47 request.onerror = function(event) { 48 console.error('Error retrieving data:', event.target.errorCode); 49 reject(event.target.errorCode); 50 }; 51 }); 52} 53 54 55 56// Function to delete data from IndexedDB 57async function deleteData(id) { 58 await openDatabase(); 59 60 return new Promise((resolve, reject) => { 61 const transaction = db.transaction(['sync-data'], 'readwrite'); 62 const objectStore = transaction.objectStore('sync-data'); 63 64 const request = objectStore.delete(id); 65 66 request.onsuccess = function() { 67 // console.log('Data deleted successfully for ID:', id); 68 resolve(); 69 }; 70 71 request.onerror = function(event) { 72 // console.error('Error deleting data:', event.target.errorCode); 73 reject(event.target.errorCode); 74 }; 75 }); 76} 77 78function saveToServer(dataToSubmit, apiURL, dataKey){ 79 // console.log('Data to be sent:', dataToSubmit); 80 const deviceId = dataToSubmit.deviceId; 81 const groupId = dataToSubmit.groupId; 82 const token = dataToSubmit.token; 83 const data = dataToSubmit.data; 84 85 fetch(apiURL, { 86 method: 'POST', 87 headers: { 88 'Content-Type': 'application/json', 89 'Authorization': `Bearer ${token}`, 90 'GroupId': groupId, 91 'Platform': 'Web', 92 'AppName': 'SmartkeedaWeb', 93 'AppVersion': '198', 94 'DeviceId': deviceId 95 }, 96 body: JSON.stringify(data), 97 }).then((response) => { 98 if (response.ok) { 99 console.log('Data synced successfully'); 100 return deleteData(dataKey); 101 } else { 102 // console.error('Data sync failed'); 103 } 104 }).then(() => { 105 // console.log("data cleared from indexdb"); 106 }).catch(error => { 107 console.log(error); 108 }) 109} 110 111// Example of using getData in a sync event 112self.addEventListener('sync', async (event) => { 113 if (event.tag === 'sync-data') { 114 event.waitUntil( 115 (async () => { 116 const apiURL = 'https://testzone.smartkeeda.com/api/Testzone/SubmitTest'; 117 const dataKey = 'dataKey'; 118 119 const retryMeth = async (count) => { 120 if (count > 0) { 121 const dataToSubmit = await getData(dataKey); 122 123 if (dataToSubmit) { 124 saveToServer(dataToSubmit, apiURL, dataKey); 125 // the saveToServer call 126 // console.log("Data successfully saved to server."); 127 } else { 128 console.log("No data to submit, retrying..."); 129 setTimeout(async () => { 130 await retryMeth(count - 1); // Await the recursive call 131 }, 2000); 132 } 133 } else { 134 console.log("All retry attempts exhausted."); 135 } 136 }; 137 138 await retryMeth(3); 139 })() 140 ); 141 } 142 else if (event.tag === 'sync-revise-data') { 143 event.waitUntil( 144 (async () => { 145 const apiURL = 'https://testzone.smartkeeda.com/api/Testzone/Retake/SubmitTest'; 146 const dataKey = 'reviseDataKey'; 147 148 const retryMeth = async (count) => { 149 if (count > 0) { 150 const dataToSubmit = await getData(dataKey); 151 152 if (dataToSubmit) { 153 saveToServer(dataToSubmit, apiURL, dataKey); 154 // the saveToServer call 155 // console.log("Data successfully saved to server."); 156 } else { 157 console.log("No data to submit, retrying..."); 158 setTimeout(async () => { 159 await retryMeth(count - 1); 160 // Await the recursive call 161 }, 2000); 162 } 163 } else { 164 console.log("All retry attempts exhausted."); 165 } 166 }; 167 168 await retryMeth(3); 169 })() 170 ); 171 } 172}); 173
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.