using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using QSE_Planner.Classes.StaffPackage; using Newtonsoft.Json; using System.IO; using System.Windows.Forms; using QSE_Planner.Classes.EventPlanner; using QSE_Planner.Classes.Component; using QSE_Planner.Classes.Signal; using System.Threading; namespace QSE_Planner.Classes { public sealed class SaveSystem { // INSTANCE DE SAVESYSTEM ET SON LOCK POUR SÉCURISER L'ACCES MÉMOIRE private static SaveSystem _instance = null; private static readonly object _lock = new object(); // UTILISATEUR ACTUEL private Employee CurrentUser = null; // LISTE DE TOUS LES UTILISATEURS private List AllUsers = new List(); // LISTE DE TOUS LES MATÉRIELS private List MaterialList = new List(); // LISTE DES EVENTS PLANNIFIÉS private List EventsList = new List(); // LISTE DES FOURNISSEURS private List FournisseurList = new List(); // LISTE DES CATEGORIES FOURNISSEUR private List FournisseurCategoryList = new List(); // LISTE DES CRITERES private List CritereList = new List(); // LISTE DES SIGNALEMENTS MATIERE private List MatiereSignalList = new List(); // LISTE DES SIGNALEMENTS NORMAUX private List NormalSignalList = new List(); // CONSTRUCTEUR SaveSystem() { AllUsers = GetAllUsers(); MaterialList = GetAllMaterials(); EventsList = GetAllEvents(); FournisseurList = GetAllFournisseurs(); FournisseurCategoryList = GetAllCategory(); CritereList = GetAllCriteres(); MatiereSignalList = GetAllMatiereSignal(); NormalSignalList = GetAllNormalSignal(); } #region ACCESSEURS // GETTER DE L'INSTANCE public static SaveSystem Instance { get { lock (_lock) { if (_instance == null) { _instance = new SaveSystem(); } return _instance; } } } // MISE A JOUR DE L'UTILISATEUR ACTUEL public void setCurrentUser(Employee e) { CurrentUser = e; } // GETTER DE L'UTILISATEUR ACTUEL public Employee getCurrentUser() { return CurrentUser; } // MISE A JOUR DE LA LISTE DE TOUS LES UTILISATEURS public void setAllUsers(List e) { AllUsers = e; } // GETTER DE LA LISTE DE TOUS LES UTILISATEURS public List getAllUsers() { return AllUsers; } // MISE A JOUR DE LA LISTE DES MATERIELS public void setMaterialList(List e) { MaterialList = e; } // GETTER DE LA LISTE DES MATERIELS public List getMaterialList() { return MaterialList; } // MISE A JOUR DE LA LISTE DE TOUS LES EVENTS public void setEventsList(List e) { EventsList = e; } // GETTER DE LA LISTE DE TOUS LES EVENTS public List getEventsLists() { return EventsList; } // MISE A JOUR DE LA LISTE DES FOURNISSEURS public void setFournisseurList(List e) { FournisseurList = e; } // GETTER DE LA LISTE DES FOURNISSEURS public List getFournisseurList() { return FournisseurList; } // MISE A JOUR DE LA LISTE DES CATEGORIES public void setFournisseurCategoryList(List e) { FournisseurCategoryList = e; } // GETTER DE LA LISTE DES CATEGORIES public List getFournisseurCategoryList() { return FournisseurCategoryList; } // MISE A JOUR DE LA LISTE DES CRITERES FOURNISSEUR public void setCritereList(List e) { CritereList = e; } // GETTER DE LA LISTE DES CRITERES FOURNISSEURS public List getCritereList() { return CritereList; } // MISE A JOUR DE LA LISTE DE TOUS LES SIGNALEMENTS MATIERE public void setMatiereSignalList(List e) { MatiereSignalList = e; } // GETTER DE LA LISTE DE TOUS LES SIGNALEMENTS MATIERE public List getMatiereSignalList() { return MatiereSignalList; } // MISE A JOUR DE LA LISTE DE TOUS LES SIGNALEMENTS NORMAUX public void setNormalSignalList(List e) { NormalSignalList = e; } // GETTER DE LA LISTE DE TOUS LES SIGNALEMENTS NORMAUX public List getNormalSignalList() { return NormalSignalList; } #endregion #region SAUVEGARDE/RÉCUPÉRATION UTILISATEUR /// SAUVEGARDE/RÉCUPÉRATION UTILISATEUR /// /// Concerne le partie du système de sauvegarde qui sauvegarde et récupère les utilisateurs /// - SaveUser() : void /// - GetAllUsers() : List /// - GetUserByUsername() : Employee /// - GetUserByLastname() : List /// - GetUserByFirstname() : List /// - GetUserByFullname() : List // SAUVEGARDE UTILISATEUR public static void SaveUser(Employee e) { try { // VALEUR A CRYPTER string output = JsonConvert.SerializeObject(e); // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); string FileName = CurrentFolder + "/data/users/" + e.getUsername() + "-" + e.getLastName() + "_" + e.getFirstName(); // CRYPTAGE DES DONNÉES + SAUVEGARDE Obfuscate(FileName, output); } catch (Exception ex) { // EN CAS D'ERREUR MessageBox.Show(ex.ToString()); } } // RÉCUPÉRATION DE TOUS LES UTILISATEURS public static List GetAllUsers() { List toReturn = new List(); try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/users/"); // POUR CHAQUE UTILISATEUR.. foreach (var file in di.GetFiles()) { Employee e = JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/users/" + file.Name))); toReturn.Add(e); } return toReturn; } catch { // SI L'UTILISATEUR N'EXISTE PAS return null; } } // RÉCUPÉRATION UTILISATEUR PAR USERNAME (NOM D'UTILISATEUR) public static Employee GetUserByUsername(string Username) { try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/users/"); // POUR CHAQUE UTILISATEUR.. foreach (var file in di.GetFiles()) { string[] sub = file.Name.Split('-'); // Nom d'utilisateur en [0] et Nom_Prénom en [1] if (sub[0] == Username) { // RÉCUPÉRATION DE L'OBJET return JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/users/" + file.Name))); } } // SI AUCUN UTILISATEUR return null; } catch { // SI L'UTILISATEUR N'EXISTE PAS return null; } } // RÉCUPÉRATION UTILISATEUR PAR NOM DE FAMILLE public static List GetUserByLastname(string Lastname) { List toReturn = new List(); try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/users/"); // POUR CHAQUE UTILISATEUR.. foreach (var file in di.GetFiles()) { string[] s = file.Name.Split('-'); // Nom d'utilisateur en [0] et Nom_Prénom en [1] string[] sub = s[1].Split('_'); // Nom d'utilisateur en [0] et Nom_Prénom en [1] if (sub[0] == Lastname) { // RÉCUPÉRATION DES DONNÉES Employee e = JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/users/" + file.Name))); toReturn.Add(e); } } return toReturn; } catch { // SI L'UTILISATEUR N'EXISTE PAS return null; } } // RÉCUPÉRATION UTILISATEUR PAR PRÉNOM public static List GetUserByFirstname(string Firstname) { List toReturn = new List(); try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/users/"); // POUR CHAQUE UTILISATEUR.. foreach (var file in di.GetFiles()) { string[] s = file.Name.Split('-'); // Nom d'utilisateur en [0] et Nom_Prénom en [1] string[] sub = s[1].Split('_'); // Nom d'utilisateur en [0] et Nom_Prénom en [1] if (sub[1] == Firstname) { // RÉCUPÉRATION DES DONNÉES Employee e = JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/users/" + file.Name))); toReturn.Add(e); } } return toReturn; } catch { // SI L'UTILISATEUR N'EXISTE PAS return null; } } // RÉCUPÉRATION UTILISATEUR PAR NOM COMPLET public static List GetUserByFullname(string Lastname, string Firstname) { List toReturn = new List(); try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/users/"); // POUR CHAQUE UTILISATEUR.. foreach (var file in di.GetFiles()) { string[] s = file.Name.Split('-'); // Nom d'utilisateur en [0] et Nom_Prénom en [1] string[] sub = s[1].Split('_'); // Nom d'utilisateur en [0] et Nom_Prénom en [1] if (sub[0] == Lastname) { if (sub[1] == Firstname) { // RÉCUPÉRATION DES DONNÉES Employee e = JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/users/" + file.Name))); toReturn.Add(e); } } } return toReturn; } catch { // SI L'UTILISATEUR N'EXISTE PAS return null; } } #endregion #region SAUVEGARDE/RÉCUPÉRATION MATÉRIEL /// SAUVEGARDE/RÉCUPÉRATION MATÉRIEL /// /// Concerne le partie du système de sauvegarde qui sauvegarde et récupère les matériels /// - SaveMaterial() : void /// - GetAllMaterials() : List /// - GetMaterialByImmat() : Material public static void SaveMaterial(Material m) { try { // VALEUR A CRYPTER string output = JsonConvert.SerializeObject(m); // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); string FileName = CurrentFolder + "/data/materials/" + m.Immatriculation; // CRYPTAGE DES DONNÉES + SAUVEGARDE Obfuscate(FileName, output); } catch (Exception ex) { // EN CAS D'ERREUR MessageBox.Show(ex.ToString()); } } // RÉCUPÉRATION DE TOUS LES MATÉRIELS public static List GetAllMaterials() { List toReturn = new List(); try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/materials/"); // POUR CHAQUE MATERIEL.. foreach (var file in di.GetFiles()) { Material m = JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/materials/" + file.Name))); toReturn.Add(m); } return toReturn; } catch { // SI AUCUN MATERIEL return null; } } // RÉCUPÉRATION UTILISATEUR PAR USERNAME (NOM D'UTILISATEUR) public static Material GetMaterialByImmat(string Immat) { try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/materials/"); // POUR CHAQUE UTILISATEUR.. foreach (var file in di.GetFiles()) { if (file.Name == Immat) { // RÉCUPÉRATION DE L'OBJET return JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/materials/" + file.Name))); } } // SI AUCUN UTILISATEUR return null; } catch { // SI L'UTILISATEUR N'EXISTE PAS return null; } } #endregion #region SAUVEGARDE/RÉCUPÉRATION EVENT /// SAUVEGARDE/RÉCUPÉRATION EVENT /// /// Concerne le partie du système de sauvegarde qui sauvegarde et récupère les évènements /// - SaveEvent() : void /// - GetAllEvents() : List /// - GetEvent() : Event public static void SaveEvent(Event e) { try { // VALEUR A CRYPTER string output = JsonConvert.SerializeObject(e); // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // VÉRIFICATION DE L'EXISTENCE DU CHEMIN if (!Directory.Exists(CurrentFolder + "/data/events/" + e.Date.Year + "/" + e.Date.Month + "/" + e.Date.Day)) Directory.CreateDirectory(CurrentFolder + "/data/events/" + e.Date.Year + "/" + e.Date.Month + "/" + e.Date.Day); string FileName = CurrentFolder + "/data/events/" + e.Date.Year + "/" + e.Date.Month + "/" + e.Date.Day + "/" + "event"; // CRYPTAGE DES DONNÉES Obfuscate(FileName, output); } catch(Exception ex) { // EN CAS D'ERREUR MessageBox.Show(ex.ToString()); } } public static List GetAllEvents() { List toReturn = new List(); try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/events/"); // POUR CHAQUE EVENT.. foreach (var year in di.GetDirectories()) { foreach (var month in year.GetDirectories()) { foreach (var day in month.GetDirectories()) { string y, m, d; y = year.Name; m = month.Name; d = day.Name; Event ev = JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/events/" + y + "/" + m + "/" + d + "/event"))); toReturn.Add(ev); } } } return toReturn; } catch { // SI AUCUN EVENT return null; } } public static Event GetEvent(DateTime d) { try { // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); string FileName = CurrentFolder + "/data/events/" + d.Year + "/" + d.Month + "/" + d.Day + "/" + "event"; // RÉCUPÉRATION DE L'OBJET return JsonConvert.DeserializeObject(Deobfuscate(FileName)); } catch { // SI L'EVENT N'EXISTE PAS return null; } } public static List GetEventsYearMonth(int y, int m) { List toReturn = new List(); try { // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/events/" + y + "/" + m + "/"); foreach (var d in di.GetDirectories()) { foreach (var f in d.GetFiles()) { toReturn.Add(JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/events/" + y + "/" + m + "/" + d.Name + "/" + f.Name)))); } } // RÉCUPÉRATION DE L'OBJET return toReturn; } catch { return toReturn; } } #endregion #region SAUVEGARDE/RÉCUPÉRATION/SUPPRESSION FOURNISSEUR + CATEGORIE /// SAUVEGARDE/RÉCUPÉRATION/SUPPRESSION FOURNISSEUR + CATEGORIE /// /// Concerne le partie du système de sauvegarde qui sauvegarde, récupère et supprime les fournisseurs & catégories /// - SaveFournisseur() : void /// - SaveCategory() : void /// - GetAllFournisseurs() : List /// - GetAllCategory() : List /// - GetFournisseur() : Fournisseur /// - GetCategory() : Categorie /// - DeleteAllCategory() : void /// - DeleteFournisseur() : void public static void SaveFournisseur(Fournisseur e) { try { // VALEUR A CRYPTER string output = JsonConvert.SerializeObject(e); // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); string FileName = CurrentFolder + "/data/providers/" + e.Nom; // CRYPTAGE DES DONNÉES Obfuscate(FileName, output); } catch (Exception ex) { // EN CAS D'ERREUR MessageBox.Show("Impossible de sauvegarder, le fournisseur existe déjà."); } } public static void SaveCategory(Categorie e) { try { // VALEUR A CRYPTER string output = JsonConvert.SerializeObject(e); // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); string FileName = CurrentFolder + "/data/providers/category/" + e.Nom; // CRYPTAGE DES DONNÉES Obfuscate(FileName, output); } catch (Exception ex) { // EN CAS D'ERREUR MessageBox.Show("Impossible de sauvegarder, la catégorie existe déjà."); } } public static List GetAllFournisseurs() { List toReturn = new List(); try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/providers/"); // POUR CHAQUE FOURNISSEUR.. foreach (var file in di.GetFiles()) { Fournisseur cr = JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/providers/" + file.Name))); toReturn.Add(cr); } return toReturn; } catch // SI AUCUN FOURNISSEUR { return null; } } public static List GetAllCategory() { List toReturn = new List(); try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/providers/category/"); // POUR CHAQUE CATEGORIE.. foreach (var file in di.GetFiles()) { Categorie cr = JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/providers/category/" + file.Name))); toReturn.Add(cr); } return toReturn; } catch // SI AUCUNE CATEGORIE { return null; } } public static Categorie GetCategory(string d) { try { // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); string FileName = CurrentFolder + "/data/providers/category/" + d; // RÉCUPÉRATION DE L'OBJET return JsonConvert.DeserializeObject(Deobfuscate(FileName)); } catch { // SI L'EVENT N'EXISTE PAS return null; } } public static Fournisseur GetFournisseur(string d) { try { // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); string FileName = CurrentFolder + "/data/providers/" + d; // RÉCUPÉRATION DE L'OBJET return JsonConvert.DeserializeObject(Deobfuscate(FileName)); } catch { // SI L'EVENT N'EXISTE PAS return null; } } public static void DeleteAllCategory() { try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/providers/category/"); // SUPPRESSION foreach (var file in di.GetFiles()) file.Delete(); } catch (Exception ex) { // ERROR MessageBox.Show(ex.ToString()); } } public static void DeleteFournisseur(Fournisseur f) { try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/providers/"); DirectoryInfo di_doc = new DirectoryInfo(CurrentFolder + "/data/providers/documents/"); if (File.Exists(CurrentFolder + "/data/providers/" + f.Nom)) File.Delete(CurrentFolder + "/data/providers/" + f.Nom); foreach (var file in di_doc.GetFiles()) { // RÉCUPÉRATION DE L'EXTENSION string[] sp = file.Name.Split('\\'); // sp1[sp1.Lenght-1] == nom du fichier string[] sp1 = sp[sp.Length -1].Split('-'); if (sp1[0] == f.Nom) file.Delete(); } } catch (Exception ex) { // ERROR MessageBox.Show(ex.ToString()); } } #endregion #region SAUVEGARDE/RÉCUPÉRATION CRITERE /// SAUVEGARDE/RÉCUPÉRATION CRITERE /// /// Concerne le partie du système de sauvegarde qui sauvegarde et récupère les critères fournisseur /// - SaveCritere() : void /// - GetAllCriteres() : List /// - DeleteAllCriteres() : void public static void SaveCritere(CriteriaFournisseur e) { try { // VALEUR A CRYPTER string output = JsonConvert.SerializeObject(e); // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/criteria/"); string FileName = CurrentFolder + "/data/criteria/" + di.GetFiles().Length; // CRYPTAGE DES DONNÉES Obfuscate(FileName, output); } catch (Exception ex) { // EN CAS D'ERREUR MessageBox.Show(ex.ToString()); } } public static List GetAllCriteres() { List toReturn = new List(); try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/criteria/"); // POUR CHAQUE CRITERE.. foreach (var file in di.GetFiles()) { CriteriaFournisseur cr = JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/criteria/" + file.Name))); toReturn.Add(cr); } return toReturn; } catch { // SI AUCUN CRITERE return null; } } public static void DeleteAllCriteres() { try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/criteria/"); // SUPPRESSION foreach (var file in di.GetFiles()) file.Delete(); } catch (Exception ex) { // ERROR MessageBox.Show(ex.ToString()); } } #endregion #region SAUVEGARDE/RÉCUPÉRATION SIGNALEMENTS /// SAUVEGARDE/RÉCUPÉRATION SIGNALEMENTS /// /// Concerne le partie du système de sauvegarde qui sauvegarde et récupère les signalements (normaux et matières) /// - SaveNormalSignal() : void /// - SaveMatiereSignal() : void /// - GetAllNormalSignal() : List /// - GetAllMatiereSignal() : List /// - GetNormalSignalByChrono() : NormalSignal /// - GetMatiereSignalByChrono() : MatiereSignal public static void SaveNormalSignal(NormalSignal e) { try { // VALEUR A CRYPTER string output = JsonConvert.SerializeObject(e); // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); string oldchrono = File.ReadAllText(CurrentFolder + "/data/signals/lastchrono"); int newchrono = (Convert.ToInt32(oldchrono)); if (newchrono < e.Chrono) File.WriteAllText(CurrentFolder + "/data/signals/lastchrono", e.Chrono.ToString(), Encoding.ASCII); string FileName = CurrentFolder + "/data/signals/normal/" + e.Chrono; // CRYPTAGE DES DONNÉES Obfuscate(FileName, output); } catch (Exception ex) { // EN CAS D'ERREUR MessageBox.Show(ex.ToString()); } } public static void SaveMatiereSignal(MatiereSignal e) { try { // VALEUR A CRYPTER string output = JsonConvert.SerializeObject(e); // RÉCUPÉRATION DES DIFFÉRENTS DOSSIERS string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); string oldchrono = File.ReadAllText(CurrentFolder + "/data/signals/lastchrono"); int newchrono = (Convert.ToInt32(oldchrono)); if (newchrono < e.Chrono) File.WriteAllText(CurrentFolder + "/data/signals/lastchrono", e.Chrono.ToString(), Encoding.ASCII); string FileName = CurrentFolder + "/data/signals/material/" + e.Chrono; // CRYPTAGE DES DONNÉES Obfuscate(FileName, output); } catch (Exception ex) { // EN CAS D'ERREUR MessageBox.Show(ex.ToString()); } } public static List GetAllNormalSignal() { List toReturn = new List(); try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/signals/normal/"); // POUR CHAQUE CRITERE.. foreach (var file in di.GetFiles()) { NormalSignal ns = JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/signals/normal/" + file.Name))); toReturn.Add(ns); } return toReturn; } catch { // SI AUCUN CRITERE return null; } } public static List GetAllMatiereSignal() { List toReturn = new List(); try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/signals/material/"); // POUR CHAQUE CRITERE.. foreach (var file in di.GetFiles()) { MatiereSignal ms = JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/signals/material/" + file.Name))); toReturn.Add(ms); } return toReturn; } catch { // SI AUCUN CRITERE return null; } } public static NormalSignal GetNormalSignalByChrono(string s) { try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/signals/normal/"); // POUR CHAQUE CRITERE.. foreach (var file in di.GetFiles()) { if (file.Name == s) return JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/signals/normal/" + file.Name))); } return null; } catch { // SI AUCUN CRITERE return null; } } public static MatiereSignal GetMatiereSignalByChrono(string s) { try { // RÉCUPÉRATION DU DOSSIER string CurrentFolder = Path.GetDirectoryName(Application.ExecutablePath); // INFORMATIONS DU DOSSIER DirectoryInfo di = new DirectoryInfo(CurrentFolder + "/data/signals/material/"); // POUR CHAQUE CRITERE.. foreach (var file in di.GetFiles()) { if (file.Name == s) return JsonConvert.DeserializeObject(Deobfuscate((CurrentFolder + "/data/signals/material/" + file.Name))); } return null; } catch { // SI AUCUN CRITERE return null; } } public static object SearchSignalByChrono(string s) { foreach(NormalSignal ns in Instance.NormalSignalList) { if (ns.Chrono.ToString() == s) return ns; } foreach (MatiereSignal ms in Instance.MatiereSignalList) { if (ms.Chrono.ToString() == s) return ms; } return null; } public static List SearchNormalSignalByTypeAndMore(Material m, Fournisseur f, string VISA) { List toReturn = new List(); // MATERIEL = TRUE ; FOURNISSEUR = TRUE if (m != null && f != null) { if (VISA == "Validé") { foreach (NormalSignal ns in Instance.NormalSignalList) { if (ns.Fournisseur != null && ns.Materiel != null) if (ns.Materiel.Immatriculation == m.Immatriculation && ns.Fournisseur.Nom == f.Nom && ns.VISA == true) toReturn.Add(ns); } } else if (VISA == "Non-Validé") { foreach (NormalSignal ns in Instance.NormalSignalList) { if (ns.Fournisseur != null && ns.Materiel != null) if (ns.Materiel.Immatriculation == m.Immatriculation && ns.Fournisseur.Nom == f.Nom && ns.VISA == false) toReturn.Add(ns); } } else { foreach (NormalSignal ns in Instance.NormalSignalList) { if (ns.Fournisseur != null && ns.Materiel != null) if (ns.Materiel.Immatriculation == m.Immatriculation && ns.Fournisseur.Nom == f.Nom) toReturn.Add(ns); } } } // MATERIEL = FALSE ; FOURNISSEUR = TRUE else if (m == null && f != null) { if (VISA == "Validé") { foreach (NormalSignal ns in Instance.NormalSignalList) { if (ns.Fournisseur != null) if (ns.Fournisseur.Nom == f.Nom && ns.VISA == true) toReturn.Add(ns); } } else if (VISA == "Non-Validé") { foreach (NormalSignal ns in Instance.NormalSignalList) { if (ns.Fournisseur != null) if (ns.Fournisseur.Nom == f.Nom && ns.VISA == false) toReturn.Add(ns); } } else { foreach (NormalSignal ns in Instance.NormalSignalList) { if (ns.Fournisseur != null) if (ns.Fournisseur.Nom == f.Nom) toReturn.Add(ns); } } } // MATERIEL = TRUE ; FOURNISSEUR = FALSE else if (m != null && f == null) { if (VISA == "Validé") { foreach (NormalSignal ns in Instance.NormalSignalList) { if (ns.Materiel != null) if (ns.Materiel.Immatriculation == m.Immatriculation && ns.VISA == true) toReturn.Add(ns); } } else if (VISA == "Non-Validé") { foreach (NormalSignal ns in Instance.NormalSignalList) { if (ns.Materiel != null) if (ns.Materiel.Immatriculation == m.Immatriculation && ns.VISA == false) toReturn.Add(ns); } } else { foreach (NormalSignal ns in Instance.NormalSignalList) { if (ns.Materiel != null) if (ns.Materiel.Immatriculation == m.Immatriculation) toReturn.Add(ns); } } } // MATERIEL = FALSE ; FOURNISSEUR = FALSE else if (m == null && f == null) { if (VISA == "Validé") { foreach (NormalSignal ns in Instance.NormalSignalList) { if (ns.VISA == true) toReturn.Add(ns); } } else if (VISA == "Non-Validé") { foreach (NormalSignal ns in Instance.NormalSignalList) { if (ns.VISA == false) toReturn.Add(ns); } } else return Instance.NormalSignalList; } return toReturn; } public static List SearchMatiereSignalByTypeAndMore(Fournisseur f, string VISA) { List toReturn = new List(); // FOURNISSEUR = TRUE if (f != null) { if (VISA == "Validé") { foreach (MatiereSignal ms in Instance.MatiereSignalList) { if (ms.Fournisseur != null) if (ms.Fournisseur.Nom == f.Nom && ms.VISA == true) toReturn.Add(ms); } } else if (VISA == "Non-Validé") { foreach (MatiereSignal ms in Instance.MatiereSignalList) { if (ms.Fournisseur != null) if (ms.Fournisseur.Nom == f.Nom && ms.VISA == false) toReturn.Add(ms); } } else { foreach (MatiereSignal ms in Instance.MatiereSignalList) { if (ms.Fournisseur != null) if (ms.Fournisseur.Nom == f.Nom) toReturn.Add(ms); } } } // FOURNISSEUR = FALSE else if (f == null) { if (VISA == "Validé") { foreach (MatiereSignal ms in Instance.MatiereSignalList) { if (ms.VISA == true) toReturn.Add(ms); } } else if (VISA == "Non-Validé") { foreach (MatiereSignal ms in Instance.MatiereSignalList) { if (ms.VISA == false) toReturn.Add(ms); } } else return Instance.MatiereSignalList; } return toReturn; } #endregion #region SÉCURITÉ DE LA SAUVEGARDE (ILLISIBLE) // ECRITURE DU FICHIER ILLISIBLE private static void Obfuscate(string fileName, string data) { var bytes = Encoding.UTF8.GetBytes(data); for (int i = 0; i < bytes.Length; i++) bytes[i] ^= 0x5a; File.WriteAllText(fileName, Convert.ToBase64String(bytes)); } // RÉCUPÉRATION DU FICHIER ILLISIBLE private static string Deobfuscate(string fileName) { var bytes = Convert.FromBase64String(File.ReadAllText(fileName)); for (int i = 0; i < bytes.Length; i++) bytes[i] ^= 0x5a; return Encoding.UTF8.GetString(bytes); } #endregion } }