private bool OpenLines(IEnumerable <string> list)
        {
            var files = new List <FileImpInfo>();

            foreach (var path in list)
            {
                if (Directory.Exists(path))
                {
                    // path is a directory

                    var options = new DirectoryLoadOptions(path, SearchOption.TopDirectoryOnly,
                                                           FileTypes.Music | FileTypes.Videos | FileTypes.Pictures, string.Empty);
                    FileInfo[] fileInfos;
                    try
                    {
                        //files = Directory.GetFiles(path);
                        var directoryInfo = new DirectoryInfo(path);

                        fileInfos = directoryInfo.GetFiles();
                    }
                    catch (Exception e)
                    {
                        // doesn't matter why path choosing failed, no files available in this folder
                        var error = new ImpError(ErrorType.FailedToOpenFolder, e.Message);
                        this.mainC.EventC.ShowError(error);
                        return(true);
                    }


                    if (fileInfos.Length < 1)
                    {
                        return(true);
                    }

                    files.AddRange(options.FilterFiles(fileInfos, false));
                }
                else if (File.Exists(path))
                {
                    files.Add(new FileImpInfo(path));
                }
                else
                {
                    // File or folder could not be identified
                    var error = new ImpError(path, ErrorType.FileNotFound);
                    this.mainC.EventC.ShowError(error);
                }
            }
            if (files.Count == 1)
            {
                this.mainC.Exec(ImpCommand.OpenFile, files[0]);
            }
            else
            {
                foreach (var fileInfo in files)
                {
                    this.mainC.Exec(ImpCommand.AddFile, fileInfo);
                }
            }
            return(false);
        }
Exemplo n.º 2
0
        private void AddFolderToPlayList(DirectoryLoadOptions options, string path)
        {
            if (options.SearchOption == SearchOption.AllDirectories)
            {
                if (LoadSubDirectories(options, path))
                {
                    return;
                }
                if (options.FilterOptions.HasFlag(FilterOptions.ChildFolders) && path == options.RootPath)
                {
                    return;
                }
            }

            FileInfo[] fileInfos;
            if (StringHandler.IsSpecialFolder(path))
            {
                var specialFolder = SpecialFolderLoader.LoadSpecialFolder(path);
                fileInfos = new FileInfo[specialFolder.FilePaths.Count];
                for (var i = 0; i < specialFolder.FilePaths.Count; i++)
                {
                    fileInfos[i] = new FileInfo(specialFolder.FilePaths[i]);
                }
            }
            else
            {
                try
                {
                    //files = Directory.GetFiles(path);
                    var directoryInfo = new DirectoryInfo(path);

                    fileInfos = directoryInfo.GetFiles();
                }
                catch (Exception e)
                {
                    // doesn't matter why path choosing failed, no files available in this folder
                    var error = new ImpError(ErrorType.FailedToOpenFolder, e.Message);
                    mainC.EventC.ShowError(error);
                    return;
                }
            }
            if (fileInfos.Length < 1)
            {
                return;
            }

            var files = options.FilterFiles(fileInfos, options.FilterOptions.HasFlag(FilterOptions.Files));

            IComparer <FileImpInfo> comparer;

            switch ((FileSortMode)ButtonSort.CurrentState)
            {
            case FileSortMode.Name:
                comparer = new ComparerFileName();
                break;

            case FileSortMode.Date:
                comparer = new ComparerFileDate();
                break;

            case FileSortMode.LastUsage:
                comparer = new ComparerViewThenName();
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            Array.Sort(files, comparer);

            foreach (var fileInfo in files)
            {
                if (options.PlayFirstFile)
                {
                    mainC.Exec(ImpCommand.AddFile, fileInfo);

                    object[] args = { ImpCommand.OpenFile, fileInfo };
                    Dispatcher.BeginInvoke(new ExecDelegate <ImpCommand>(mainC.Exec), DispatcherPriority.Normal, args);

                    options.PlayFirstFile = false;
                }
                else
                {
                    mainC.Exec(ImpCommand.AddFile, fileInfo);
                }
            }
        }