@page "/a-propos"
@inject ServiceLivresApi Api
@inject EtatReseau Reseau
@implements IDisposable
@*
Ce que l'application dit d'elle-même : à qui écrire, où trouver de l'aide, quelle version
tourne réellement, et sous quelle licence elle est distribuée.
⚠️ Ce n'est pas une page d'ornement. Elle porte la version, c'est-à-dire la première chose
qu'on demande à quelqu'un dont l'application se comporte bizarrement — le projet a déjà connu
un appareil au cache dépareillé, où seule une version affichée aurait tranché. Et elle porte
le lien vers la source, que l'AGPL v3 attend qu'un service en réseau offre à ses utilisateurs.
*@
MaBibli — à propos
Chaque écran porte par ailleurs ses explications à l'endroit où elles servent.
Contact
@*
⚠️ Le « mailto: » reste un lien même hors-ligne, et c'est délibéré : il ne charge aucune
page, il passe la main au client de messagerie de l'appareil, lequel sait mettre un
message en attente d'envoi. Le désactiver empêcherait précisément d'écrire « ça ne marche
pas, je n'ai plus de réseau ».
*@
Hors ligne : c'est la dernière version annoncée par le serveur, pas forcément
celle qui y tourne en ce moment.
}
}
else
{
@*
⚠️ Ne JAMAIS afficher ici le « 1.0.0 » que le SDK .NET pose par défaut : il se lirait
comme une vraie version. Mieux vaut ne rien annoncer que d'annoncer un faux numéro,
surtout sur la valeur qui sert à diagnostiquer.
*@
Version de développement : ce binaire n'a pas été produit par la chaîne de
publication, il n'a donc pas de numéro de version à annoncer.
}
Licence
MaBibli est distribuée sous licence GNU AGPL v3.
@*
Le lien vers le dépôt n'est pas un ornement : l'AGPL demande que les utilisateurs d'un
service accessible par le réseau puissent en obtenir le code source.
*@
@if (Reseau.EnLigne)
{
}
@code {
/// Site de l'auteur, ouvert dans une autre fenêtre.
private const string Site = "https://www.limonier.be";
/// Manuel d'utilisation, hébergé avec les autres tutoriels du site.
private const string Manuel = "https://limonier.be/tuto/utiliser_mabibli/";
/// Dépôt du code — ce que l'AGPL attend qu'on rende accessible.
private const string Depot = "https://git.akbar.nohost.me/mathieu/mabibli";
private VersionApplication? _version;
protected override async Task OnInitializedAsync()
{
Reseau.Change += SurChangementReseau;
_version = await Api.ObtenirVersionAsync();
}
///
/// Au retour du réseau, la version se redemande : hors-ligne on affichait la dernière connue.
///
private void SurChangementReseau() => _ = InvokeAsync(async () =>
{
_version = await Api.ObtenirVersionAsync();
StateHasChanged();
});
private static string Quand(DateTimeOffset instant)
{
var local = instant.ToLocalTime();
return $"le {local:dd/MM/yyyy} à {local:HH:mm}";
}
public void Dispose() => Reseau.Change -= SurChangementReseau;
}