Compare commits

..

No commits in common. "main" and "3.3.0" have entirely different histories.
main ... 3.3.0

22 changed files with 635 additions and 574 deletions

View File

@ -1,19 +1,3 @@
## 3.3.2 - What a Nightmare - 2024-10-24
### Fixed
- 🚑 Revert [#178](https://git.crystalyx.net/Xefir/repod/issues/178) not working on big subscriptions lists
[#182](https://git.crystalyx.net/Xefir/repod/issues/182) reported by @SteveDinn
## 3.3.1 - Breaking the Loop - 2024-10-24
### Changed
- ⚡ Speed up the loading time of subscriptions
[#178](https://git.crystalyx.net/Xefir/repod/issues/178) reported by @MikeAndrews
### Fixed
- 🐛 Prevent Firefox for going nuts when having Plasma Integration addon installed
[#164](https://git.crystalyx.net/Xefir/repod/issues/164) reported by @cichy1173, @Share1440 and @mark.collins
## 3.3.0 - Into The Jet Lag - 2024-10-18 ## 3.3.0 - Into The Jet Lag - 2024-10-18
### Changed ### Changed

View File

@ -64,10 +64,6 @@ You need to have [GPodderSync](https://apps.nextcloud.com/apps/gpoddersync) inst
Either from the official Nextcloud [app store](https://apps.nextcloud.com/apps/repod) or by downloading the [latest release](https://git.crystalyx.net/Xefir/repod/releases/latest) and extracting it into your Nextcloud `apps/` directory. Either from the official Nextcloud [app store](https://apps.nextcloud.com/apps/repod) or by downloading the [latest release](https://git.crystalyx.net/Xefir/repod/releases/latest) and extracting it into your Nextcloud `apps/` directory.
## Known issues
- Conflict with Plasma Integration Firefox addon ([#164](https://git.crystalyx.net/Xefir/repod/issues/164))
## Credits ## Credits
- [GPodder Sync](https://github.com/thrillfall/nextcloud-gpodder) for the database API - [GPodder Sync](https://github.com/thrillfall/nextcloud-gpodder) for the database API

View File

@ -14,7 +14,7 @@
## Requirements ## Requirements
You need to have [GPodderSync](https://apps.nextcloud.com/apps/gpoddersync) installed to use this app!]]></description> You need to have [GPodderSync](https://apps.nextcloud.com/apps/gpoddersync) installed to use this app!]]></description>
<version>3.3.2</version> <version>3.3.0</version>
<licence>agpl</licence> <licence>agpl</licence>
<author mail="xefir@crystalyx.net" homepage="https://crystalyx.net">Michel Roux</author> <author mail="xefir@crystalyx.net" homepage="https://crystalyx.net">Michel Roux</author>
<namespace>RePod</namespace> <namespace>RePod</namespace>

23
composer.lock generated
View File

@ -1359,12 +1359,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git", "url": "https://github.com/Roave/SecurityAdvisories.git",
"reference": "bae581ca4125f92b1ad4d316ac691fa2d5231649" "reference": "062376b6f97b90ec6f8731b04c9e5879d1f70ad7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/bae581ca4125f92b1ad4d316ac691fa2d5231649", "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/062376b6f97b90ec6f8731b04c9e5879d1f70ad7",
"reference": "bae581ca4125f92b1ad4d316ac691fa2d5231649", "reference": "062376b6f97b90ec6f8731b04c9e5879d1f70ad7",
"shasum": "" "shasum": ""
}, },
"conflict": { "conflict": {
@ -1372,7 +1372,7 @@
"admidio/admidio": "<4.3.12", "admidio/admidio": "<4.3.12",
"adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3",
"aheinze/cockpit": "<2.2", "aheinze/cockpit": "<2.2",
"aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.04.6",
"aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1",
"aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7",
"aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1",
@ -1416,7 +1416,7 @@
"barrelstrength/sprout-forms": "<3.9", "barrelstrength/sprout-forms": "<3.9",
"barryvdh/laravel-translation-manager": "<0.6.2", "barryvdh/laravel-translation-manager": "<0.6.2",
"barzahlen/barzahlen-php": "<2.0.1", "barzahlen/barzahlen-php": "<2.0.1",
"baserproject/basercms": "<=5.1.1", "baserproject/basercms": "<5.0.9",
"bassjobsen/bootstrap-3-typeahead": ">4.0.2", "bassjobsen/bootstrap-3-typeahead": ">4.0.2",
"bbpress/bbpress": "<2.6.5", "bbpress/bbpress": "<2.6.5",
"bcosca/fatfree": "<3.7.2", "bcosca/fatfree": "<3.7.2",
@ -1584,7 +1584,7 @@
"froxlor/froxlor": "<=2.2.0.0-RC3", "froxlor/froxlor": "<=2.2.0.0-RC3",
"frozennode/administrator": "<=5.0.12", "frozennode/administrator": "<=5.0.12",
"fuel/core": "<1.8.1", "fuel/core": "<1.8.1",
"funadmin/funadmin": "<=5.0.2", "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3",
"gaoming13/wechat-php-sdk": "<=1.10.2", "gaoming13/wechat-php-sdk": "<=1.10.2",
"genix/cms": "<=1.1.11", "genix/cms": "<=1.1.11",
"getformwork/formwork": "<1.13.1|==2.0.0.0-beta1", "getformwork/formwork": "<1.13.1|==2.0.0.0-beta1",
@ -1701,7 +1701,6 @@
"lms/routes": "<2.1.1", "lms/routes": "<2.1.1",
"localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2",
"luyadev/yii-helpers": "<1.2.1", "luyadev/yii-helpers": "<1.2.1",
"maestroerror/php-heic-to-jpg": "<1.0.5",
"magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch10|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch8|>=2.4.7.0-beta1,<2.4.7.0-patch3", "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch10|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch8|>=2.4.7.0-beta1,<2.4.7.0-patch3",
"magento/core": "<=1.9.4.5", "magento/core": "<=1.9.4.5",
"magento/magento1ce": "<1.9.4.3-dev", "magento/magento1ce": "<1.9.4.3-dev",
@ -1862,7 +1861,7 @@
"processwire/processwire": "<=3.0.229", "processwire/processwire": "<=3.0.229",
"propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7",
"propel/propel1": ">=1,<=1.7.1", "propel/propel1": ">=1,<=1.7.1",
"pterodactyl/panel": "<1.11.8", "pterodactyl/panel": "<1.11.6",
"ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2",
"ptrofimov/beanstalk_console": "<1.7.14", "ptrofimov/beanstalk_console": "<1.7.14",
"pubnub/pubnub": "<6.1", "pubnub/pubnub": "<6.1",
@ -1953,7 +1952,7 @@
"subhh/libconnect": "<7.0.8|>=8,<8.1", "subhh/libconnect": "<7.0.8|>=8,<8.1",
"sukohi/surpass": "<1", "sukohi/surpass": "<1",
"sulu/form-bundle": ">=2,<2.5.3", "sulu/form-bundle": ">=2,<2.5.3",
"sulu/sulu": "<1.6.44|>=2,<2.5.21|>=2.6,<2.6.5", "sulu/sulu": "<1.6.44|>=2,<2.6.5",
"sumocoders/framework-user-bundle": "<1.4", "sumocoders/framework-user-bundle": "<1.4",
"superbig/craft-audit": "<3.0.2", "superbig/craft-audit": "<3.0.2",
"swag/paypal": "<5.4.4", "swag/paypal": "<5.4.4",
@ -2184,7 +2183,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-10-24T22:04:53+00:00" "time": "2024-10-17T23:05:35+00:00"
}, },
{ {
"name": "sebastian/diff", "name": "sebastian/diff",
@ -3211,8 +3210,8 @@
}, },
"prefer-stable": false, "prefer-stable": false,
"prefer-lowest": false, "prefer-lowest": false,
"platform": [], "platform": {},
"platform-dev": [], "platform-dev": {},
"platform-overrides": { "platform-overrides": {
"php": "8.1" "php": "8.1"
}, },

View File

@ -22,9 +22,6 @@ OC.L10N.register(
"Open website" : "Webseite aufrufen", "Open website" : "Webseite aufrufen",
"Could not change the status of the episode" : "Kann den Status der Folge nicht ändern", "Could not change the status of the episode" : "Kann den Status der Folge nicht ändern",
"Could not fetch episodes" : "Folgen können nicht abgerufen werden", "Could not fetch episodes" : "Folgen können nicht abgerufen werden",
"Pause" : "Pause",
"Mute" : "Stumm",
"Unmute" : "Stummschalten",
"Export subscriptions" : "Abonnements exportieren", "Export subscriptions" : "Abonnements exportieren",
"Filtering episodes" : "Folgen filtern", "Filtering episodes" : "Folgen filtern",
"Show all" : "Zeige alles", "Show all" : "Zeige alles",
@ -46,7 +43,6 @@ OC.L10N.register(
"Missing required app" : "Benötigte App fehlt", "Missing required app" : "Benötigte App fehlt",
"Install GPodder Sync" : "Installiere GPodder Sync", "Install GPodder Sync" : "Installiere GPodder Sync",
"Pin some subscriptions to see their latest updates" : "Pinne einige Abonnements, um ihre neuesten Updates zu sehen", "Pin some subscriptions to see their latest updates" : "Pinne einige Abonnements, um ihre neuesten Updates zu sehen",
"No favorites" : "Keine Favoriten", "No favorites" : "Keine Favoriten"
"A browser extension conflict with RePod" : "Ein Browser-Erweiterungskonflikt mit RePod"
}, },
""); "");

View File

@ -20,9 +20,6 @@
"Open website" : "Webseite aufrufen", "Open website" : "Webseite aufrufen",
"Could not change the status of the episode" : "Kann den Status der Folge nicht ändern", "Could not change the status of the episode" : "Kann den Status der Folge nicht ändern",
"Could not fetch episodes" : "Folgen können nicht abgerufen werden", "Could not fetch episodes" : "Folgen können nicht abgerufen werden",
"Pause" : "Pause",
"Mute" : "Stumm",
"Unmute" : "Stummschalten",
"Export subscriptions" : "Abonnements exportieren", "Export subscriptions" : "Abonnements exportieren",
"Filtering episodes" : "Folgen filtern", "Filtering episodes" : "Folgen filtern",
"Show all" : "Zeige alles", "Show all" : "Zeige alles",
@ -44,7 +41,6 @@
"Missing required app" : "Benötigte App fehlt", "Missing required app" : "Benötigte App fehlt",
"Install GPodder Sync" : "Installiere GPodder Sync", "Install GPodder Sync" : "Installiere GPodder Sync",
"Pin some subscriptions to see their latest updates" : "Pinne einige Abonnements, um ihre neuesten Updates zu sehen", "Pin some subscriptions to see their latest updates" : "Pinne einige Abonnements, um ihre neuesten Updates zu sehen",
"No favorites" : "Keine Favoriten", "No favorites" : "Keine Favoriten"
"A browser extension conflict with RePod" : "Ein Browser-Erweiterungskonflikt mit RePod"
},"pluralForm" :"" },"pluralForm" :""
} }

View File

@ -22,7 +22,6 @@ OC.L10N.register(
"Open website" : "Ouvrir le site web", "Open website" : "Ouvrir le site web",
"Could not change the status of the episode" : "Impossible de changer le status de l'épisode", "Could not change the status of the episode" : "Impossible de changer le status de l'épisode",
"Could not fetch episodes" : "Impossible de récuprer les épisodes", "Could not fetch episodes" : "Impossible de récuprer les épisodes",
"Pause" : "Pause",
"Export subscriptions" : "Exporter les abonnements", "Export subscriptions" : "Exporter les abonnements",
"Filtering episodes" : "Filtrage des épisodes", "Filtering episodes" : "Filtrage des épisodes",
"Show all" : "Montrer tout", "Show all" : "Montrer tout",
@ -44,7 +43,6 @@ OC.L10N.register(
"Missing required app" : "Une application requise est manquante", "Missing required app" : "Une application requise est manquante",
"Install GPodder Sync" : "Installer GPodder Sync", "Install GPodder Sync" : "Installer GPodder Sync",
"Pin some subscriptions to see their latest updates" : "Ajoutez des abonnements en favoris pour obtenir les dernières nouvelles ici", "Pin some subscriptions to see their latest updates" : "Ajoutez des abonnements en favoris pour obtenir les dernières nouvelles ici",
"No favorites" : "Aucun favoris", "No favorites" : "Aucun favoris"
"A browser extension conflict with RePod" : "Une extension de votre navigateur entre en conflit avec RePod"
}, },
""); "");

View File

@ -20,7 +20,6 @@
"Open website" : "Ouvrir le site web", "Open website" : "Ouvrir le site web",
"Could not change the status of the episode" : "Impossible de changer le status de l'épisode", "Could not change the status of the episode" : "Impossible de changer le status de l'épisode",
"Could not fetch episodes" : "Impossible de récuprer les épisodes", "Could not fetch episodes" : "Impossible de récuprer les épisodes",
"Pause" : "Pause",
"Export subscriptions" : "Exporter les abonnements", "Export subscriptions" : "Exporter les abonnements",
"Filtering episodes" : "Filtrage des épisodes", "Filtering episodes" : "Filtrage des épisodes",
"Show all" : "Montrer tout", "Show all" : "Montrer tout",
@ -42,7 +41,6 @@
"Missing required app" : "Une application requise est manquante", "Missing required app" : "Une application requise est manquante",
"Install GPodder Sync" : "Installer GPodder Sync", "Install GPodder Sync" : "Installer GPodder Sync",
"Pin some subscriptions to see their latest updates" : "Ajoutez des abonnements en favoris pour obtenir les dernières nouvelles ici", "Pin some subscriptions to see their latest updates" : "Ajoutez des abonnements en favoris pour obtenir les dernières nouvelles ici",
"No favorites" : "Aucun favoris", "No favorites" : "Aucun favoris"
"A browser extension conflict with RePod" : "Une extension de votre navigateur entre en conflit avec RePod"
},"pluralForm" :"" },"pluralForm" :""
} }

956
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -7,14 +7,14 @@
"dev": "vite --mode development build", "dev": "vite --mode development build",
"dev:watch": "vite --mode development build --watch", "dev:watch": "vite --mode development build --watch",
"watch": "npm run dev:watch", "watch": "npm run dev:watch",
"lint": "vue-tsc && eslint src", "lint": "eslint src",
"lint:fix": "vue-tsc && eslint src --fix", "lint:fix": "eslint src --fix",
"stylelint": "stylelint src/**/*.vue src/**/*.scss src/**/*.css", "stylelint": "stylelint src/**/*.vue src/**/*.scss src/**/*.css",
"stylelint:fix": "stylelint src/**/*.vue src/**/*.scss src/**/*.css --fix" "stylelint:fix": "stylelint src/**/*.vue src/**/*.scss src/**/*.css --fix"
}, },
"prettier": "@nextcloud/prettier-config", "prettier": "@nextcloud/prettier-config",
"dependencies": { "dependencies": {
"@formatjs/intl-segmenter": "^11.7.1", "@formatjs/intl-segmenter": "^11.5.9",
"@nextcloud/axios": "^2.5.1", "@nextcloud/axios": "^2.5.1",
"@nextcloud/initial-state": "^2.2.0", "@nextcloud/initial-state": "^2.2.0",
"@nextcloud/l10n": "^3.1.0", "@nextcloud/l10n": "^3.1.0",
@ -25,8 +25,8 @@
"linkify-html": "^4.1.3", "linkify-html": "^4.1.3",
"pinia": "^2.2.4", "pinia": "^2.2.4",
"toastify-js": "^1.12.0", "toastify-js": "^1.12.0",
"vite": "^5.4.10", "vite": "^5.4.9",
"vite-plugin-vue-devtools": "^7.5.4", "vite-plugin-vue-devtools": "^7.5.2",
"vue": "^3.5.12", "vue": "^3.5.12",
"vue-material-design-icons": "^5.3.1", "vue-material-design-icons": "^5.3.1",
"vue-router": "^4.4.5" "vue-router": "^4.4.5"

View File

@ -33,9 +33,15 @@ export default {
}, },
mounted() { mounted() {
this.init() this.init()
setInterval(this.loop, 40000)
}, },
methods: { methods: {
...mapActions(usePlayer, ['init']), ...mapActions(usePlayer, ['init', 'time']),
loop() {
if (this.paused === false) {
this.time()
}
},
}, },
} }
</script> </script>

View File

@ -7,7 +7,6 @@
:display-name="feed.data.author || feed.data.title" :display-name="feed.data.author || feed.data.title"
:is-no-user="true" :is-no-user="true"
:size="222" :size="222"
:title="feed.data.author"
:url="feed.data.imageUrl" /> :url="feed.data.imageUrl" />
<div v-if="feed.data" class="list"> <div v-if="feed.data" class="list">
<h2 class="title">{{ feed.data.title }}</h2> <h2 class="title">{{ feed.data.title }}</h2>

View File

@ -1,17 +1,7 @@
<template> <template>
<div class="controls"> <div class="controls">
<PauseIcon <PauseIcon v-if="!paused" class="pointer" :size="50" @click="pause" />
v-if="!paused" <PlayIcon v-if="paused" class="pointer" :size="50" @click="play" />
class="pointer"
:size="50"
:title="t('repod', 'Pause')"
@click="pause" />
<PlayIcon
v-if="paused"
class="pointer"
:size="50"
:title="t('repod', 'Play')"
@click="play" />
</div> </div>
</template> </template>
@ -19,7 +9,6 @@
import { mapActions, mapState } from 'pinia' import { mapActions, mapState } from 'pinia'
import PauseIcon from 'vue-material-design-icons/Pause.vue' import PauseIcon from 'vue-material-design-icons/Pause.vue'
import PlayIcon from 'vue-material-design-icons/Play.vue' import PlayIcon from 'vue-material-design-icons/Play.vue'
import { t } from '@nextcloud/l10n'
import { usePlayer } from '../../store/player.ts' import { usePlayer } from '../../store/player.ts'
export default { export default {
@ -33,7 +22,6 @@ export default {
}, },
methods: { methods: {
...mapActions(usePlayer, ['play', 'pause']), ...mapActions(usePlayer, ['play', 'pause']),
t,
}, },
} }
</script> </script>

View File

@ -4,25 +4,21 @@
v-if="volume > 0.7" v-if="volume > 0.7"
class="pointer" class="pointer"
:size="30" :size="30"
:title="t('repod', 'Mute')"
@click="mute" /> @click="mute" />
<VolumeLowIcon <VolumeLowIcon
v-if="volume > 0 && volume <= 0.3" v-if="volume > 0 && volume <= 0.3"
class="pointer" class="pointer"
:size="30" :size="30"
:title="t('repod', 'Mute')"
@click="mute" /> @click="mute" />
<VolumeMediumIcon <VolumeMediumIcon
v-if="volume > 0.3 && volume <= 0.7" v-if="volume > 0.3 && volume <= 0.7"
class="pointer" class="pointer"
:size="30" :size="30"
:title="t('repod', 'Mute')"
@click="mute" /> @click="mute" />
<VolumeMuteIcon <VolumeMuteIcon
v-if="volume === 0" v-if="volume === 0"
class="pointer" class="pointer"
:size="30" :size="30"
:title="t('repod', 'Unmute')"
@click="setVolume(volumeMuted)" /> @click="setVolume(volumeMuted)" />
<input <input
max="1" max="1"
@ -43,7 +39,6 @@ import VolumeHighIcon from 'vue-material-design-icons/VolumeHigh.vue'
import VolumeLowIcon from 'vue-material-design-icons/VolumeLow.vue' import VolumeLowIcon from 'vue-material-design-icons/VolumeLow.vue'
import VolumeMediumIcon from 'vue-material-design-icons/VolumeMedium.vue' import VolumeMediumIcon from 'vue-material-design-icons/VolumeMedium.vue'
import VolumeMuteIcon from 'vue-material-design-icons/VolumeMute.vue' import VolumeMuteIcon from 'vue-material-design-icons/VolumeMute.vue'
import { t } from '@nextcloud/l10n'
import { usePlayer } from '../../store/player.ts' import { usePlayer } from '../../store/player.ts'
export default { export default {
@ -66,7 +61,6 @@ export default {
this.volumeMuted = this.volume this.volumeMuted = this.volume
this.setVolume(0) this.setVolume(0)
}, },
t,
}, },
} }
</script> </script>

View File

@ -29,7 +29,6 @@
<NcAvatar <NcAvatar
:display-name="feed?.data?.author || feed?.data?.title" :display-name="feed?.data?.author || feed?.data?.title"
:is-no-user="true" :is-no-user="true"
:title="feed?.data?.author"
:url="feed?.data?.imageUrl" /> :url="feed?.data?.imageUrl" />
<StarIcon v-if="feed?.isFavorite" class="star" :size="20" /> <StarIcon v-if="feed?.isFavorite" class="star" :size="20" />
<AlertIcon v-if="failed" /> <AlertIcon v-if="failed" />
@ -71,16 +70,14 @@ export default {
required: true, required: true,
}, },
}, },
data() { data: () => ({
return {
failed: false, failed: false,
loading: true, loading: true,
} }),
},
computed: { computed: {
...mapState(useSubscriptions, ['getSubByUrl', 'subs']), ...mapState(useSubscriptions, ['subs']),
feed() { feed() {
return this.getSubByUrl(this.url) return this.subs.find((sub) => sub.metrics.url === this.url)
}, },
}, },
async mounted() { async mounted() {

View File

@ -3,8 +3,6 @@ import axios from '@nextcloud/axios'
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import { formatEpisodeTimestamp } from '../utils/time.ts' import { formatEpisodeTimestamp } from '../utils/time.ts'
import { generateUrl } from '@nextcloud/router' import { generateUrl } from '@nextcloud/router'
import { showError } from '../utils/toast.ts'
import { t } from '@nextcloud/l10n'
const audio = new Audio() const audio = new Audio()
@ -15,7 +13,6 @@ export const usePlayer = defineStore('player', {
episode: null as EpisodeInterface | null, episode: null as EpisodeInterface | null,
loaded: false, loaded: false,
paused: true, paused: true,
playCount: 0,
podcastUrl: null as string | null, podcastUrl: null as string | null,
volume: 1, volume: 1,
rate: 1, rate: 1,
@ -32,17 +29,6 @@ export const usePlayer = defineStore('player', {
audio.onseeked = () => (this.currentTime = audio.currentTime) audio.onseeked = () => (this.currentTime = audio.currentTime)
audio.ontimeupdate = () => (this.currentTime = audio.currentTime) audio.ontimeupdate = () => (this.currentTime = audio.currentTime)
audio.onvolumechange = () => (this.volume = audio.volume) audio.onvolumechange = () => (this.volume = audio.volume)
setInterval(this.act, 40000)
setInterval(this.conflict, 1000)
},
act() {
if (this.paused === false) {
this.time()
}
},
conflict() {
this.playCount = 0
}, },
async load(episode: EpisodeInterface | null, podcastUrl?: string) { async load(episode: EpisodeInterface | null, podcastUrl?: string) {
this.episode = episode this.episode = episode
@ -83,15 +69,9 @@ export const usePlayer = defineStore('player', {
this.time() this.time()
}, },
play() { play() {
this.playCount++
if (this.playCount > 10) {
showError(t('repod', 'A browser extension conflict with RePod'))
} else {
audio.play() audio.play()
this.paused = false this.paused = false
this.started = audio.currentTime this.started = audio.currentTime
}
}, },
seek(currentTime: number) { seek(currentTime: number) {
audio.currentTime = currentTime audio.currentTime = currentTime

View File

@ -32,7 +32,7 @@ export const useSubscriptions = defineStore('subscriptions', {
.map((sub) => ({ .map((sub) => ({
metrics: sub, metrics: sub,
isFavorite: favorites.includes(sub.url), isFavorite: favorites.includes(sub.url),
data: this.getSubByUrl(sub.url)?.data, data: this.subs.find((s) => s.metrics.url === sub.url)?.data,
})) }))
}, },
addMetadatas(link: string, data: PodcastDataInterface) { addMetadatas(link: string, data: PodcastDataInterface) {

View File

@ -60,7 +60,7 @@ export interface PodcastMetricsInterface {
export interface SubscriptionInterface { export interface SubscriptionInterface {
data?: PodcastDataInterface data?: PodcastDataInterface
isFavorite?: boolean isFavorite: boolean
metrics: PodcastMetricsInterface metrics: PodcastMetricsInterface
} }

View File

@ -103,15 +103,6 @@ msgstr "Kann den Status der Folge nicht ändern"
msgid "Could not fetch episodes" msgid "Could not fetch episodes"
msgstr "Folgen können nicht abgerufen werden" msgstr "Folgen können nicht abgerufen werden"
msgid "Pause"
msgstr "Pause"
msgid "Mute"
msgstr "Stumm"
msgid "Unmute"
msgstr "Stummschalten"
msgid "Export subscriptions" msgid "Export subscriptions"
msgstr "Abonnements exportieren" msgstr "Abonnements exportieren"
@ -177,6 +168,3 @@ msgstr "Pinne einige Abonnements, um ihre neuesten Updates zu sehen"
msgid "No favorites" msgid "No favorites"
msgstr "Keine Favoriten" msgstr "Keine Favoriten"
msgid "A browser extension conflict with RePod"
msgstr "Ein Browser-Erweiterungskonflikt mit RePod"

View File

@ -107,15 +107,6 @@ msgstr "Impossible de changer le status de l'épisode"
msgid "Could not fetch episodes" msgid "Could not fetch episodes"
msgstr "Impossible de récuprer les épisodes" msgstr "Impossible de récuprer les épisodes"
msgid "Pause"
msgstr "Pause"
msgid "Mute"
msgstr ""
msgid "Unmute"
msgstr ""
msgid "Export subscriptions" msgid "Export subscriptions"
msgstr "Exporter les abonnements" msgstr "Exporter les abonnements"
@ -181,6 +172,3 @@ msgstr "Ajoutez des abonnements en favoris pour obtenir les dernières nouvelles
msgid "No favorites" msgid "No favorites"
msgstr "Aucun favoris" msgstr "Aucun favoris"
msgid "A browser extension conflict with RePod"
msgstr "Une extension de votre navigateur entre en conflit avec RePod"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Nextcloud 3.14159\n" "Project-Id-Version: Nextcloud 3.14159\n"
"Report-Msgid-Bugs-To: translations\\@example.com\n" "Report-Msgid-Bugs-To: translations\\@example.com\n"
"POT-Creation-Date: 2024-10-25 14:50+0000\n" "POT-Creation-Date: 2024-09-15 13:40+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: /app/lib/Controller/OpmlController.php:46 #: /app/lib/Controller/OpmlController.php:44
msgid "RePod Subscriptions" msgid "RePod Subscriptions"
msgstr "" msgstr ""
@ -101,7 +101,6 @@ msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:15 #: /app/specialVueFakeDummyForL10nScript.js:15
#: /app/specialVueFakeDummyForL10nScript.js:16 #: /app/specialVueFakeDummyForL10nScript.js:16
#: /app/specialVueFakeDummyForL10nScript.js:30
msgid "Play" msgid "Play"
msgstr "" msgstr ""
@ -131,109 +130,91 @@ msgid "Could not fetch episodes"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:29 #: /app/specialVueFakeDummyForL10nScript.js:29
msgid "Pause"
msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:31
#: /app/specialVueFakeDummyForL10nScript.js:32
#: /app/specialVueFakeDummyForL10nScript.js:33
msgid "Mute"
msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:34
msgid "Unmute"
msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:35
msgid "Export subscriptions" msgid "Export subscriptions"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:36 #: /app/specialVueFakeDummyForL10nScript.js:30
msgid "Filtering episodes" msgid "Filtering episodes"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:37 #: /app/specialVueFakeDummyForL10nScript.js:31
msgid "Show all" msgid "Show all"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:38 #: /app/specialVueFakeDummyForL10nScript.js:32
msgid "Listened" msgid "Listened"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:39 #: /app/specialVueFakeDummyForL10nScript.js:33
msgid "Listening" msgid "Listening"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:40 #: /app/specialVueFakeDummyForL10nScript.js:34
msgid "Unlistened" msgid "Unlistened"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:41 #: /app/specialVueFakeDummyForL10nScript.js:35
msgid "Import subscriptions" msgid "Import subscriptions"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:42 #: /app/specialVueFakeDummyForL10nScript.js:36
msgid "Import OPML file" msgid "Import OPML file"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:43 #: /app/specialVueFakeDummyForL10nScript.js:37
msgid "Rate RePod ❤️" msgid "Rate RePod ❤️"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:44 #: /app/specialVueFakeDummyForL10nScript.js:38
msgid "Playback speed" msgid "Playback speed"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:45 #: /app/specialVueFakeDummyForL10nScript.js:39
#: /app/specialVueFakeDummyForL10nScript.js:46 #: /app/specialVueFakeDummyForL10nScript.js:40
#: /app/specialVueFakeDummyForL10nScript.js:47 #: /app/specialVueFakeDummyForL10nScript.js:41
msgid "Favorite" msgid "Favorite"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:48 #: /app/specialVueFakeDummyForL10nScript.js:42
msgid "Are you sure you want to delete this subscription?" msgid "Are you sure you want to delete this subscription?"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:49 #: /app/specialVueFakeDummyForL10nScript.js:43
msgid "Error while removing the feed" msgid "Error while removing the feed"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:50 #: /app/specialVueFakeDummyForL10nScript.js:44
msgid "You can only have 10 favorites" msgid "You can only have 10 favorites"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:51 #: /app/specialVueFakeDummyForL10nScript.js:45
msgid "Add a podcast" msgid "Add a podcast"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:52 #: /app/specialVueFakeDummyForL10nScript.js:46
msgid "Could not fetch subscriptions" msgid "Could not fetch subscriptions"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:53 #: /app/specialVueFakeDummyForL10nScript.js:47
msgid "Find a podcast" msgid "Find a podcast"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:54 #: /app/specialVueFakeDummyForL10nScript.js:48
msgid "Error loading feed" msgid "Error loading feed"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:55 #: /app/specialVueFakeDummyForL10nScript.js:49
msgid "Missing required app" msgid "Missing required app"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:56 #: /app/specialVueFakeDummyForL10nScript.js:50
msgid "Install GPodder Sync" msgid "Install GPodder Sync"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:57 #: /app/specialVueFakeDummyForL10nScript.js:51
msgid "Pin some subscriptions to see their latest updates" msgid "Pin some subscriptions to see their latest updates"
msgstr "" msgstr ""
#: /app/specialVueFakeDummyForL10nScript.js:58 #: /app/specialVueFakeDummyForL10nScript.js:52
msgid "No favorites" msgid "No favorites"
msgstr "" msgstr ""
#: /app/src/store/player.ts:89
msgid "A browser extension conflict with RePod"
msgstr ""

View File

@ -1,15 +1,14 @@
{ {
"extends": "@vue/tsconfig", "extends": "@vue/tsconfig/tsconfig.json",
"include": ["./src/**/*.ts", "./src/**/*.vue", "**/*.ts"], "include": ["./src/**/*.ts", "./src/**/*.vue", "**/*.ts"],
"compilerOptions": { "compilerOptions": {
"allowSyntheticDefaultImports": true, "allowSyntheticDefaultImports": true,
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "Bundler", "moduleResolution": "Bundler",
"target": "es6",
"module": "es6",
"declaration": true,
"strict": true,
"noImplicitAny": false, "noImplicitAny": false,
"rootDir": ".", "rootDir": ".",
"strict": true,
"noEmit": true, "noEmit": true,
"allowImportingTsExtensions": true, "allowImportingTsExtensions": true,
} }