diff --git a/.env b/.env index 1b39328..0df7407 100644 --- a/.env +++ b/.env @@ -1,4 +1,5 @@ VITE_APP_API_URL=https://stacjownik.spythere.eu/api VITE_APP_SWDR_URL=https://api.td2.info.pl -VITE_APP_ORDER_VERSION=2 \ No newline at end of file +VITE_APP_ORDER_VERSION=2 +#VITE_UPDATE_TEST='test' \ No newline at end of file diff --git a/.github/workflows/github-discord-releases.yml b/.github/workflows/github-discord-releases.yml new file mode 100644 index 0000000..0b6f4be --- /dev/null +++ b/.github/workflows/github-discord-releases.yml @@ -0,0 +1,17 @@ +on: + release: + types: [published] + +jobs: + github-releases-to-discord: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Github Releases To Discord + uses: SethCohen/github-releases-to-discord@v1.13.1 + with: + webhook_url: '${{ secrets.WEBHOOK_URL }}' + color: '9936031' + footer_title: 'Changelog - GeneraTOR' + footer_timestamp: true diff --git a/package.json b/package.json index f1005cb..cd6fbe6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "genera-tor", - "version": "1.5.2", + "version": "1.6.0", "private": true, "type": "module", "scripts": { @@ -13,14 +13,17 @@ }, "dependencies": { "axios": "^1.6.2", + "lucide-vue-next": "^0.525.0", "pinia": "^2.1.7", + "showdown": "^2.1.0", "vue": "^3.3.11", - "vue-i18n": "9.8.0", + "vue-i18n": "11", "vue-router": "^4.2.5", "vue-tsc": "^2.2.8" }, "devDependencies": { "@types/node": "^22.13.10", + "@types/showdown": "^2.0.6", "@vitejs/plugin-vue": "^4.5.2", "@vue/eslint-config-prettier": "^8.0.0", "@vue/eslint-config-typescript": "^12.0.0", diff --git a/src/App.vue b/src/App.vue index d5399c5..8a83456 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,17 +1,20 @@ @@ -22,8 +25,15 @@ import { defineComponent } from 'vue'; import packageInfo from '../package.json'; import { useStore } from './store/store'; import orderStorageMixin from './mixins/orderStorageMixin'; +import StorageManager from './managers/storageManager'; +import axios from 'axios'; +import UpdateCard from './components/UpdateCard.vue'; + +const STORAGE_VERSION_KEY = 'app_version'; export default defineComponent({ + components: { UpdateCard }, + mixins: [orderStorageMixin], setup() { @@ -31,20 +41,84 @@ export default defineComponent({ return { offlineReady, needRefresh, updateServiceWorker }; }, + data() { return { appVersion: packageInfo.version, store: useStore() }; }, created() { - document.title = `GeneraTOR ${this.appVersion}`; - this.store.orderDarkMode = this.getOrderSetting('dark-mode') === 'true'; + this.init(); + }, - const query = new URLSearchParams(window.location.search); + methods: { + init() { + this.loadLang(); + this.loadSettings(); + this.checkAppVersion(); + this.handleQueries(); + }, - const id = query.get('sceneryId'); + loadSettings() { + document.title = `GeneraTOR ${this.appVersion}`; + this.store.orderDarkMode = this.getOrderSetting('dark-mode') === 'true'; + }, - if (id != null) { - this.store.orderMode = 'OrderTrainPicker'; + handleQueries() { + const query = new URLSearchParams(window.location.search); + + const id = query.get('sceneryId'); + + if (id != null) { + this.store.orderMode = 'OrderTrainPicker'; + } + }, + + async checkAppVersion() { + const storageVersion = StorageManager.getStringValue(STORAGE_VERSION_KEY); + + try { + const releaseData = await ( + await axios.get('https://api.github.com/repos/Spythere/genera-tor/releases/latest') + ).data; + + if (!releaseData) return; + + this.store.appUpdateData.version = this.appVersion; + this.store.appUpdateData.changelog = releaseData.body; + this.store.appUpdateData.releaseURL = releaseData.html_url; + + this.store.updateCardOpen = + (storageVersion != '' && storageVersion != this.appVersion) || + import.meta.env.VITE_UPDATE_TEST === 'test'; + } catch (error) { + console.error(`Wystąpił błąd podczas pobierania danych z API GitHuba: ${error}`); + } + + StorageManager.setStringValue(STORAGE_VERSION_KEY, this.appVersion); + }, + + changeLang(lang: string) { + this.$i18n.locale = lang; + this.store.currentAppLocale = lang; + + StorageManager.setStringValue('lang', lang); + }, + + loadLang() { + const storageLang = StorageManager.getStringValue('lang'); + + if (storageLang) { + this.changeLang(storageLang); + return; + } + + if (!window.navigator.language) return; + + const naviLanguage = window.navigator.language.toString(); + + if (!naviLanguage.startsWith('pl')) { + this.changeLang('en'); + } } } }); diff --git a/src/components/OrderList.vue b/src/components/OrderList.vue index 45acee4..13166f9 100644 --- a/src/components/OrderList.vue +++ b/src/components/OrderList.vue @@ -1,10 +1,10 @@