Compare commits

..

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

25 changed files with 707 additions and 985 deletions

View File

@ -1,9 +1,11 @@
module.exports = {
extends: [
'@nextcloud/eslint-config/vue3',
'@nextcloud',
'@vue/eslint-config-typescript/recommended',
'plugin:pinia/recommended',
'plugin:prettier/recommended',
],
parser: 'vue-eslint-parser',
rules: {
'jsdoc/require-jsdoc': 'off',
'vue/first-attribute-linebreak': 'off',

View File

@ -1,9 +1,3 @@
## 3.5.4 - Under the spotlight - 2025-01-03
### Added
- 🧑‍🎤 Added the episode author on the list and modal
- ✨ Added cover image and episode infos on desktop and mobile notifications
## 3.5.3 - Hangover - 2025-01-03
### Fixed

View File

@ -14,7 +14,7 @@
## Requirements
You need to have [GPodderSync](https://apps.nextcloud.com/apps/gpoddersync) installed to use this app!]]></description>
<version>3.5.4</version>
<version>3.5.3</version>
<licence>agpl</licence>
<author mail="xefir@crystalyx.net" homepage="https://crystalyx.net">Michel Roux</author>
<namespace>RePod</namespace>
@ -29,7 +29,7 @@ You need to have [GPodderSync](https://apps.nextcloud.com/apps/gpoddersync) inst
<screenshot>https://git.crystalyx.net/Xefir/repod/raw/branch/main/screens/modal.png</screenshot>
<dependencies>
<php min-version="8.1"/>
<nextcloud min-version="29" max-version="31"/>
<nextcloud min-version="29" max-version="30"/>
</dependencies>
<navigations>
<navigation>

View File

@ -19,7 +19,7 @@
"php": "^8.1"
},
"require-dev": {
"nextcloud/ocp": "^30.0.5",
"nextcloud/ocp": "^30.0.4",
"roave/security-advisories": "dev-latest",
"nextcloud/coding-standard": "^1.3.2",
"nextcloud/rector": "^0.2.1",

72
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "413d85cb041646dc7aa0da4bcdf8f65c",
"content-hash": "8985893a48af49654e50784bda34fb89",
"packages": [],
"packages-dev": [
{
@ -778,16 +778,16 @@
},
{
"name": "nextcloud/ocp",
"version": "v30.0.5",
"version": "v30.0.4",
"source": {
"type": "git",
"url": "https://github.com/nextcloud-deps/ocp.git",
"reference": "8f9f1452b564a514938d0e7361479bb9afacab27"
"reference": "6f98dac2ddd6c42e605bc453e5328c0a61f75b8d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/8f9f1452b564a514938d0e7361479bb9afacab27",
"reference": "8f9f1452b564a514938d0e7361479bb9afacab27",
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/6f98dac2ddd6c42e605bc453e5328c0a61f75b8d",
"reference": "6f98dac2ddd6c42e605bc453e5328c0a61f75b8d",
"shasum": ""
},
"require": {
@ -816,9 +816,9 @@
"description": "Composer package containing Nextcloud's public API (classes, interfaces)",
"support": {
"issues": "https://github.com/nextcloud-deps/ocp/issues",
"source": "https://github.com/nextcloud-deps/ocp/tree/v30.0.5"
"source": "https://github.com/nextcloud-deps/ocp/tree/v30.0.4"
},
"time": "2025-01-08T10:49:45+00:00"
"time": "2024-11-29T00:46:59+00:00"
},
{
"name": "nextcloud/rector",
@ -940,16 +940,16 @@
},
{
"name": "php-cs-fixer/shim",
"version": "v3.68.1",
"version": "v3.66.0",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/shim.git",
"reference": "eca7a809b6b5d35d0a033c63a14881107e22a7b6"
"reference": "6824b91b16d2e123afed9bf9c96ec283882346c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/eca7a809b6b5d35d0a033c63a14881107e22a7b6",
"reference": "eca7a809b6b5d35d0a033c63a14881107e22a7b6",
"url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/6824b91b16d2e123afed9bf9c96ec283882346c9",
"reference": "6824b91b16d2e123afed9bf9c96ec283882346c9",
"shasum": ""
},
"require": {
@ -986,9 +986,9 @@
"description": "A tool to automatically fix PHP code style",
"support": {
"issues": "https://github.com/PHP-CS-Fixer/shim/issues",
"source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.68.1"
"source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.66.0"
},
"time": "2025-01-17T09:21:08+00:00"
"time": "2024-12-29T13:46:48+00:00"
},
{
"name": "phpdocumentor/reflection-common",
@ -1214,16 +1214,16 @@
},
{
"name": "phpstan/phpstan",
"version": "1.12.15",
"version": "1.12.14",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "c91d4e8bc056f46cf653656e6f71004b254574d1"
"reference": "e73868f809e68fff33be961ad4946e2e43ec9e38"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/c91d4e8bc056f46cf653656e6f71004b254574d1",
"reference": "c91d4e8bc056f46cf653656e6f71004b254574d1",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/e73868f809e68fff33be961ad4946e2e43ec9e38",
"reference": "e73868f809e68fff33be961ad4946e2e43ec9e38",
"shasum": ""
},
"require": {
@ -1268,7 +1268,7 @@
"type": "github"
}
],
"time": "2025-01-05T16:40:22+00:00"
"time": "2024-12-31T07:26:13+00:00"
},
{
"name": "psr/clock",
@ -1536,12 +1536,12 @@
"source": {
"type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git",
"reference": "e7a38fcc13e4ddfe9a28d5c7bf50aa9a9da758ec"
"reference": "43628df4c324d77a9e4e6e5b7d0479586b5ee2b6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e7a38fcc13e4ddfe9a28d5c7bf50aa9a9da758ec",
"reference": "e7a38fcc13e4ddfe9a28d5c7bf50aa9a9da758ec",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/43628df4c324d77a9e4e6e5b7d0479586b5ee2b6",
"reference": "43628df4c324d77a9e4e6e5b7d0479586b5ee2b6",
"shasum": ""
},
"conflict": {
@ -1777,7 +1777,6 @@
"gilacms/gila": "<=1.15.4",
"gleez/cms": "<=1.3|==2",
"globalpayments/php-sdk": "<2",
"goalgorilla/open_social": "<12.3.8|>=12.4,<12.4.5|>=13.0.0.0-alpha1,<13.0.0.0-alpha11",
"gogentooss/samlbase": "<1.2.7",
"google/protobuf": "<3.15",
"gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3",
@ -1786,7 +1785,6 @@
"grumpydictator/firefly-iii": "<6.1.17",
"gugoan/economizzer": "<=0.9.0.0-beta1",
"guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5",
"guzzlehttp/oauth-subscriber": "<0.8.1",
"guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5",
"haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2",
"harvesthq/chosen": "<1.8.7",
@ -1825,7 +1823,6 @@
"intelliants/subrion": "<4.2.2",
"inter-mediator/inter-mediator": "==5.5",
"ipl/web": "<0.10.1",
"islandora/crayfish": "<4.1",
"islandora/islandora": ">=2,<2.4.1",
"ivankristianto/phpwhois": "<=4.3",
"jackalope/jackalope-doctrine-dbal": "<1.7.4",
@ -1908,7 +1905,6 @@
"mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2",
"mediawiki/cargo": "<3.6.1",
"mediawiki/core": "<1.39.5|==1.40",
"mediawiki/data-transfer": ">=1.39,<1.39.11|>=1.41,<1.41.3|>=1.42,<1.42.2",
"mediawiki/matomo": "<2.4.3",
"mediawiki/semantic-media-wiki": "<4.0.2",
"melisplatform/melis-asset-manager": "<5.0.1",
@ -1949,8 +1945,6 @@
"neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9",
"neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2",
"neos/swiftmailer": "<5.4.5",
"nesbot/carbon": "<2.72.6|>=3,<3.8.4",
"netcarver/textile": "<=4.1.2",
"netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15",
"nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6",
"nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13",
@ -2018,7 +2012,7 @@
"phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5|>=3.2.10,<=4.0.1",
"phpoffice/common": "<0.2.9",
"phpoffice/phpexcel": "<1.8.1",
"phpoffice/phpspreadsheet": "<=1.29.6|>=2,<=2.1.5|>=2.2,<=2.3.4|>=3,<3.7",
"phpoffice/phpspreadsheet": "<1.29.4|>=2,<2.1.3|>=2.2,<2.3.2|>=3.3,<3.4",
"phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36",
"phpservermon/phpservermon": "<3.6",
"phpsysinfo/phpsysinfo": "<3.4.3",
@ -2104,7 +2098,7 @@
"silverstripe/cms": "<4.11.3",
"silverstripe/comments": ">=1.3,<3.1.1",
"silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3",
"silverstripe/framework": "<5.3.8",
"silverstripe/framework": "<5.2.16",
"silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3",
"silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1",
"silverstripe/recipe-cms": ">=4.5,<4.5.3",
@ -2144,7 +2138,6 @@
"squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1",
"ssddanbrown/bookstack": "<24.05.1",
"starcitizentools/citizen-skin": ">=2.6.3,<2.31",
"starcitizentools/tabber-neue": ">=1.9.1,<2.7.2",
"statamic/cms": "<=5.16",
"stormpath/sdk": "<9.9.99",
"studio-42/elfinder": "<=2.1.64",
@ -2236,20 +2229,13 @@
"twig/twig": "<3.11.2|>=3.12,<3.14.1",
"typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2",
"typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<10.4.46|>=11,<11.5.40|>=12,<12.4.21|>=13,<13.3.1",
"typo3/cms-belog": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
"typo3/cms-beuser": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
"typo3/cms-core": "<=8.7.56|>=9,<=9.5.48|>=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
"typo3/cms-dashboard": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
"typo3/cms-core": "<=8.7.56|>=9,<=9.5.47|>=10,<=10.4.44|>=11,<=11.5.36|>=12,<=12.4.14|>=13,<=13.1",
"typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1",
"typo3/cms-extensionmanager": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
"typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1",
"typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
"typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1",
"typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5",
"typo3/cms-indexed-search": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2",
"typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8|==13.4.2",
"typo3/cms-lowlevel": ">=11,<=11.5.41",
"typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8",
"typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30",
"typo3/cms-scheduler": ">=11,<=11.5.41",
"typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6",
"typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3",
"typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3",
@ -2307,7 +2293,7 @@
"xpressengine/xpressengine": "<3.0.15",
"yab/quarx": "<2.4.5",
"yeswiki/yeswiki": "<=4.4.4",
"yetiforce/yetiforce-crm": "<6.5",
"yetiforce/yetiforce-crm": "<=6.4",
"yidashi/yii2cmf": "<=2",
"yii2mod/yii2-cms": "<1.9.2",
"yiisoft/yii": "<1.1.29",
@ -2397,7 +2383,7 @@
"type": "tidelift"
}
],
"time": "2025-01-15T23:05:13+00:00"
"time": "2025-01-02T23:04:41+00:00"
},
{
"name": "sebastian/diff",
@ -3427,7 +3413,7 @@
"platform": {
"php": "^8.1"
},
"platform-dev": [],
"platform-dev": {},
"platform-overrides": {
"php": "8.1"
},

View File

@ -19,9 +19,9 @@ OC.L10N.register(
"Link copied to the clipboard" : "Link in die Zwischenablage kopiert",
"Play" : "Abspielen",
"Stop" : "Stopp",
"Read" : "gehört",
"Read" : "Gelesen",
"Open website" : "Webseite aufrufen",
"Select" : "Auswählen",
"Select" : "Wählen",
"Could not change the status of the episode" : "Kann den Status der Folge nicht ändern",
"Read all" : "Alles lesen",
"Unread all" : "Ungelesen",
@ -58,7 +58,7 @@ OC.L10N.register(
"Error loading feed" : "Fehler beim Laden des Feeds",
"Missing required app" : "Benötigte App fehlt",
"Install GPodder Sync" : "Installiere GPodder Sync",
"Pin some subscriptions to see their latest updates" : "Markiere Abonnements, um die 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",
"A browser extension conflict with RePod" : "Ein Browser-Plugin Problem mit RePod"
},

View File

@ -17,9 +17,9 @@
"Link copied to the clipboard" : "Link in die Zwischenablage kopiert",
"Play" : "Abspielen",
"Stop" : "Stopp",
"Read" : "gehört",
"Read" : "Gelesen",
"Open website" : "Webseite aufrufen",
"Select" : "Auswählen",
"Select" : "Wählen",
"Could not change the status of the episode" : "Kann den Status der Folge nicht ändern",
"Read all" : "Alles lesen",
"Unread all" : "Ungelesen",
@ -56,7 +56,7 @@
"Error loading feed" : "Fehler beim Laden des Feeds",
"Missing required app" : "Benötigte App fehlt",
"Install GPodder Sync" : "Installiere GPodder Sync",
"Pin some subscriptions to see their latest updates" : "Markiere Abonnements, um die 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",
"A browser extension conflict with RePod" : "Ein Browser-Plugin Problem mit RePod"
},"pluralForm" :"nplurals=2; plural=n != 1;"

View File

@ -40,10 +40,7 @@ class EpisodesController extends Controller
usort($episodes, fn (EpisodeActionExtraData $a, EpisodeActionExtraData $b): int => $b->getPubDate() <=> $a->getPubDate());
$episodes = array_values(array_intersect_key($episodes, array_unique(array_map(fn (EpisodeActionExtraData $episode): string => $episode->getGuid(), $episodes))));
/** @var Http::STATUS_* $returnStatusCode */
$returnStatusCode = $feed->getStatusCode();
return new JSONResponse($episodes, $returnStatusCode);
return new JSONResponse($episodes, $feed->getStatusCode());
}
#[NoAdminRequired]

View File

@ -12,6 +12,7 @@ use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\ContentSecurityPolicy;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IRequest;
use OCP\Util;
class PageController extends Controller
{
@ -25,6 +26,9 @@ class PageController extends Controller
#[NoCSRFRequired]
#[FrontpageRoute(verb: 'GET', url: '/')]
public function index(): TemplateResponse {
Util::addScript(Application::APP_ID, Application::APP_ID.'-main');
Util::addStyle(Application::APP_ID, Application::APP_ID.'-main');
$csp = new ContentSecurityPolicy();
$csp->addAllowedImageDomain('*');
$csp->addAllowedMediaDomain('*');

View File

@ -8,7 +8,6 @@ use OCA\GPodderSync\Core\PodcastData\PodcastData;
use OCA\GPodderSync\Core\PodcastData\PodcastDataReader;
use OCA\RePod\AppInfo\Application;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
@ -56,9 +55,6 @@ class PodcastController extends Controller
}
}
/** @var Http::STATUS_* $returnStatusCode */
$returnStatusCode = $feed->getStatusCode();
return new JSONResponse($podcast, $returnStatusCode);
return new JSONResponse($podcast, $feed->getStatusCode());
}
}

View File

@ -18,7 +18,6 @@ use OCA\GPodderSync\Core\EpisodeAction\EpisodeAction;
* name: string,
* link: ?string,
* image: ?string,
* author: ?string,
* description: ?string,
* fetchedAtUnix: int,
* guid: string,
@ -37,7 +36,6 @@ class EpisodeActionExtraData implements \JsonSerializable, \Stringable
private readonly string $name,
private readonly ?string $link,
private readonly ?string $image,
private readonly ?string $author,
private readonly ?string $description,
private readonly int $fetchedAtUnix,
private readonly string $guid,
@ -72,10 +70,6 @@ class EpisodeActionExtraData implements \JsonSerializable, \Stringable
return $this->image;
}
public function getAuthor(): ?string {
return $this->author;
}
public function getDescription(): ?string {
return $this->description;
}
@ -119,7 +113,6 @@ class EpisodeActionExtraData implements \JsonSerializable, \Stringable
'name' => $this->name,
'link' => $this->link,
'image' => $this->image,
'author' => $this->author,
'description' => $this->description,
'fetchedAtUnix' => $this->fetchedAtUnix,
'guid' => $this->guid,

View File

@ -81,13 +81,6 @@ class EpisodeActionReader extends CoreEpisodeActionReader
}
}
// Get episode author
if (isset($iTunesItemChildren)) {
$author = $this->stringOrNull($iTunesItemChildren->author);
} else {
$author = $this->stringOrNull($item->author);
}
// Get episode description
$itemContent = $item->children('content', true);
if (isset($itemContent)) {
@ -123,7 +116,6 @@ class EpisodeActionReader extends CoreEpisodeActionReader
$name,
$link,
$image,
$author,
$description,
$fetchedAtUnix ?? (new \DateTime())->getTimestamp(),
$guid,

1356
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -21,13 +21,13 @@
"@nextcloud/initial-state": "^2.2.0",
"@nextcloud/l10n": "^3.1.0",
"@nextcloud/router": "^3.0.1",
"@nextcloud/vite-config": "^2.3.0",
"@nextcloud/vue": "9.0.0-alpha.6",
"@nextcloud/vite-config": "^2.2.2",
"@nextcloud/vue": "9.0.0-alpha.5",
"dompurify": "^3.2.3",
"linkify-html": "^4.2.0",
"pinia": "^2.3.1",
"pinia": "^2.3.0",
"toastify-js": "^1.12.0",
"vite": "~5.4.13",
"vite": "~5.4.11",
"vue": "^3.5.13",
"vue-material-design-icons": "^5.3.1",
"vue-router": "^4.5.0"
@ -38,10 +38,11 @@
"@nextcloud/prettier-config": "^1.1.0",
"@nextcloud/stylelint-config": "^3.0.1",
"@types/toastify-js": "^1.12.3",
"@vue/eslint-config-typescript": "~13.0.0",
"@vue/tsconfig": "^0.7.0",
"eslint-config-prettier": "^10.0.1",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-pinia": "^0.4.1",
"eslint-plugin-prettier": "^5.2.3",
"eslint-plugin-prettier": "^5.2.1",
"typescript": "~5.5.4",
"vue-tsc": "^2.2.0"
}

View File

@ -6,8 +6,6 @@
:size="256"
:url="episode.image" />
<h2>{{ episode.name }}</h2>
<i v-if="episode.author">{{ episode.author }}</i>
<br />
<SafeHtml :source="episode.description || ''" />
<div class="flex">
<NcButton v-if="episode.link" :href="episode.link" target="_blank">

View File

@ -12,7 +12,7 @@
:one-line="oneLine"
:style="{ opacity: hasEnded(episode) ? 0.4 : 1 }"
@click="modalEpisode = episode">
<template #extra-actions>
<template #actions>
<NcActionButton
v-if="!isCurrentEpisode(episode)"
:aria-label="t('repod', 'Play')"
@ -32,7 +32,8 @@
</template>
</NcActionButton>
</template>
<template #actions>
<template #extra>
<NcActions v-if="displayActions">
<NcActionButton
v-if="episode.duration"
:aria-label="t('repod', 'Read')"
@ -67,8 +68,7 @@
<DownloadIcon :size="20" />
</template>
</NcActionLink>
</template>
<template #extra>
</NcActions>
<NcModal v-if="modalEpisode" @close="modalEpisode = null">
<Modal :episode="episode" />
</NcModal>
@ -86,18 +86,13 @@
</NcAvatar>
</template>
<template #indicator>
<div class="indicator">
<NcProgressBar
v-if="episode.action && isListening(episode) && !oneLine"
class="progress"
:value="
(episode.action.position * 100) / episode.action.total
" />
{{ episode.duration }}
</div>
:value="(episode.action.position * 100) / episode.action.total" />
</template>
<template #subname>
{{ !oneLine ? episode.author : '' }}
{{ episode.duration }}
</template>
</NcListItem>
</template>
@ -106,6 +101,7 @@
import {
NcActionButton,
NcActionLink,
NcActions,
NcAvatar,
NcListItem,
NcModal,
@ -138,6 +134,7 @@ export default {
Modal,
NcActionButton,
NcActionLink,
NcActions,
NcAvatar,
NcListItem,
NcModal,
@ -149,6 +146,10 @@ export default {
StopIcon,
},
props: {
displayActions: {
type: Boolean,
default: true,
},
episode: {
type: Object as () => EpisodeInterface,
required: true,
@ -206,14 +207,13 @@ export default {
.progress {
margin-top: 0.4rem;
}
.indicator {
display: flex;
gap: 1rem;
}
</style>
<style>
.episode .list-item-content__name {
max-width: 100%;
}
.episode .list-item-content__subname {
flex-basis: auto;
flex-grow: 0;

View File

@ -61,7 +61,6 @@
episodes.filter((e: EpisodeInterface) => e.selected)
.length < episodes.length
"
class="avatar"
:display-name="t('repod', 'Select all')"
:is-no-user="true">
<template #icon>
@ -76,7 +75,6 @@
episodes.filter((e: EpisodeInterface) => e.selected)
.length >= episodes.length
"
class="avatar"
:display-name="t('repod', 'Unselect all')"
:is-no-user="true">
<template #icon>
@ -91,6 +89,9 @@
<Episode
v-for="episode in filteredEpisodes"
:key="episode.guid"
:display-actions="
episodes.every((e: EpisodeInterface) => !e.selected)
"
:episode="episode"
:url="url"
@select="episode.selected = !episode.selected" />
@ -216,10 +217,6 @@ export default {
</script>
<style scoped>
.avatar {
color: var(--color-main-text);
}
.progress {
margin-top: 0.4rem;
}

View File

@ -3,10 +3,7 @@
<template #extra>
<div class="extra">
<MinusIcon class="pointer" :size="20" @click="changeRate(-0.1)" />
<NcCounterBubble
:active="rate !== 1"
class="counter"
:count="rate" />
<NcCounterBubble class="counter">x{{ rate }}</NcCounterBubble>
<PlusIcon class="pointer" :size="20" @click="changeRate(0.1)" />
</div>
</template>

View File

@ -9,7 +9,7 @@
:model-value="feed?.isFavorite"
:name="t('repod', 'Favorite')"
:title="t('repod', 'Favorite')"
@update:model-value="switchFavorite($event)">
@update:modelValue="switchFavorite($event)">
<template #icon>
<StarPlusIcon v-if="!feed?.isFavorite" :size="20" />
<StarRemoveIcon v-if="feed?.isFavorite" :size="20" />
@ -29,10 +29,9 @@
<NcAvatar
:display-name="feed?.data?.author || feed?.data?.title"
:is-no-user="true"
:size="20"
:title="feed?.data?.author"
:url="feed?.data?.imageUrl" />
<StarIcon v-if="feed?.isFavorite" class="star" :size="10" />
<StarIcon v-if="feed?.isFavorite" class="star" :size="20" />
<AlertIcon v-if="failed" />
</template>
</NcAppNavigationItem>

View File

@ -48,34 +48,6 @@ export const usePlayer = defineStore('player', {
conflict() {
this.playCount = 0
},
metadatas(episode: EpisodeInterface) {
// https://developer.mozilla.org/en-US/docs/Web/API/Media_Session_API
navigator.mediaSession.metadata = new MediaMetadata({
title: episode.name,
artist: episode.author,
album: episode.title,
artwork: episode.image ? [{ src: episode.image }] : [],
})
navigator.mediaSession.setActionHandler('play', this.play)
navigator.mediaSession.setActionHandler('pause', this.pause)
navigator.mediaSession.setActionHandler('stop', this.stop)
navigator.mediaSession.setActionHandler(
'seekbackward',
(details: MediaSessionActionDetails) =>
this.seek(audio.currentTime - (details.seekOffset || 10)),
)
navigator.mediaSession.setActionHandler(
'seekforward',
(details: MediaSessionActionDetails) =>
this.seek(audio.currentTime + (details.seekOffset || 30)),
)
navigator.mediaSession.setActionHandler(
'seekto',
(details: MediaSessionActionDetails) =>
!details.fastSeek && this.seek(details.seekTime || 0),
)
},
async load(episode: EpisodeInterface | null, podcastUrl?: string) {
this.episode = episode
this.podcastUrl = podcastUrl || null
@ -103,7 +75,6 @@ export const usePlayer = defineStore('player', {
}
audio.play()
this.metadatas(this.episode)
} else {
this.loaded = false
this.podcastUrl = null

View File

@ -16,7 +16,6 @@ export interface EpisodeInterface {
name: string
link?: string
image?: string
author?: string
description?: string
fetchedAtUnix: number
guid: string

View File

@ -1,10 +1 @@
<?php
use OCA\RePod\AppInfo\Application;
use OCP\Util;
Util::addScript(Application::APP_ID, Application::APP_ID.'-main');
Util::addStyle(Application::APP_ID, Application::APP_ID.'-main');
?>
<div id="content"></div>

View File

@ -3,13 +3,13 @@
# This file is distributed under the same license as the Nextcloud package.
# OiledAmoeba <florian+crystalyx@ruhnke.cloud>, 2024.
# Michel Roux <xefir@crystalyx.net>, 2024.
# markus phi <repodtranslate@solinetcafe.org>, 2024, 2025.
# markus phi <repodtranslate@solinetcafe.org>, 2024.
msgid ""
msgstr ""
"Project-Id-Version: Nextcloud 3.14159\n"
"Report-Msgid-Bugs-To: translations\\@example.com\n"
"POT-Creation-Date: 2025-01-10 22:55+0000\n"
"PO-Revision-Date: 2025-01-04 19:02+0000\n"
"POT-Creation-Date: 2024-12-11 20:03+0000\n"
"PO-Revision-Date: 2024-12-25 21:02+0000\n"
"Last-Translator: markus phi <repodtranslate@solinetcafe.org>\n"
"Language-Team: German <https://translate.crystalyx.net/projects/repod/gitea/"
"de/>\n"
@ -58,8 +58,8 @@ msgstr ""
"## Funktionen\n"
"- 🔍 Durchsuchen und abonnieren einer großen Sammlung von Podcasts\n"
"- 🔊 Episoden direkt in Nextcloud anhören\n"
"- 🌐 Synchronisiere deine Aktivität mit [AntennaPod](https://antennapod."
"org/)\n"
"- 🌐 Synchronisiere deine Aktivität mit [AntennaPod](https://antennapod.org/)"
"\n"
"- 📱 Handy-freundliche Schnittstelle\n"
"- 📡 Importieren und Exportieren Ihrer Abonnements\n"
"- ➡️ Vollständiger Funktionsvergleich [hier](https://git.crystalyx.net/Xefir/"
@ -133,8 +133,9 @@ msgstr "Stopp"
#: /app/specialVueFakeDummyForL10nScript.js:20
#: /app/specialVueFakeDummyForL10nScript.js:21
#: /app/specialVueFakeDummyForL10nScript.js:22
#, fuzzy
msgid "Read"
msgstr "gehört"
msgstr "Gelesen"
#: /app/specialVueFakeDummyForL10nScript.js:23
#: /app/specialVueFakeDummyForL10nScript.js:24
@ -142,8 +143,9 @@ msgid "Open website"
msgstr "Webseite aufrufen"
#: /app/specialVueFakeDummyForL10nScript.js:27
#, fuzzy
msgid "Select"
msgstr "Auswählen"
msgstr "Wählen"
#: /app/specialVueFakeDummyForL10nScript.js:28
#: /app/specialVueFakeDummyForL10nScript.js:38
@ -307,13 +309,14 @@ msgid "Install GPodder Sync"
msgstr "Installiere GPodder Sync"
#: /app/specialVueFakeDummyForL10nScript.js:75
#, fuzzy
msgid "Pin some subscriptions to see their latest updates"
msgstr "Markiere Abonnements, um die neuesten Updates zu sehen"
msgstr "Pinne einige Abonnements, um ihre neuesten Updates zu sehen"
#: /app/specialVueFakeDummyForL10nScript.js:76
msgid "No favorites"
msgstr "Keine Favoriten"
#: /app/src/store/player.ts:122
#: /app/src/store/player.ts:93
msgid "A browser extension conflict with RePod"
msgstr "Ein Browser-Plugin Problem mit RePod"

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Nextcloud 3.14159\n"
"Report-Msgid-Bugs-To: translations\\@example.com\n"
"POT-Creation-Date: 2025-01-10 22:55+0000\n"
"POT-Creation-Date: 2024-12-11 20:03+0000\n"
"PO-Revision-Date: 2024-12-11 20:06+0000\n"
"Last-Translator: Michel Roux <xefir@crystalyx.net>\n"
"Language-Team: French <https://translate.crystalyx.net/projects/repod/gitea/"
@ -313,6 +313,6 @@ msgstr ""
msgid "No favorites"
msgstr "Aucun favoris"
#: /app/src/store/player.ts:122
#: /app/src/store/player.ts:93
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 ""
"Project-Id-Version: Nextcloud 3.14159\n"
"Report-Msgid-Bugs-To: translations\\@example.com\n"
"POT-Creation-Date: 2025-01-10 22:55+0000\n"
"POT-Creation-Date: 2024-12-11 20:03+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -298,6 +298,6 @@ msgstr ""
msgid "No favorites"
msgstr ""
#: /app/src/store/player.ts:122
#: /app/src/store/player.ts:93
msgid "A browser extension conflict with RePod"
msgstr ""