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); }
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; } }
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)); }
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)); }
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); } }
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; } }
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)); }
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)); }