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); } } }
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); }
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); } }
/** * 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); } }
/// <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); } }
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(); } } }
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); }