Ejemplo n.º 1
0
        public List <Title> CreateTitlesFromPathArray(int?parentid, string[] path, string Tag)
        {
            // Create a list of all newly added titles
            List <Title> NewTitles    = new List <Title>();
            bool         titleCreated = false;
            Title        folderTitle;

            foreach (string file in path)
            {
                try
                {
                    if (Directory.Exists(file))
                    {
                        // Folder passed in. This is where St Sana kicks in
                        Servant stsana = new Servant();
                        stsana.Log += new Servant.SSEventHandler(StSana_Log);
                        stsana.BasePaths.Add(file);
                        stsana.Scan();

                        int?a_parent;

                        if (OMLEngine.Settings.OMLSettings.StSanaCreateTLFolder)
                        {
                            titleCreated = false;
                            folderTitle  = TitleCollectionManager.CreateFolderNonDuplicate(parentid, Path.GetFileName(file), TitleTypes.Collection, null, out titleCreated);
                            a_parent     = folderTitle.Id;
                            if (titleCreated)
                            {
                                NewTitles.Add(folderTitle);
                            }
                        }
                        else
                        {
                            a_parent = parentid;
                        }

                        if (stsana.Entities != null)
                        {
                            foreach (Entity e in stsana.Entities)
                            {
                                int?e_parent = a_parent;
                                if (e.Name != file)
                                {
                                    switch (e.EntityType)
                                    {
                                    case Serf.EntityType.COLLECTION:
                                    case Serf.EntityType.MOVIE:
                                        if ((e.Series.Count() > 1) || (OMLEngine.Settings.OMLSettings.StSanaAlwaysCreateMovieFolder))
                                        {
                                            titleCreated = false;
                                            folderTitle  = TitleCollectionManager.CreateFolderNonDuplicate(a_parent, e.Name, TitleTypes.Collection, null, out titleCreated);
                                            e_parent     = folderTitle.Id;
                                            if (titleCreated)
                                            {
                                                NewTitles.Add(folderTitle);
                                            }
                                        }
                                        else
                                        {
                                            e_parent = a_parent;
                                        }
                                        break;

                                    case Serf.EntityType.TV_SHOW:
                                        titleCreated = false;
                                        folderTitle  = TitleCollectionManager.CreateFolderNonDuplicate(a_parent, e.Name, TitleTypes.TVShow, null, out titleCreated);
                                        e_parent     = folderTitle.Id;
                                        if (titleCreated)
                                        {
                                            NewTitles.Add(folderTitle);
                                        }
                                        break;
                                    }
                                }

                                foreach (Series s in e.Series)
                                {
                                    int?s_parent = e_parent;
                                    // if the s.name and e.name are the same, its a movie, to be sure though lets check s.number, it should be
                                    // -1 for non tv shows.
                                    if (s.Name.ToUpperInvariant().CompareTo(e.Name.ToUpperInvariant()) != 0 || s.Number > -1)
                                    {
                                        //s_parent = CreateFolderNonDuplicate(e_parent, s.Name, TitleTypes.Collection, false);
                                        if (s.Name != e.Name)
                                        {
                                            switch (e.EntityType)
                                            {
                                            case Serf.EntityType.COLLECTION:
                                            case Serf.EntityType.MOVIE:
                                                if ((e_parent == a_parent) || (OMLEngine.Settings.OMLSettings.StSanaAlwaysCreateMovieFolder))
                                                {
                                                    titleCreated = false;
                                                    folderTitle  = TitleCollectionManager.CreateFolderNonDuplicate(e_parent, s.Name, TitleTypes.Collection, null, out titleCreated);
                                                    s_parent     = folderTitle.Id;
                                                    if (titleCreated)
                                                    {
                                                        NewTitles.Add(folderTitle);
                                                    }
                                                }
                                                else
                                                {
                                                    s_parent = e_parent;
                                                }
                                                break;

                                            case Serf.EntityType.TV_SHOW:
                                                titleCreated = false;
                                                folderTitle  = TitleCollectionManager.CreateFolderNonDuplicate(e_parent, s.Name, TitleTypes.Season, (short)s.Number, out titleCreated);
                                                s_parent     = folderTitle.Id;
                                                if (titleCreated)
                                                {
                                                    NewTitles.Add(folderTitle);
                                                }
                                                break;
                                            }
                                        }
                                        else
                                        {
                                            s_parent = e_parent;
                                        }
                                    }

                                    foreach (Video v in s.Videos)
                                    {
                                        StSana_Log("Processing " + v.Name);
                                        //int v_parent = CreateFolder(s_parent, Path.GetFileNameWithoutExtension(v.Name), TitleTypes.Collection, false);

                                        List <Disk> disks = new List <Disk>();

                                        if ((e.EntityType == Serf.EntityType.COLLECTION) ||
                                            (e.EntityType == Serf.EntityType.MOVIE))
                                        {
                                            // Collection or movie mode. Create one title per folder with multiple disks
                                            foreach (string f in v.Files)
                                            {
                                                if (!TitleCollectionManager.ContainsDisks(OMLEngine.FileSystem.NetworkScanner.FixPath(f)))
                                                {
                                                    Disk disk = new Disk();
                                                    disk.Path   = f;
                                                    disk.Format = disk.GetFormatFromPath(f); // (VideoFormat)Enum.Parse(typeof(VideoFormat), fileExtension.ToUpperInvariant());
                                                    disk.Name   = string.Format("Disk {0}", 0);
                                                    if (disk.Format != VideoFormat.UNKNOWN)
                                                    {
                                                        disks.Add(disk);
                                                    }
                                                }
                                            }
                                            if (disks.Count != 0)
                                            {
                                                Title newTitle = TitleCollectionManager.CreateTitle(s_parent,
                                                                                                    Path.GetFileNameWithoutExtension(v.Name),
                                                                                                    TitleTypes.Unknown,
                                                                                                    Tag,
                                                                                                    disks.ToArray());

                                                CheckDiskPathForImages(newTitle, disks[0]);
                                                NewTitles.Add(newTitle);
                                                TitleCollectionManager.SaveTitleUpdates();
                                            }
                                        }
                                        else
                                        {
                                            // TV mode. Create one title per file, each with single disks
                                            foreach (string f in v.Files)
                                            {
                                                if (!TitleCollectionManager.ContainsDisks(OMLEngine.FileSystem.NetworkScanner.FixPath(f)))
                                                {
                                                    Disk disk = new Disk();
                                                    disk.Path   = f;
                                                    disk.Format = disk.GetFormatFromPath(f); //(VideoFormat)Enum.Parse(typeof(VideoFormat), fileExtension.ToUpperInvariant());
                                                    disk.Name   = string.Format("Disk {0}", 0);
                                                    if (disk.Format != VideoFormat.UNKNOWN)
                                                    {
                                                        disks.Add(disk);
                                                    }
                                                }
                                                if (disks.Count != 0)
                                                {
                                                    short episodeno = 0;
                                                    if (v.EpisodeNumbers.Count > 0)
                                                    {
                                                        episodeno = (short)v.EpisodeNumbers[0];
                                                    }

                                                    Title newTitle = TitleCollectionManager.CreateTitle(s_parent,
                                                                                                        Path.GetFileNameWithoutExtension(f),
                                                                                                        TitleTypes.Episode,
                                                                                                        Tag,
                                                                                                        (short)s.Number,
                                                                                                        episodeno,
                                                                                                        disks.ToArray());

                                                    CheckDiskPathForImages(newTitle, disks[0]);
                                                    NewTitles.Add(newTitle);
                                                    TitleCollectionManager.SaveTitleUpdates();
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                    if (File.Exists(file))
                    {
                        StSana_Log("Processing " + file);
                        string extension = Path.GetExtension(file).ToUpper().Replace(".", "");
                        extension = extension.Replace("-", "");

                        Disk disk = new Disk();
                        disk.Path   = file;
                        disk.Format = disk.GetFormatFromPath(file); // (VideoFormat)Enum.Parse(typeof(VideoFormat), extension.ToUpperInvariant());
                        disk.Name   = string.Format("Disk {0}", 0);

                        if (disk.Format != VideoFormat.UNKNOWN)
                        {
                            Title newTitle = TitleCollectionManager.CreateTitle(parentid,
                                                                                Path.GetFileNameWithoutExtension(file),
                                                                                TitleTypes.Unknown,
                                                                                Tag,
                                                                                new Disk[1] {
                                disk
                            });

                            CheckDiskPathForImages(newTitle, disk);
                            NewTitles.Add(newTitle);
                            TitleCollectionManager.SaveTitleUpdates();
                        }
                    }
                }
                catch (Exception ex)
                {
                    Utilities.DebugLine("[OMLEngine] CreateTitlesFromPathArray exception" + ex.Message);
                }
            }
            return(NewTitles);
        }