Printed views and the badge sheet leave the app through the platform. Under Electron a gtt:imprimer channel prints with the paper and orientation asked for and reports sent, cancelled, failed or unknown; an exception is logged to the console and never shown raw to the operator. Every file system, real or simulated, writes bytes atomically from a copy taken at the call. The sheet name carries event, date and imposition, and a failed print becomes IMPRESSION_ECHEC. Checked: red first, twelve mutations caught; 3502 node, 659 browser and 79 long tests green from the index alone. --- FR --- [ADD] plateforme : pont d'impression, octets atomiques, nom de planche Les vues imprimables et la planche sortent de l'application par la plateforme. Sous Electron, un canal gtt:imprimer imprime au papier et à l'orientation demandés et rend envoyé, annulé, échec ou inconnu ; une exception va à la console, jamais brute à l'opérateur. Chaque système de fichiers, réel ou simulé, écrit des octets de façon atomique, depuis une copie prise à l'appel. Le nom de la planche porte événement, date et imposition, et une impression échouée devient IMPRESSION_ECHEC. Vérifié : rouge d'abord, douze mutations attrapées ; 3502 node, 659 navigateur et 79 longues vertes depuis l'index seul. Assisted-by: Claude Opus 5.5
54 lines
2 KiB
JavaScript
54 lines
2 KiB
JavaScript
// © 2026 TechnoLibre (http://www.technolibre.ca)
|
|
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
|
|
|
// Préchargement de la coquille (§ 13.1) : le seul pont entre la page et le
|
|
// processus principal. Il expose window.gtt et rien d'autre : sous
|
|
// gtt.fichiers, une fonction par primitive du système de fichiers, qui
|
|
// invoque le canal de cette primitive, gtt:fichiers:<primitive>, et rend la
|
|
// réponse du processus principal (electron/fichiers.js) ; gtt.copier(texte),
|
|
// qui invoque le canal gtt:copier et remet le texte au presse-papiers du
|
|
// système ; gtt.imprimer({papier, orientation}), qui invoque le canal
|
|
// gtt:imprimer et rend l'issue de l'impression (electron/impression.js). La
|
|
// page ne reçoit jamais ipcRenderer lui-même, ni une fonction qui
|
|
// invoquerait un canal de son choix.
|
|
//
|
|
// Un préchargement exécuté en bac à sable est un script CommonJS, d'où
|
|
// l'extension .cjs dans un paquet de type module. Son require ne connaît
|
|
// qu'electron et quelques modules de Node, et non les fichiers du projet :
|
|
// les primitives et les noms des canaux s'écrivent donc ici, les primitives
|
|
// dans l'ordre de l'interface, et test/coquille.test.js éprouve qu'ils sont
|
|
// ceux des canaux que pose le processus principal.
|
|
const { contextBridge, ipcRenderer } = require('electron');
|
|
|
|
const PRIMITIVES = [
|
|
'emplacements',
|
|
'racines',
|
|
'choisirDossier',
|
|
'sonder',
|
|
'typeSupport',
|
|
'lireTexte',
|
|
'ecrireAtomique',
|
|
'ecrireOctetsAtomique',
|
|
'ajouterLigne',
|
|
'lister',
|
|
'creerDossier',
|
|
'deplacer',
|
|
'supprimer',
|
|
'verrouiller',
|
|
'deverrouiller',
|
|
'ouvrirDansExplorateur',
|
|
'choisirFichierAImporter',
|
|
'enregistrerSous',
|
|
];
|
|
|
|
const fichiers = {};
|
|
for (const primitive of PRIMITIVES) {
|
|
const canal = `gtt:fichiers:${primitive}`;
|
|
fichiers[primitive] = (...parametres) => ipcRenderer.invoke(canal, ...parametres);
|
|
}
|
|
|
|
const copier = (texte) => ipcRenderer.invoke('gtt:copier', texte);
|
|
|
|
const imprimer = (demande) => ipcRenderer.invoke('gtt:imprimer', demande);
|
|
|
|
contextBridge.exposeInMainWorld('gtt', { fichiers, copier, imprimer });
|