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 @@
+
+ -
+ Pods
+ {!! $podcast_count ?? 0 !!}
+
+ -
+ Used
+ {!! $disk_used ?? '0' !!}
+
+ -
+ Free
+ {!! $disk_free ?? '0' !!}
+
+
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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
P~qm
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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