예제 #1
0
        public static List<Item> GetChildren(Item item)
        {
            Logger.ReportInfo("analyze " + item.Path);
            List<Item> children = new List<Item>();
            if (!Directory.Exists(item.Path))
                return null;
            DirectoryInfo dirInfo = new DirectoryInfo(item.Path);

            DirectoryInfo[] dis = dirInfo.GetDirectories();
            Array.Sort(dis, new DirectorySort());
            foreach (DirectoryInfo di in dis)
            {
                if ((di.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden || di.Attributes == FileAttributes.System || di.Name.EndsWith("$RECYCLE.BIN"))
                    continue;
                try
                {
                    var child = new Item();

                    if (TVUtils.IsSeriesFolder(di))
                    {
                        child = new Folder(di.FullName);
                        child.Type = Entity.Series;
                    }
                    else if (TVUtils.IsSeasonFolder(di.FullName))
                    {
                        child = new Folder(di.FullName);
                        child.Type = Entity.Season;
                        child.SeriesName = di.Parent.Name;
                        child.SeasonNumber = TVUtils.SeasonNumberFromFolderName(di.FullName);
                    }
                    else if (IsVideoFolder(di))
                    {
                        child = new Item();
                        child.Type = Entity.Movie;
                    }
                    else
                    {
                        child = new Folder(di.FullName);
                        child.Type = Entity.Folder;
                    }
                    child.Title = di.Name;
                    child.Path = di.FullName;
                    child.Id = Helper.GetMD5(di.FullName);
                    child.MetadataLocation = child.Path;
                    children.Add(child);
                }
                catch (Exception ex) { Logger.ReportException("Error while analizing " + item.Path, ex); }
            }

            foreach (FileInfo fi in dirInfo.GetFiles())
            {
                if (IsVideo(fi.FullName))
                {
                    Item child = new Item();
                    child.Title = Path.GetFileNameWithoutExtension(fi.Name);
                    child.Path = fi.FullName;
                    child.Id = Helper.GetMD5(fi.FullName);
                    child.MetadataLocation = Path.Combine(Path.Combine(Directory.GetParent(fi.FullName).FullName, "metadata"), child.Title);

                    child.Type = Entity.Movie;

                    if (TVUtils.IsEpisode(fi.FullName))
                    {
                        child.Type = Entity.Episode;
                        child.MetadataLocation = Path.Combine(Directory.GetParent(child.Path).FullName, "metadata");
                        child.SeasonNumber = TVUtils.SeasonNumberFromEpisodeFile(child.Path);
                        child.EpisodeNumber = TVUtils.EpisodeNumberFromFile(child.Path);
                        if (TVUtils.IsSeriesFolder(dirInfo))
                            child.SeriesName = dirInfo.Name;
                    }
                    children.Add(child);
                }
            }

            return children;
        }
예제 #2
0
 protected virtual List<Item> GetNonCachedChildren()
 {
     if (this.IsRootFolder)
     {
         List<Item> childrenFolders = new List<Item>();
         foreach (string folder in RootFolders)
         {
             Folder f = new Folder(folder);
             f.Title = folder;
             childrenFolders.Add(f);
         }
         return childrenFolders;
     }
     else
         return EntityResolver.GetChildren(this);
 }