Le nom change, et pas seulement à l'écran : identifiant d'application, paquet Kotlin, dépôt et dossier d'enregistrements suivent, pour qu'il ne subsiste pas deux noms selon l'endroit où l'on regarde. Android traite le nouvel identifiant comme une application distincte : une installation en 1.5.0 ne se mettra pas à jour seule et devra être remplacée. C'est le prix d'un renommage complet, assumé plutôt que contourné. Les enregistrements déjà faits ne sont pas perdus, étant dans le stockage partagé, et le scan continue d'écarter l'ancien dossier pour ne pas les compter deux fois. L'icône fournie est détourée de son fond blanc avant d'être déclinée : posée telle quelle, le masque du système aurait redécoupé un badge qui l'est déjà et laissé du blanc sur les bords. La couleur de fond est échantillonnée dans l'image, non choisie au jugé. La page À propos dit enfin ce que l'application fait, ce qu'elle garantit, avec quoi elle est construite et qui en répond. Sa version vient du manifeste et son journal du CHANGELOG du dépôt : ni l'un ni l'autre ne peut dériver. La licence n'étant pas déclarée, la pastille le signale en rouge au lieu d'en inventer une. Le .gitignore filtre désormais *.apk, et non un motif au nom du projet : c'est ce motif nommé qui, au renommage, avait laissé entrer 95 Mo d'anciens APK.
171 lines
9.5 KiB
Markdown
171 lines
9.5 KiB
Markdown
# Changelog
|
|
|
|
Toutes les évolutions notables de Noxely sont documentées ici.
|
|
|
|
Le format suit [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/)
|
|
et le versionnage [SemVer](https://semver.org/lang/fr/).
|
|
|
|
## [1.6.0] — 2026-09-13
|
|
|
|
### Changé
|
|
|
|
- **L'application s'appelle désormais Noxely.** Le nom affiché, l'identifiant d'application
|
|
(`fr.tuxgyver.noxely`), le paquet Kotlin, le dépôt et le dossier d'enregistrements
|
|
(`Music/Noxely`) suivent tous.
|
|
|
|
⚠️ **Android considère le nouvel identifiant comme une application distincte.** Une
|
|
installation en 1.5.0 ne se met donc pas à jour toute seule : il faut la désinstaller, puis
|
|
installer Noxely. Les enregistrements déjà rangés dans `Music/Cachette` ne sont pas perdus —
|
|
ils sont dans le stockage partagé, restent lisibles par tout lecteur, et le scan continue de
|
|
les écarter pour ne pas les afficher en double.
|
|
|
|
- Nouvelle icône. Le visuel fourni est détouré de son fond, décliné aux cinq densités et posé
|
|
sur une couleur échantillonnée dans l'image : sans cela, le masque du système aurait découpé
|
|
une seconde fois un badge qui l'est déjà, en laissant du blanc sur les bords.
|
|
|
|
### Ajouté
|
|
|
|
- Page « À propos », accessible depuis l'écran Sources : ce que fait l'application, ce qu'elle
|
|
garantit, avec quoi elle est construite, ce qui a changé et qui en répond. La version est lue
|
|
du manifeste et le journal du CHANGELOG du dépôt, recopié à la compilation — l'un et l'autre
|
|
ne peuvent donc pas diverger de la réalité.
|
|
- La pastille de licence signale en rouge qu'aucune licence n'est déclarée dans le dépôt, plutôt
|
|
que d'en afficher une par défaut.
|
|
|
|
## [1.5.0] — 2026-09-13
|
|
|
|
### Ajouté
|
|
|
|
- **Titre en cours par station.** Aucun annuaire ne l'expose : le morceau diffusé est lu dans le
|
|
flux lui-même. Les douze premières stations affichées sont sondées quatre à la fois, et le
|
|
résultat conservé — au-delà, le nombre de connexions ne se justifierait plus. Les stations qui
|
|
n'annoncent rien gardent leur description.
|
|
- **Guet d'un titre.** On indique un morceau ou un artiste, et l'enregistrement se déclenche dès
|
|
que la station l'annonce, puis s'arrête à la fin du morceau. Le flux est lu sans être écrit
|
|
pendant l'attente. Une station sans métadonnées refuse la programmation plutôt que d'attendre
|
|
indéfiniment.
|
|
- **Catalogue Underground.** Restreint aux collections `netlabels` et `freemusicarchive`, où tout
|
|
est publié sous licence libre par les artistes : environ 94 000 morceaux indépendants, que la
|
|
recherche généraliste noyait.
|
|
- **Suppression individuelle d'un enregistrement** depuis l'écran Hors ligne : fichier, entrée
|
|
MediaStore et référence en bibliothèque sont retirés ensemble.
|
|
|
|
### Modifié
|
|
|
|
- Les enregistrements sont désormais écrits dans `Music/Noxely` et déclarés dans MediaStore
|
|
(Android 10 et plus) : ils deviennent visibles des autres lecteurs et survivent à la
|
|
désinstallation. Le scan local ignore ce dossier, faute de quoi chaque enregistrement
|
|
apparaîtrait deux fois.
|
|
- Le nom de fichier porte le titre du morceau. En publiant le fichier, MediaStore le relit et
|
|
réécrit le champ `TITLE` depuis ce nom : l'y inscrire directement ne survivait pas.
|
|
|
|
## [1.4.0] — 2026-09-13
|
|
|
|
### Ajouté
|
|
|
|
- Titrage automatique des enregistrements radio. Le service demande désormais les métadonnées
|
|
ICY, ce qui fait annoncer par la station le morceau diffusé : l'enregistrement prend son nom,
|
|
la station passe en sous-titre, et le titre en cours s'affiche pendant la capture comme dans
|
|
la notification. Ces octets de métadonnées sont retirés avant écriture — laissés dans le
|
|
fichier, ils le rendraient illisible. Les stations qui n'en diffusent pas gardent le nom
|
|
« Station — date ».
|
|
|
|
### Corrigé
|
|
|
|
- Les enregistrements radio n'apparaissaient pas dans l'onglet « Hors ligne », qui ne listait que
|
|
ce qui porte un état de téléchargement. L'écran annonçait donc un nombre d'éléments disponibles
|
|
sans réseau en omettant précisément ceux qui l'étaient déjà. La taille affichée additionne
|
|
maintenant le cache et les enregistrements, et « Tout libérer » précise qu'il ne les touche pas.
|
|
- Les titres comportant une apostrophe étaient tronqués à la première rencontrée : « Ain't That a
|
|
Kick in the Head » devenait « Ain ». La valeur est lue jusqu'à la fin du champ ICY.
|
|
|
|
## [1.3.0] — 2026-09-13
|
|
|
|
### Ajouté
|
|
|
|
- **Radio.** Les stations les plus écoutées via l'annuaire communautaire Radio Browser, avec
|
|
filtres par genre et recherche par nom. Chaque station s'écoute en direct, ou s'enregistre :
|
|
un service de premier plan copie le flux dans un fichier jusqu'à l'arrêt demandé, et le verse
|
|
dans la bibliothèque — déjà hors connexion, sans rien à télécharger ensuite.
|
|
- Relance automatique des téléchargements en échec, après une pause croissante de 5, 15 puis
|
|
45 secondes. Une relance manuelle repart d'un compteur neuf.
|
|
|
|
### Notes
|
|
|
|
- Les flux HLS sont écartés de la liste des stations : ils se lisent, mais ne s'enregistrent pas
|
|
par copie d'octets, et un bouton qui échouerait vaudrait moins que pas de bouton.
|
|
- La relance et la reprise sur coupure réseau sont deux mécanismes distincts, et c'est voulu :
|
|
sans réseau, Media3 met le téléchargement en attente et le reprend de lui-même ; la relance,
|
|
elle, ne traite que les vrais échecs serveur.
|
|
- Le repli automatique vers une autre source n'a pas été retenu : rien ne garantit qu'un même
|
|
titre trouvé sur deux catalogues soit le même enregistrement, et l'application téléchargerait
|
|
silencieusement autre chose que ce qui a été choisi.
|
|
|
|
## [1.2.0] — 2026-09-13
|
|
|
|
### Ajouté
|
|
|
|
- Écran de choix des pistes. Un album ou un livre n'est plus une boîte noire : ses pistes sont
|
|
listées avec leur durée et leur taille, le total est annoncé, et le bouton dit exactement ce
|
|
qu'on s'apprête à télécharger (« Garder 4,2 Mo »). Les variantes d'un même morceau sont
|
|
regroupées — autant de lignes que d'œuvres, pas que de formats.
|
|
- Écoute en ligne avant téléchargement : un appui sur une piste la joue en streaming sans rien
|
|
mettre en cache.
|
|
- Playlists : listes nommées, ajout par appui long sur un média ou depuis l'écran de lecture,
|
|
lecture enchaînée, suppression piste par piste.
|
|
- Contrôles de lecture complétés : arrêt, saut de 15 secondes en avant et en arrière.
|
|
- Filtrage par langue des catalogues (français, anglais, allemand, espagnol, italien, néerlandais).
|
|
- Nouvelle source libre : **Wikimedia Commons**, pour les enregistrements classiques et les
|
|
archives sonores du domaine public.
|
|
|
|
### Corrigé
|
|
|
|
- Le filtre de langue de LibriVox ne pouvait pas fonctionner côté serveur : l'API accepte le
|
|
paramètre `language` puis l'ignore (`language=French` seul renvoie des livres anglais). Le tri
|
|
se fait désormais sur le champ `language` de chaque livre.
|
|
- Délais réseau ajustés d'après la latence mesurée des services : LibriVox répond en 14 à
|
|
16 secondes quelle que soit la taille demandée, ce qui faisait expirer les requêtes parallèles.
|
|
|
|
### Notes
|
|
|
|
- Deux catalogues ont été évalués puis écartés sur mesure plutôt que sur principe : **Openverse**
|
|
refuse désormais l'accès anonyme (401 sur huit requêtes sur huit) et **ccMixter** exige un
|
|
en-tête `Referer` que Media3 ne permet pas de poser par téléchargement.
|
|
|
|
## [1.1.0] — 2026-09-11
|
|
|
|
### Ajouté
|
|
|
|
- Mise à jour intégrée : Noxely surveille les releases du dépôt, télécharge l'APK en Wi-Fi
|
|
et propose l'installation. Vérification quotidienne en tâche de fond, et à la demande depuis
|
|
l'écran Sources, qui affiche aussi la version installée.
|
|
- La taille approximative de chaque résultat Internet Archive est affichée avant sélection : un
|
|
élément de 500 Mo ne se laisse plus confondre avec une chanson.
|
|
|
|
### Corrigé
|
|
|
|
- Recherche LibriVox qui ne renvoyait rien. L'API cherche les titres en correspondance exacte
|
|
sauf si la requête est préfixée par `^`, et les auteurs sur le seul nom de famille : « Jules
|
|
Verne » n'atteignait donc ni l'un ni l'autre. Les trois critères sont désormais interrogés en
|
|
parallèle et dédoublonnés, et un « aucun résultat » (HTTP 404) n'est plus traité comme une panne.
|
|
- Téléchargements Internet Archive qui échouaient ou n'aboutissaient pas. Trois causes distinctes :
|
|
les éléments en accès restreint répondaient 401 et sont maintenant écartés dès la recherche ;
|
|
seuls les fichiers `.mp3` et `.mp4` étaient acceptés, ce qui excluait des éléments ne proposant
|
|
que du `.m4a` ou de l'`.ogg` ; et le fichier retenu était le premier trouvé, souvent l'original
|
|
non compressé — c'est désormais le plus petit dérivé, soit 9 Mo au lieu de 30 sur un cas mesuré.
|
|
|
|
## [1.0.0] — 2026-09-11
|
|
|
|
### Ajouté
|
|
|
|
- Lecture audio et vidéo en arrière-plan (Media3 `MediaSessionService`), avec notification
|
|
système, commandes casque et écran verrouillé.
|
|
- Mise en cache hors connexion explicite : téléchargement à la demande, reprise automatique
|
|
après coupure réseau ou redémarrage via WorkManager.
|
|
- Bibliothèque unifiée mêlant le contenu de l'appareil (MediaStore) et les médias importés.
|
|
- Sources : appareil, lien direct `http(s)`, flux RSS de podcast.
|
|
- Catalogues libres de droits intégrés : Internet Archive et LibriVox, sans compte ni clé d'API.
|
|
- Parcours d'une source avec sélection multiple et téléchargement en lot.
|
|
- Écran « Hors ligne » : taille du cache, progression, libération élément par élément ou en bloc.
|
|
- Interface Jetpack Compose Material 3, thème clair et sombre, palette de marque.
|