Пример #1
0
        private void TagTextBox_GotFocus(object sender, RoutedEventArgs e)
        {
            // Quando clicco nella textbox, non si aggiorna la foto (perché l'evento viene consumato)
            // devo selezionare la riga io a mano

            ListViewItem lvi = AiutanteUI.GetAncestorByType(e.OriginalSource as DependencyObject, typeof(ListViewItem)) as ListViewItem;

            if (lvi != null)
            {
                bool front = true;

                if (front)
                {
                    // provoco lo spostamento sulla ListView del frontend
                    var idx = onrideListView.ItemContainerGenerator.IndexFromContainer(lvi);
                    onrideListView.SelectedIndex = idx;
                    lvi.IsSelected = true;
                }
                else
                {
                    // cosi funziona ma agisto sul viemwodel
                    FotoItem item = (FotoItem)lvi.Content;
                    viewModel.fotoItemsCW.MoveCurrentTo(item);
                }
            }
        }
Пример #2
0
        private bool EliminareFoto(FotoItem fotoItem)
        {
            bool eliminata = false;

            try {
                if (File.Exists(fotoItem.nomeFileTag))
                {
                    File.Delete(fotoItem.nomeFileTag);
                }
            } catch (Exception ee) {
                _giornale.Error("Rimozione file tag: " + fotoItem.nomeFileTag, ee);
            }

            try {
                if (File.Exists(fotoItem.fileInfo.FullName))
                {
                    File.Delete(fotoItem.fileInfo.FullName);
                }

                // Ora che ho rimosso i file dal disco, elimino anche l'elemento dalla collection
                fotoItemsCW.Remove(fotoItem);

                eliminata = true;
            } catch (Exception ee) {
                _giornale.Error("Rimozione file foto: " + fotoItem.fileInfo.Name, ee);
            }

            return(eliminata);
        }
Пример #3
0
 private void boxHeaderTaggare_Click(object sender, RoutedEventArgs e)
 {
     // In base al mio valore, valorizzo tutte le righe eventuali
     for (int ii = 0; ii < viewModel.fotoItemsCW.Count; ii++)
     {
         FotoItem item = (FotoItem)viewModel.fotoItemsCW.GetItemAt(ii);
         item.daTaggare = (boxHeaderTaggare.IsChecked == true);
     }
 }
Пример #4
0
        /**
         * Ciclo su tutti i file in attesa, e li carico nel db
         */
        void acquisireUnaFoto(FotoItem fotoItem)
        {
            ParamScarica paramScarica = new ParamScarica();

            // paramScarica.cartellaSorgente = cartellaOnRide;
            paramScarica.nomeFileSingolo = fotoItem.fileInfo.FullName;

            // Fotografo a cui attribuire le foto
            paramScarica.flashCardConfig.idFotografo = fotografoOnRide.id;
            paramScarica.flashCardConfig.didascalia  = fotoItem.tag;

            paramScarica.eliminaFilesSorgenti = true;

            // Eventuale maschera automatica
            if (isMascheraAttiva)
            {
                paramScarica.mascheraAuto = maschera;
            }

            // Fase del giorno
            if (String.IsNullOrWhiteSpace(userConfigOnRide.orarioSeparaMatPom) == false)
            {
                FaseDelGiorno?faseDelGiorno = null;

                DateTime creation = File.GetCreationTime(fotoItem.fileInfo.FullName);

                string strCreation = creation.ToString("HH:mm");

                if (strCreation.CompareTo(userConfigOnRide.orarioSeparaMatPom) < 0)
                {
                    faseDelGiorno = FaseDelGiorno.Mattino;
                }
                if (strCreation.CompareTo(userConfigOnRide.orarioSeparaMatPom) >= 0)
                {
                    faseDelGiorno = FaseDelGiorno.Pomeriggio;
                }

                paramScarica.faseDelGiorno = faseDelGiorno;
            }

            try {
                scaricatoreFotoSrv.scarica(paramScarica);

                ++totFotoAcquisite;
            } catch (Exception ee) {
                _giornale.Error("scarica foto", ee);
            }
        }
Пример #5
0
        /// <summary>
        /// Ricarico la lista degli items da disco, analizzando tutti i file contenuti nella cartella
        /// </summary>
        private void CaricareItems()
        {
/*
 *                      if( fotoItems != null )
 *                              fotoItems.CollectionChanged -= this.collezioneCambiata;
 */
            fotoItems = new ObservableCollectionEx <FotoItem>();

//			fotoItems.CollectionChanged += this.collezioneCambiata;


            try {
                // Prendo le estensioni ammesse dalla configurazione
                string[] estensioni = Configurazione.UserConfigLumen.estensioniGrafiche.Split(';');
                foreach (string estensione in estensioni)
                {
                    DirectoryInfo dirInfo = new DirectoryInfo(cartellaOnRide);
                    foreach (FileInfo fileInfo in dirInfo.GetFiles("*" + estensione))
                    {
                        // Istanzio elemento della lista
                        FotoItem fotoItem = new FotoItem(fileInfo);

                        // carico eventuale testo già associato
                        if (File.Exists(fotoItem.nomeFileTag))
                        {
                            fotoItem.tag = File.ReadAllText(fotoItem.nomeFileTag);
                        }

                        if (userConfigOnRide.runningMode == RunningMode.Presidiato)
                        {
                            fotoItems.Add(fotoItem);
                        }
                        else if (userConfigOnRide.runningMode == RunningMode.Automatico)
                        {
                            fotoItem.daTaggare = false;
                            acquisireUnaFoto(fotoItem);
                        }
                    }
                }

                // Ora che ho riempito la collezione, creo la sua VIEW
                // fotoItemsCW = new ListCollectionView( fotoItems );
                fotoItemsCW = (ListCollectionView)CollectionViewSource.GetDefaultView(fotoItems);
                OnPropertyChanged("fotoItemsCW");
            } catch (Exception ee) {
                _giornale.Error("lista files in " + cartellaOnRide, ee);
            }
        }
Пример #6
0
        private void OnNuovaFotoArrivata(object sender, FileSystemEventArgs e)
        {
            // Controllo se il file ha una estensione tra quelle supportate

            string[] estensioniAmmesse = Configurazione.UserConfigLumen.estensioniGrafiche.Split(';');

            FileInfo finfo = new FileInfo(e.FullPath);

            if (!estensioniAmmesse.Contains(finfo.Extension.ToLower()))
            {
                return;
            }


            // Se non attendo un briciolo, il file è sempre loccato perché deve essere ancora copiato
            // Thread.Sleep( 100 );

            const int maxAttesa    = 10000;             // Massimo numero di secondi che sono disposto ad attendere. Poi lo dichiaro non usabile.
            const int singolaPausa = 1000;              // Ampiezza della singola pausa (sleep)
            int       aspetta      = 0;

            do
            {
                bool isLocked = FileUtil.IsFileLocked(finfo);
                if (isLocked)
                {
                    aspetta += singolaPausa;
                    Thread.Sleep(singolaPausa);
                }
                else
                {
                    aspetta = maxAttesa * 2;                            // ok file buono e arrivato: provoco l'uscita dal loop
                }
            } while(aspetta < maxAttesa);


            // Se il file è ancora loccato, non posso aggiungerlo, devo ignorarlo. Occorrerà un refresh
            bool possoAggiungere = true;

            if (aspetta != (maxAttesa * 2))
            {
                possoAggiungere = false;                        // il file è ancora loccato
                _giornale.Warn("File ancora loccato: " + finfo.Name + ". Impossibile processarlo adesso");
            }

            // controllo se il file è troppo piccolo, (esempio zero) non è buono.
            if (possoAggiungere)
            {
                // Ok è arrivata una immagine per davvero. Creo un item da accodare
                finfo.Refresh();
                if (finfo.Length <= 50)
                {
                    possoAggiungere = false;                            // Dimensione del file non corretta
                    _giornale.Warn("File con dimensione errata: " + finfo.Name + ". Non lo considero");
                }
            }

            // --
            if (possoAggiungere)
            {
                FotoItem fotoItem = new FotoItem(finfo);

                if (userConfigOnRide.runningMode == RunningMode.Presidiato)
                {
                    try {
                        fotoItems.Add(fotoItem);
                    } catch (Exception ee) {
                        _giornale.Error("Aggiungo foto alla lista", ee);
                    }
                }
                else if (userConfigOnRide.runningMode == RunningMode.Automatico)
                {
                    if (userConfigOnRide.scannerImpronteGestito)
                    {
                        fotoItem.tag = EventualeTagDaImpronta(finfo);
                    }

                    // Posso processare anche senza il tag
                    fotoItem.daTaggare = !String.IsNullOrWhiteSpace(fotoItem.tag);


                    acquisireUnaFoto(fotoItem);


                    // TODO questa operazione andrebbe fatta non qui, ma in un thread che agisce solo
                    // quando il programma è idle (ovvero non sta facendo niente)
                    FreeMemSconosciutiVecchi();
                }
            }
        }
Пример #7
0
        void AcquisireTutteLeFoto()
        {
            // --- Prima chiedo conferma sulle eliminazioni

            int quanteDaEliminare = fotoItems.Count(f => f.daEliminare);
            int quanteSenzaTag    = fotoItems.Count(f => f.daTaggare == false);

            bool procediPure = true;

            if (userConfigOnRide.runningMode == RunningMode.Presidiato)
            {
                string msgConferma = "Sei sicuro di volere\r\n";
                if (quanteDaEliminare > 0)
                {
                    msgConferma += "distruggere " + quanteDaEliminare + " foto\r\n";
                }
                if (quanteSenzaTag > 0)
                {
                    msgConferma += "acquisire " + quanteSenzaTag + " foto senza il tag\r\n";
                }
                msgConferma += "?";

                if (quanteDaEliminare > 0 || quanteSenzaTag > 0)
                {
                    dialogProvider.ShowConfirmation(msgConferma, "Attenzione",
                                                    (confermato) => {
                        procediPure = confermato;
                    });
                }
            }

            if (!procediPure)
            {
                return;
            }

            // ---

            bool ricomincia;

            do
            {
                ricomincia = false;

                for (int ii = 0; ii < fotoItemsCW.Count; ii++)
                {
                    FotoItem fotoItem = fotoItems[ii];
                    // Se richiesta la cancellazione da disco, la elimino
                    if (fotoItem.daEliminare)
                    {
                        if (EliminareFoto(fotoItem))
                        {
                            ricomincia = true;
                            break;
                        }
                    }
                    else
                    {
                        if (fotoItem.daTaggare == false || String.IsNullOrWhiteSpace(fotoItem.tag) == false)
                        {
                            acquisireUnaFoto(fotoItem);
                            ricomincia = true;
                            break;
                        }
                    }
                }
            } while(ricomincia);
        }