public static async Task <ListedItem> GetFile( WIN32_FIND_DATA findData, string pathRoot, string dateReturnFormat, AppServiceConnection connection, CancellationToken cancellationToken ) { var itemPath = Path.Combine(pathRoot, findData.cFileName); string itemName; if (App.AppSettings.ShowFileExtensions && !findData.cFileName.EndsWith(".lnk") && !findData.cFileName.EndsWith(".url")) { itemName = findData.cFileName; // never show extension for shortcuts } else { if (findData.cFileName.StartsWith(".")) { itemName = findData.cFileName; // Always show full name for dotfiles. } else { itemName = Path.GetFileNameWithoutExtension(itemPath); } } DateTime itemModifiedDate, itemCreatedDate, itemLastAccessDate; try { FileTimeToSystemTime(ref findData.ftLastWriteTime, out SYSTEMTIME systemModifiedDateOutput); itemModifiedDate = new DateTime( systemModifiedDateOutput.Year, systemModifiedDateOutput.Month, systemModifiedDateOutput.Day, systemModifiedDateOutput.Hour, systemModifiedDateOutput.Minute, systemModifiedDateOutput.Second, systemModifiedDateOutput.Milliseconds, DateTimeKind.Utc); FileTimeToSystemTime(ref findData.ftCreationTime, out SYSTEMTIME systemCreatedDateOutput); itemCreatedDate = new DateTime( systemCreatedDateOutput.Year, systemCreatedDateOutput.Month, systemCreatedDateOutput.Day, systemCreatedDateOutput.Hour, systemCreatedDateOutput.Minute, systemCreatedDateOutput.Second, systemCreatedDateOutput.Milliseconds, DateTimeKind.Utc); FileTimeToSystemTime(ref findData.ftLastAccessTime, out SYSTEMTIME systemLastAccessOutput); itemLastAccessDate = new DateTime( systemLastAccessOutput.Year, systemLastAccessOutput.Month, systemLastAccessOutput.Day, systemLastAccessOutput.Hour, systemLastAccessOutput.Minute, systemLastAccessOutput.Second, systemLastAccessOutput.Milliseconds, DateTimeKind.Utc); } catch (ArgumentException) { // Invalid date means invalid findData, do not add to list return(null); } long itemSizeBytes = findData.GetSize(); var itemSize = ByteSize.FromBytes(itemSizeBytes).ToBinaryString().ConvertSizeAbbreviation(); string itemType = "ItemTypeFile".GetLocalized(); string itemFileExtension = null; if (findData.cFileName.Contains('.')) { itemFileExtension = Path.GetExtension(itemPath); itemType = itemFileExtension.Trim('.') + " " + itemType; } bool itemFolderImgVis = false; bool itemThumbnailImgVis; bool itemEmptyImgVis; itemEmptyImgVis = true; itemThumbnailImgVis = false; if (cancellationToken.IsCancellationRequested) { return(null); } if (findData.cFileName.EndsWith(".lnk") || findData.cFileName.EndsWith(".url")) { if (connection != null) { var response = await connection.SendMessageAsync(new ValueSet() { { "Arguments", "FileOperation" }, { "fileop", "ParseLink" }, { "filepath", itemPath } }); // If the request was canceled return now if (cancellationToken.IsCancellationRequested) { return(null); } if (response.Status == AppServiceResponseStatus.Success && response.Message.ContainsKey("TargetPath")) { var isUrl = findData.cFileName.EndsWith(".url"); string target = (string)response.Message["TargetPath"]; bool containsFilesOrFolders = false; if ((bool)response.Message["IsFolder"]) { containsFilesOrFolders = FolderHelpers.CheckForFilesFolders(target); } bool isHidden = (((FileAttributes)findData.dwFileAttributes & FileAttributes.Hidden) == FileAttributes.Hidden); double opacity = 1; if (isHidden) { opacity = 0.4; } return(new ShortcutItem(null, dateReturnFormat) { PrimaryItemAttribute = (bool)response.Message["IsFolder"] ? StorageItemTypes.Folder : StorageItemTypes.File, FileExtension = itemFileExtension, IsHiddenItem = isHidden, Opacity = opacity, FileImage = null, LoadFileIcon = !(bool)response.Message["IsFolder"] && itemThumbnailImgVis, LoadUnknownTypeGlyph = !(bool)response.Message["IsFolder"] && !isUrl && itemEmptyImgVis, LoadFolderGlyph = (bool)response.Message["IsFolder"], ItemName = itemName, ItemDateModifiedReal = itemModifiedDate, ItemDateAccessedReal = itemLastAccessDate, ItemDateCreatedReal = itemCreatedDate, ItemType = isUrl ? "ShortcutWebLinkFileType".GetLocalized() : "ShortcutFileType".GetLocalized(), ItemPath = itemPath, FileSize = itemSize, FileSizeBytes = itemSizeBytes, TargetPath = target, Arguments = (string)response.Message["Arguments"], WorkingDirectory = (string)response.Message["WorkingDirectory"], RunAsAdmin = (bool)response.Message["RunAsAdmin"], IsUrl = isUrl, ContainsFilesOrFolders = containsFilesOrFolders }); } } } else { bool isHidden = (((FileAttributes)findData.dwFileAttributes & FileAttributes.Hidden) == FileAttributes.Hidden); double opacity = 1; if (isHidden) { opacity = 0.4; } return(new ListedItem(null, dateReturnFormat) { PrimaryItemAttribute = StorageItemTypes.File, FileExtension = itemFileExtension, LoadUnknownTypeGlyph = itemEmptyImgVis, FileImage = null, LoadFileIcon = itemThumbnailImgVis, LoadFolderGlyph = itemFolderImgVis, ItemName = itemName, IsHiddenItem = isHidden, Opacity = opacity, ItemDateModifiedReal = itemModifiedDate, ItemDateAccessedReal = itemLastAccessDate, ItemDateCreatedReal = itemCreatedDate, ItemType = itemType, ItemPath = itemPath, FileSize = itemSize, FileSizeBytes = itemSizeBytes }); } return(null); }
public static async Task <ListedItem> GetFolder( WIN32_FIND_DATA findData, string pathRoot, string dateReturnFormat, CancellationToken cancellationToken ) { if (cancellationToken.IsCancellationRequested) { return(null); } DateTime itemModifiedDate; DateTime itemCreatedDate; try { FileTimeToSystemTime(ref findData.ftLastWriteTime, out SYSTEMTIME systemModifiedTimeOutput); itemModifiedDate = new DateTime( systemModifiedTimeOutput.Year, systemModifiedTimeOutput.Month, systemModifiedTimeOutput.Day, systemModifiedTimeOutput.Hour, systemModifiedTimeOutput.Minute, systemModifiedTimeOutput.Second, systemModifiedTimeOutput.Milliseconds, DateTimeKind.Utc); FileTimeToSystemTime(ref findData.ftCreationTime, out SYSTEMTIME systemCreatedTimeOutput); itemCreatedDate = new DateTime( systemCreatedTimeOutput.Year, systemCreatedTimeOutput.Month, systemCreatedTimeOutput.Day, systemCreatedTimeOutput.Hour, systemCreatedTimeOutput.Minute, systemCreatedTimeOutput.Second, systemCreatedTimeOutput.Milliseconds, DateTimeKind.Utc); } catch (ArgumentException) { // Invalid date means invalid findData, do not add to list return(null); } var itemPath = Path.Combine(pathRoot, findData.cFileName); string itemName = await fileListCache.ReadFileDisplayNameFromCache(itemPath, cancellationToken); if (string.IsNullOrEmpty(itemName)) { itemName = findData.cFileName; } bool isHidden = (((FileAttributes)findData.dwFileAttributes & FileAttributes.Hidden) == FileAttributes.Hidden); double opacity = 1; if (isHidden) { opacity = 0.4; } return(new ListedItem(null, dateReturnFormat) { PrimaryItemAttribute = StorageItemTypes.Folder, ItemName = itemName, ItemDateModifiedReal = itemModifiedDate, ItemDateCreatedReal = itemCreatedDate, ItemType = "FileFolderListItem".GetLocalized(), LoadFolderGlyph = true, FileImage = null, IsHiddenItem = isHidden, Opacity = opacity, LoadFileIcon = false, ItemPath = itemPath, LoadUnknownTypeGlyph = false, FileSize = null, FileSizeBytes = 0, ContainsFilesOrFolders = FolderHelpers.CheckForFilesFolders(itemPath), //FolderTooltipText = tooltipString, }); }