Giter Club home page Giter Club logo

podfetch's Introduction

Podfetch

dependency status

Podfetch is a self-hosted podcast manager. It is a web app that lets you download podcasts and listen to them online. It is written in Rust and uses React for the frontend. It also contains a GPodder integration so you can continue using your current podcast app.

Every time a new commit is pushed to the main branch, a new docker image is built and pushed to docker hub. So it is best to use something like watchtower to automatically update the docker image.

Contributing

Building the project

Prerequisites

  • Rust
  • Cargo
  • Node
  • npm/yarn/pnpm

Building the app

# File just needs to be there
touch static/index.html
cargo.exe run --color=always --package podfetch --bin podfetch
cd ui
<npm/yarn/pnpm> install
<npm/yarn/pnpm> run dev

If you want to run other databases you need to install the corresponding diesel cli. For example for postgres you need to install diesel_cli --no-default-features --features postgres and run the same command for running it with cargo.

UI Development

I would love to have a UX expert to help me with the UI. If you are interested in helping me out, please contact me via GitHub issue with designs/implemented React pages.

Getting Started

Docker

Docker-Compose Examples

Docker-Compose

Advantages over Postgres
  • Easier to setup
  • Easier to use

=> No concurrency. So please don't try to download to podcasts at the same time.

Sqlite

version: '3'
services:
  podfetch:
    image: samuel19982/podfetch:latest
    user: ${UID:-1000}:${GID:-1000}
    ports:
      - "80:8000"
    volumes:
      - podfetch-podcasts:/app/podcasts
      - podfetch-db:/app/db
    environment:
      - POLLING_INTERVAL=60
      - SERVER_URL=http://<your-ip>:<your-port>

volumes:
  podfetch-podcasts:
  podfetch-db:

Postgres

Advantages over SQLite

  • Better performance
  • Better concurrency
  • Better stability
  • Better scalability

Docker Compose

version: '3'
services:
  podfetch:
    image: samuel19982/podfetch:postgres
    user: ${UID:-1000}:${GID:-1000}
    ports:
      - "80:8000"
    volumes:
      - ./podcasts:/app/podcasts
    environment:
      - POLLING_INTERVAL=300
      - SERVER_URL=http://localhost:80 # Adjust to your server url
      - DATABASE_URL=postgresql://postgres:changeme@postgres/podfetch
      - DB_CONNECTIONS=10 # optional
  postgres:
    image: postgres
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
      PGDATA: /data/postgres
      POSTGRES_DB: ${POSTGRES_DB:-podfetch}
    volumes:
      - postgres:/data/postgres
    restart: unless-stopped

volumes:
  postgres:

Terraform

For terraform have a look at the setup directory. There you will find everything needed to start with your infrastructure as code.

Auth

Several Auth methods are described here: AUTH.md

Hosting

Hosting options are described here: HOSTING.md

CLI Usage

The CLI usage is described here: CLI.md

User Creation

You can create an admin, user, or uploader either through CLI or via invites.

To generate an invite, log into Podfetch → Top Right Icon → User Administration → Invites

Environment Variables

Variable Description Default
POLLING_INTERVAL Interval in minutes to check for new episodes 300
SERVER_URL URL of the server http://localhost:8000
DATABASE_URL URL of the database sqlite://./db/podcast.db

UI

UI Documentation

Internationalization

Podfetch is currently available in English and German. If you want to add a new language you can do so by adding a new file to the i18n folder and adding the translations to the file.

RSS Feed

Podfetch offers an own feed to download podcast episodes. You can add the url <SERVER_URL>/rss to your favorite podcast app like gPodder to download and play episodes.

Podcast Index

It is also possible to retrieve/add podcasts from Podcast Index. To configure it you need to create an account on that website. After creating an account an email is sent to you with the required credentials.

Variable Description Default
PODINDEX_API_KEY the api key sent to you via mail %
PODINDEX_API_SECRET the api secret also found in the mail %
  • % means an empty string is configured as default

After successful setup you should see on the settings page a green checkmark next to the Podindex config section.

GPodder API

Podfetch supports the GPodder API.

The following environment variable must be set to true to enable it:

Variable Description Default
GPODDER_INTEGRATION_ENABLED Activates the GPodder integration via your SERVER_URL false

You will also need to set up BASIC_AUTH or OIDC_AUTH and create a user.

You can use your new user account to log into podcast apps that supports the GPodder API by using your SERVER_URL and login information.

See wiki/GPodder-API for more info.

Roadmap

  • Add podcasts via Itunes api
  • Check for new episodes.
  • Download episodes.
  • Play episodes.
  • Force refresh download of podcast episodes.
  • Force refresh of podcast episodes.
  • Resume podcasts even if browser is closed.
  • Add websocket support for new podcasts.
  • Add detailed audio player.
  • Star podcasts.
  • Unsubscribe podcasts.
  • Add retrieving podcasts from Podcastindex.org.
  • Basic Auth.
  • Import from OPML file.
  • Telegram Bot api to get alerted when new episodes are downloaded.
  • Like episodes.
  • Delete podcasts.

podfetch's People

Contributors

samtv12345 avatar dependabot[bot] avatar jchue avatar doba16 avatar chifilly avatar raeitus avatar apraxx avatar mgoral avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.