コード例 #1
0
        private IEnumerable <IInfosOpérationDépôt> TéléchargerCabsCore(IEnumerable <IParution> parutionsCiblées,
                                                                       IDépôtCabPao dépôtCabPao,
                                                                       IDépôtCab dépôtCabExterne,
                                                                       bool conversionVersTiff,
                                                                       ITaskObserver observer)
        {
            observer.NotifyProgress(this, 0);

            var i     = 0;
            int total = parutionsCiblées.Count();
            var téléchargementTasks =
                (from p in parutionsCiblées
                 select Task.Factory.StartNew(
                     () => TéléchargerCabSiNécessaireCore(p, dépôtCabExterne, dépôtCabPao, conversionVersTiff, observer),
                     TaskCreationOptions.AttachedToParent)
                 .ContinueWith(
                     t =>
            {
                int step = Interlocked.Increment(ref i);
                observer.NotifyProgress(this, step * 100 / total);
                return(t.Result);
            },
                     TaskContinuationOptions.AttachedToParent
                     )).ToList();


            var résultat = (from task in téléchargementTasks where task.Result != null select task.Result).ToList();

            observer.NotifyProgress(this, 100);

            return(résultat);
        }
コード例 #2
0
        private IEnumerable <IInfosOpérationDépôt> TéléchargerCabs(IEnumerable <IParution> parutionsCiblées,
                                                                   IDépôtCabPao dépôtCabPao,
                                                                   IDépôtCab dépôtCabExterne,
                                                                   IOptionsTéléchargementCabs optionsTéléchargement,
                                                                   IAfficheurTâches afficheurTâches)
        {
            var observer = _taskObserverFactory.CreateTaskObserver();

            afficheurTâches.AjouterTâche($"Téléchargement des Cabs depuis [{dépôtCabExterne}]",
                                         observer);
            try
            {
                observer.NotifyStarted(this);
                observer.NotifyProgress(this, 0);

                var résultat =
                    TéléchargerCabsCore(parutionsCiblées, dépôtCabPao, dépôtCabExterne,
                                        optionsTéléchargement.ConvertirCabVersTiff, observer);

                observer.NotifyProgress(this, 100);
                observer.NotifyCompleted(this);

                return(résultat);
            }
            catch (Exception exception)
            {
                observer.NotifyError(this, exception.DetailedMessage());
                observer.NotifyAborted(this, "Interruption causée par une erreur");
                throw;
            }
        }
コード例 #3
0
 public ICab CréerCab(IDépôtCab dépôtCab, string url, TypeEditeur éditeur,
                      TypeDistributeur distributeur, string codif, int?numéro, decimal?prix,
                      TypePériodicité périodicité, TypeQualificationRéseau qualif, DateTime dateCréation,
                      IParution parutionCible)
 {
     return(_factoryFunc(dépôtCab, url, _dépôtParutions.Editeur(éditeur),
                         _dépôtParutions.Distributeur(distributeur), codif, numéro, prix,
                         _dépôtParutions.Périodicité(périodicité),
                         _dépôtParutions.QualificationRéseau(qualif), dateCréation, parutionCible));
 }
コード例 #4
0
 public Cab(IComparateurCabParution comparateurCabParution, IDépôtCab dépôtCab, string url, IEditeur éditeur, IDistributeur distributeur, string codif, int?numéro, decimal?prix, IPériodicité périodicité, IQualificationRéseau qualif, DateTime dateCréation, IParution parutionCible)
 {
     _comparateurCabParution = comparateurCabParution ?? throw new ArgumentNullException(nameof(comparateurCabParution));
     _dépôtCab     = dépôtCab ?? throw new ArgumentNullException(nameof(dépôtCab));
     Url           = url;
     Editeur       = éditeur ?? throw new ArgumentNullException(nameof(éditeur));
     Distributeur  = distributeur ?? throw new ArgumentNullException(nameof(distributeur));
     Codif         = codif;
     Numéro        = numéro;
     Prix          = prix;
     Périodicité   = périodicité ?? throw new ArgumentNullException(nameof(périodicité));
     Qualif        = qualif ?? throw new ArgumentNullException(nameof(qualif));
     DateCréation  = dateCréation;
     ParutionCible = parutionCible ?? throw new ArgumentNullException(nameof(parutionCible));
 }
コード例 #5
0
 private IInfosOpérationDépôt TéléchargerCabSiNécessaireCore(IParution p, IDépôtCab dépôtCabExterne,
                                                             IDépôtCabPao dépôtCabPao,
                                                             bool conversionVerstiff, ITaskObserver observer)
 {
     try
     {
         var cabExterne = dépôtCabExterne.Cab(p);
         var cabPao     = dépôtCabPao.Cab(p);
         if (cabExterne != null)
         {
             if (cabPao == null || cabExterne.DateCréation > cabPao.DateCréation)
             {
                 if (cabExterne.EstCompatible)
                 {
                     observer.NotifyInfo(this, $"Téléchargement nécessaire du cab de [{p}] ([{cabExterne.LibelléLong}]).");
                     return(_infosOpérationDépôtFactory.CréerInfosOpérationDépôt(cabExterne,
                                                                                 dépôtCabPao.Déposer(cabExterne,
                                                                                                     conversionVerstiff,
                                                                                                     observer),
                                                                                 cabPao, EtatCabOnline.Téléchargé, p));
                 }
                 return(_infosOpérationDépôtFactory.CréerInfosOpérationDépôt(cabExterne, null, cabPao,
                                                                             EtatCabOnline.Incompatible, p));
             }
             else
             {
                 return(_infosOpérationDépôtFactory.CréerInfosOpérationDépôt(cabExterne, null, cabPao,
                                                                             EtatCabOnline.PasPlusRécent, p));
             }
         }
         else
         {
             return(_infosOpérationDépôtFactory.CréerInfosOpérationDépôt(null, null, cabPao,
                                                                         EtatCabOnline.Indisponible, p));
         }
     }
     catch (Exception exception)
     {
         observer.NotifyWarning(this,
                                $"Echec dans la recherche de Cab pour [{p}] ({exception.DetailedMessage()})");
         return(null);
     }
 }
コード例 #6
0
        private IDépôtCab ChargerDépôtCab(IDépôtCab dépôtCab, IAfficheurTâches afficheurTâches)
        {
            var observer = _taskObserverFactory.CreateTaskObserver();

            afficheurTâches.AjouterTâche($"Examen des Cabs disponibles sur [{dépôtCab}]", observer);
            try
            {
                observer.NotifyStarted(this);
                observer.NotifyProgress(this, 0);

                dépôtCab.ChargerCabs(observer);

                observer.NotifyProgress(this, 100);
                observer.NotifyCompleted(this);

                return(dépôtCab);
            }
            catch (Exception exception)
            {
                observer.NotifyError(this, exception.DetailedMessage());
                observer.NotifyAborted(this, "Interruption causée par une erreur");
                throw;
            }
        }
コード例 #7
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));
 }
コード例 #8
0
 private Task <IDépôtCab> ChargerDépôtCabAsync(IDépôtCab dépôtCab, IAfficheurTâches afficheurTâches)
 {
     return(Task.Factory.StartNew(() => ChargerDépôtCab(dépôtCab, afficheurTâches),
                                  TaskCreationOptions.AttachedToParent | TaskCreationOptions.LongRunning));
 }