deblan.io-gemini/blog/posts/625.gmi
2024-01-05 22:48:52 +01:00

59 lines
3.3 KiB
Plaintext

# Logiciel client/serveur pour lire et télécharger des vidéos
* 2022-08-23 21:00:00
* Logiciel libre, Projets personnels
Ces dernières semaines, j'ai réalisé plusieurs Pull Requests sur des projets écrits en
=> https://go.dev/ Go
. J'ai travaillé sur une fonctionnalité qui permet d'ajouter des informations dans le
=> https://www.deblan.io/post/623/gitea-1-17-integre-un-registre-de-paquets registre de paquet de Gitea
, j'ai corrigé un bug sur l'outil d'intégration continue
=> https://woodpecker-ci.org/ Woodpecker
et j'ai proposé une fonctionnalité pour
=> https://codeberg.org/Codeberg/pages-server Codeberg/pages-server
que j'utilise pour
=> https://www.deblan.io/post/624/gitnet-heberge-vos-pages-statiques héberger des pages statiques
. Ces contributions étaient mes premiers pas avec
=> https://go.dev/ Go
et j'ai vraiment apprécié ce langage.
Pour en apprendre un peu plus, j'ai décidé de réécrire un projet initialement en PHP. Le use case est très personnel, mais il peut sans doute plaire à d'autres personnes. Il s'agit d'un outil client/server en ligne de commande pour servir des fichiers vidéos distants.
Le projet s'appelle
=> https://gitnet.fr/deblan/mu-go Mugo
et les sources sont libres ! Je fourni un unique binaire qui permet de lancer le serveur et le client.
Côté serveur, il suffit de définir quel est le répertoire où se trouvent les vidéos, sur quel port écouter et l'adresse publique du serveur web qui sera démarré (API). Coté client, on définit l'adresse du serveur web (API) et éventuellement les filtres à appliquer.
Une fois le serveur démarré, le client peut s'y connecter et afficher les vidéos disponibles. Les vidéos pourront être sélectionnées interactivement avec leur numéro ou en
=> https://gitnet.fr/deblan/mu-go#client-side spécifiant une plage.
Pour démarrer le serveur, la commande est simple : `mugo serve`. Le répertoire courant sera servi par défaut et il écoutera sur le port `4000`. Il est possible de spécifier l'adresse publique du serveur avec l'argument `--api-url` (si reverse proxy par exemple).
Dans mon cas, l'API exposée par le serveur est accessible via un frontend Apache2. L'adresse du proxy est sous la forme `https://videos.example.com`. Mes fichiers sont stockés dans le répertoire `/srv/videos` (sous répertoires inclus). Voilà comment je lance le serveur :
```{class="language-shell-session window"}
$ mugo serve -d /srv/videos -u https://videos.example.com
```
Je peux maintenant accéder à l'API via `https://videos.example.com/api/list`.
Côté client, je peux afficher la liste des vidéos comme suit. Le résultat de chacunes de ces commandes sera une liste de vidéos avec un prompt interactif.
```{class="language-shell-session window"}
# Lire les fichiers (mpv)
$ mugo play -u https://videos.example.com
# Télécharger les fichiers (wget)
$ mugo download -u https://videos.example.com
$ mugo download -d "$HOME/Videos" -u https://videos.example.com
# Afficher que les fichiers qui contiennent "batman"
$ mugo play -u https://videos.example.com -n batman
# …et les ordonner par nom
$ mugo play -u https://videos.example.com -n batman -o name
```
Toutes les infos sur le projet son dispos sur
=> https://gitnet.fr/deblan/mu-go Gitnet
🙂