private void ExecLocalDistantImage(Model.Local.Catalog Catalog, Model.Prestashop.PsCategory PsCategory)
        {
            // We need to send pictures
            Model.Local.CatalogImageRepository CatalogImageRepository = new Model.Local.CatalogImageRepository();
            Model.Local.CatalogImage           CatalogImage           = CatalogImageRepository.ReadCatalog(Catalog.Cat_Id, true);

            if (CatalogImage != null)
            {
                Model.Prestashop.PsImageTypeRepository PsImageTypeRepository = new Model.Prestashop.PsImageTypeRepository();
                List <Model.Prestashop.PsImageType>    ListPsImageType       = PsImageTypeRepository.ListCategorie(1);
                if (Core.Global.GetConfig().ConfigFTPActive)
                {
                    String FTP      = Core.Global.GetConfig().ConfigFTPIP;
                    String User     = Core.Global.GetConfig().ConfigFTPUser;
                    String Password = Core.Global.GetConfig().ConfigFTPPassword;

                    string extension = System.IO.Path.GetExtension(CatalogImage.ImaCat_Image);

                    String PathImgTmp = System.IO.Path.Combine(Global.GetConfig().Folders.TempCatalog, String.Format("{0}" + extension, CatalogImage.ImaCat_Id));
                    if (System.IO.File.Exists(PathImgTmp))
                    {
                        string ftpfullpath           = FTP + "/img/c/" + PsCategory.IDCategory + ".jpg";
                        System.Net.FtpWebRequest ftp = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(ftpfullpath);
                        ftp.Credentials = new System.Net.NetworkCredential(User, Password);
                        //userid and password for the ftp server to given

                        ftp.UseBinary  = true;
                        ftp.UsePassive = true;
                        ftp.EnableSsl  = Core.Global.GetConfig().ConfigFTPSSL;
                        ftp.Method     = System.Net.WebRequestMethods.Ftp.UploadFile;
                        System.IO.FileStream fs = System.IO.File.OpenRead(PathImgTmp);
                        byte[] buffer           = new byte[fs.Length];
                        fs.Read(buffer, 0, buffer.Length);
                        fs.Close();
                        System.IO.Stream ftpstream = ftp.GetRequestStream();
                        ftpstream.Write(buffer, 0, buffer.Length);
                        ftpstream.Close();
                        ftp.Abort();

                        foreach (Model.Prestashop.PsImageType PsImageType in ListPsImageType)
                        {
                            String PathImg = System.IO.Path.Combine(Global.GetConfig().Folders.RootCatalog, String.Format("{0}-{1}" + extension, CatalogImage.ImaCat_Id, PsImageType.Name));
                            if (System.IO.File.Exists(PathImg))
                            {
                                ftpfullpath     = FTP + "/img/c/" + PsCategory.IDCategory + "-" + PsImageType.Name + ".jpg";
                                ftp             = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(ftpfullpath);
                                ftp.Credentials = new System.Net.NetworkCredential(User, Password);
                                //userid and password for the ftp server to given

                                ftp.UseBinary  = true;
                                ftp.UsePassive = true;
                                ftp.EnableSsl  = Core.Global.GetConfig().ConfigFTPSSL;
                                ftp.Method     = System.Net.WebRequestMethods.Ftp.UploadFile;
                                fs             = System.IO.File.OpenRead(PathImg);
                                buffer         = new byte[fs.Length];
                                fs.Read(buffer, 0, buffer.Length);
                                fs.Close();
                                ftpstream = ftp.GetRequestStream();
                                ftpstream.Write(buffer, 0, buffer.Length);
                                ftpstream.Close();
                                ftp.Abort();
                            }
                        }
                        Core.Temp.SyncCatalogue_ClearSmartyCache = true;
                        Core.Temp.SyncCatalogue_RegenerateTree   = true;
                    }
                }
            }
        }
        private Boolean UpdateCatalogs(List <Model.Local.Catalog> Catalogs)
        {
            Boolean  updated = false;
            DateTime now     = DateTime.Now;

            foreach (var catalog in Catalogs)
            {
                if (catalog.HasLocalChild && catalog.HasUpdatedOrChild)
                {
                    if (UpdateCatalogs(catalog.Catalog2.ToList()))
                    {
                        updated = true;
                    }
                }
                if (catalog.HasNewImage)
                {
                    try
                    {
                        Model.Local.CatalogImageRepository catalogImageRepository = new Model.Local.CatalogImageRepository();

                        bool isNew = false;
                        Model.Local.CatalogImage image = catalogImageRepository.ReadCatalogImageByCatalog(catalog.Cat_Id);

                        if (isNew = (image == null))
                        {
                            image = new Model.Local.CatalogImage()
                            {
                                Cat_Id       = catalog.Cat_Id,
                                ImaCat_Image = string.Empty,
                            };
                            catalogImageRepository.Add(image);
                        }
                        String extension = System.IO.Path.GetExtension(catalog.SmallImagePath).ToLower();

                        string uri      = catalog.SmallImagePath.Replace("File:///", "").Replace("file:///", "").Replace("File://", "\\\\").Replace("file://", "\\\\").Replace("/", "\\");
                        string tempFile = System.IO.Path.Combine(Global.GetConfig().Folders.TempCatalog, String.Format("{0}" + extension, image.ImaCat_Id));
                        System.IO.File.Copy(catalog.SmallImagePath, tempFile, true);

                        Model.Prestashop.PsImageTypeRepository PsImageTypeRepository = new Model.Prestashop.PsImageTypeRepository();
                        List <Model.Prestashop.PsImageType>    ListPsImageType       = PsImageTypeRepository.ListCategorie(1);

                        System.Drawing.Image img = System.Drawing.Image.FromFile(tempFile);

                        foreach (Model.Prestashop.PsImageType PsImageType in ListPsImageType)
                        {
                            Core.Img.resizeImage(img, Convert.ToInt32(PsImageType.Width), Convert.ToInt32(PsImageType.Height),
                                                 System.IO.Path.Combine(Global.GetConfig().Folders.RootCatalog, String.Format("{0}-{1}" + extension, image.ImaCat_Id, PsImageType.Name)));
                        }

                        Core.Img.resizeImage(img, Core.Global.GetConfig().ConfigImageMiniatureWidth, Core.Global.GetConfig().ConfigImageMiniatureHeight,
                                             System.IO.Path.Combine(Global.GetConfig().Folders.SmallCatalog, String.Format("{0}" + extension, image.ImaCat_Id)));

                        img.Dispose();

                        if (isNew || image.ImaCat_Image != String.Format("{0}" + extension, image.ImaCat_Id))
                        {
                            image.ImaCat_Image = String.Format("{0}" + extension, image.ImaCat_Id);
                            catalogImageRepository.Save();
                        }
                    }
                    catch (Exception ex)
                    {
                        Core.Error.SendMailError(ex.ToString());
                    }
                }

                if (catalog.HasUpdated || catalog.HasNewImage)
                {
                    catalog.Cat_Date   = now;
                    catalog.HasUpdated = false;
                    catalog.ReloadImage();
                    updated = true;
                }
            }
            return(updated);
        }