add version check for incompatible changes on startup
Mwebclient/src/App.tsx
@@ -13,7 +13,6 @@ import PlaylistManager from "./components/PlaylistManager";
import { BUILD_HASH } from "./build-info";
import { createStore } from "solid-js/store";
//TODO: show offline-only files in online mode as well
//TODO: add loading state to playercontrols
//TODO: search
//TODO: better touch controls?
Mwebclient/src/index.tsx
@@ -1,6 +1,7 @@
/* @refresh reload */
import { render } from "solid-js/web";
import "./style.css";
import "./components/Dialog.css";
import App from "./App";
import { loadDataFromDB } from "./offline";
@@ -42,11 +43,54 @@ if (hasTouch()) {
} catch {}
}
loadDataFromDB()
.then(() => {
root.innerHTML = "";
render(() => <App />, root);
})
.catch((e) => {
root.innerHTML = e.toString();
});
const currentVersion = "1";
const version = localStorage.getItem("app-version");
if (version && version !== currentVersion) {
root.innerHTML = "";
render(
() => (
<div style={{ display: "flex", height: "100%", "align-items": "center" }}>
<dialog open>
<div>
Your local version of this application is not compatible with the newly loaded one, click reset to delete
all stored settings, files and cached and refresh the page.
<button
onClick={async () => {
localStorage.clear();
if ("serviceWorker" in navigator) {
caches.keys().then((cacheNames) => {
for (const cacheName of cacheNames) {
caches.delete(cacheName);
}
});
}
indexedDB.deleteDatabase("music-files").onsuccess = () => {
location.hash = "";
location.reload();
};
}}
>
Reset
</button>
</div>
</dialog>
</div>
),
root,
);
} else {
if (!version) {
try {
localStorage.setItem("app-version", currentVersion);
} catch {}
}
loadDataFromDB()
.then(() => {
root.innerHTML = "";
render(() => <App />, root);
})
.catch((e) => {
root.innerHTML = e.toString();
});
}