App.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <template>
  2. <template v-if="retrieved">
  3. <app-sidebar />
  4. <main class="pl-16">
  5. <router-view />
  6. </main>
  7. <ui-dialog />
  8. <div
  9. v-if="false"
  10. class="p-4 shadow-2xl z-50 fixed bottom-8 left-1/2 -translate-x-1/2 rounded-lg bg-accent text-white flex items-center"
  11. >
  12. <v-remixicon name="riInformationLine" class="mr-3" />
  13. <p>
  14. {{ t('updateMessage.text1', { version: currentVersion }) }}
  15. </p>
  16. <a
  17. :href="`https://github.com/Kholid060/automa/releases/tag/v${currentVersion}`"
  18. class="underline ml-1"
  19. >
  20. {{ t('updateMessage.text2') }}
  21. </a>
  22. <button class="ml-6 text-gray-300" @click="isUpdated = false">
  23. <v-remixicon size="20" name="riCloseLine" />
  24. </button>
  25. </div>
  26. </template>
  27. </template>
  28. <script setup>
  29. import { ref, onMounted } from 'vue';
  30. import { useStore } from 'vuex';
  31. import { useI18n } from 'vue-i18n';
  32. import { compare } from 'compare-versions';
  33. import browser from 'webextension-polyfill';
  34. import { loadLocaleMessages, setI18nLanguage } from '@/lib/vue-i18n';
  35. import AppSidebar from '@/components/newtab/app/AppSidebar.vue';
  36. import { sendMessage } from '@/utils/message';
  37. const store = useStore();
  38. const { t } = useI18n();
  39. const retrieved = ref(false);
  40. const currentVersion = browser.runtime.getManifest().version;
  41. const prevVersion = localStorage.getItem('ext-version') || '0.0.0';
  42. const isUpdated = ref(compare(currentVersion, prevVersion, '>'));
  43. function handleStorageChanged(change) {
  44. if (change.logs) {
  45. store.dispatch('entities/create', {
  46. entity: 'logs',
  47. data: change.logs.newValue,
  48. });
  49. }
  50. if (change.workflowState) {
  51. store.commit('updateState', {
  52. key: 'workflowState',
  53. value: Object.values(change.workflowState.newValue || {}).filter(
  54. ({ isDestroyed, parentState }) =>
  55. !isDestroyed && !parentState?.isCollection
  56. ),
  57. });
  58. }
  59. }
  60. browser.storage.local.onChanged.addListener(handleStorageChanged);
  61. window.addEventListener('beforeunload', () => {
  62. browser.storage.local.onChanged.removeListener(handleStorageChanged);
  63. });
  64. onMounted(async () => {
  65. try {
  66. await store.dispatch('retrieve', ['workflows', 'logs', 'collections']);
  67. await store.dispatch('retrieveWorkflowState');
  68. await loadLocaleMessages(store.state.settings.locale, 'newtab');
  69. await setI18nLanguage(store.state.settings.locale);
  70. await sendMessage('workflow:check-state', {}, 'background');
  71. retrieved.value = true;
  72. } catch (error) {
  73. retrieved.value = true;
  74. console.error(error);
  75. }
  76. localStorage.setItem('ext-version', currentVersion);
  77. });
  78. </script>