コード例 #1
0
        private string EventualeTagDaImpronta(FileInfo finfo)
        {
            string tag = null;

            // Devo cercare se nella lista delle persone sconosciute esiste un record
            // dello stesso range temporale della foto (compreso dei secondi di scarto configurati)
            for (int ii = 0; ii < personeSconosciute.Count; ii++)
            {
                Sconosciuto sconosciuto = personeSconosciute[ii];

                // Timestamp di quando è stata scansionata l'impronta
                DateTime tempoImpronta = sconosciuto.tempo;
                // Timestamp di quando è stata scattata la foto (e trasferita sul pc)
                DateTime tempoFoto = finfo.CreationTime;

                if (tempoFoto >= tempoImpronta.AddSeconds(userConfigOnRide.secDiscesaMin)
                    &&
                    tempoFoto <= tempoImpronta.AddSeconds(userConfigOnRide.secDiscesaMax)
                    )
                {
                    // Ok associo
                    tag = sconosciuto.nome;
                    personeSconosciute.RemoveAt(ii);
                    break;
                }
            }


            return(tag);
        }
コード例 #2
0
        /// <summary>
        /// La collezione con le impronte degli sconosciuti, potrebbe
        /// crescere a dismisura, nel caso in cui falliscano gli abbinamenti con le fotografie per diverso tempo.
        /// Per evitare di accumulare oggetti inutili, svecchio la collezione
        /// </summary>
        void FreeMemSconosciutiVecchi()
        {
            bool restaQui;

            StrategiaPuliziaImpronte strategia = StrategiaPuliziaImpronte.Casaccio;


            // Scelgo un tempo abbastanza ampio per dichiarare come "vecchia" una impronta.
            // Prendo 20 volte il tempo massimo impostato per la discesa.
            int tempoMax = userConfigOnRide.secDiscesaMax * 10;

            do
            {
                restaQui = false;

                for (int ii = 0; ii < personeSconosciute.Count; ii++)
                {
                    Sconosciuto sconosciuto = personeSconosciute[ii];
                    DateTime    adesso      = DateTime.Now;
                    if (sconosciuto.tempo.AddSeconds(tempoMax) < adesso)
                    {
                        if (strategia == StrategiaPuliziaImpronte.Cancella)
                        {
                            personeSconosciute.RemoveAt(ii);
                            restaQui = true;
                            break;
                        }

                        if (strategia == StrategiaPuliziaImpronte.Casaccio)
                        {
                            // Cerco la prima foto acquisita su questo scivolo dopo la data indicata e non ancora taggata

                            using (new UnitOfWorkScope()) {
                                DateTime oraProvaMin = sconosciuto.tempo.AddSeconds(userConfigOnRide.secDiscesaMin);
                                DateTime oraProvaMax = sconosciuto.tempo.AddSeconds(userConfigOnRide.secDiscesaMax * 4);
                                var      foto        = UnitOfWorkScope.currentDbContext.Fotografie
                                                       .Where(f => f.fotografo_id == fotografoOnRide.id &&
                                                              f.didascalia == null &&
                                                              f.dataOraAcquisizione > oraProvaMin &&
                                                              f.dataOraAcquisizione < oraProvaMax &&
                                                              f.giornata == sconosciuto.tempo.Date)
                                                       .OrderByDescending(f => f.dataOraAcquisizione)
                                                       .FirstOrDefault();

                                if (foto != null)
                                {
                                    foto.didascalia = sconosciuto.nome;
                                    UnitOfWorkScope.currentDbContext.SaveChanges();
                                    personeSconosciute.RemoveAt(ii);
                                    restaQui = true;
                                    break;                                      // esco dal ciclo for
                                }
                            }
                        }
                    }
                }
            } while(restaQui);
        }
コード例 #3
0
        void OnImprontaAcquisita(object sender, ScansioneEvent eventArgs)
        {
            if (eventArgs.isValid)
            {
                ++totImpronteAcquisite;
                _giornale.Info("Impronta acquisita. Valida =  " + eventArgs.isValid + eventArgs.bmpFileName);

                // Per svincolare il thread chiamante, mi creo una lista mia di sconosciuti da identificare.
                // Lo faccio perché ora devo chiamare un altro servizio in rete che potrebbe perdere tempo,
                // e quindi voglio ridare il controllo subito per evitare piantamenti
                Sconosciuto sconosciuto = new Sconosciuto {
                    tempo          = eventArgs.tempo,
                    base64Template = eventArgs.strBase64Template,
                    nome           = null
                };

                Application.Current.Dispatcher.BeginInvoke(
                    new Action(() => {
                    personeSconosciute.Add(sconosciuto);
                }));

                // fileNameBmpImpronta = eventArgs.bmpFileName;
            }
        }