Example #1
0
        public override Stream ObtenirContenu(ICab cab)
        {
            try
            {
                var request = RequêteFtp(cab.Url);
                request.Method = WebRequestMethods.Ftp.DownloadFile;
                Stream s;
                try
                {
                    s = OuvrirFlux(request);
                    return(s);
                }
                catch
                {
                    // On donne une seconde chance en cas de souci réseau:
                    Thread.Sleep(5000);

                    request        = RequêteFtp(cab.Url);
                    request.Method = WebRequestMethods.Ftp.DownloadFile;
                    s = OuvrirFlux(request);
                    return(s);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(
                          "Problème durant le téléchargement du CAB de " + cab.Codif + " n°" + cab.Numéro +
                          " depuis le site NMPP", ex);
            }
        }
Example #2
0
 private void TéléchargerCab(ICab cab, string cheminFichierCab, ITaskObserver observer)
 {
     observer.NotifyInfo(this,
                         $"Transfert du Cab depuis [{cab.Url}] vers [{cheminFichierCab}]");
     TéléchargerCab(cab, cheminFichierCab);
     observer.NotifyInfo(this, $"Cab [{cab.Url}] récupéré dans [{cheminFichierCab}]");
 }
Example #3
0
        public override Stream ObtenirContenu(ICab cab)
        {
            try
            {
                var compte = Configuration.Comptes.FirstOrDefault(c => c.Editeur == cab.Editeur.TypeEditeur)
                             ?? throw new ArgumentException($"Type d'éditeur inconnu pour le téléchargement du CAB de [{cab.ParutionCible.LibelléCourt}] depuis le site MLP", nameof(cab));

                Stream s;
                var    request = RequêteUrl(compte, cab.Url);
                try
                {
                    s = OuvrirFlux(request);
                    return(s);
                }
                catch
                {
                    // On donne une seconde chance en cas de souci réseau:
                    Thread.Sleep(5000);

                    request = RequêteUrl(compte, cab.Url);
                    s       = OuvrirFlux(request);
                    return(s);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(
                          $"Problème durant le téléchargement du CAB de [{cab.ParutionCible.LibelléCourt}] depuis le site MLP", ex);
            }
        }
Example #4
0
 public InfosOpérationDépôt(ICab cabSource, ICab cabDestination, ICab cabExistant, EtatCabOnline étatCabOnline, IParution parutionCible)
 {
     _cabSource      = cabSource;
     _parutionCible  = parutionCible;
     _étatCabOnline  = étatCabOnline;
     _cabDestination = cabDestination;
     _cabExistant    = cabExistant;
 }
Example #5
0
        private ICab IntégrerCabTéléchargé(ICab cab, string cheminFichierCab, ITaskObserver observer)
        {
            observer.NotifyInfo(this, $"Vérification et intégration du nouveau Cab téléchargé [{cheminFichierCab}]");
            var newCab = IntégrerCabTéléchargé(cab, cheminFichierCab);

            observer.NotifyInfo(this, $"Nouveau Cab téléchargé [{cheminFichierCab}] vérifié et intégré : [{newCab}]");
            return(newCab);
        }
Example #6
0
 private static void TéléchargerCab(ICab cab, string cheminFichierCab)
 {
     using (var input = cab.ObtenirContenu())
     {
         using (var output = new FileStream(cheminFichierCab, FileMode.Create))
         {
             input.CopyTo(output);
         }
     }
     File.SetCreationTime(cheminFichierCab, cab.DateCréation);
 }
Example #7
0
 public InfosTraitementParution(IParution parution, ICab cab, IInfosOpérationDépôt infosOpérationDépôt)
 {
     Parution            = parution ?? throw new ArgumentNullException(nameof(parution));
     Cab                 = cab;
     InfosOpérationDépôt = infosOpérationDépôt;
     if (cab != null)
     {
         _anomalies = cab.Anomalies.ToDictionary(a => a.Type);
     }
     else
     {
         _anomalies = new Dictionary <TypeAnomalieCab, IAnomalieCab>();
     }
 }
Example #8
0
        protected virtual string CheminDossierCab(ICab cab)
        {
            if (!_dossiersParutions.Contains(cab.ParutionCible))
            {
                throw new Exception(
                          $"Impossible de trouver le dossier de Magazines en cours pour [{cab.ParutionCible}] afin d'y déposer le Cab [{cab}]");
            }
            var cheminDossierCab =
                (from chemin in _dossiersParutions[cab.ParutionCible]
                 let cheminCab = Path.Combine(chemin, _NomDossierCab)
                                 where !String.IsNullOrWhiteSpace(cheminCab) && Directory.Exists(cheminCab)
                                 select cheminCab).FirstOrDefault();

            if (cheminDossierCab == null)
            {
                throw new Exception(
                          $"Impossible de trouver le dossier [{_NomDossierCab}] pour [{cab.ParutionCible}] afin d'y déposer le Cab [{cab}]");
            }
            return(cheminDossierCab);
        }
Example #9
0
        private ICab IntégrerCabTéléchargé(ICab cab, string cheminFichierCab)
        {
            var newCab = CréerCab(new FileInfo(cheminFichierCab), cab.ParutionCible);

            if (newCab == null)
            {
                throw new Exception(
                          $"Le fichier du Cab téléchargé [{cheminFichierCab}] est introuvable ou son nom n'est pas dans le bon format");
            }
            lock (_listeDonnéesCab)
            {
                var oldCab =
                    (from c in _listeDonnéesCab where c.ParutionCible == cab.ParutionCible select c).
                    FirstOrDefault();
                if (oldCab != null)
                {
                    _listeDonnéesCab.Remove(oldCab);
                }
                _listeDonnéesCab.Add(newCab);
            }
            return(newCab);
        }
Example #10
0
 private static string NomFichierCab(ICab cab)
 {
     return
         ($"{cab.ParutionCible.CodeProduit}_{TypeDistributeurVersDistributeurPao(cab.Distributeur.TypeDistributeur)}_{cab.Codif}_{cab.Prix.ToString().Replace(",", ".")}_{TypePériodicitéVersPériodicitéPao(cab.Périodicité.TypePériodicité)}_{TypeQualificationRéseauVersQualificationPao(cab.Qualif.TypeQualificationRéseau)}.eps");
 }
Example #11
0
        public virtual ICab Déposer(ICab cab, bool créerFichierTiff, ITaskObserver observer)
        {
            if (cab == null)
            {
                throw new ArgumentNullException(nameof(cab));
            }
            if (observer == null)
            {
                throw new ArgumentNullException(nameof(observer));
            }

            observer.NotifyInfo(this,
                                $"Début du téléchargement du Cab [{cab}] pour [{cab.ParutionCible}] depuis [{cab.Dépôt}] vers [{this}]");

            if (cab.Dépôt == this)
            {
                observer.NotifyWarning(this,
                                       $"Tentative de téléchargement d'un Cab vers lui-même : [{cab.Url}], opération ignorée");
                return(cab);
            }

            string cheminDossierCab = CheminDossierCab(cab);

            if (String.IsNullOrWhiteSpace(cheminDossierCab))
            {
                throw new Exception(
                          $"Impossible de trouver le dossier [{cheminDossierCab}] pour y déposer le Cab [{cab}]");
            }

            string nomFichierCab    = NomFichierCab(cab);
            string cheminFichierCab = Path.Combine(cheminDossierCab, nomFichierCab);

            string nomFichierTiff    = Path.GetFileNameWithoutExtension(nomFichierCab) + ".tif";
            string cheminFichierTiff = Path.Combine(cheminDossierCab, nomFichierTiff);

            EffacerFichiersCab(cab, cheminDossierCab, observer);

            TéléchargerCab(cab, cheminFichierCab, observer);

            Task conversionTask;

            if (créerFichierTiff)
            {
                conversionTask = ConvertirVersTiffAsync(cheminFichierCab, cheminFichierTiff, observer);
            }
            else
            {
                conversionTask = null;
            }


            var newCab = IntégrerCabTéléchargé(cab, cheminFichierCab, observer);

            if (conversionTask != null)
            {
                try
                {
                    conversionTask.Wait();
                }
                catch (Exception exception)
                {
                    observer.NotifyWarning(this,
                                           $"Echec de la conversion en Tiff de [{cheminFichierCab}] vers [{cheminFichierTiff}] : {exception.DetailedMessage()}");
                }
            }

            observer.NotifyInfo(this,
                                $"Fin du téléchargement du Cab [{cab}] pour [{cab.ParutionCible}] depuis [{cab.Dépôt}] vers [{this}]");
            return(newCab);
        }
Example #12
0
 private void EffacerFichiersCab(ICab cab, string cheminDossierCab, ITaskObserver observer)
 {
     observer.NotifyInfo(this, $"Effacement des anciens fichiers Cab et Tiff pour [{cab.ParutionCible}]");
     EffacerFichiersCabs(cheminDossierCab);
     observer.NotifyInfo(this, $"Anciens fichiers Cab et Tiff pour [{cab.ParutionCible}] effacés");
 }
Example #13
0
 public ICab ClonerCab(ICab cabSource, IDépôtCab dépôtCab, string url, DateTime dateCréation)
 {
     return(_factoryFunc(dépôtCab, url, cabSource.Editeur, cabSource.Distributeur, cabSource.Codif,
                         cabSource.Numéro, cabSource.Prix, cabSource.Périodicité, cabSource.Qualif, dateCréation,
                         cabSource.ParutionCible));
 }
Example #14
0
 public abstract Stream ObtenirContenu(ICab cab);
Example #15
0
 public override Stream ObtenirContenu(ICab cab)
 {
     return(new FileStream(cab.Url, FileMode.Open));
 }
Example #16
0
        public void CalculerCompatbilité(ICab cab, out bool estCompatible, out IEnumerable <IAnomalieCab> anomalies)
        {
            Tuple <bool, IEnumerable <IAnomalieCab> > cachedValue;

            if (_cache.TryGetValue(cab, out cachedValue))
            {
                estCompatible = cachedValue.Item1;
                anomalies     = cachedValue.Item2;
                return;
            }

            estCompatible = true;

            var lAnomalies = new List <IAnomalieCab>();

            anomalies = lAnomalies;
            if (ComparerEditeurs(cab.Editeur, cab.ParutionCible.Editeur) != 0)
            {
                // On note la différence d'éditeur mais ce n'est pas une incompatibilité
                lAnomalies.Add(_anomalieCabFactory.CréerAnomalieCab(TypeAnomalieCab.Editeur,
                                                                    cab.ParutionCible.Editeur.LibelléCourt.ToUpper(),
                                                                    cab.Editeur.LibelléCourt.ToUpper(),
                                                                    nécessiteAction: true,
                                                                    estIncompatible: false));
            }
            if (ComparerCodifs(cab.Codif, cab.ParutionCible.Codif) != 0)
            {
                estCompatible = false;
                lAnomalies.Add(_anomalieCabFactory.CréerAnomalieCab(TypeAnomalieCab.Codif,
                                                                    cab.ParutionCible.Codif,
                                                                    cab.Codif,
                                                                    nécessiteAction: true,
                                                                    estIncompatible: true));
            }
            if (ComparerNuméros(cab.Numéro, cab.ParutionCible.Numéro) != 0)
            {
                estCompatible = false;
                lAnomalies.Add(_anomalieCabFactory.CréerAnomalieCab(TypeAnomalieCab.Numéro,
                                                                    cab.ParutionCible.Numéro.ToString(),
                                                                    cab.Numéro.ToString(),
                                                                    nécessiteAction: true,
                                                                    estIncompatible: true));
            }
            if (ComparerPrix(cab.Prix, cab.ParutionCible.Prix) != 0)
            {
                estCompatible = false;
                lAnomalies.Add(_anomalieCabFactory.CréerAnomalieCab(TypeAnomalieCab.Prix,
                                                                    (cab.ParutionCible.Prix ?? 0).ToString("C"),
                                                                    (cab.Prix ?? 0).ToString("C"),
                                                                    nécessiteAction: true,
                                                                    estIncompatible: true));
            }
            if (ComparerQualifs(cab.Qualif, cab.ParutionCible.Qualif) != 0)
            {
                estCompatible = false;
                lAnomalies.Add(_anomalieCabFactory.CréerAnomalieCab(TypeAnomalieCab.Qualification,
                                                                    cab.ParutionCible.Qualif.LibelléCourt.ToUpper(),
                                                                    cab.Qualif.LibelléCourt.ToUpper(),
                                                                    nécessiteAction: true,
                                                                    estIncompatible: true));
            }
            if (ComparerDistributeurs(cab.Distributeur, cab.ParutionCible.Distributeur) != 0)
            {
                estCompatible = false;
                lAnomalies.Add(_anomalieCabFactory.CréerAnomalieCab(TypeAnomalieCab.Distributeur,
                                                                    cab.ParutionCible.Distributeur.LibelléCourt.
                                                                    ToUpper(),
                                                                    cab.Distributeur.LibelléCourt.ToUpper(),
                                                                    nécessiteAction: true,
                                                                    estIncompatible: true));
            }
            int résultatComparaisonPériodicités = ComparerPériodicités(cab.Périodicité,
                                                                       cab.ParutionCible.PériodicitéEffective);

            if (résultatComparaisonPériodicités != 0)
            {
                // On note la différence de périodicité mais ce n'est pas une incompatibilité
                lAnomalies.Add(_anomalieCabFactory.CréerAnomalieCab(TypeAnomalieCab.Périodicité,
                                                                    cab.ParutionCible.Périodicité.LibelléCourt,
                                                                    cab.Périodicité.LibelléCourt,
                                                                    nécessiteAction: résultatComparaisonPériodicités < 0,
                                                                    estIncompatible: false));
            }

            _cache[cab] = new Tuple <bool, IEnumerable <IAnomalieCab> >(estCompatible, lAnomalies);
        }
Example #17
0
 public IInfosOpérationDépôt CréerInfosOpérationDépôt(ICab cabSource, ICab cabDestination, ICab cabExistant, EtatCabOnline étatCabOnline, IParution parutionCible)
 {
     return(_factoryFunc(cabSource, cabDestination, cabExistant, étatCabOnline, parutionCible));
 }