public void Visit(FileWrapper file) { FileInfo source = new FileInfo(file.Path); String fileDstPath = String.Join("\\", _pathDestinazione, source.Name); //Trovo l'autore del file string author = File.GetAccessControl(file.Path).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString(); //Prova va spostato sotto if (!author.Equals(string.Join("\\", Utente.GetNomeHost(), Utente.GetNomeUtente()))) { if (!_blacklistController.IsBlackListed(author)) { bool riconosciuto = _viewHome.ChiediScelta(author); if (riconosciuto) { //Se esiste Confronto gli hash se sono diversi sincronizzo if (File.Exists(fileDstPath)) { var sourceStream = new FileStream(file.Path, FileMode.Open, FileAccess.Read); String srcSum = GetChecksumBuffered(sourceStream); var dstStream = new FileStream(fileDstPath, FileMode.Open, FileAccess.Read); String dstSum = GetChecksumBuffered(dstStream); //Se gli hash non sono uguali if (!srcSum.Equals(dstSum)) { File.Copy(file.Path, fileDstPath); ActionCompletedEvent args = new ActionCompletedEvent { ToEntry = EntryFactory.CreateEntry(this, "file copiato", sorgente: file.Path, destinazione: fileDstPath) }; ToLog?.Invoke(this, args); } } //Copio diretto else { File.Copy(file.Path, fileDstPath); ActionCompletedEvent args = new ActionCompletedEvent { ToEntry = EntryFactory.CreateEntry(this, "file copiato", sorgente: file.Path, destinazione: fileDstPath) }; ToLog?.Invoke(this, args); } } else { _blacklistController.AggiungiUtente(author); //Elimino il file File.Delete(file.Path); ActionCompletedEvent args = new ActionCompletedEvent { ToEntry = EntryFactory.CreateEntry(this, "file eliminato", sorgente: file.Path) }; ToLog?.Invoke(this, args); } } } //Il file è del proprietario non c'è bisogno di chiamare la blacklist else { if (File.Exists(fileDstPath)) { var sourceStream = new FileStream(file.Path, FileMode.Open, FileAccess.Read); String srcSum = GetChecksumBuffered(sourceStream); var dstStream = new FileStream(fileDstPath, FileMode.Open, FileAccess.Read); String dstSum = GetChecksumBuffered(dstStream); //Se gli hash non sono uguali if (!srcSum.Equals(dstSum)) { ActionCompletedEvent args = new ActionCompletedEvent { ToEntry = EntryFactory.CreateEntry(this, "file copiato", sorgente: file.Path, destinazione: fileDstPath) }; ToLog?.Invoke(this, args); File.Copy(file.Path, fileDstPath); } } //Copio diretto else { ActionCompletedEvent args = new ActionCompletedEvent { ToEntry = EntryFactory.CreateEntry(this, "file copiato", sorgente: file.Path, destinazione: fileDstPath) }; ToLog?.Invoke(this, args); File.Copy(file.Path, fileDstPath); } } }