using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
namespace MyInfoMate.Vr.Net
{
///
/// Préchargement des médias d'une visite — la seconde moitié de l'item E4.
///
/// Le cache disque seul ne suffit pas. Il se remplissait à la demande : une
/// borne branchée dans une salle sans wifi avait son JSON, ses titres, son menu — et
/// pas une image. Le contenu n'arrivait que si le visiteur ouvrait la section
/// pendant que le réseau était là, ce qui est exactement l'inverse de ce qu'on
/// promet. C'est l'argument n°1 qui a fait choisir Unity contre WebXR (§10 du plan) ;
/// sans cette classe, il n'était pas tenu.
///
/// Trois règles, toutes dictées par l'exploitation :
///
/// - Après le menu, jamais avant. Le visiteur voit son menu en une
/// seconde ; le téléchargement se fait derrière lui. Bloquer le démarrage sur
/// des gigaoctets de vidéo 360 ferait d'une borne un écran d'attente.
/// - Un par un. Dix téléchargements parallèles sur le wifi d'un musée se
/// gênent, et une 360 de 2 Go n'a rien à gagner à partager la bande passante
/// avec neuf vignettes.
/// - Un échec n'arrête rien. Chaque média manquant sera retenté au
/// prochain démarrage ; les autres sont déjà là.
///
///
public static class ContentPreloader
{
public struct Progress
{
public int Done;
public int Total;
public int Failed;
/// Médias déjà sur le disque au démarrage — jamais retéléchargés.
public int AlreadyCached;
}
///
/// Télécharge tout ce que le casque saura afficher hors ligne. Rend le bilan, qui
/// n'a d'autre usage que le journal : rien de tout ceci ne doit se voir.
///
public static async Task