Ejemplo n.º 1
0
        /// <inheritdoc/>
        /// <exception cref="InvalidOperationException">Nejsouli pro daný časový interval dostupná žádná data</exception>
        public async Task Update(DateTime novyPocatek, DateTime novyKonec)
        {
            LogDataCollection dataToBeUpdated = sessionManager.Current?.Data;
            DateTime          staryPocatek    = dataToBeUpdated?.Pocatek ?? DateTime.Now;
            DateTime          staryKonec      = dataToBeUpdated?.Konec ?? DateTime.Now;

            if (dataToBeUpdated == null || novyKonec <= staryPocatek || staryKonec <= novyPocatek)
            {
                // Nejsou-li dostupná žádná data, tak budou všechna načtena podla pozadavků.
                LogDataCollection loadedData = await logLoader.LoadAsyncData(novyPocatek, novyKonec);

                sessionManager.Current.Data = loadedData.Count != 0 ? loadedData :
                                              throw new InvalidOperationException($"Pro zvolený časový interval nejsou k dispozici žádná data.");
                return;
            }

            if (novyPocatek < staryPocatek)
            {
                LogDataCollection extraBottomData = await logLoader.LoadAsyncData(novyPocatek, staryPocatek);

                sessionManager.Current.Data = extraBottomData.AddRange(dataToBeUpdated.ToList());
            }

            if (staryKonec < novyKonec)
            {
                LogDataCollection extraTopData = await logLoader.LoadAsyncData(staryKonec, novyKonec);

                sessionManager.Current.Data = dataToBeUpdated.AddRange(extraTopData.ToList());
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Asynchronně načte všechna dostupná data, která jsou ohraničená <paramref name="pocatek"/> a <paramref name="pocatek"/>.
        /// </summary>
        /// <param name="pocatek"></param>
        /// <param name="konec"></param>
        /// <returns>Kolekce načtených dat typu <see cref="LogDataCollection"/>.</returns>
        /// <exception cref="ProcesEndedByUserException">V případě, že je proces předčasně ukončen uživatelem.</exception>
        public async Task <LogDataCollection> LoadAsyncData(DateTime pocatek, DateTime konec)
        {
            // Upozorní uživatele, že se pokouší načíst velké množství dat a požádá o potvrzení.
            if ((int)(konec - pocatek).TotalSeconds > POCET_RADKU_THRESHOLD &&
                !errorDisplayService.ShowAsYesNo($"Počet potřebných řádků k načtení ze souboru přesahuje hodnotu {POCET_RADKU_THRESHOLD}" +
                                                 $". Z toho může plynout dlouhá načítací doba. Chcete i přesto pokračovat? "))
            {
                throw new ProcesEndedByUserException("Too many data rows.");
            }


            IEnumerable <string> vybraneSoubory = fileBrowser.GetOrderedFiles(pocatek, konec) ?? new List <string>();
            var output = new LogDataCollection(template);

            foreach (var soubor in vybraneSoubory)
            {
                ILogLoader loader = logLoaderFactory.Create(soubor);
                output.AddRange((await loader.LoadAsyncData(pocatek, konec)).ToList());
                // V případě, že loader již načetl veškeré soubory, tak je z této metody vyskočeno.
                if (loader.IsCompleted)
                {
                    break;
                }
            }
            IsCompleted = true;
            return(output);
        }
Ejemplo n.º 3
0
 public ZobrazovacDatPresenter(IZobrazovacDatView view, IEventAggregator events, ISessionManager sessionManager) : base(view)
 {
     this.events         = events;
     this.sessionManager = sessionManager;
     events.Subscribe <ZobrazDataRequest>(e =>
     {
         LogDataCollection data = sessionManager.Current?.Data;
         if (data != null)
         {
             View.xdata    = data.Times;
             view.ydata    = data.Columns;
             View.Sloupce  = data?.Template.NazvySloupcu.Skip(1).ToArray() ?? new string[0];
             View.Jednotky = data?.Template.Jednotky.Skip(1).ToArray() ?? new string[0];
             View.UpdateData(e.Pocatek, e.Konec);
             // Při načtení nových dát schová všechny veličiny, které mají být schovány (z cache).
             seznamVypnutychSloupcu.ForEach((col) => View.SetYValVisibility(col, false));
         }
     });
     // Pokaždé když (z Toolbaru) dorazí zpráva o změně zobrazených hodnot, tak je zobrzaovac skryje a zároveň si pamatuje, že je nemá zobrazovat.
     events.Subscribe <ChangeYValueDisplayStatusRequest>(e =>
     {
         View.SetYValVisibility(e.Name, e.IsOn);
         if (!e.IsOn && !seznamVypnutychSloupcu.Contains(e.Name))
         {
             seznamVypnutychSloupcu.Add(e.Name);
         }
         else if (e.IsOn && seznamVypnutychSloupcu.Contains(e.Name))
         {
             seznamVypnutychSloupcu.Remove(e.Name);
         }
     });
     // Když dojde k vytvoření nového "Session" tak se cache pamatovaných nezobzraovaných sloupců zrestartuje
     events.Subscribe <NewSessionRequest>(e =>
     {
         seznamVypnutychSloupcu = new List <string>();
     });
 }