Journal des versions

ORION 2.4.1 — Voir le jeu avant de l'acheter

30 octobre 2026 · le gameplay dans la Boutique, un temps de jeu qui ne ment plus, et la suite d'essais entière qui passe sur un vrai PC Windows

En bref

Une petite version, pour voir un jeu tourner avant de l'acheter.

Le gameplay avant l'achat

Sur ce site aussi

Le temps de jeu ne ment plus

Et aussi

Le détail technique, pour les curieux
  • Nouveau : la fiche d'un jeu de la Boutique (FicheDialogue) s'ouvre sur le lecteur vidéo de la bibliothèque (LecteurVideo, onglets ONGLETS_BOUTIQUE, onglet Gameplay d'abord, image de 300 pixels de haut au plus pour que l'offre reste visible), à la place de la grande image ; titre du jeu et raison de la suggestion au-dessus (EnteteFiche). L'affiche est l'image du jeu (ChargeurImages) ; une vidéo déjà choisie n'y montre pas sa miniature YouTube (apercus_youtube=False) : le PC ne demande rien à YouTube avant le clic. Lecture au clic, avec le son ; fiche fermée : lecture arrêtée et moteur web libéré (decharger). Jeu pour adultes : l'image seule, comme avant. Un jeu Steam garde l'identifiant de la bibliothèque (_JeuBoutique) : la vidéo choisie vaut pour les deux fiches.
  • Nouveau : vidéo de gameplay proposée par le service (videos.gameplay_propose, route /gameplay du service). Le service identifie le jeu par IsThereAnyDeal (numéro Steam, ou titre reconnu comme un jeu ; « mature » : aucune vidéo), cherche « <titre> gameplay fr » (en anglais : « <titre> gameplay ») avec l'API officielle YouTube Data v3 (vidéos intégrables, recherche stricte), lit durée, restrictions et contenu pour enfants (videos.list), puis choisit la vidéo (choisirGameplay : le bon jeu et pas sa suite, pas de bande-annonce, de live, de Short, de piratage, d'âge restreint ni de contenu bloqué en France ; préférence au français et à 4-40 minutes ; sinon aucune). Règle YouTube III.E.4 : réponses rafraîchies ou effacées sous 30 jours, sur le service comme sur le PC (le) ; sans vidéo convenable, nouvel essai après 7 jours. Quota : 90 recherches sur 24 h glissantes (YouTube en accorde 100 par jour), 20 par adresse et par jour (empreinte HMAC-SHA256 dont la clé change chaque jour, effacée après deux jours), comptées avant toute autre demande ; pause jusqu'au renouvellement (9 h UTC) après un refus de quota, deux minutes après un refus de débit ; jamais de réponse 429 (ORION suspendrait tout le service). Clé YOUTUBE_CLE dans les secrets du service, jamais dans le code (tests/test_gameplay_service.py), envoyée dans l'en-tête x-goog-api-key, jamais dans l'adresse. Sans clé, la fiche propose de choisir la vidéo, comme avant.
  • Amélioration : l'onglet Gameplay de la fiche de la bibliothèque montre aussi la vidéo proposée quand le joueur n'en a pas choisi une ; la bande-annonce reste l'onglet d'ouverture. Le titre et la chaîne d'une vidéo, comme le nom d'une bande-annonce Steam, sont posés tels quels (i18n.brut) : le catalogue ne les retouche plus. Sous la vidéo : le lien des conditions d'utilisation de YouTube (règle III.A.1) et ceux des règles de confidentialité de Google et d'ORION (III.A.2) ; Réglages › « Ce qu'ORION envoie » ouvre la page de confidentialité du site (videos.confidentialite_orion, FR ou EN).
  • Relecture indépendante (27/10) : fiche fermée avant la réponse du service, l'appli ne touche plus un lecteur détruit (_si_vivant, shiboken6.isValid, sur les trois tâches) ; la vidéo proposée n'est demandée que quand l'onglet Gameplay est montré (la bibliothèque s'ouvre sur la bande-annonce : ses fiches ne la demandaient pas pour rien) ; titre et chaîne en texte brut (Qt.PlainText) ; badge « GAMEPLAY FR » seulement pour une vidéo en français ; hauteur de la fiche et du lecteur bornées par l'écran (hauteur_video) ; durée anglaise « 1 hr 5 min » ; réponses de plus de 30 jours effacées du PC au moins une fois par jour. Service : une seule recherche pour deux demandes simultanées du même jeu (réservation ON CONFLICT … WHERE maj = ?, vérifiée par meta.changes) ; le budget compte les vraies recherches (gameplay_appels) ; une erreur de YouTube devient une ligne « panne » d'une heure, réponse 200 ; les lignes de plus de 30 jours sont effacées à chaque demande ; max-age ne dépasse jamais la fin de validité ; une suite (« Elden Ring 2 »), une comparaison (« vs ») ou un autre jeu de la série ne passent plus pour le jeu (accordTitre, niveaux 0 à 4).
  • Site : bloc « Gameplay » sur les pages de jeux FR et EN, devant les prix (service/site/gameplay.js, ajouté à recherche.js) : affiche servie par le site, le navigateur ne contacte personne d'autre avant le clic ; au clic, le service puis le lecteur officiel (youtube-nocookie.com) ; sans vidéo, un lien de recherche. Le compteur du site note l'action « gameplay ». « Ce qu'ORION envoie » (FR et EN) et les mentions légales disent l'usage des services d'API YouTube, avec les liens vers les règles de confidentialité de Google et les conditions de YouTube.
  • Service : /clic-site n'accepte plus qu'un nom de page de sa liste (Object.hasOwn : « constructor » donnait une fonction, l'écriture échouait, réponse 500 constatée le 27/10) ; une écriture refusée passagèrement par la base est retentée une fois (reessayer) ; le motif d'une exception imprévue est gardé 90 jours et lu dans le tableau (table motifs). Le tableau montre les recherches de gameplay du jour et les vidéos lancées depuis le site. La racine annonce gameplay (preuve pour le script de déploiement).
  • Essais : tests/test_gameplay_boutique.py, tests/test_gameplay_service.py (service/essai_gameplay.mjs), tests/test_site_gameplay.py (Chromium) ; tests/test_site_sorties.py construit la page au 20 octobre (l'essai dépendait du jour : plus aucune précommande ouverte le 27/10).
  • Correction : le temps de jeu (retour d'un joueur, 27 octobre 2026 : « sur certains jeux il me disait que j'avais jamais joué, genre FIFA, alors que j'ai 100 heures »). Trois causes, plus celles trouvées par la relecture du même jour. (1) Inconnu valait zéro : l'EA app, Epic, Ubisoft, Battle.net et Xbox ne laissent pas lire leur temps de jeu ; un jeu qu'ORION n'avait pas vu tourner était « Jamais lancé » (bandeau de l'accueil), « Aucune partie » (fiche), rangé dans « Jamais lancés » et proposé au ménage du disque comme « installé mais jamais vraiment joué ». Nouveaux Game.external_base (-1 : la plateforme ne donne pas son temps), Game.temps_connu et Game.jamais_joue (vrai seulement si la plateforme le dit) ; fiche « Inconnu » ou « au moins 3 h 05 », infobulle qui dit pourquoi (jeu sans plateforme, GOG : « reliez votre compte GOG ») ; tuile et disque « 3 h+ » / « inconnu » ; bandeau sans « Jamais lancé », « À lancer » ni « Oublié depuis longtemps » ; aucun conseil de ménage pour ces jeux (ORION ne voit que les parties jouées pendant qu'il est ouvert). Un compte relié ne donne un temps que s'il en a un (comptes.base.secondes_du_compte) : Steam toujours, GOG pour les jeux comptés par Galaxy, Xbox jamais (l'historique des titres n'en a pas ; son 0 par défaut effaçait le temps compté par ORION). (2) Double compte : total_play_seconds additionnait le temps de Steam (qui comprend les parties lancées par ORION) et celui d'ORION. Le temps de la plateforme prime (Game.temps_plateforme) : un premier relevé comprend au plus son propre temps des parties d'ORION, une hausse leur revient d'abord, un relevé plus petit ou égal ne change rien ; un relevé nul n'efface jamais ce qu'ORION a vu. Une partie lancée par le .exe du jeu (GOG : Galaxy ne la voit pas) s'ajoute toujours (Game.play_seconds_orion_seul, tenu par record_session). Doublons fusionnés (fusionner) sans double compte ni perte : deux relevés additionnent leurs bases ; les parties d'un doublon « registre » sont supposées comprises (toutes si la plateforme lance par son adresse, comme Steam ; pas celles lancées par le .exe pour GOG) ; le même jeu sur une autre plateforme s'ajoute. Fiche d'avant la 2.4.1 : base = min(temps d'ORION, temps de la plateforme) ; un jeu sans adresse (GOG) a tout son temps d'ORION « vu par ORION seul », même sans relevé encore. Une session est comptée sur la fiche d'aujourd'hui (LibraryService._fiche_actuelle) : une actualisation pendant la partie la perdait sur l'ancienne copie. (3) LibraryStore.merge_scan remplaçait la dernière partie relevée par Steam par l'ancienne valeur d'ORION : la plus récente des deux est gardée ; la dernière partie d'un compte relié est reprise (JeuCompte.derniere_partie, ignorée jusque-là). Steam n'est cru que si un localconfig.vdf a été lu en entier (steam_releve). Aide : articles « Retrouver un jeu » et « Stockage », question « Pourquoi mon temps de jeu sur l'EA app ou Epic n'apparaît-il pas ? » (tests/test_temps_de_jeu_241.py, avec les scénarios de la relecture).
  • Correction (relecture) : la fiche de la Boutique est détruite à sa fermeture (2.4.1) ; la réponse des DLC (dlc_panel, rappel gardé par isValid) et l'image du bandeau d'un jeu pour adultes (BandeauFiche, méthode liée au lieu d'une lambda branchée pour toujours au chargeur d'images) arrivées après touchaient un objet détruit et ouvraient la fenêtre de signalement. Vidéo de gameplay : une réponse du service « occupé » (en cours, panne, quota, clé absente) est redemandée dans une heure, pas le lendemain ; une réponse illisible aussi ; les réponses de plus de 30 jours sont effacées au moins une fois par jour, dans la tâche de fond ; pas de miniature YouTube téléchargée dans la Boutique, même après un choix ; titre de la fiche en texte brut ; onglet « Gameplay » sans « (FR) » dans la Boutique ; « 59 min » et non « 60 min ». Essais : ni réseau ni DNS (conftest.py), et une fiche ouverte par un essai ne demande pas de vidéo au service.
  • Journal : un secret en tête de chaîne (« client_secret=…& », corps de formulaire ou ligne de source d'une trace) est masqué aussi ; seuls « ?nom= » et « &nom= » l'étaient. Masqués en plus : id_token, code_verifier, password, une valeur entre guillemets (« token='…' ») et l'en-tête x-api-key / x-goog-api-key ; la valeur masquée s'arrête avant « ) » et « , » (MasqueSecrets).
  • Correction : une sortie passée parlait encore de précommande, dans l'appli comme sur le site (MW4, sortie le 23 octobre : « Précommandes ouvertes », « Clé Microsoft Store PC (Europe, précommande) », remise Steam « jusqu'au 23 octobre »). sorties.apres_sortie s'applique à chaque entrée lue (Sortie.depuis, liste en ligne comme liste embarquée) : après la date, le mot « précommande » quitte l'accroche et le libellé des clés, et une offre datée (« jusqu'au 23 octobre ») disparaît le lendemain. Les versions déjà installées reçoivent la même correction par sorties.json (couche du site du 24 octobre). Essais : tests/test_sorties_apres_24.py ; les essais de l'affiche d'avant la sortie fixent leur date (sorties._aujourdhui).
  • Correction (essais sur le vrai PC de l'auteur, 29 octobre, nouvelle carte mère) : la fiche d'un jeu de la Boutique s'ouvrait 13 à 30 points trop courte et défilait de quelques lignes, parce que le lecteur vidéo prenait sa hauteur après la mesure, sans signal contenu_change ; la fiche se remesure à tout changement de mise en page de son contenu (FicheDialogue.eventFilter, LayoutRequest). Essai : test_la_fiche_se_remesure_quand_son_contenu_change_sans_prevenir. Le disque d'un chemin a une seule règle pour le déplacement et la sauvegarde (deplacement.disque_de). service/apercu_tableau.mjs démarre aussi sous Windows (garde du programme principal par pathToFileURL).
  • Essais sur Windows : la suite entière passe maintenant sur le PC de l'auteur (1 925 essais, 0 ignoré hors Chromium) et non plus seulement dans l'espace Linux. tests/conftest.py garde le PC intact (pas de registre, d'écran, de NVAPI, de mode partie ni de programme externe pendant les essais ; sous le dossier temporaire, les disques sont simulés par des dossiers) : sans cette garde, un essai enregistrait un mode d'écran dans Windows, un autre créait une clé de registre. La plateforme « offscreen » reçoit le dossier des polices de Windows (QT_QPA_FONTDIR) : les largeurs de texte étaient fausses. requirements-dev.txt liste les outils des essais (pytest, pytest-timeout, pillow, tzdata) ; pytest.ini fixe le délai par essai (120 s) ; une fenêtre modale pendant un essai (QMessageBox, QDialog.exec, QFileDialog) est notée et répond sans bloquer. Relecture indépendante (9/10) : la fiche de la Boutique ne rétrécit jamais sur un changement de mise en page passager et ne fait qu'une mesure par passe (_ajustement_prevu).

Télécharger ORION 2.4.1

← 2.4.0