From 366c77546aa546f58b66445b4945abfcd46ed765 Mon Sep 17 00:00:00 2001 From: Alex <56329333+404-Program-not-found@users.noreply.github.com> Date: Mon, 2 May 2022 16:01:48 +1200 Subject: [PATCH] feat(wip): back button API --- NUXT/layouts/default.vue | 19 +++++++++---------- NUXT/pages/watch.vue | 18 +++--------------- NUXT/plugins/classes/backHander.js | 26 ++++++++++++++++++++++++++ NUXT/plugins/vuetube.js | 22 ++++++++++++++++++++++ 4 files changed, 60 insertions(+), 25 deletions(-) create mode 100644 NUXT/plugins/classes/backHander.js diff --git a/NUXT/layouts/default.vue b/NUXT/layouts/default.vue index 929278c..4aac9c3 100644 --- a/NUXT/layouts/default.vue +++ b/NUXT/layouts/default.vue @@ -93,20 +93,19 @@ export default { }, mounted() { + this.$vuetube.resetBackActions(); //--- Back Button Listener ---// this.backHandler = CapacitorApp.addListener( "backButton", - ({ canGoBack }) => { - //--- Back Closes Search ---// - if (this.search) { - this.search = false; + this.$vuetube.back + ); - //--- Back Goes Back ---// - } else if (!canGoBack) { - CapacitorApp.exitApp(); - } else { - window.history.back(); - } + this.$vuetube.addBackAction( + () => { + this.search = false; + }, + () => { + return this.search; } ); diff --git a/NUXT/pages/watch.vue b/NUXT/pages/watch.vue index 6b77750..f763122 100644 --- a/NUXT/pages/watch.vue +++ b/NUXT/pages/watch.vue @@ -209,7 +209,7 @@ import VidLoadRenderer from "~/components/vidLoadRenderer.vue"; import { getCpn } from "~/plugins/utils"; import SlimVideoDescriptionRenderer from "~/components/UtilRenderers/slimVideoDescriptionRenderer.vue"; import ItemSectionRenderer from "~/components/SectionRenderers/itemSectionRenderer.vue"; -import legacyPlayer from "~/components/Player/legacy.vue" +import legacyPlayer from "~/components/Player/legacy.vue"; import vuetubePlayer from "~/components/Player/index.vue"; import ShelfRenderer from "~/components/SectionRenderers/shelfRenderer.vue"; import mainCommentRenderer from "~/components/Comments/mainCommentRenderer.vue"; @@ -260,22 +260,10 @@ export default { mounted() { this.mountedInit(); + this.$vuetube.resetBackActions(); this.backHandler = CapacitorApp.addListener( "backButton", - ({ canGoBack }) => { - //--- Back Closes Search ---// - if (this.showComments) { - this.showComments = false; - - //--- Back Goes Back ---// - } else if (!canGoBack) { - this.$router.replace( - `/${localStorage.getItem("startPage") || "home"}` - ); - } else { - window.history.back(); - } - } + this.$vuetube.back ); }, diff --git a/NUXT/plugins/classes/backHander.js b/NUXT/plugins/classes/backHander.js new file mode 100644 index 0000000..12fd4b2 --- /dev/null +++ b/NUXT/plugins/classes/backHander.js @@ -0,0 +1,26 @@ +import { App as CapacitorApp } from "@capacitor/app"; +export default class backHandler { + constructor() { + this.backStack = [] + } + + back({ canGoBack }) { + if (this.backStack.length > 0) { + let lastResult = false + while (!lastResult && this.backStack.length > 0) { + const backAction = this.backStack.pop() + lastResult = backAction() + } + if (lastResult) return + } + if (!canGoBack) { + CapacitorApp.exitApp(); + } else { + window.history.back(); + } + } + + addAction(callback) { + this.backStack.push(callback) + } +} \ No newline at end of file diff --git a/NUXT/plugins/vuetube.js b/NUXT/plugins/vuetube.js index 428964a..b71e154 100644 --- a/NUXT/plugins/vuetube.js +++ b/NUXT/plugins/vuetube.js @@ -6,6 +6,7 @@ import constants from "./constants"; import { hexToRgb, rgbToHex, parseEmoji } from "./utils"; import { Haptics, ImpactStyle } from "@capacitor/haptics"; import Vue from "vue"; +import backHandler from "./classes/backHander"; Vue.directive("emoji", { inserted: function (el) { @@ -14,6 +15,8 @@ Vue.directive("emoji", { }, }); +let backActions = new backHandler(); + const module = { //--- Get GitHub Commits ---// commits: new Promise((resolve, reject) => { @@ -109,6 +112,25 @@ const module = { rgbToHex(r, g, b) { return rgbToHex(r, g, b); }, + + resetBackActions() { + backActions = new backHandler(); + }, + + addBackAction(callback, condition = true) { + backActions.addAction(() => { + if (condition) { + callback(); + return true + } else { + return false + } + }); + }, + + back(listenerFunc) { + backActions.back(listenerFunc); + } }; //--- Start ---//