Example #1
0
        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;
            }
                   ));
        }
Example #2
0
        /// <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;
            }
                   ));
        }
Example #3
0
        /// <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);
        }