Exemplo n.º 1
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);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Copie les images / Copy the images
        /// </summary>
        /// <remarks>To Add Mask see 'Where'</remarks>
        private void CopyImages()
        {
            //2020/10/28 déplacé var res = MB_SimpleAll.Show($"{Lang.ImagesP} ?", Lang.ImagesTitle, buttons: Dcs_Buttons2.OverWrite | Dcs_Buttons2.Pass);

            ITrace.WriteLine(prefix: false);

            ITrace.WriteLine(prefix: false);
            Queue <PackFile> lPackFile = new Queue <PackFile>();

            // Get All images (To Add mask see at Where)
            Console.WriteLine($"[CopyImages] Search all images for '{_ZeGame.Title}'");
            foreach (PlatformFolder plfmFolder in _ZePlatform.PlatformFolders)
            {
                //filtre
                switch (plfmFolder.MediaType)
                {
                case "Manual":
                case "Music":
                case "Theme Video":
                case "Video":
                    continue;
                }

                // 2020 - on modify pour certains titres, la recherche
                string toSearch = _ZeGame.Title.Replace(':', '_').Replace('\'', '_');
                toSearch = toSearch.Replace("__", "_");

                // Liste du contenu des dossiers
                foreach (var fichier in Directory.EnumerateFiles(plfmFolder.FolderPath, "*.*", System.IO.SearchOption.AllDirectories)
                         .Where(s => Path.GetFileName(s).StartsWith($"{toSearch}-") || Path.GetFileName(s).StartsWith($"{_ZeGame.Title}.{_ZeGame.ID}-")))
                {
                    Console.WriteLine($"\t\t[CopyImages] Found '{fichier}' in '{plfmFolder.FolderPath}'");

                    PackFile tmp = new PackFile(plfmFolder.MediaType, fichier);

                    lPackFile.Enqueue(tmp);
                }
            }

            ITrace.WriteLine(prefix: false);
            EDestDecision res = EDestDecision.None;

            // Copy Process
            while (lPackFile.Count != 0)
            {
                var    pkFile = lPackFile.Dequeue();
                int    pos    = pkFile.LinkToThePath.IndexOf(pkFile.Categorie);
                string tail1  = Path.GetDirectoryName(pkFile.LinkToThePath).Substring(pos);

                // Dossier de destination
                string destFolder = Path.Combine(_Tree.Children[nameof(SubFolder.Images)].Path, tail1);
                // Fichier de destination
                string destFile = Path.Combine(destFolder, Path.GetFileName(pkFile.LinkToThePath));

                // Création des dossiers
                Console.WriteLine(destFolder);
                if (!Directory.Exists(destFolder))
                {
                    //2020 CreateVFolders(_Tree.Children["Images"], tail1);
                    CreateVFolders(_Tree.Children[nameof(SubFolder.Images)], tail1);
                }
                //2020 FoncSchem.MakeListFolder(_Tree.Children["Images"]);
                FoncSchem.MakeListFolder(_Tree.Children[nameof(SubFolder.Images)]);

                // copy
                // TODO
                // 21/10/2020
                // CopyFile(pkFile.LinkToThePath, dest, res);
                bool?rezDec = false;


                // On déclenche en cas de conflit un handle copy + une demande avant
                if (File.Exists(destFile))
                {
                    // On va demander une fois que faire en cas de conflit.
                    if (res == EDestDecision.None)
                    {
                        res = MB_SimpleAll.Show($"{Lang.ImagesP} ?", Lang.ImagesTitle, buttons: Dcs_Buttons2.OverWrite | Dcs_Buttons2.Pass);
                    }
                    //
                    rezDec = Handle_Copy(pkFile.LinkToThePath, ref destFile, res);
                }

                if (rezDec == null)
                {
                    continue;
                }


                File.Copy(pkFile.LinkToThePath, destFile, (bool)rezDec);
                //21/10/2020
            }
        }
Exemplo n.º 3
0
        // Todo une fenêtre de copie ?
        // Todo créer une fonctoin de copie dans OpFile avec progression
        // Todo coller un trycatch
        /// <summary>
        /// Décide s'il doit y avoir copier ou non, s'il faut écraser ou non
        /// </summary>
        /// <param name="fichier"></param>
        /// <param name="dest"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        private bool?Handle_Copy(string fichier, ref string dest, EDestDecision result)
        {
            bool overwrite;

            switch (result)
            {
            case EDestDecision.Stop:
                // TODO
                return(null);

            // Passer
            case EDestDecision.Pass:
            case EDestDecision.PassAll:
                Debug.WriteLine("Pass");
                return(null);

            case EDestDecision.Trash:
            case EDestDecision.TrashAll:
                Debug.WriteLine("Trash");
                return(false);


            // --- En cas de renommage
            case EDestDecision.Rename:
                // Le fichier cible devra être renommé.
                dest = FilesFunc.Choose_AName(dest, $"{_ZeGame.ExploitableFileName}-");
                return(false);

            case EDestDecision.OverWrite:
            case EDestDecision.OverWriteAll:
                Debug.WriteLine("Overwrite");

                return(true);

            default:
                Debug.WriteLine("Default");

                return(false);

                /*2020
                 *
                 * -------- plus la peine car automatiquement on vérifie si le fichier existe et non plus seulement
                 * si la variable est nulle;
                 *
                 * case EOPResult.Source_Error:
                 *  ITrace.WriteLine("File missing");
                 *  return false;
                 *
                 *
                 */
            }

            // 2020 enlevé Directory.SetCurrentDirectory(dest);

            /* string filename = Path.GetFileName(fichier);
             * string destLink = Path.Combine(dest, filename);
             */


            // 2020 enlevé Directory.SetCurrentDirectory(_GamePath);
            return(true);
        }