#!/bin/bash set -euo pipefail SCRIPTS_DIR="$(dirname "$(realpath "${BASH_SOURCE[0]}")")" DANCE_VIDEOS_DB="${HOME}/Documents/.DanceVideos/db.sqlite" DOSSIER_PLAYLIST="$(dirname "$DANCE_VIDEOS_DB")/playlists" # Nettoyer et recréer le dossier des playlists rm -rf "$DOSSIER_PLAYLIST" mkdir -p "$DOSSIER_PLAYLIST" # Créer un dossier "all" avec toutes les vidéos # PLAYLIST_ALL="$DOSSIER_PLAYLIST/all" # mkdir -p "$PLAYLIST_ALL" # while IFS= read -r v; do # ln -s "$v" "$PLAYLIST_ALL/$(basename "$(dirname "$v")").mp4" # done < <(sqlite3 "$DANCE_VIDEOS_DB" "SELECT rotated_file FROM videos WHERE rotated_file IS NOT NULL;") video_filename () { local rotated_file=$1 local alias=${2:-} local count_or_music=${3:-} name_part="$(basename "$(dirname "$rotated_file")")" # Décomposer le name_part pour insérer l'alias après la date # On suppose un schéma de départ du type YYYYMMDD_HHMMSS... if [[ "$name_part" =~ ^([0-9]{8})_([0-9]{6}.*)$ ]]; then date_part="${BASH_REMATCH[1]}" rest_part="${BASH_REMATCH[2]}" else echo unexpected format >&2 exit 2 fi output_name="${date_part:2}" #ignore the 20 from 20xx years if [[ -n "$alias" ]]; then # Nettoyer l'alias pour le rendre sûr dans le nom de fichier safe_alias="$(echo "$alias" | tr ' /' '_' | tr -dc '[:alnum:]_')" output_name="${output_name}_${safe_alias}" fi if [[ -n "$count_or_music" ]]; then output_name="${output_name}_${count_or_music}" fi echo "${output_name}_${rest_part}.mp4" } # Pour chaque playlist, créer un dossier et ajouter les liens symboliques sqlite3 -separator '|' "$DANCE_VIDEOS_DB" " SELECT pv.playlist_id, pv.playlist_name, pv.video_file_name, v.rotated_file, v.alias, COALESCE( count_or_music_labels.count_or_music , '') count_or_music FROM playlist_videos pv JOIN videos v ON pv.video_file_name=v.file_name LEFT JOIN ( select * from video_labels natural join ( select id as label_id, CASE WHEN name='comptes' THEN 'C' ELSE 'M' END as count_or_music from labels where name in ('comptes','en musique') ) ) count_or_music_labels ON v.file_name=count_or_music_labels.video_file_name WHERE v.rotated_file IS NOT NULL; " | while IFS='|' read -r playlist_id playlist_name video_file_name rotated_file alias count_or_music; do # Sauter l'en-tête if [[ "$playlist_id" == "playlist_id" ]]; then continue fi # Ignorer les lignes vides if [[ -z "$playlist_id" || -z "$rotated_file" ]]; then continue fi set -x # Créer le dossier de la playlist PLAYLIST_DIR="$DOSSIER_PLAYLIST/$playlist_name" mkdir -p "$PLAYLIST_DIR" # Créer le lien symbolique # ln -sf "$rotated_file" "$PLAYLIST_DIR/$(basename "$(dirname "$rotated_file")").mp4" ln -sf "$rotated_file" "$PLAYLIST_DIR/$(video_filename $rotated_file $alias $count_or_music)" set +x done