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); }
private bool LoadSubDirectories(DirectoryLoadOptions options, string path) { DirectoryInfo[] folderinfos; if (StringHandler.IsSpecialFolder(path)) { var specialFolder = SpecialFolderLoader.LoadSpecialFolder(path); folderinfos = new DirectoryInfo[specialFolder.FolderPaths.Count]; for (int i = 0; i < specialFolder.FolderPaths.Count; i++) { folderinfos[i] = new DirectoryInfo(specialFolder.FolderPaths[i]); } } else { try { var directoryInfo = new DirectoryInfo(path); folderinfos = directoryInfo.GetDirectories(); } catch (Exception e) { ImpError error = new ImpError(ErrorType.FailedToOpenFolder, e.Message); mainC.EventC.ShowError(error); return(true); } } foreach (var folderinfo in folderinfos) { AddFolderToPlayList(options, folderinfo.FullName); } return(false); }
public void PrepareFolderLoader(DirectoryLoadOptions options) { if (loader != null && loader.IsAlive) { mainC.EventC.SetEvent(new EventText("Folder load already active", 1, EventType.Delayed)); return; } ButtonAddSubFolder.IsEnabled = false; ButtonAddFolder.IsEnabled = false; loader = new Thread(LoadDirectories); loader.Start(options); }
private bool LoadSubDirectories(DirectoryLoadOptions options, string path) { DirectoryInfo[] folderinfos; if (StringHandler.IsSpecialFolder(path)) { var specialFolder = SpecialFolderLoader.LoadSpecialFolder(path); folderinfos = new DirectoryInfo[specialFolder.FolderPaths.Count]; for (var i = 0; i < specialFolder.FolderPaths.Count; i++) { folderinfos[i] = new DirectoryInfo(specialFolder.FolderPaths[i]); } } else { try { var directoryInfo = new DirectoryInfo(path); folderinfos = directoryInfo.GetDirectories(); } catch (Exception e) { var error = new ImpError(ErrorType.FailedToOpenFolder, e.Message); mainC.EventC.ShowError(error); return(true); } } if (path == options.RootPath && options.FilterOptions.HasFlag(FilterOptions.ChildFolders)) { foreach (var folderinfo in folderinfos) { if (StringHandler.FindFound(folderinfo.FullName, options.FindDirectoriesWords)) { // Add only when going through filter AddFolderToPlayList(options, folderinfo.FullName); } } } else { foreach (var folderinfo in folderinfos) { AddFolderToPlayList(options, folderinfo.FullName); } } return(false); }
public void PrepareFolderLoader(DirectoryLoadOptions options) { if (loader != null && !loader.IsCompleted) { mainC.EventC.SetEvent(new EventText("Folder load already active", 1, EventType.Delayed)); return; } options.FindFilesText = TextBoxFind.Text; options.FindDirectoriesText = TextBoxFindFolder.Text; //options.FilterOptions = ButtonFilterFolder.CurrentState == 0 ? FilterOptions.Files : FilterOptions.ChildFolders; options.FilterOptions = FilterOptions.Files; if (!string.IsNullOrWhiteSpace(options.FindDirectoriesText)) { options.FilterOptions |= FilterOptions.ChildFolders; } ButtonAddSubFolder.IsEnabled = false; ButtonAddFolder.IsEnabled = false; loader = Task.Factory.StartNew(() => LoadDirectories(options)); }
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); } } }
private void LoadDirectories(DirectoryLoadOptions options) { AddFolderToPlayList(options, options.RootPath); Dispatcher.Invoke(FixFolderButtons); }