public void LoadMyFileSystemPlus(MyFileSystemPlus mfsp)
 {
     currentFileSystem = mfsp;
     if(currentFileSystem!=null)
         LoadNode(currentFileSystem.Root);
     else
         LoadNode(null);
 }
 public bool BeginIncorporaMetadata(FileSystemNodePlus<MyAddittionalData> nodo, MyFileSystemPlus mfsp)
 {
     if(GetIncorporaMetadataStatus()==MetadataIncluderAsyncStatus.nul)
     {
         Worker = new Thread(() =>
         {
             IncorporaMetadataRicorsivo(nodo, mfsp);
             OnEnd?.Invoke();
         });
         Worker.Start();
         return true;
     }
     else
     {
         return false;
     }
 }
 private void IncorporaMetadataRicorsivo(FileSystemNodePlus<MyAddittionalData> nodo, MyFileSystemPlus mfsp)
 {
     foreach (FileSystemNodePlus<MyAddittionalData> n in nodo.GetAllNode())
     {
         while (_Pause)
             Thread.Sleep(100);
         
         if (n.Type == FileSystemNodePlusType.Directory)
             IncorporaMetadataRicorsivo(n, mfsp);
         else if (n.Type == FileSystemNodePlusType.File)
         {
             IncorporaMetadataNodo(n, mfsp.GetFullPath(n));                    
         }
     }
 }
Esempio n. 4
0
 public CountParameter(MyFileSystemPlus mfsp, FFmpegMetadata EndFormat)
 {
     this.mfsp = mfsp;
     this.EndFormat = EndFormat;
 }
Esempio n. 5
0
        /// <summary>
        /// DEPRECATA! NON FUNZIONANTE
        /// </summary>
        /// <param name="nodo"></param>
        /// <param name="mfsp"></param>
        /// <param name="EndFormat"></param>
        /// <returns></returns>
        private long CalcoloSpazio(FileSystemNodePlus<MyAddittionalData> nodo, MyFileSystemPlus mfsp, FFMpegMediaMetadata EndFormat)
        {
            if (EndFormat is FFMpegMediaMetadataMp3 )
            {
                long t = 0;
                foreach (FileSystemNodePlus<MyAddittionalData> n in nodo.GetAllNode())
                {
                    while (Pause)
                        Thread.Sleep(100);

                    if (n.Type == FileSystemNodePlusType.Directory)
                        t += CalcoloSpazio(n, mfsp, EndFormat);
                    else if (n.Type == FileSystemNodePlusType.File)
                    {
                        String p = mfsp.GetFullPath(n);
                        if (SystemService.FileExist(p))
                        {
                            textBox_source.SetTextInvoke(p);
                            if(FFmpeg.GetMetadata(p).MediaMetadata!=null)
                            {
                                String temp = FFmpeg.GetMetadata(p).MediaMetadata.Duration;
                                string[] st = temp.Split(':');
                                long tt = 0;
                                if (st.Length == 3)
                                {
                                    try
                                    {
                                        tt = st[0].ParseInt() * 144000; //trovo i secondi e moltiplico x 320/8 -> 3600*40
                                        tt += st[1].ParseInt() * 2400; //trovo i secondi e moltiplico x 320/8 -> 60*40
                                        tt += st[2].Split('.')[0].ParseInt() * 40; //trovo i secondi e moltiplico x 320/8 -> 60*40
                                    }
                                    catch (Exception e) { }
                                    t += tt;
                                }
                            }
                        }
                        progressBar_total.SetValueInvoke(progressBar_total.Value + 1);
                    }
                }
                return t;
            }
            return 0;
        }
Esempio n. 6
0
        /// <summary>
        /// Scorre tutte le cartelle presenti nella cartella Reale e controlla i file:
        /// se un file viente trovato nella cartella e nel FileSystem allora viene impostato il flag Selezionato a true
        /// se un file non viene trovato nel FileSystem, viene aggiunto al FileSystem Temp
        /// 
        /// </summary>
        /// <param name="FileSystem"></param>
        /// <param name="CurrentPath">Path da controllare</param>
        /// <param name="Temp"></param>
        private void UpdateRecursiveRealToList(MyFileSystemPlus FileSystem, String CurrentPath, FileSystemNodePlus<MyAddittionalData> Temp)
        {
            //scorro tutte le cartelle
            //imposto selezionato a tutti i file che trovo 
            //alla fine rimuovo i file non selezionati
            String[] tfolder = SystemService.GetDirectories(CurrentPath);
            foreach (String s in tfolder)
            { 
                UpdateRecursiveRealToList(FileSystem, s, Temp.CreateNode(s.TrimEnd('\\', '/').SplitAndGetLast("\\", "/"), FileSystemNodePlusType.Directory));
            }

            String[] tfile = SystemService.GetFiles(CurrentPath);
            foreach (String s in tfile)
            {
                if (LoadOption == null || (LoadOption != null && (!LoadOption.RestrictExtensionEnable || LoadOption.RestrictExtension.Contains(System.IO.Path.GetExtension(s).TrimStart('.').ToLower()))))
                {
                    FileSystemNodePlus<MyAddittionalData> n = FileSystem.GetNodeFromPath(s);
                    if (n == null)
                    {
                        //se il file non viene trovato vuol dire che è nuovo e lo aggiungo al temp
                        Temp.CreateNode(s.TrimEnd('\\', '/').SplitAndGetLast("\\", "/"), FileSystemNodePlusType.File);
                    }
                    else if (n.AddittionalData.Size == SystemService.FileSize(s) && n.AddittionalData.MD5!=null && n.Type == (SystemService.FileExist(s)?FileSystemNodePlusType.File:FileSystemNodePlusType.Directory))
                    {
                        // il file non è stato modificato ( dimensine ) 
                        // ha l'md5 
                        // che il tipo corrisponda ( per errori di vecchi Index
                        // lo seleziono ( vuol dire che lo tengo ) .
                        n.AddittionalData.Selezionato = true;
                    }
                    else // nel caso in cui il file è stato modificato
                    {
                        //reinserisco il file all'interno di temp in modo che venga rianalizzato
                        Temp.CreateNode(s.TrimEnd('\\', '/').SplitAndGetLast("\\", "/"), FileSystemNodePlusType.File);
                    }
                }
            }
        }
        private void S_OnSingleFileMouseUp(SingleFile SF)
        {
            if (Type == FileBrowserType.Playlist)
            {
                Cursor.Current = Cursors.Default;

                if (DownNode != SF.Nodo)
                {
                    if (SF.Nodo.Type == FileSystemNodePlusType.Directory)
                    {

                        String path = CurrentNode.GetFullPath();
                        MyFileSystemPlus Clo = currentFileSystem.Clone();
                        FileSystemNodePlus<MyAddittionalData> nn = Clo.GetNodeFromPath(path);

                        MyFileSystemPlus temp = new MyFileSystemPlus();
                        temp.Root = nn;
                        temp = temp.FindPreserveTree((x) => { return x.AddittionalData.Selezionato; }, FileSystemNodePlusControlType.Pre);
                        CurrentNode.Remove((t) => { return t.Type == FileSystemNodePlusType.File && t.AddittionalData.Selezionato; }, FileSystemNodePlusLevelType.AllNode, FileSystemNodePlusControlType.Pre);
                        CurrentNode.Remove((t) => { return t.Type == FileSystemNodePlusType.Directory && t.ChildCount == 0 && t.AddittionalData.Selezionato; }, FileSystemNodePlusLevelType.AllNode, FileSystemNodePlusControlType.Post);
                        temp.DeselectAll();
                        SF.Nodo.Merge(temp.Root);
                        SF.Selected = false;
                        ReloadNode();

                        if (PlaylistChanged != null)
                            PlaylistChanged(currentFileSystem);
                    }
                    
                }
                DownNode = null;
            }
            
        }
Esempio n. 8
0
        /// <summary>
        /// Controlla l'IndexFile corrente con la Path memorizzata nell'IndexFile; rimuove i file non trovati ed aggiunge i nuovi file.
        /// </summary>
        public void Update()
        {
            if (GUI)
                StartGui();

            if (CanUseGui)
                IFForm.SetMessage("Lettura media...");

            if (RootFileSystem == null)
                return;
            //controllo se esistono, su disco, tutti i file presenti nel mio FileSystem
            // quelli che non esistono li cancello
            // mentre sono in una cartella controllo anche se ci sono nuovi file da aggiungere
            MyFileSystemPlus t = new MyFileSystemPlus();
            t.RootPath = RootFileSystem.RootPath;

            t.Root = new FileSystemNodePlus<MyAddittionalData>(RootFileSystem.RootPath.TrimEnd('\\', '/').SplitAndGetLast("\\", "/"), FileSystemNodePlusType.Directory);
            
            
            // incorporo i metadati in t

            RootFileSystem.DeselectAll();
            UpdateRecursiveRealToList(RootFileSystem, RootFileSystem.RootPath, t.Root);
            RootFileSystem.Root.SetParentOnAllChild(FileSystemNodePlusLevelType.AllNode);
            if (CanUseGui)
                IFForm.AddRimossi(RootFileSystem.FindAll((x)=> { return x.Type == FileSystemNodePlusType.File && !x.AddittionalData.Selezionato; }).Select((x)=> { return x.GetFullPath(); }).ToArray());

            if (CanUseGui)
                IFForm.SetMessage("Rimozione file non trovati...");

            //cancello tutti i file non trovati o modificati ( i modificati sono anche stati aggiunti a t )
            RootFileSystem.RimuoviFileNonSelezionati();
            RootFileSystem.RimuoviCartelleVuote();
            RootFileSystem.DeselectAll();


            
            if (CanUseGui)
                IFForm.SetMessage("Inclusione Metadata...");

            _IncorporaMetadata(t);


            if (CanUseGui)
                IFForm.SetMessage("Merge dei nuovi dati...");
            RootFileSystem.Merge(t);

            if (CanUseGui)
                IFForm.SetMessage("Finalizzazione Index File");


            RootFileSystem.Root.SetParentOnAllChild(FileSystemNodePlusLevelType.AllNode);

            if (CanUseGui)
                IFForm.SetMessage("Fine!");

            if (CanUseGui)
                WaitGUIClose();

        }
Esempio n. 9
0
        /// <summary>
        /// Controlla l'indice corrente con la Path specificata; rimuove i file non trovati ed aggiunge i nuovi file.
        /// </summary>
        /// <param name="RootPath">Path della cartella su cui eseguire il controllo </param>
        public void Update(String RootPath)
        {
            if (RootFileSystem == null)
                RootFileSystem = new MyFileSystemPlus();

            RootFileSystem.RootPath = RootPath;
            Update();
        }
Esempio n. 10
0
        private void _IncorporaMetadata(MyFileSystemPlus t)
        {
            MetadataIncluderServices MI = new MetadataIncluderServices();
            MI.OnNodeStartProcessing += OnNodeStartProcessing;
            MI.OnNodeProcessed += OnProcessedMetadata;
            MI.OnProgressChangedSingleMD5 += (double percent) =>
            {
                OnPercentChangeMetadata?.Invoke(percent);
            };
            MI.OnEnd += OnEndMetadata;

            
            if (CanUseGui)
            {
                IFForm.FormClosed += (object sender, System.Windows.Forms.FormClosedEventArgs e) =>
                {
                    MI.AbortIncorporaMetadata();
                };

                int Total = t.Root.GetNodeCount(FileSystemNodePlusLevelType.AllNode, FileSystemNodePlusType.File);
                IFForm.SetProgressTotalMax(Total);
                double buffer = 0;

                MI.OnNodeStartProcessing += (FileSystemNodePlus<MyAddittionalData> nodo, string PathNodo) =>
                {
                    buffer = 0;
                    if (CanUseGui)
                        IFForm.SetSource(PathNodo);
                };
                MI.OnNodeProcessed += (FileSystemNodePlus<MyAddittionalData> nodo, string PathNodo, MetadataIncluderError Err) =>
                {
                    buffer = 100;

                    if (CanUseGui)
                    {
                        IFForm.SetProgressSingleValue((int)buffer);
                        IFForm.SetProgressTotalValue(IFForm.GetProgressTotalValue() + 1);
                        if (Err == MetadataIncluderError.nul)
                        {
                            IFForm.AddAggiunti(nodo.GetFullPath());
                        }
                        else if (Err == MetadataIncluderError.MD5Err)
                        {
                            IFForm.AddProblemi("MD5 error - " + nodo.GetFullPath());
                        }
                        else if (Err == MetadataIncluderError.FileNonTrovato)
                        {
                            IFForm.AddProblemi("Not Found - " + nodo.GetFullPath());
                        }
                        else
                        {
                            throw new Exception("Errore non implementato");
                        }
                    }

                };
                MI.OnEnd += () =>
                {
                    IFForm.SetProgressTotalValue(IFForm.GetProgressTotalValue() + 1);
                    IFForm.Fine();
                };


                MI.OnProgressChangedSingleMD5 += (double AddPercent) =>
                {
                    buffer += AddPercent;
                    if (CanUseGui)
                        IFForm.SetProgressSingleValue((int)buffer);
                };
            }

            MI.IncorporaMetadata(t.Root, t);
            t.Root.Remove((x) => { return x.Type == FileSystemNodePlusType.File && (x.AddittionalData.MD5 == "" || x.AddittionalData.MD5 == null); }, FileSystemNodePlusLevelType.AllNode, FileSystemNodePlusControlType.Post);
            

        }
Esempio n. 11
0
        private void _CreateIndexFile(String Path, FileSystemPlusLoadOption lo)
        {
            if (GUI)
                StartGui();

            if (CanUseGui)
                IFForm.SetMessage("Lettura media...");

            MyFileSystemPlus t = new MyFileSystemPlus(Path, lo);

            if (CanUseGui)
                IFForm.SetMessage("Inclusione Metadata...");



            _IncorporaMetadata(t);



            if (CanUseGui)
                IFForm.SetMessage("Finalizzazione Index File");

            RootFileSystem = t;
            RootFileSystem.Root.SetParentOnAllChild(FileSystemNodePlusLevelType.AllNode);
            Completed = true;
            if (CanUseGui)
                IFForm.SetMessage("Fine!");
        }
Esempio n. 12
0
 public IndexFile(MyFileSystemPlus ListElement, bool GUI = true)
 {
     this.RootFileSystem = ListElement;
     this.GUI = GUI;
 }
Esempio n. 13
0
 public IndexFile(bool GUI=true)
 {
     this.RootFileSystem = null;
     this.GUI = GUI;
 }
Esempio n. 14
0
 public IndexFile()
 {
     this.RootFileSystem = null;
     this.GUI = true;
 }
Esempio n. 15
0
 void LoadPlaylist(Playlist p)
 {
     Current = p.FileSystem;
     fileBrowser1.Type = GUI.Controls.FileBrowserType.Playlist;
     ReloadCurrentFileSystem();
 }
Esempio n. 16
0
 void LoadIndexMediaLibrary()
 {
     Current = IndexMediaLibrary.RootFileSystem;
     status = MainFormStatus.RootBrowsing;
     ReloadCurrentFileSystem();
 }