示例#1
0
        /// <summary>
        /// A recursive method, which traverse parent directory, and any first level sub directories it meets.
        /// </summary>
        private void AddDirectoryContent(ICollection <FileEntry> parent, string directory)
        {
            var ignoredFiles = new List <string> {
                "desktop", "thumbs", "movies", "series", "sample"
            };

            foreach (var entry in Directory.GetFileSystemEntries(directory))
            {
                try
                {
                    var fileName = Path.GetFileName(entry);
                    if (fileName == null)
                    {
                        continue;
                    }

                    var       isDirectory = Directory.Exists(entry);
                    var       isDirectoryAndContainsCorrectFileTypes = false;
                    const int fileExtensionLength = 4;
                    var       isCorrectFileType   = ExpectedNames.FileTypeNames.Contains(fileName.Substring(fileName.Length - fileExtensionLength));

                    if (isDirectory)
                    {
                        //Check if folder already contains a subtitle:
                        if (Properties.SubSearchSettings.Default.IgnoreSubbedFolders)
                        {
                            var subtitleExist = LookForSubtitle(entry);
                            if (subtitleExist)
                            {
                                continue;
                            }
                        }

                        //Check if correct file type is present in first level of dir:
                        var dirEntries = Directory.GetFiles(entry);
                        foreach (var dirEntry in dirEntries)
                        {
                            if (ExpectedNames.FileTypeNames.Contains(Path.GetExtension(dirEntry)) == false)
                            {
                                //Content in directory is not a file type we look for.
                                continue;
                            }
                            if (isCorrectFileType)
                            {
                                isDirectoryAndContainsCorrectFileTypes = true;
                            }
                            isCorrectFileType = true;
                        }
                    }

                    var matchesIgnoredFile = ignoredFiles.Contains(fileName.ToLower().Split('.')[0]);
                    if (matchesIgnoredFile || !isCorrectFileType)
                    {
                        continue;
                    }

                    var fileEntry = new FileEntry(entry);
                    fileEntry.DefineEntriesFromPath();


                    if (isDirectoryAndContainsCorrectFileTypes)
                    {
                        //Add contents within directory (recursive call).
                        this.AddDirectoryContent(fileEntry.AllEntries, fileEntry.Path);
                    }

                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        parent.Add(fileEntry);
                    });
                } catch (Exception)
                {
                    //ignored and continue with next (meaning that this entry will not be shown.)
                }
            }
        }