Skip to content

Commit 90bf407

Browse files
committed
fix: bugsnag detected app crash on launch if less refresh not present
1 parent 0bfb495 commit 90bf407

1 file changed

Lines changed: 25 additions & 3 deletions

File tree

src/index.html

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@
132132
This is a nuke cache option. Though mostly safe, Use it wisely to prevent slow startup when resetting.
133133
*/
134134
const urlParams = new URLSearchParams(window.location.search || "");
135+
const LESS_REFRESH_SCHEDULED_KEY = "lessRefreshScheduled";
136+
const shouldRefreshLess = window.localStorage.getItem(LESS_REFRESH_SCHEDULED_KEY) === 'yes';
135137
const CACHE_NAME_EVERYTHING = "everything";
136138
function _resetCacheIfNeeded() {
137139
window.cacheClearError;
@@ -165,16 +167,24 @@
165167
return Promise.all(promises);
166168
}).then(() => {
167169
console.log("CacheStorage Reset: Cache successfully reset");
168-
setInterval(()=>{
170+
let totalWaitTime = 0, waitTime = 100, maxWaitTime = 3000;
171+
let intervalTimer = setInterval(()=>{
169172
// wait for less to get loaded. less caches css in local storage in production urls
170173
// and might not load new css classes if we don't reset. less doesn't cache in localhost.
171-
if(window.less){
174+
totalWaitTime += waitTime;
175+
if(window.less && less.refresh){
172176
less.refresh(true).finally(()=>{
173177
localStorage.setItem(cacheKey, newCacheVersion);
174178
location.reload();
175179
});
180+
clearInterval(intervalTimer);
181+
} else if(totalWaitTime > maxWaitTime){
182+
// ignore less refresh, the app load itself is critical. less refresh we will try later
183+
localStorage.setItem(cacheKey, newCacheVersion);
184+
localStorage.setItem(LESS_REFRESH_SCHEDULED_KEY, "yes");
185+
location.reload();
176186
}
177-
}, 100);
187+
}, waitTime);
178188
}).catch( e => {
179189
console.error("Error while resetting cache", e);
180190
window.cacheClearError = e;
@@ -188,6 +198,18 @@
188198
throw e;
189199
});
190200
}
201+
if(shouldRefreshLess){
202+
let lessRefreshInterval = setInterval(()=>{
203+
// wait for less to get loaded. less caches css in local storage in production urls
204+
// and might not load new css classes if we don't reset. less doesn't cache in localhost.
205+
if(window.less && less.refresh){
206+
less.refresh(true).finally(()=>{
207+
localStorage.setItem(LESS_REFRESH_SCHEDULED_KEY, "no");
208+
});
209+
clearInterval(lessRefreshInterval);
210+
}
211+
}, 500);
212+
}
191213
}
192214
_resetCacheIfNeeded();
193215
</script>

0 commit comments

Comments
 (0)