/// <summary> /// The thread that does the burning of the media /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void backgroundWorkerCopia_DoWork(object sender, DoWorkEventArgs e) { // Pattern Unit-of-work using (LumenEntities objContext = UnitOfWorkScope.currentDbContext) { System.Diagnostics.Trace.WriteLine("INIZIO COPIA SU CARTELLA"); MasterizzaMsg inizioCopiaMsg = new MasterizzaMsg(this); inizioCopiaMsg.fase = Fase.InizioCopia; inizioCopiaMsg.progress = 0; inizioCopiaMsg.result = "Inizio Copia Su Chiavetta"; pubblicaMessaggio(inizioCopiaMsg); this.totFotoCopiate = 0; this.totFotoNonCopiate = 0; erroriCopia = false; foreach (Fotografia fot in _fotografie) { fotCopia = fot; string nomeFileDest = ""; try { if (backgroundWorkerCopia.CancellationPending) { _giornale.Warn("cancellazione richiesta durante copia file su chiavetta. Come mai ? Indagare"); } nomeFileDest = Path.Combine(_destinazione, Path.GetFileName(fot.nomeFile)); String nomeFileSorgente = PathUtil.nomeCompletoVendita(fot); File.Copy(@nomeFileSorgente, nomeFileDest, false); //Elimino gli attributi solo lettura File.SetAttributes(nomeFileDest, File.GetAttributes(nomeFileDest) & ~(FileAttributes.Archive | FileAttributes.ReadOnly)); if (notificareProgressione) { //MasterizzaMsg statoCopiaMsg = new MasterizzaMsg(); //statoCopiaMsg.riscontratiErrori = false; //statoCopiaMsg.fotoAggiunta = 1; //statoCopiaMsg.totFotoAggiunte = ++countFotoAggiunte; //statoCopiaMsg.result = "Copia File " + fot.nomeFile; backgroundWorkerCopia.ReportProgress(++this.totFotoCopiate / _fotografie.Count * 100); } } catch (IOException ee) { _giornale.Debug("errore copia foto: " + fot, ee); //MasterizzaMsg statoCopiaErroreMsg = new MasterizzaMsg(); //statoCopiaErroreMsg.riscontratiErrori = true; erroriCopia = true; //statoCopiaErroreMsg.totFotoNonAggiunte = ++countFotoNonAggiunte; //statoCopiaErroreMsg.result = "Il file " + @configurazione.getCartellaRepositoryFoto() + Path.DirectorySeparatorChar + fot.nomeFile + " non è statoScarica copiato il file sulla chiavetta " + nomeFileDest; //_giornale.Error("Il file " + @configurazione.getCartellaRepositoryFoto() + Path.DirectorySeparatorChar + fot.nomeFile + " non è statoScarica copiato il file sulla chiavetta " + nomeFileDest, ee); backgroundWorkerCopia.ReportProgress(++totFotoNonCopiate / _fotografie.Count * 100); } } } }
/// <summary> /// Copia Completata /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void backgroundWorkerCopia_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { MasterizzaMsg statoCopiaCompletatoMsg = new MasterizzaMsg(this); statoCopiaCompletatoMsg.esito = erroriCopia ? Esito.Errore : Esito.Ok; statoCopiaCompletatoMsg.fase = erroriCopia ? Fase.ErroreMedia : Fase.CopiaCompletata; statoCopiaCompletatoMsg.totFotoNonAggiunte = totFotoNonCopiate; statoCopiaCompletatoMsg.totFotoAggiunte = totFotoCopiate; pubblicaMessaggio(statoCopiaCompletatoMsg); }
private void inviaMessaggioStatoMasterizzazione(object sender, BurnerMsg burnerMsg) { MasterizzaMsg masterizzaMsg = new MasterizzaMsg(this); masterizzaMsg.totFotoAggiunte = burnerMsg.totaleFileAggiunti; masterizzaMsg.totFotoNonAggiunte = 0; masterizzaMsg.esito = Esito.Ok; switch (burnerMsg.fase) { case Digiphoto.Lumen.Servizi.Masterizzare.MyBurner.Fase.ErrorMedia: masterizzaMsg.esito = Esito.Errore; masterizzaMsg.fase = Fase.ErroreMedia; break; case Digiphoto.Lumen.Servizi.Masterizzare.MyBurner.Fase.MasterizzazioneIniziata: masterizzaMsg.fase = Fase.InizioCopia; break; case Digiphoto.Lumen.Servizi.Masterizzare.MyBurner.Fase.FormattazioneIniziata: masterizzaMsg.fase = Fase.InizioCopia; break; case Digiphoto.Lumen.Servizi.Masterizzare.MyBurner.Fase.Completed: masterizzaMsg.fase = Fase.CopiaCompletata; break; case Digiphoto.Lumen.Servizi.Masterizzare.MyBurner.Fase.MasterizzazioneCompletata: masterizzaMsg.fase = Fase.CopiaCompletata; break; case Digiphoto.Lumen.Servizi.Masterizzare.MyBurner.Fase.FormattazioneCompletata: masterizzaMsg.fase = Fase.CopiaCompletata; break; case Digiphoto.Lumen.Servizi.Masterizzare.MyBurner.Fase.MasterizzazioneFallita: masterizzaMsg.esito = Esito.Errore; masterizzaMsg.fase = Fase.ErroreMedia; break; case Digiphoto.Lumen.Servizi.Masterizzare.MyBurner.Fase.FormattazioneFallita: masterizzaMsg.esito = Esito.Errore; masterizzaMsg.fase = Fase.ErroreMedia; break; } masterizzaMsg.result = burnerMsg.statusMessage; masterizzaMsg.progress = burnerMsg.progress; pubblicaMessaggio(masterizzaMsg); }
/// <summary> /// Event receives notification from the Burn thread of an event /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void backgroundWorkerCopia_ProgressChanged(object sender, ProgressChangedEventArgs e) { MasterizzaMsg statoCopiaMsg = new MasterizzaMsg(this); if (erroriCopia) { statoCopiaMsg.esito = Esito.Errore; statoCopiaMsg.fotoAggiunta = 0; statoCopiaMsg.result = "Il File " + fotCopia.nomeFile + " non è statoScarica copiato sulla chiavetta"; } else { statoCopiaMsg.esito = Esito.Ok; statoCopiaMsg.fotoAggiunta = 1; statoCopiaMsg.result = "Il File " + fotCopia.nomeFile + " è statoScarica copiato sulla chiavetta con successo"; } statoCopiaMsg.totFotoAggiunte = this.totFotoNonCopiate; statoCopiaMsg.totFotoNonAggiunte = this.totFotoCopiate; pubblicaMessaggio(statoCopiaMsg); erroriCopia = false; }
/// <summary> /// The thread that does the burning of the media /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void copiaCartellaDestinazioneAsincrono() { // Pattern Unit-of-work using (LumenEntities objContext = UnitOfWorkScope.currentDbContext) { _giornale.Info("Inizio copia " + _fotografie.Count + " foto su cartella"); MasterizzaMsg inizioCopiaMsg = new MasterizzaMsg(this); inizioCopiaMsg.senderTag = senderTag; inizioCopiaMsg.fase = Fase.InizioCopia; inizioCopiaMsg.progress = 0; inizioCopiaMsg.result = "Inizio Copia Su Chiavetta"; inizioCopiaMsg.cartella = _destinazione; pubblicaMessaggio(inizioCopiaMsg); totFotoCopiate = 0; totFotoNonCopiate = 0; bool errori = false; foreach (Fotografia fot in _fotografie) { string nomeFileDest = ""; try { nomeFileDest = Path.Combine(_destinazione, Path.GetFileName(fot.nomeFile)); String nomeFileSorgente = PathUtil.nomeCompletoVendita(fot); File.Copy(@nomeFileSorgente, nomeFileDest, true); //Elimino gli attributi solo lettura File.SetAttributes(nomeFileDest, File.GetAttributes(nomeFileDest) & ~(FileAttributes.Archive | FileAttributes.ReadOnly)); ++totFotoCopiate; if (notificareProgressione) { MasterizzaMsg statoCopiaMsg = new MasterizzaMsg(this); statoCopiaMsg.senderTag = senderTag; statoCopiaMsg.esito = Esito.Ok; statoCopiaMsg.fotoAggiunta = 1; statoCopiaMsg.totFotoAggiunte = totFotoCopiate; statoCopiaMsg.totFotoNonAggiunte = totFotoNonCopiate; statoCopiaMsg.progress = ((totFotoCopiate + totFotoNonCopiate) * 100) / _fotografie.Count; statoCopiaMsg.result = "Il File " + fot.nomeFile + " è statoScarica copiato sulla chiavetta con successo"; statoCopiaMsg.cartella = _destinazione; pubblicaMessaggio(statoCopiaMsg); } } catch (IOException ee) { ++totFotoNonCopiate; MasterizzaMsg statoCopiaErroreMsg = new MasterizzaMsg(this); statoCopiaErroreMsg.senderTag = senderTag; statoCopiaErroreMsg.esito = Esito.Errore; errori = true; statoCopiaErroreMsg.fotoAggiunta = 0; statoCopiaErroreMsg.totFotoAggiunte = totFotoCopiate; statoCopiaErroreMsg.totFotoNonAggiunte = totFotoNonCopiate; statoCopiaErroreMsg.progress = ((totFotoCopiate + totFotoNonCopiate) * 100) / _fotografie.Count; statoCopiaErroreMsg.result = "Il file " + fot.nomeFile + " non è statoScarica copiato sulla chiavetta: " + nomeFileDest; _giornale.Error("Il file " + Configurazione.cartellaRepositoryFoto + Path.DirectorySeparatorChar + fot.nomeFile + " non è statoScarica copiato il file sulla chiavetta " + nomeFileDest, ee); pubblicaMessaggio(statoCopiaErroreMsg); } } _giornale.Info("Fine copia " + totFotoCopiate + "/" + _fotografie.Count + " foto su cartella"); MasterizzaMsg copiaCompletataMsg = new MasterizzaMsg(this); copiaCompletataMsg.senderTag = senderTag; copiaCompletataMsg.fase = errori ? Fase.ErroreMedia : Fase.CopiaCompletata; copiaCompletataMsg.esito = errori ? Esito.Errore : Esito.Ok; copiaCompletataMsg.result = errori ? "Riscontrati errori" : "Copia Completata con Successo"; copiaCompletataMsg.progress = 100; copiaCompletataMsg.totFotoNonAggiunte = totFotoNonCopiate; copiaCompletataMsg.totFotoAggiunte = totFotoCopiate; copiaCompletataMsg.cartella = _destinazione; this.isCompletato = true; pubblicaMessaggio(copiaCompletataMsg); } _giornale.Debug("fine del thread copia su chiavetta."); }
public void masterizza(Guid idCarrello) { senderTag = idCarrello; switch (_tipoDestinazione) { case MasterizzaTarget.Cartella: // Scarico in un thread separato per non bloccare l'applicazione seNonPossoCopiareSpaccati(); _threadCopiaSuChiavetta = new Thread(copiaCartellaDestinazioneAsincrono); _threadCopiaSuChiavetta.Start(); break; case MasterizzaTarget.Masterizzatore: _burner = new BurnerSrvImpl(); _burner.InviaStatoMasterizzazione += new BurnerSrvImpl.StatoMasterizzazioneEventHandler(inviaMessaggioStatoMasterizzazione); _burner.start(); foreach (Fotografia fot in _fotografie) { _burner.addFileToBurner(PathUtil.nomeCompletoVendita(fot)); } _burner.setDiscRecorder(_driverLetter); if (_burner.testMedia()) { //Imposto l'etichetta del CD _burner.etichetta = DateTime.Now.ToString("dd MMM yyyy"); if (_burner.CapacitaResidua() < 0) { MasterizzaMsg errorTestMediaMsg = new MasterizzaMsg(this); errorTestMediaMsg.senderTag = senderTag; errorTestMediaMsg.fase = Fase.ErroreSpazioDisco; errorTestMediaMsg.esito = Esito.Errore; errorTestMediaMsg.progress = 0; errorTestMediaMsg.result = "Capacita del disco superata!!!"; pubblicaMessaggio(errorTestMediaMsg); } else { _burner.burning(); } } else { MasterizzaMsg errorTestMediaMsg = new MasterizzaMsg(this); errorTestMediaMsg.senderTag = senderTag; errorTestMediaMsg.fase = Fase.ErroreMedia; errorTestMediaMsg.esito = Esito.Errore; errorTestMediaMsg.progress = 0; errorTestMediaMsg.result = "Error Media"; pubblicaMessaggio(errorTestMediaMsg); throw new Exception("Errore supporto\n" + "Molto probabilmente non è stato inserito il CD nell'unita o la capacita del supporto non è sufficiente!!" + "\n\nVerifica il supporto e prova a rimasterizzare usando il pulsante" + "\n\nRimasterizza nuovamente causa eventuali errori" + "\n\nChe si trova alla tua Sinistra!!!!"); } break; default: throw new ArgumentException("TipoDestinazione non indicato o non supportato: " + _tipoDestinazione); } }