From a2ec5f558b7c58b72e852e486125e2bb446663ea Mon Sep 17 00:00:00 2001 From: Gabriel Radureau Date: Thu, 9 Oct 2025 23:46:41 +0200 Subject: [PATCH] on Airdrop Download trigger --- README.md | 27 ++++++++++++++++++++ com.user.watchdownloads.plist | 25 +++++++++++++++++++ doc/01.OnAirdropDownload.md | 47 +++++++++++++++++++++++++++++++++++ onAirdropDownload.sh | 18 ++++++++++++++ registerApp.sh | 14 +++++++++++ 5 files changed, 131 insertions(+) create mode 100644 README.md create mode 100644 com.user.watchdownloads.plist create mode 100644 doc/01.OnAirdropDownload.md create mode 100755 onAirdropDownload.sh create mode 100755 registerApp.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..9924c2d --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# Dance Videos + +L'utilisateur prend des vidéos de ses cours de danses avec son iPhone, +en télécharge depuis son application whatsapp quand on lui partage +et enregistre l'écran de son téléphone quand certaines vidéos de danses apparaissent. + +Les vidéos de l'iPhone sont au format .mov et possèdent des tags permettant d'identifier le lieu et le datetime de l'enregistrement. +Les autres sont en général au format .mp4 et le datetime correspond à la réception et non au moment de la danse. + +L'utilisateur souhaite dans un premier temps organiser ces vidéos (vidéos de cours, de démo). +Dans un deuxième temps les convertir à un format adapté à son projecteur pour ses répétitions. + +Un début de solution a été imaginé:Quand l'utilisateur "air drop" ses vidéos vers son MacBook pro M4, +cela déclenche un script qui déplacera toutes les vidéos du dossier Téléchargement vers un premier dossier de travail +et enclenchera le programme que l'on concevra ensemble. + +Ce programme se chargera de convertir chaque vidéos en .mp4 (en conservant les tags si possibles) +et en renomant les vidéos aussi bien que possible avec un label parlant. + +On développera plus tard la manière de construire les règles d'organisation (une combinaison de machine learning et de llm assisté par l'utilisateur). + +Quand l'utilisateur branche sa carte SD avec un nom bien défini ("SD Danse" par exemple), +un programme se déclenche pour synchroniser son contenu avec le dossier de sortie où les vidéos sont organisées. + +## [Déclencher au téléchargement](./doc/01.onAirdropDownload.md) + +- `./registerApp.sh` \ No newline at end of file diff --git a/com.user.watchdownloads.plist b/com.user.watchdownloads.plist new file mode 100644 index 0000000..bdde494 --- /dev/null +++ b/com.user.watchdownloads.plist @@ -0,0 +1,25 @@ + + + + + Label + com.user.watchdownloads + + UserName + gabrielradureau + + ProgramArguments + + open + /Applications/DanceVideosOnAirdropDownload.app + + + WatchPaths + + /Users/gabrielradureau/Downloads + + + + + diff --git a/doc/01.OnAirdropDownload.md b/doc/01.OnAirdropDownload.md new file mode 100644 index 0000000..1bff492 --- /dev/null +++ b/doc/01.OnAirdropDownload.md @@ -0,0 +1,47 @@ +# On Airdrop Download + +## Déclencheur + +1. Créer une application Automator manuellement et la dupliquer par script + 1. Ouvre Automator (/Applications/Automator). + 2. Crée un nouveau document de type Application. + 3. Ajoute une action Exécuter un script shell et colle : + `bash /Users/gabrielradureau/Work/Danse/DanceVideos/onAirdropDownload.sh` + 4. Enregistre l'application sous /Applications/WatchDownloadsTemplate.app. +2. Dupliquer l'application +```sh +#!/bin/bash + +# Chemin de l'application template +TEMPLATE_APP="/Applications/WatchDownloadsTemplate.app" +# Chemin de la nouvelle application +NEW_APP="/Applications/WatchDownloads.app" + +# Supprime l'ancienne application si elle existe +rm -rf "$NEW_APP" + +# Duplique l'application template +cp -R "$TEMPLATE_APP" "$NEW_APP" + +# (Optionnel) Modifie le script shell dans l'application si nécessaire +# Par exemple, pour remplacer le chemin du script : +sed -i '' "s|/Users/gabrielradureau/Work/Danse/DanceVideos/onAirdropDownload.sh|/chemin/vers/ton/script.sh|g" "$NEW_APP/Contents/document.wflow" +``` + +3. Donner les permissions Full Disk Access +Après avoir dupliqué l'application, tu dois ajouter manuellement WatchDownloads.app dans Préférences Système > Sécurité et confidentialité > Confidentialité > Accès complet au disque. + +4. Mettre à jour le fichier .plist +Modifie ton fichier com.user.watchdownloads.plist pour qu'il lance la nouvelle application : +```xml +ProgramArguments + + /Applications/WatchDownloads.app/Contents/MacOS/Applescript + +``` +5. Recharger le service launchd +```sh +launchctl unload ~/Library/LaunchAgents/com.user.watchdownloads.plist +launchctl load ~/Library/LaunchAgents/com.user.watchdownloads.plist +launchctl start com.user.watchdownloads +``` \ No newline at end of file diff --git a/onAirdropDownload.sh b/onAirdropDownload.sh new file mode 100755 index 0000000..eecb61d --- /dev/null +++ b/onAirdropDownload.sh @@ -0,0 +1,18 @@ +#! /bin/bash +set -eux +date +echo `date` >> /tmp/heho +find /Users/gabrielradureau/Downloads +mkdir -p /Users/gabrielradureau/Documents/.DanceVideos +find /Users/gabrielradureau/Documents/.DanceVideos + +DLDIR=/Users/gabrielradureau/Downloads + +DESTDIR=/Users/gabrielradureau/Documents/.DanceVideos + +DL_VIDEOS=`find $DLDIR -type f -iname "*.mp4" -or -iname "*.mov" -maxdepth 1` +[ -z "$DL_VIDEOS" ] || { +for v in "$DL_VIDEOS"; do + echo `basename "$v"` >> /tmp/foo +done +} \ No newline at end of file diff --git a/registerApp.sh b/registerApp.sh new file mode 100755 index 0000000..8b148d9 --- /dev/null +++ b/registerApp.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -eux +TEMPLATE_APP="/Applications/WatchDownloadsTemplate.app" +NEW_APP="/Applications/DanceVideosOnAirdropDownload.app" +SCRIPTS_DIR=$(dirname `realpath ${BASH_SOURCE[0]}`) +rm -rf "$NEW_APP" +cp -R "$TEMPLATE_APP" "$NEW_APP" +sed -i '' "s|echo hello world|${SCRIPTS_DIR}/onAirdropDownload.sh|g" "$NEW_APP/Contents/document.wflow" + +launchctl unload ~/Library/LaunchAgents/com.user.watchdownloads.plist | : +cp ${SCRIPTS_DIR}/com.user.watchdownloads.plist ~/Library/LaunchAgents/com.user.watchdownloads.plist +launchctl load ~/Library/LaunchAgents/com.user.watchdownloads.plist +# launchctl list | grep watchdownloads +launchctl start com.user.watchdownloads \ No newline at end of file