mirror of
https://github.com/VueTubeApp/VueTube
synced 2024-11-18 01:05:13 +00:00
66 lines
2 KiB
JavaScript
66 lines
2 KiB
JavaScript
import { App as CapacitorApp } from "@capacitor/app";
|
|
import { Capacitor } from "@capacitor/core";
|
|
import backType from "./backType";
|
|
export default class backHandler {
|
|
constructor() {
|
|
this.backStack = []; // This should only contain instances of backType. Any other type will be ignored.
|
|
if (Capacitor.getPlatform() != "web") this.startUp(); // Only run on native platforms.
|
|
}
|
|
|
|
startUp() {
|
|
this.reset();
|
|
|
|
// Add a listener for the back button.
|
|
this.backHandler = CapacitorApp.addListener("backButton", (context) => {
|
|
this.back(context);
|
|
});
|
|
|
|
// Start garbage collection. Run every 5 minutes.
|
|
setInterval(() => {
|
|
() => {
|
|
this.garbageCollect;
|
|
};
|
|
}, 5 * 60 * 1000);
|
|
}
|
|
|
|
reset() {
|
|
this.backStack = [];
|
|
}
|
|
|
|
back({ canGoBack }) {
|
|
console.log("backStack", this.backStack);
|
|
// Check if backStack contains any backType objects. If so, call the goBack() function.
|
|
if (this.backStack.length > 0) {
|
|
// Loop through the backStack array.
|
|
let lastResult = false;
|
|
while (!lastResult && this.backStack.length > 0) {
|
|
const backAction = this.backStack.pop();
|
|
lastResult = backAction.goBack();
|
|
}
|
|
// Since a function was successfully called, no need to continue.
|
|
if (lastResult) return;
|
|
}
|
|
if (!canGoBack) {
|
|
// If we can't go back, then we should exit the app.
|
|
CapacitorApp.exitApp();
|
|
} else {
|
|
// If we can go back, then we should go back.
|
|
window.history.back();
|
|
}
|
|
}
|
|
|
|
addAction(callback) {
|
|
if (callback instanceof backType) {
|
|
this.backStack.push(callback);
|
|
} else {
|
|
throw new TypeError("backType object expected");
|
|
}
|
|
}
|
|
|
|
// Loops through the backStack array if array larger than 10. If backType.check() returns false, then remove it from the backStack array.
|
|
garbageCollect() {
|
|
if (this.backStack.length > 10) {
|
|
this.backStack = this.backStack.filter((backType) => backType.check());
|
|
}
|
|
}
|
|
}
|