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; } }
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); }
public OpérateurPrincipal(IDépôtParutions dépôtParutions, IDépôtCabPao dépôtCabPao, IDépôtCabMlp dépôtCabMlp, IDépôtCabNmpp dépôtCabNmpp, ITaskObserverFactory taskObserverFactory, IInfosOpérationDépôtFactory infosOpérationDépôtFactory, IGénérateurRapportMail générateurRapportMail, IMailer mailer) { _dépôtParutions = dépôtParutions ?? throw new ArgumentNullException(nameof(dépôtParutions)); _dépôtCabPao = dépôtCabPao ?? throw new ArgumentNullException(nameof(dépôtCabPao)); _dépôtCabMlp = dépôtCabMlp ?? throw new ArgumentNullException(nameof(dépôtCabMlp)); _dépôtCabNmpp = dépôtCabNmpp ?? throw new ArgumentNullException(nameof(dépôtCabNmpp)); _taskObserverFactory = taskObserverFactory ?? throw new ArgumentNullException(nameof(taskObserverFactory)); _infosOpérationDépôtFactory = infosOpérationDépôtFactory ?? throw new ArgumentNullException(nameof(infosOpérationDépôtFactory)); _générateurRapportMail = générateurRapportMail ?? throw new ArgumentNullException(nameof(générateurRapportMail)); _mailer = mailer; }
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); } }