fix: episode listing crashing if an invalid publication date is present in the RSS

This commit is contained in:
Michel Roux 2024-02-01 22:30:20 +01:00
parent abf73c0ce9
commit d808ac0609
8 changed files with 51 additions and 40 deletions

View File

@ -1,3 +1,11 @@
## 1.5.3 - 2024-02-01
### Changed
- Update @nextcloud/vue to v8.6.1
### Fixed
- Fix episode listing crashing if an invalid publication date is present in the RSS
## 1.5.2 - 2024-02-01
### Changed

View File

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

View File

@ -3,11 +3,11 @@
"description": "🔊 Browse, manage and listen to podcasts",
"type": "project",
"license": "AGPL-3.0-or-later",
"version": "1.5.2",
"version": "1.5.3",
"require-dev": {
"nextcloud/ocp": "^28.0.1",
"psalm/phar": "^5.21.1",
"nextcloud/coding-standard": "^v1.2.0"
"nextcloud/coding-standard": "v1.2.1"
},
"scripts": {
"lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l",

14
composer.lock generated
View File

@ -4,21 +4,21 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "f3354db16358ec4a9e1cd09f8d24b2c2",
"content-hash": "541949d4ff9cb82157134483415930b6",
"packages": [],
"packages-dev": [
{
"name": "nextcloud/coding-standard",
"version": "v1.2.0",
"version": "v1.2.1",
"source": {
"type": "git",
"url": "https://github.com/nextcloud/coding-standard.git",
"reference": "424cdd9e3befacd71fdd923cb52ccb3693de0e1a"
"reference": "cf5f18d989ec62fb4cdc7fc92a36baf34b3d829e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nextcloud/coding-standard/zipball/424cdd9e3befacd71fdd923cb52ccb3693de0e1a",
"reference": "424cdd9e3befacd71fdd923cb52ccb3693de0e1a",
"url": "https://api.github.com/repos/nextcloud/coding-standard/zipball/cf5f18d989ec62fb4cdc7fc92a36baf34b3d829e",
"reference": "cf5f18d989ec62fb4cdc7fc92a36baf34b3d829e",
"shasum": ""
},
"require": {
@ -44,9 +44,9 @@
"description": "Nextcloud coding standards for the php cs fixer",
"support": {
"issues": "https://github.com/nextcloud/coding-standard/issues",
"source": "https://github.com/nextcloud/coding-standard/tree/v1.2.0"
"source": "https://github.com/nextcloud/coding-standard/tree/v1.2.1"
},
"time": "2024-02-01T12:54:46+00:00"
"time": "2024-02-01T14:54:37+00:00"
},
{
"name": "nextcloud/ocp",

View File

@ -99,8 +99,14 @@ class EpisodeActionReader extends CoreEpisodeActionReader
}
// Get episode pubDate
$rawPubDate = $this->stringOrNull($item->pubDate);
$pubDate = isset($rawPubDate) ? new \DateTime($rawPubDate) : null;
$pubDate = $this->stringOrNull($item->pubDate);
if (isset($pubDate)) {
try {
$pubDate = new \DateTime($pubDate);
} catch (\Exception $e) {
$pubDate = null;
}
}
$episodes[] = new EpisodeActionExtraData(
$title,

45
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "repod",
"version": "1.5.2",
"version": "1.5.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "repod",
"version": "1.5.2",
"version": "1.5.3",
"license": "agpl",
"dependencies": {
"@nextcloud/axios": "^2.4.0",
@ -14,7 +14,7 @@
"@nextcloud/initial-state": "^2.1.0",
"@nextcloud/l10n": "^2.2.0",
"@nextcloud/router": "^3.0.0",
"@nextcloud/vue": "^8.6.0",
"@nextcloud/vue": "^8.6.1",
"vue": "^2",
"vue-material-design-icons": "^5.3.0",
"vue-router": "^3",
@ -3333,9 +3333,9 @@
}
},
"node_modules/@nextcloud/vue": {
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.6.0.tgz",
"integrity": "sha512-0nW8qHvPHAmF/NuWWMiYnWSGNNtDAtfev3OK/mjcwru6G6lBRlEcxHleud03d8f4FMEReLpgdtVcAPNLORPEnQ==",
"version": "8.6.1",
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.6.1.tgz",
"integrity": "sha512-CPPo3A1Az0DDRNI0pn7w6Yn8pJtEDktTXnrfym2Pd+lTzqTj4P2ywf+spArXMHu0BPIB95Eero7XlCiRpmhg/g==",
"dependencies": {
"@floating-ui/dom": "^1.1.0",
"@linusborg/vue-simple-portal": "^0.1.5",
@ -3750,9 +3750,9 @@
"integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
},
"node_modules/@types/node": {
"version": "20.11.15",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.15.tgz",
"integrity": "sha512-gscmuADZfvNULx1eyirVbr3kVOVZtpQtzKMCZpeSZcN6MfbkRXAR4s9/gsQ4CzxLHw6EStDtKLNtSDL3vbq05A==",
"version": "20.11.16",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz",
"integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==",
"dependencies": {
"undici-types": "~5.26.4"
}
@ -9387,14 +9387,11 @@
}
},
"node_modules/has-tostringtag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.1.tgz",
"integrity": "sha512-6J4rC9ROz0UkOpjn0BRtSSqlewDTDYJNQvy8N8RSrPCduUWId1o9BQPEVII/KKBqRk/ZIQff1YbRkUDCH2N5Sg==",
"dev": true,
"peer": true,
"dependencies": {
"has-symbols": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
@ -18075,9 +18072,9 @@
}
},
"node_modules/webpack": {
"version": "5.90.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.0.tgz",
"integrity": "sha512-bdmyXRCXeeNIePv6R6tGPyy20aUobw4Zy8r0LUS2EWO+U+Ke/gYDgsCh7bl5rB6jPpr4r0SZa6dPxBxLooDT3w==",
"version": "5.90.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.1.tgz",
"integrity": "sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==",
"dev": true,
"peer": true,
"dependencies": {
@ -18363,17 +18360,17 @@
}
},
"node_modules/which-typed-array": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
"integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz",
"integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==",
"dev": true,
"peer": true,
"dependencies": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.4",
"available-typed-arrays": "^1.0.6",
"call-bind": "^1.0.5",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
"has-tostringtag": "^1.0.0"
"has-tostringtag": "^1.0.1"
},
"engines": {
"node": ">= 0.4"

View File

@ -1,7 +1,7 @@
{
"name": "repod",
"description": "🔊 Browse, manage and listen to podcasts",
"version": "1.5.2",
"version": "1.5.3",
"bugs": {
"url": "https://git.crystalyx.net/Xefir/repod/issues"
},
@ -23,7 +23,7 @@
"@nextcloud/initial-state": "^2.1.0",
"@nextcloud/l10n": "^2.2.0",
"@nextcloud/router": "^3.0.0",
"@nextcloud/vue": "^8.6.0",
"@nextcloud/vue": "^8.6.1",
"vue": "^2",
"vue-material-design-icons": "^5.3.0",
"vue-router": "^3",

View File

@ -6,7 +6,7 @@
:key="episode.guid"
:active="isCurrentEpisode(episode)"
:class="hasEnded(episode) ? 'ended': ''"
:details="formatLocaleDate(new Date(episode.pubDate.date))"
:details="formatLocaleDate(new Date(episode.pubDate?.date))"
:force-display-actions="true"
:name="episode.name"
:title="episode.description"
@ -116,7 +116,7 @@ export default {
try {
this.loading = true
const episodes = await axios.get(generateUrl('/apps/repod/episodes/list?url={url}', { url: this.url }))
this.episodes = [...episodes.data].sort((a, b) => new Date(b.pubDate.date) - new Date(a.pubDate.date))
this.episodes = [...episodes.data].sort((a, b) => new Date(b.pubDate?.date) - new Date(a.pubDate?.date))
} catch (e) {
console.error(e)
showError(t('repod', 'Could not fetch episodes'))