Make paths configurable
This commit is contained in:
parent
55072ef2a7
commit
a02a9d6e56
37
pdown.sh
37
pdown.sh
@ -1,15 +1,18 @@
|
|||||||
#!/usr/bin/bash
|
#!/usr/bin/bash
|
||||||
|
|
||||||
#Dependencies:
|
#Dependencies:
|
||||||
# yq
|
# yq https://github.com/mikefarah/yq
|
||||||
# curl
|
# curl
|
||||||
|
|
||||||
mkdir -p ./{cache,state,Podcasts}
|
|
||||||
|
|
||||||
YQ=yq
|
YQ=yq
|
||||||
|
|
||||||
|
CONFIG=${1:-./config.yaml}
|
||||||
|
CACHE_DIR=./cache
|
||||||
|
STATE_DIR=./state
|
||||||
|
PODCASTS_DIR=./podcasts
|
||||||
|
|
||||||
yqf() {
|
yqf() {
|
||||||
$YQ "$1" config.yaml
|
$YQ "$1" "$CONFIG"
|
||||||
}
|
}
|
||||||
|
|
||||||
make_fname() {
|
make_fname() {
|
||||||
@ -38,8 +41,8 @@ download() {
|
|||||||
filter=$(yqf "${e}.filter // true")
|
filter=$(yqf "${e}.filter // true")
|
||||||
ftype=$(yqf "${e}.filename_type // \"default\"")
|
ftype=$(yqf "${e}.filename_type // \"default\"")
|
||||||
|
|
||||||
local rss_path="cache/${name}.rss"
|
local rss_path="$CACHE_DIR/${name}.rss"
|
||||||
local downloads_path="state/${name}.downloads"
|
local downloads_path="$STATE_DIR/${name}.downloads"
|
||||||
|
|
||||||
curl -s -L -o "$rss_path" "$url"
|
curl -s -L -o "$rss_path" "$url"
|
||||||
items=".rss.channel.item"
|
items=".rss.channel.item"
|
||||||
@ -54,12 +57,12 @@ download() {
|
|||||||
grep -qF "$mp3url" "$downloads_path" && continue
|
grep -qF "$mp3url" "$downloads_path" && continue
|
||||||
|
|
||||||
echo "Downloading: $title - $mp3url"
|
echo "Downloading: $title - $mp3url"
|
||||||
cd cache || return
|
pushd "$CACHE_DIR" || return
|
||||||
read -ra title_options < <(make_fname "$ftype" "$name" "$title")
|
read -ra title_options < <(make_fname "$ftype" "$name" "$title")
|
||||||
fname=$(curl -s -w "%{filename_effective}" -f -L "${title_options[@]}" "$mp3url")
|
fname=$(curl -s -w "%{filename_effective}" -f -L "${title_options[@]}" "$mp3url")
|
||||||
cd ..
|
popd || return
|
||||||
|
|
||||||
mv {cache,Podcasts}/"$fname"
|
mv "$CACHE_DIR/$fname" "$PODCASTS_DIR"
|
||||||
echo "$mp3url" >> "$downloads_path"
|
echo "$mp3url" >> "$downloads_path"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@ -74,6 +77,22 @@ set_proxy() {
|
|||||||
|
|
||||||
set_proxy
|
set_proxy
|
||||||
|
|
||||||
|
set_directories() {
|
||||||
|
local base_dir cache_dir state_dir podcasts_dir
|
||||||
|
base_dir="$(yqf '.base_dir // ""')"
|
||||||
|
cache_dir="$(yqf '.cache_dir // ""')"
|
||||||
|
state_dir="$(yqf '.state_dir // ""')"
|
||||||
|
podcasts_dir="$(yqf '.podcasts_dir // ""')"
|
||||||
|
base_dir=${base_dir:-.}
|
||||||
|
CACHE_DIR=${cache_dir:-$base_dir/cache}
|
||||||
|
STATE_DIR=${state_dir:-$base_dir/state}
|
||||||
|
PODCASTS_DIR=${podcasts_dir:-$base_dir/podcasts}
|
||||||
|
}
|
||||||
|
|
||||||
|
set_directories
|
||||||
|
|
||||||
|
mkdir -p "$CACHE_DIR" "$STATE_DIR" "$PODCASTS_DIR"
|
||||||
|
|
||||||
entries=".entries"
|
entries=".entries"
|
||||||
for id in $(yqf "$entries | .[] | path | .[-1]")
|
for id in $(yqf "$entries | .[] | path | .[-1]")
|
||||||
do
|
do
|
||||||
|
27
schema.yaml
27
schema.yaml
@ -1,6 +1,25 @@
|
|||||||
$schema: http://json-schema.org/draft/2020-12/schema
|
$schema: http://json-schema.org/draft/2020-12/schema
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
proxy:
|
||||||
|
description: Proxy for curl. No proxy by default
|
||||||
|
type: string
|
||||||
|
base_dir:
|
||||||
|
description: Base directory for content
|
||||||
|
type: string
|
||||||
|
default: .
|
||||||
|
cache_dir:
|
||||||
|
description: Directory in which files are kept while downloading
|
||||||
|
type: string
|
||||||
|
default: <base_dir>/cache
|
||||||
|
state_dir:
|
||||||
|
description: Directory where downloaded urls are recorded to avoid re-downloading
|
||||||
|
type: string
|
||||||
|
default: <base_dir>/state
|
||||||
|
podcasts_dir:
|
||||||
|
description: Directory of the actual downloaded episodes
|
||||||
|
type: string
|
||||||
|
default: <base_dir>/podcasts
|
||||||
entries:
|
entries:
|
||||||
description: Array of feeds to download
|
description: Array of feeds to download
|
||||||
type: array
|
type: array
|
||||||
@ -9,7 +28,7 @@ properties:
|
|||||||
properties:
|
properties:
|
||||||
name:
|
name:
|
||||||
type: string
|
type: string
|
||||||
description: Name of the feed
|
description: Name of the feed. Used as filenames. Avoid spaces or special characters
|
||||||
url:
|
url:
|
||||||
type: string
|
type: string
|
||||||
description: Rss feed url of the podcast
|
description: Rss feed url of the podcast
|
||||||
@ -19,7 +38,11 @@ properties:
|
|||||||
default: 1
|
default: 1
|
||||||
filename_type:
|
filename_type:
|
||||||
type: string
|
type: string
|
||||||
description: Decides how the files are named
|
description: |
|
||||||
|
Decides how the files are named
|
||||||
|
default -> curl decides the filename (see curl's -O flag)
|
||||||
|
title -> Feed entries' title sanitized to remove special characters and spaces replaced with -
|
||||||
|
date -> feedname-<date>.<ext> e.g. linuxunplugged-2023-02-14.mp3
|
||||||
default: default
|
default: default
|
||||||
enum:
|
enum:
|
||||||
- default
|
- default
|
||||||
|
Loading…
Reference in New Issue
Block a user