From 6ee003776bad40782e7160764a2bd2d64c978ee4 Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+samtv12345@users.noreply.github.com> Date: Wed, 5 Aug 2026 22:28:49 +0200 Subject: [PATCH 1/2] feat: added podfetch enhanced --- Podfetch/Podfetch.php | 66 +++++++++++++++++++++++++++++++++-- Podfetch/app.json | 16 ++++----- Podfetch/config.blade.php | 18 ++++++++++ Podfetch/livestats.blade.php | 14 ++++++++ Podfetch/podfetch.png | Bin 13524 -> 4822 bytes 5 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 Podfetch/config.blade.php create mode 100644 Podfetch/livestats.blade.php diff --git a/Podfetch/Podfetch.php b/Podfetch/Podfetch.php index a52757d062..459bd928bd 100644 --- a/Podfetch/Podfetch.php +++ b/Podfetch/Podfetch.php @@ -1,7 +1,69 @@ url("/api/v1/info")); + echo $test->status; + } + + public function livestats() + { + $status = "inactive"; + + $res1 = parent::execute($this->url("/api/v1/podcasts")); + $podcasts = json_decode($res1->getBody()); + + $res2 = parent::execute($this->url("/api/v1/sys/info")); + $sysinfo = json_decode($res2->getBody()); + + $data = []; + if ($podcasts && is_array($podcasts)) { + $data["podcast_count"] = count($podcasts); + $status = "active"; + } + if ($sysinfo && isset($sysinfo->podcast_directory)) { + $data["disk_used"] = self::fmt($sysinfo->podcast_directory); + $free = array_sum(array_column($sysinfo->disks ?? [], 'available_space')); + $data["disk_free"] = self::fmt($free); + $status = "active"; + } + + return parent::getLiveStats($status, $data); + } + + private static function fmt($bytes) + { + if ($bytes >= 1099511627776) { + return round($bytes / 1099511627776, 1) . 'T'; + } + if ($bytes >= 1073741824) { + return round($bytes / 1073741824, 1) . 'G'; + } + return round($bytes / 1048576, 1) . 'M'; + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url); + $username = $this->config->username; + $password = $this->config->password; + $rebuild_url = str_replace( + "http://", + "http://" . $username . ":" . $password . "@", + $api_url + ); + $rebuild_url = str_replace( + "https://", + "https://" . $username . ":" . $password . "@", + $rebuild_url + ); + $rebuild_url = rtrim($rebuild_url, "/"); + return $rebuild_url . $endpoint; + } } diff --git a/Podfetch/app.json b/Podfetch/app.json index 91f2514a0a..f6a1bbd9ee 100644 --- a/Podfetch/app.json +++ b/Podfetch/app.json @@ -1,10 +1,10 @@ { - "appid": "433dc2c56e482aa6d8bc5cfae5ac5e4ec3d0f752", - "name": "Podfetch", - "website": "https://podfetch.com/", - "license": "Apache License 2.0", - "description": "Podfetch es un gestor de podcasts autohospedado. Es una aplicación web que permite descargar podcasts y escucharlos en línea. Está escrita en Rust y utiliza React para el frontend. Además, incluye integración con GPodder, por lo que puedes seguir usando tu aplicación de podcasts actual.", - "enhanced": false, - "tile_background": "light", - "icon": "podfetch.png" + "appid": "433dc2c56e482aa6d8bc5cfae5ac5e4ec3d0f752", + "name": "PodFetch", + "website": "https://github.com/SamTV12345/PodFetch", + "license": "GPL-3.0", + "description": "Self-hosted podcast manager with GPodder sync, Audiobookshelf API, transcripts, and Chromecast support.", + "enhanced": true, + "tile_background": "light", + "icon": "PodFetch.png" } diff --git a/Podfetch/config.blade.php b/Podfetch/config.blade.php new file mode 100644 index 0000000000..26b4af285c --- /dev/null +++ b/Podfetch/config.blade.php @@ -0,0 +1,18 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', isset($item) ? $item->getconfig()->override_url : null, ['placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control']) !!} +
+
+ + {!! Form::text('config[username]', isset($item) ? $item->getconfig()->username : null, ['placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item']) !!} +
+
+ + {!! Form::input('password', 'config[password]', '', ['placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item']) !!} +
+
+ +
+
diff --git a/Podfetch/livestats.blade.php b/Podfetch/livestats.blade.php new file mode 100644 index 0000000000..01e0bb53dc --- /dev/null +++ b/Podfetch/livestats.blade.php @@ -0,0 +1,14 @@ + diff --git a/Podfetch/podfetch.png b/Podfetch/podfetch.png index f59e9ee118e92ad4bc9692872f7f7146cf45f1b4..d677a25376e40c0945c54e33ee684e5ef2382a13 100644 GIT binary patch literal 4822 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 E3*1Q1p#T5? literal 13524 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

wR_u%Vp696gtrsyXKoU3! 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 Date: Wed, 12 Aug 2026 16:46:39 +0100 Subject: [PATCH 2/2] Fix casing: rename directory and files to match PodFetch app name The app tests require the directory, class, namespace, and app.json name to agree, and the icon path to exist. The rename to PodFetch left the directory as Podfetch and the icon as podfetch.png, which fails the suite and would 404 the icon on case-sensitive filesystems. appid is unchanged (sha1 of the lowercased slug). --- Podfetch/Podfetch.php => PodFetch/PodFetch.php | 0 Podfetch/podfetch.png => PodFetch/PodFetch.png | Bin {Podfetch => PodFetch}/app.json | 0 {Podfetch => PodFetch}/config.blade.php | 0 {Podfetch => PodFetch}/livestats.blade.php | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename Podfetch/Podfetch.php => PodFetch/PodFetch.php (100%) rename Podfetch/podfetch.png => PodFetch/PodFetch.png (100%) rename {Podfetch => PodFetch}/app.json (100%) rename {Podfetch => PodFetch}/config.blade.php (100%) rename {Podfetch => PodFetch}/livestats.blade.php (100%) diff --git a/Podfetch/Podfetch.php b/PodFetch/PodFetch.php similarity index 100% rename from Podfetch/Podfetch.php rename to PodFetch/PodFetch.php diff --git a/Podfetch/podfetch.png b/PodFetch/PodFetch.png similarity index 100% rename from Podfetch/podfetch.png rename to PodFetch/PodFetch.png diff --git a/Podfetch/app.json b/PodFetch/app.json similarity index 100% rename from Podfetch/app.json rename to PodFetch/app.json diff --git a/Podfetch/config.blade.php b/PodFetch/config.blade.php similarity index 100% rename from Podfetch/config.blade.php rename to PodFetch/config.blade.php diff --git a/Podfetch/livestats.blade.php b/PodFetch/livestats.blade.php similarity index 100% rename from Podfetch/livestats.blade.php rename to PodFetch/livestats.blade.php