/// <summary> /// Permette di convertire una Lista di Nodi partendo dai file sorgenti specificati nel file index e come destinazione ha la DestFolder /// Viene usato il ConversionParameter per specificare come convertire i media /// </summary> /// <param name="ListaNodi">Lista dei Nodi da convertire</param> /// <param name="IndexFileSorgente"> IndexFile dei media sorgenti</param> /// <param name="DestFolder"> Cartella di destinazione dei media</param> /// <param name="cp">Parametri di conversione</param> public bool BeginConvertPlaylist(IEnumerable<FileSystemNodePlus<MyAddittionalData>> ListaNodi, IndexFile IndexFileSorgente, String DestFolder, ConversionParameter cp) { if (GetConvertMediaStatus() == ConvertMediaAsyncStatus.nul) { WorkerThread = new Thread(() => { ConvertPlaylist(ListaNodi, IndexFileSorgente, DestFolder, cp); if (CanUseGui) WaitGUIClose(); OnEnd?.Invoke(); }); WorkerThread.Start(); return true; } else { return false; } }
/// <summary> /// Permette di convertire una Lista di Nodi partendo dai file sorgenti specificati nel file index e come destinazione ha la DestFolder /// Viene usato il ConversionParameter per specificare come convertire i media /// </summary> /// <param name="ListaNodi">Lista dei Nodi da convertire</param> /// <param name="IndexFileSorgente"> IndexFile dei media sorgenti</param> /// <param name="DestFolder"> Cartella di destinazione dei media</param> /// <param name="cp">Parametri di conversione</param> public void ConvertPlaylist(IEnumerable<FileSystemNodePlus<MyAddittionalData>> ListaNodi, IndexFile IndexFileSorgente, String DestFolder, ConversionParameter cp) { if (GUI) StartGui(); //seleziono effettivamente tutti i file IEnumerable<FileSystemNodePlus<MyAddittionalData>> i = ListaNodi.Where(x => x.Type == FileSystemNodePlusType.File); bool Abort = false; if (CanUseGui) { CMForm.SetPause += (bool pau) => { Pause = pau; }; CMForm.Stop += () => { Abort = true; }; CMForm.SetProgressTotalMax(i.Count()); } foreach (FileSystemNodePlus<MyAddittionalData> n in i) { while (Pause && !Abort) Thread.Sleep(100); if (Abort) break; FileSystemNodePlus<MyAddittionalData> tt = IndexFileSorgente.RootFileSystem.FindFirst((x) => { return x.AddittionalData.MD5 == n.AddittionalData.MD5; }); if (tt == null) { //TODO: non trovato -> gestire la ricerca dei file non trovati } else { if (cp.TipoConversione == ConversinType.Mai) { String PathSource = IndexFileSorgente.RootFileSystem.GetFullPath(tt); String PathDestination = SystemService.Combine(DestFolder, (n.GetFullPath().TrimStart('\\', '/'))); if (CanUseGui) CMForm.StartConvertItem(PathSource, PathDestination); OnStartConverting?.Invoke(PathSource, PathDestination); SystemService.CopySecure(PathSource, PathDestination, cp.OverrideIfExist, (double Percent, ref bool cancelFlag) => { if (CanUseGui) CMForm.UpdateProgressPartial((int)Percent); OnProgressConverting?.Invoke(PathSource, PathDestination, Percent); }, (bool copiato, Exception ex) => { OnEndConverting?.Invoke(PathSource, PathDestination, copiato ? ConvertMediaError.nul : ConvertMediaError.ErrDuranteLaCopia); }); } else { String PathSource = IndexFileSorgente.RootFileSystem.GetFullPath(tt); String PathDestination = SystemService.Combine(DestFolder, SystemService.ChangeExtension(n.GetFullPath().TrimStart('\\', '/'), cp.ConvertiIn.GetDefaultExtension())); ConvertionEntity Source = new ConvertionEntity(PathSource, tt.AddittionalData.Metadata.MediaMetadata); ConvertionEntity Dest = new ConvertionEntity(PathDestination, cp.ConvertiIn); bool ForceConversion = cp.TipoConversione == ConversinType.Sempre ? true : false; bool Err = false; FFmpeg.ConvertTo(Source, Dest, ForceConversion, cp.OverrideIfExist, (st, src, des) => { if (st == FFmpegStatus.Running) { if (CanUseGui) CMForm.StartConvertItem(src, des); OnStartConverting?.Invoke(src, des); } }, (Percent, src, Destination, Error) => { if (Error == FFmpegError.DestFolderNotFound) { Err = true; if (CanUseGui) CMForm.AppendLog("[ERR] File non trovato " + src); OnEndConverting?.Invoke(src, Destination, ConvertMediaError.FileNonTrovato); } else { if (CanUseGui) CMForm.UpdateProgressPartial(Percent); OnProgressConverting?.Invoke(src, Destination, Percent); } }, false); if (!Err) OnEndConverting?.Invoke(PathSource, PathDestination, ConvertMediaError.nul); } } } if (CanUseGui) CMForm.Finito(); }
/// <summary> /// Permette di convertire una Playlist partendo dai file sorgenti specificati nel file index e come destinazione ha la DestFolder /// Viene usato il ConversionParameter per specificare come convertire i media /// </summary> /// <param name="p">Playlist da convertire</param> /// <param name="IndexFileSorgente"> IndexFile dei media sorgenti</param> /// <param name="DestFolder"> Cartella di destinazione dei media</param> /// <param name="cp">Parametri di conversione</param> public bool BeginConvertPlaylist(Playlist p, IndexFile IndexFileSorgente, String DestFolder, ConversionParameter cp) { if (GetConvertMediaStatus() == ConvertMediaAsyncStatus.nul) { WorkerThread = new Thread(() => { ConvertPlaylist(p, IndexFileSorgente, DestFolder, cp); if (CanUseGui) WaitGUIClose(); OnEnd?.Invoke(); }); WorkerThread.Start(); return true; } else { return false; } }
/// <summary> /// Permette di convertire una Playlist partendo dai file sorgenti specificati nel file index e come destinazione ha la DestFolder /// Viene usato il ConversionParameter per specificare come convertire i media /// </summary> /// <param name="p">Playlist da convertire</param> /// <param name="IndexFileSorgente"> IndexFile dei media sorgenti</param> /// <param name="DestFolder"> Cartella di destinazione dei media</param> /// <param name="cp">Parametri di conversione</param> public void ConvertPlaylist(Playlist p, IndexFile IndexFileSorgente, String DestFolder, ConversionParameter cp) { ConvertPlaylist(p.FileSystem.Flatten(), IndexFileSorgente, DestFolder, cp); }