toole_core/lib.rs
1// modules internes de Toolé
2pub mod error;
3pub use error::ToolError;
4pub mod discovery;
5pub mod file_certif;
6pub mod firewall;
7pub mod receiver;
8pub mod sender;
9pub mod transfer;
10pub mod utils;
11use serde::Serialize;
12use std::sync::atomic::AtomicBool;
13use std::sync::Arc;
14
15// ici je defini la structure d'un pair sur le reseau
16// chaque pair a un id jolie et unique (hostname-suffixe) et une addresse IP
17#[derive(Debug, Clone, Serialize)]
18pub struct Peer {
19 pub id: String,
20 pub addr: String,
21}
22
23// trait UI pour communiquer avec l'interface utilisateur
24// chaque implementation (Tauri, Null, etc.) doit fournir ces methodes
25pub trait UI: Send + Sync {
26 // je log un message dans l'interface
27 fn log(&self, msg: &str);
28
29 // je signale qu'un nouveau pair est trouve
30 fn peer_found(&self, peer: &Peer);
31
32 // je signale qu'un pair a ete perdu
33 fn peer_lost(&self, hostname: &str);
34
35 // affichage initial de la barre de progression pour ce transfert
36 fn show_progress_bar(&self, transfer_id: &str);
37
38 // mise a jour de la progression (octets envoyes / total)
39 fn update_progress_bar(&self, transfer_id: &str, bytes_sent: u64, total_bytes: u64);
40
41 // progression d'un fichier individuel dans un lot (nom de fichier + octets)
42 fn file_progress_bar(
43 &self,
44 transfer_id: &str,
45 file_name: &str,
46 file_bytes_sent: u64,
47 file_total_bytes: u64,
48 );
49
50 // quand un transfert entrant demande la validation de l'utilisateur :
51 // le recepteur affiche la demande (accepter / refuser) avec les infos
52 // du lot (emetteur, taille totale, liste des fichiers)
53 fn transfert_incoming(
54 &self,
55 transfer_id: &str,
56 sender: &str,
57 total_bytes: u64,
58 files: Vec<String>,
59 );
60
61 // quand un transfert est refuse par le destinataire
62 fn transfert_refused(&self, transfer_id: &str);
63
64 // quand un transfert est annule par l'utilisateur
65 fn transfert_cancel(&self, transfer_id: &str);
66
67 // quand un transfert est termine avec succes
68 fn transfert_completed(&self, transfer_id: &str);
69
70 // quand des fichiers ont ete recus par ce device
71 fn transfert_received(&self, transfer_id: &str, peer: &str, bytes: u64, files: Vec<String>);
72
73 // quand une erreur survient pendant un transfert
74 fn transfert_error(&self, transfer_id: &str, error: &ToolError);
75}
76
77// registre des transferts actifs : le récepteur s'y enregistre dès qu'un lot
78// est identifié (transfer_id connu) pour que l'app puisse annuler la réception
79// en cours depuis l'interface. Le stop est le drapeau d'arrêt de la connexion.
80pub trait TransferRegistry: Send + Sync {
81 fn register(&self, transfer_id: &str, stop: Arc<AtomicBool>);
82 fn unregister(&self, transfer_id: &str);
83}