using FileManager_UWP.Model; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Security.Authentication; using System.Text; using System.Threading.Tasks; using Windows.Data.Json; using Windows.Devices.Custom; using Windows.Storage; using Windows.Storage.FileProperties; using Windows.Web.Http.Headers; using Type = FileManager_UWP.Model.Type; namespace FileManager_UWP.Service { internal interface IFileService { /// /// 获得可显示的目录 /// /// 路径 /// 文件和文件夹列表 Task> GetDisplayFileFolderList(string path); } /// /// 负责提供本地文件及文件夹访问服务 /// class FileService : IFileService { /// /// 获得普通文件夹中的文件 /// /// /// private async Task> GetRegularFilesAsync(string path) { StorageFolder folder = null; try { folder = await StorageFolder.GetFolderFromPathAsync(path); } catch (FileNotFoundException e) { Debug.WriteLine(e.Message); throw; } catch (AuthenticationException e) { Debug.WriteLine(e.Message); throw; } // 打开文件夹 List displayFileFolderItems = new List {await DisplayableFolder.GetParentAsync(folder)}; // 读取配置文件 string confPath = folder.Path; if (confPath.EndsWith('\\')) confPath += ".awesomefilemanager"; else confPath += "\\.awesomefilemanager"; try { StorageFile confFile = await StorageFile.GetFileFromPathAsync(confPath); string jsonString = await FileIO.ReadTextAsync(confFile); JsonObject jsonObject = JsonObject.Parse(jsonString); JsonArray virtualFolders = jsonObject.GetNamedArray("virtual_folders"); foreach (var jsonValue in virtualFolders) { var virtualFolder = jsonValue.GetObject(); displayFileFolderItems.Add(new DisplayableSpecial( virtualFolder.GetNamedString("name"), "", Type.VirtualFolder, await IconServer.GetFolderIcon(ThumbnailMode.ListView, 32))); } } catch (FileNotFoundException) { Debug.WriteLine("no configure file in " + confPath); } IReadOnlyList folders = await folder.GetFoldersAsync(); IReadOnlyList files = await folder.GetFilesAsync(); //displayFileFolderItems.AddRange(folders // .Select(async i => await DisplayFileFolderItem.GetInstance(i)) // .Select(i => i.Result) //); //displayFileFolderItems.AddRange(files // .Select(async i => await DisplayFileFolderItem.GetInstance(i)) // .Select(i => i.Result) //); foreach (var file in folders) { displayFileFolderItems.Add( await DisplayableFolder.GetInstanceAsync(file)); } foreach (var file in files) { displayFileFolderItems.Add( await DisplayableFile.GetInstanceAsync(file)); } return displayFileFolderItems; } /// /// 获得磁盘驱动器列表 /// /// private async Task> GetDiskDrivesAsync() { var drives = System.IO.DriveInfo.GetDrives(); List ans = new List(); foreach (var d in drives) { ans.Add(await DisplayableDisk.GetInstance(d)); } return ans; } /// /// 获得可显示的目录 /// /// 路径 /// 文件和文件夹列表 public async Task> GetDisplayFileFolderList(string path) { if (path == "/") return await GetDiskDrivesAsync(); return await GetRegularFilesAsync(path); } } }