L'interface du serveur affichait un champ de jeton dans son en-tête, visible en permanence alors qu'il ne sert qu'une fois : il descend dans l'onglet Réglages, avec le nom du serveur, sa version et le nombre d'appareils appairés. Elle gagne surtout une page À propos sur le modèle des autres projets : cinq sections, contenu séparé du rendu, version lue de /api/health et journal servi depuis le CHANGELOG du dépôt — rien de recopié, donc rien qui puisse diverger. Au passage, le serveur annonçait 1.0.0 depuis six publications ; il lit maintenant le fichier VERSION comme le client.
74 lines
3.9 KiB
JavaScript
74 lines
3.9 KiB
JavaScript
// Noxely — collecte côté serveur, écoute hors connexion côté mobile.
|
|
// Copyright © 2026 Johnny (tuxgyver)
|
|
//
|
|
// Ce programme est un logiciel libre : vous pouvez le redistribuer et le modifier
|
|
// selon les termes de la GNU General Public License, version 3 ou ultérieure,
|
|
// telle que publiée par la Free Software Foundation.
|
|
//
|
|
// Il est distribué dans l'espoir d'être utile, mais SANS AUCUNE GARANTIE.
|
|
// Voir le fichier LICENSE à la racine du dépôt pour le texte complet.
|
|
|
|
// Contenu de la page « À propos », séparé de son rendu.
|
|
// Tout ce qui est écrit ici se vérifie dans le dépôt : une fonction décrite existe, une garantie
|
|
// annoncée est tenue par du code. La version vient de /api/health, jamais recopiée.
|
|
const ABOUT = {
|
|
name: 'Noxely — serveur',
|
|
tagline: 'Il cherche, il guette, il enregistre. Le téléphone n\'a plus qu\'à écouter.',
|
|
repository: 'https://git.tuxtech.fr/tuxgyver/Noxely',
|
|
author: 'Johnny',
|
|
authorRole: 'Conception, direction et supervision',
|
|
authorship:
|
|
'Application développée avec l\'assistance de l\'IA, sous la direction et la supervision de Johnny.',
|
|
license: 'GPL v3',
|
|
copyright: 'Copyright © 2026 Johnny (tuxgyver)',
|
|
|
|
// Ce que fait le serveur, du point de vue de qui s'en sert.
|
|
features: [
|
|
['Chercher partout à la fois',
|
|
'Internet Archive, Underground (netlabels et Free Music Archive), LibriVox et Wikimedia ' +
|
|
'Commons sont interrogés en parallèle, les résultats fondus et les plus légers mis en tête.'],
|
|
['Choisir avant de télécharger',
|
|
'Un album ou un livre affiche ses pistes avec leur taille : on met en file ce qu\'on veut, ' +
|
|
'pas l\'ensemble.'],
|
|
['Guetter un morceau sur les radios',
|
|
'On nomme un titre sans désigner de station : les plus écoutées sont balayées en continu, ' +
|
|
'et l\'enregistrement part dès que l\'une le diffuse.'],
|
|
['Enregistrer un direct',
|
|
'La capture prend le nom du morceau annoncé par la station, et s\'arrête quand il cède la ' +
|
|
'place au suivant.'],
|
|
['Tenir la file',
|
|
'Les téléchargements s\'enchaînent seuls ; un échec est repris, son état reste visible.'],
|
|
['Servir le mobile',
|
|
'L\'application demande ce qui a changé depuis son dernier passage et récupère des fichiers ' +
|
|
'déjà prêts — c\'est ce qui lui épargne sa batterie.'],
|
|
],
|
|
|
|
guaranteesIntro:
|
|
'Noxely est un outil personnel : rien n\'y transite par un service tiers, et le serveur ne ' +
|
|
'répond qu\'à ce qui présente un jeton valide.',
|
|
|
|
// Chaque promesse est tenue par du code.
|
|
guarantees: [
|
|
'Aucun compte, aucune clé d\'API : les quatre catalogues et l\'annuaire radio sont publics.',
|
|
'Toute route de données exige un jeton — celui du serveur, ou celui d\'un appareil appairé ; ' +
|
|
'seuls l\'état de santé, la page et ses ressources répondent sans.',
|
|
'Chaque appareil reçoit son propre jeton : en révoquer un ne coupe pas les autres.',
|
|
'Les jetons d\'appareil ne sont jamais renvoyés par la route qui les liste.',
|
|
'L\'appairage n\'est possible que pendant une fenêtre ouverte depuis cette interface, deux ' +
|
|
'minutes durant, une seule fois, et depuis le réseau local uniquement.',
|
|
'Les catalogues ne proposent que des œuvres libres ou du domaine public ; les éléments en ' +
|
|
'accès restreint sont écartés avant même d\'être affichés.',
|
|
'Une synchronisation partielle ne fait pas avancer le curseur du client : rien n\'est perdu.',
|
|
],
|
|
|
|
// Couche → outils.
|
|
stack: [
|
|
['Service', 'Python, FastAPI, uvicorn, unité systemd'],
|
|
['Données', 'SQLite pour l\'index, fichiers sur disque pour les médias'],
|
|
['Collecte', 'httpx asynchrone, flux ICY pour les titres de radio'],
|
|
['Catalogues', 'Internet Archive, netlabels, LibriVox, Wikimedia Commons'],
|
|
['Interface', 'HTML, CSS et JavaScript sans dépendance'],
|
|
['Synchronisation', 'HTTP avec jeton, curseur incrémental côté client'],
|
|
],
|
|
};
|