public PpGenerator(Func<IBuilder> builderResolver, Voortgang voortgangDelegate, GereedMelding gereedmeldingDelegate)
 {
     _builderResolver = builderResolver;
     _huidigeStatus = State.Onbekend;
     _setVoortgang = voortgangDelegate;
     _setGereedmelding = gereedmeldingDelegate;
 }
 public PpGenerator(Func <IBuilder> builderResolver, Voortgang voortgangDelegate, GereedMelding gereedmeldingDelegate)
 {
     _builderResolver  = builderResolver;
     _huidigeStatus    = State.Onbekend;
     _setVoortgang     = voortgangDelegate;
     _setGereedmelding = gereedmeldingDelegate;
 }
Beispiel #3
0
        /// <summary>
        /// Genereer een presentatie aan de hand van meegegeven Liturgie en Template voor de Liederen
        /// </summary>
        public void GeneratePresentation()
        {
            _token = new CancellationTokenSource();
            StatusWijziging?.Invoke(Status.Gestart, null, null);

            var succes       = true;
            var slidesGemist = 0;
            var exception    = string.Empty;

            // Hier pas COM calls want dit is de juiste thread
            using (var applicatie = _mppFactory.GetApplication())
                //Creeer een nieuwe lege presentatie volgens de template thema (toon scherm zodat bij fout nog iets te zien is)
                using (var presentatie = applicatie.Open(_dependentFileList.FullTemplateTheme, metWindow: true))
                {
                    //Minimaliseer scherm
                    applicatie.MinimizeInterface();

                    try
                    {
                        // Voor elke regel in de liturgie moeten sheets worden gemaakt (als dat mag)
                        // Gebruik een list zodat we de plek weten voor de progress
                        var hardeLijst = _liturgie.Where(l => l.VerwerkenAlsSlide).ToList();
                        foreach (var regel in hardeLijst)
                        {
                            var lijstTotaal = _liturgie.Count();
                            var bijItem     = hardeLijst.IndexOf(regel);

                            var resultaat = _regelVerwerker[regel.VerwerkenAlsType]
                                            .Init(applicatie, presentatie, _mppFactory, _liedFormatter, _buildSettings, _buildDefaults, _dependentFileList, _liturgie, _lengteBerekenaar, (p) => Voortgang?.Invoke(lijstTotaal, bijItem, p))
                                            .Verwerk(regel, Volgende(_liturgie, regel), _token.Token);
                            slidesGemist += resultaat.SlidesGemist;

                            if (_stop)
                            {
                                break;
                            }
                        }

                        //sla de presentatie op
                        presentatie.OpslaanAls(_opslaanAls);
                    }
                    catch (Exception ex)
                    {
                        succes    = false;
                        exception = ex.ToString();
                        FoutmeldingSchrijver.Log(exception);
                    }
                }
            _token = null;

            // dispose voordat we een statuswijziging hebben, anders is de applicatie niet op tijd gesloten

            if (succes)
            {
                // gereedmelding geven
                if (_stop)
                {
                    StatusWijziging?.Invoke(Status.StopFout, "Tussentijds gestopt door de gebruiker.", null);
                }
                else
                {
                    StatusWijziging?.Invoke(Status.StopGoed, null, slidesGemist);
                }
            }
            else
            {
                StatusWijziging?.Invoke(Status.StopFout, exception, null);
            }
        }
 public void RegisterVoortgang(Voortgang callback)
 {
     _setVoortgang = callback;
 }