internal static E_Decision?HashCopy_AskToUser(object sender, EFileResult state, FileArgs fileSrc, FileArgs fileDest) { return(Application.Current.Dispatcher?.Invoke ( () => { DxTBoxCore.Box_Decisions.MBDecision boxDeciz = new DxTBoxCore.Box_Decisions.MBDecision() { Model = new DxTBoxCore.Box_Decisions.M_Decision() { Message = $"Overwrite ? ({state})", Source = fileSrc.Path, Destination = fileDest.Path, SourceInfo = FileSizeFormatter.Convert(fileSrc.Length), DestInfo = FileSizeFormatter.Convert(fileDest.Length), }, Buttons = E_DxConfB.OverWrite | E_DxConfB.Pass | E_DxConfB.Trash, }; if (boxDeciz.ShowDialog() == true) { return boxDeciz.Model.Decision; } return E_Decision.None; } )); }
/// <summary> /// Show a window to ask what to do when there is a file conflict /// </summary> /// <param name="sender"></param> /// <param name="source"></param> /// <param name="destination"></param> /// <param name="buttons"></param> /// <returns></returns> internal static E_Decision?Ask4_FileConflict2(object sender, EFileResult state, FileArgs fileSrc, FileArgs fileDest) { fileSrc.Length = new FileInfo(fileSrc.Path).Length; fileDest.Length = new FileInfo(fileDest.Path).Length; return(Application.Current.Dispatcher?.Invoke ( () => { DxTBoxCore.Box_Decisions.MBDecisionD boxDeciz = new DxTBoxCore.Box_Decisions.MBDecisionD() { Model = new DxTBoxCore.Box_Decisions.M_Decision() { Message = LanguageManager.Instance.Lang.File_Ex, Source = fileSrc.Path, Destination = fileDest.Path, SourceInfo = FileSizeFormatter.Convert(fileSrc.Length), DestInfo = FileSizeFormatter.Convert(fileDest.Length), }, Buttons = E_DxConfB.OverWrite | E_DxConfB.Pass | E_DxConfB.Trash, }; if (boxDeciz.ShowDialog() == true) { return boxDeciz.Model.Decision; } return E_Decision.None; } )); }
/// <summary> /// Gère la copie en examinant la totale similitude des fichiers /// </summary> /// <param name="srcFile"></param> /// <param name="destLocation"></param> /// <param name="mediatype"></param> private bool Copy_Handler(string srcFile, string destLocation, string mediatype) { // 2020 // Test de la similitude en profondeur //FilesFunc.Check4Crash(); OPFiles neoOPF = new OPFiles() { }; neoOPF.IWrite += new RetourMessage((x) => ITrace.BeginLine(x)); neoOPF.IWriteLine += new RetourMessage((x) => ITrace.WriteLine(x)); // Booleen pour déterminer si l'on écrase ou pas bool overW = false; // Vérification en profondeur // Annulé EOPResult res = OPFiles.Copy_DeepVMode(dbPath, destLocation, $"Copy_{mediatype}", () => MD5.Create(), Dcs_Buttons.NoStop, x => ITrace.WriteLine(x)); string fileName = Path.GetFileName(srcFile); string destFile = Path.Combine(destLocation, fileName); EFileResult verif = neoOPF.DeepVerif(srcFile, destFile, () => MD5.Create()); bool copyRes = false; // Stocke le résultat de la copie switch (verif) { case EFileResult.DifferentSize: case EFileResult.DifferentHash: // Check selon les résultats de ce qu'il faut faire // Demande à l'utilisateur // EDestDecision res = MB_Decision.Show($"Copy_Handler: {Lang.Dest_File_Exists}, { Lang.Replace_Question} ?", $"{Lang.Alert} - Copy_Handler", destination: destLocation, buttons: Dcs_Buttons.All); EDestDecision res = MB_Decision.Show($"Copy_Handler: {Lang.Dest_File_Exists}, { Lang.Replace_Question} ?", $"{Lang.Alert} - Copy_Handler", source: srcFile, destination: destFile, buttons: Dcs_Buttons.All); // On passe si l'utilisateur ne veut pas écraser ou renommer /*if (res == EDestDecision.Pass || res == EDestDecision.PassAll) * return; */ // On utilise une fonction de traitement sur le fichier de destination (renommer, envoyer à la poubelle) neoOPF.DestFileAction(res, destFile); // Selon le résultat de la boite on copie ou non le fichier bool?overwrite = Handle_Copy(srcFile, ref destFile, res); if (overwrite != null) { copyRes = FilesFunc.Copy(srcFile, destFile, (bool)overwrite); } break; // Gère si la source a une taille 0 (entre autre) case EFileResult.Source_Error: break; case EFileResult.Destination_Error: case EFileResult.NoMatch: ITrace.WriteLine($"PackMe: Copy of '{fileName}'"); copyRes = FilesFunc.Copy(srcFile, destFile, false); break; default: ITrace.WriteLine($"PackMe: Copy of '{fileName}' avoided"); break; } return(copyRes); // 2020 //2020 EOPResult res = OPFiles.FileNameCompare(dbPath, destLocation, $"Copy_{mediatype}", Dcs_Buttons.NoStop, x => ITrace.WriteLine(x)); // assignation du chemin relatif à la variable // return CopyFile(dbPath, destLocation, res); }