Refresh SharpCompress library

This commit is contained in:
Paddy Xu
2017-06-03 14:14:25 +03:00
parent fb394288dd
commit 8da5f7c0d4
5 changed files with 40 additions and 21 deletions

View File

@@ -4,6 +4,8 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Windows.Controls; using System.Windows.Controls;
using SharpCompress.Archives; using SharpCompress.Archives;
using SharpCompress.Common;
using SharpCompress.Readers;
namespace QuickLook.Plugin.ArchiveViewer namespace QuickLook.Plugin.ArchiveViewer
{ {
@@ -13,7 +15,6 @@ namespace QuickLook.Plugin.ArchiveViewer
public partial class ArchiveInfoPanel : UserControl, IDisposable public partial class ArchiveInfoPanel : UserControl, IDisposable
{ {
private readonly Dictionary<string, ArchiveFileEntry> _fileEntries = new Dictionary<string, ArchiveFileEntry>(); private readonly Dictionary<string, ArchiveFileEntry> _fileEntries = new Dictionary<string, ArchiveFileEntry>();
private bool _solid;
private ulong _totalZippedSize; private ulong _totalZippedSize;
private string _type; private string _type;
@@ -30,6 +31,7 @@ namespace QuickLook.Plugin.ArchiveViewer
{ {
GC.SuppressFinalize(this); GC.SuppressFinalize(this);
_fileEntries.Clear();
fileListView.Dispose(); fileListView.Dispose();
} }
@@ -40,6 +42,8 @@ namespace QuickLook.Plugin.ArchiveViewer
private void LoadArchive(string path) private void LoadArchive(string path)
{ {
_totalZippedSize = (ulong) new FileInfo(path).Length;
LoadItemsFromArchive(path); LoadItemsFromArchive(path);
var folders = -1; // do not count root node var folders = -1; // do not count root node
@@ -55,8 +59,6 @@ namespace QuickLook.Plugin.ArchiveViewer
sizeU += e.Value.Size; sizeU += e.Value.Size;
}); });
var s = _solid ? ", solid" : "";
string t; string t;
var d = folders != 0 ? $"{folders} folders" : string.Empty; var d = folders != 0 ? $"{folders} folders" : string.Empty;
var f = files != 0 ? $"{files} files" : string.Empty; var f = files != 0 ? $"{files} files" : string.Empty;
@@ -68,7 +70,7 @@ namespace QuickLook.Plugin.ArchiveViewer
t = $", {d}{f}"; t = $", {d}{f}";
archiveCount.Content = archiveCount.Content =
$"{_type} archive{s}{t}"; $"{_type} archive{t}";
archiveSizeC.Content = $"Compressed size {_totalZippedSize.ToPrettySize(2)}"; archiveSizeC.Content = $"Compressed size {_totalZippedSize.ToPrettySize(2)}";
archiveSizeU.Content = $"Uncompressed size {sizeU.ToPrettySize(2)}"; archiveSizeU.Content = $"Uncompressed size {sizeU.ToPrettySize(2)}";
} }
@@ -77,21 +79,36 @@ namespace QuickLook.Plugin.ArchiveViewer
{ {
using (var stream = File.OpenRead(path)) using (var stream = File.OpenRead(path))
{ {
var archive = ArchiveFactory.Open(stream); // https://github.com/adamhathcock/sharpcompress/blob/master/FORMATS.md says:
// The 7Zip format doesn't allow for reading as a forward-only stream so 7Zip is only supported through the Archive API
if (Path.GetExtension(path).ToLower() == ".7z")
{
var archive = ArchiveFactory.Open(stream);
_totalZippedSize = (ulong) archive.TotalSize; _type = archive.Type.ToString();
_solid = archive.IsSolid;
_type = archive.Type.ToString();
var root = new ArchiveFileEntry(Path.GetFileName(path), true); var root = new ArchiveFileEntry(Path.GetFileName(path), true);
_fileEntries.Add("", root); _fileEntries.Add("", root);
foreach (var entry in archive.Entries) foreach (var entry in archive.Entries)
ProcessByLevel(entry); ProcessByLevel(entry);
}
else
{
var reader = ReaderFactory.Open(stream);
_type = reader.ArchiveType.ToString();
var root = new ArchiveFileEntry(Path.GetFileName(path), true);
_fileEntries.Add("", root);
while (reader.MoveToNextEntry())
ProcessByLevel(reader.Entry);
}
} }
} }
private void ProcessByLevel(IArchiveEntry entry) private void ProcessByLevel(IEntry entry)
{ {
var pf = GetPathFragments(entry.Key); var pf = GetPathFragments(entry.Key);

View File

@@ -22,11 +22,14 @@ namespace QuickLook.Plugin.ArchiveViewer
switch (Path.GetExtension(path).ToLower()) switch (Path.GetExtension(path).ToLower())
{ {
case ".zip":
case ".rar": case ".rar":
case ".7z": case ".zip":
case ".gz":
case ".tar": case ".tar":
case ".gz":
case ".bz2":
case ".lz":
case ".xz":
case ".7z":
return true; return true;
default: default:

View File

@@ -52,8 +52,8 @@
<ItemGroup> <ItemGroup>
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" /> <Reference Include="PresentationFramework" />
<Reference Include="SharpCompress, Version=0.15.2.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL"> <Reference Include="SharpCompress, Version=0.17.0.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL">
<HintPath>..\..\packages\SharpCompress.0.15.2\lib\net45\SharpCompress.dll</HintPath> <HintPath>..\..\packages\SharpCompress.0.17.0\lib\net45\SharpCompress.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="SharpCompress" version="0.15.2" targetFramework="net452" /> <package id="SharpCompress" version="0.17.0" targetFramework="net462" />
</packages> </packages>

View File

@@ -19,7 +19,7 @@ You may ask, why you write this when there several alternatives available on the
Till now, QuickLook supports the preview of Till now, QuickLook supports the preview of
- Images: e.g. `.png`, `.jpg`, `.bmp`, `.gif`, `.psd` and Camera RAW formats - Images: e.g. `.png`, `.jpg`, `.bmp`, `.gif`, `.psd` and Camera RAW formats
- Compressed archives: `.zip`, `.rar`, `.7z` etc. - Compressed archives: `.zip`, `.rar`, `.tar.gz`, `.7z` etc.
- Pdf file - Pdf file
- All kinds of text files (determined by file content) - All kinds of text files (determined by file content)
- Microsoft Word (`.doc`, `.docx`), Excel (`.xls`, `.xlsx`) and PowerPoint (`.ppt`, `.pptx`) files (requires MS Office installation) - Microsoft Word (`.doc`, `.docx`), Excel (`.xls`, `.xlsx`) and PowerPoint (`.ppt`, `.pptx`) files (requires MS Office installation)