Merge resolution
This commit is contained in:
commit
40206b5ad3
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<UniversalEditor Version="4.0">
|
||||
<Associations>
|
||||
<Association>
|
||||
<Filters>
|
||||
<Filter Title="Microsoft Cabinet archive">
|
||||
<FileNameFilters>
|
||||
<FileNameFilter>*.cab</FileNameFilter>
|
||||
</FileNameFilters>
|
||||
<MagicByteSequences>
|
||||
<MagicByteSequence>
|
||||
<MagicByte Type="String">MSCF</MagicByte>
|
||||
</MagicByteSequence>
|
||||
</MagicByteSequences>
|
||||
</Filter>
|
||||
</Filters>
|
||||
<ObjectModels>
|
||||
<ObjectModel TypeName="UniversalEditor.ObjectModels.FileSystem.FileSystemObjectModel" />
|
||||
</ObjectModels>
|
||||
<DataFormats>
|
||||
<DataFormat TypeName="UniversalEditor.DataFormats.FileSystem.Microsoft.Cabinet.CABDataFormat" />
|
||||
</DataFormats>
|
||||
</Association>
|
||||
</Associations>
|
||||
</UniversalEditor>
|
||||
@ -111,6 +111,7 @@
|
||||
<Content Include="Extensions\FileSystem\Associations\IZArc.xml" />
|
||||
<Content Include="Extensions\FileSystem\Associations\LHA.xml" />
|
||||
<Content Include="Extensions\FileSystem\Associations\Microsoft\CompoundDocument.xml" />
|
||||
<Content Include="Extensions\FileSystem\Associations\Microsoft\Cabinet.xml" />
|
||||
<Content Include="Extensions\FileSystem\Associations\Microsoft\MSCompressed.xml" />
|
||||
<Content Include="Extensions\FileSystem\Associations\NeroDiscImage.xml" />
|
||||
<Content Include="Extensions\FileSystem\Associations\PKZip.xml" />
|
||||
|
||||
@ -479,5 +479,16 @@ namespace UniversalEditor.UserInterface.WindowsForms
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Image GetThemeImage(string path)
|
||||
{
|
||||
string fileName = String.Join(System.IO.Path.DirectorySeparatorChar.ToString(), new string[]
|
||||
{
|
||||
"Editors",
|
||||
this.GetType().FullName,
|
||||
path
|
||||
});
|
||||
return AwesomeControls.Theming.Theme.CurrentTheme.GetImage(fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -38,6 +38,9 @@ namespace UniversalEditor.UserInterface.WindowsForms.Editors
|
||||
lv.SmallImageList = base.SmallImageList;
|
||||
tv.ImageList = base.SmallImageList;
|
||||
|
||||
txtFilter.BackColor = AwesomeControls.Theming.Theme.CurrentTheme.ColorTable.WindowBackground;
|
||||
txtFilter.ForeColor = AwesomeControls.Theming.Theme.CurrentTheme.ColorTable.WindowForeground;
|
||||
|
||||
mnuTreeViewContextExpand.Font = new Font(mnuTreeViewContextExpand.Font, FontStyle.Bold);
|
||||
|
||||
lv.Columns.Add("Name", 300);
|
||||
@ -48,7 +51,7 @@ namespace UniversalEditor.UserInterface.WindowsForms.Editors
|
||||
|
||||
ActionMenuItem mnuFileSystem = MenuBar.Items.Add("mnuFileSystem", "File&system", null, 4);
|
||||
mnuFileSystem.Items.Add("mnuFileSystemAddFile", "Add &File...", AddFile_Click);
|
||||
mnuFileSystem.Items.Add("mnuFileSystemAddFolder", "Add Fol&der...", AddFolder_Click);
|
||||
mnuFileSystem.Items.Add("mnuFileSystemAddFolder", "Add Fol&der...", AddExistingFolder_Click);
|
||||
mnuFileSystem.Items.AddSeparator();
|
||||
mnuFileSystem.Items.Add("mnuFileSystemUndelete", "&Undelete");
|
||||
mnuFileSystem.Items.AddSeparator();
|
||||
@ -65,10 +68,14 @@ namespace UniversalEditor.UserInterface.WindowsForms.Editors
|
||||
tbFileSystem.Items.Add(mnuFileSystem.Items["mnuFileSystemExtractAll"]);
|
||||
tbFileSystem.Items.AddSeparator();
|
||||
tbFileSystem.Items.Add(mnuFileSystem.Items["mnuFileSystemComment"]);
|
||||
}
|
||||
|
||||
private void AddFolder_Click(object sender, EventArgs e)
|
||||
{
|
||||
mnuTreeViewContextAddNewItem.Image = GetThemeImage("ContextMenu/AddNewItem.png");
|
||||
mnuTreeViewContextAddExistingItem.Image = GetThemeImage("ContextMenu/AddExistingItem.png");
|
||||
mnuTreeViewContextAddNewFolder.Image = GetThemeImage("ContextMenu/AddNewFolder.png");
|
||||
|
||||
mnuListViewContextAddNewItem.Image = GetThemeImage("ContextMenu/AddNewItem.png");
|
||||
mnuListViewContextAddExistingItem.Image = GetThemeImage("ContextMenu/AddExistingItem.png");
|
||||
mnuListViewContextAddNewFolder.Image = GetThemeImage("ContextMenu/AddNewFolder.png");
|
||||
}
|
||||
|
||||
private void Comment_Click(object sender, EventArgs e)
|
||||
@ -266,7 +273,9 @@ namespace UniversalEditor.UserInterface.WindowsForms.Editors
|
||||
|
||||
private void RecursiveLoadListViewFolder(Folder folder, AwesomeControls.ListView.ListViewItem parent)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(txtFilter.Text) && (folder.Name.ToLower().Contains(txtFilter.Text.ToLower()) || !folder.Name.ToLower().Match(txtFilter.Text.ToLower()))) return;
|
||||
if (String.IsNullOrEmpty(txtFilter.Text) || !(folder.Name.ToLower().Contains(txtFilter.Text.ToLower())
|
||||
/* || !folder.Name.ToLower().Match(txtFilter.Text.ToLower()) */
|
||||
)) return;
|
||||
|
||||
AwesomeControls.ListView.ListViewItem lvi = new AwesomeControls.ListView.ListViewItem();
|
||||
lvi.Text = folder.Name;
|
||||
@ -766,8 +775,8 @@ namespace UniversalEditor.UserInterface.WindowsForms.Editors
|
||||
{
|
||||
if (lv.SelectedItems.Count == 0)
|
||||
{
|
||||
string fileName = null;
|
||||
if (ObjectModel.Accessor != null) fileName = ObjectModel.Accessor.GetFileName();
|
||||
string fileName = String.Empty;
|
||||
if (ObjectModel != null && ObjectModel.Accessor != null) fileName = ObjectModel.Accessor.GetFileName();
|
||||
if (!String.IsNullOrEmpty(fileName) && System.IO.File.Exists(fileName))
|
||||
{
|
||||
File file = new File();
|
||||
@ -867,6 +876,7 @@ namespace UniversalEditor.UserInterface.WindowsForms.Editors
|
||||
{
|
||||
System.Media.SystemSounds.Beep.Play();
|
||||
}
|
||||
RecursiveUpdateTreeView();
|
||||
UpdateListView();
|
||||
}
|
||||
}
|
||||
@ -880,10 +890,94 @@ namespace UniversalEditor.UserInterface.WindowsForms.Editors
|
||||
if (lv.SelectedItems[0].Data is Folder)
|
||||
{
|
||||
mvarCurrentFolder = (lv.SelectedItems[0].Data as Folder);
|
||||
|
||||
RecursiveUpdateTreeView();
|
||||
UpdateListView();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void AddNewFolder_Click(object sender, EventArgs e)
|
||||
{
|
||||
FileSystemObjectModel fsom = (ObjectModel as FileSystemObjectModel);
|
||||
if (fsom == null) return;
|
||||
|
||||
if (mvarCurrentFolder == null)
|
||||
{
|
||||
fsom.Folders.Add(fsom.GetNewFolderName());
|
||||
}
|
||||
else
|
||||
{
|
||||
mvarCurrentFolder.Folders.Add(mvarCurrentFolder.GetNewFolderName());
|
||||
}
|
||||
|
||||
RecursiveUpdateTreeView();
|
||||
UpdateListView();
|
||||
}
|
||||
|
||||
private void AddExistingFolder_Click(object sender, EventArgs e)
|
||||
{
|
||||
FileSystemObjectModel fsom = (ObjectModel as FileSystemObjectModel);
|
||||
if (fsom == null) return;
|
||||
|
||||
AwesomeControls.NativeDialogs.FolderBrowserDialog dlg = new AwesomeControls.NativeDialogs.FolderBrowserDialog();
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
string path = dlg.SelectedPath;
|
||||
string name = System.IO.Path.GetFileName(path);
|
||||
|
||||
Folder f = new Folder();
|
||||
f.Name = name;
|
||||
|
||||
string[] files = System.IO.Directory.GetFiles(path, "*.*", System.IO.SearchOption.AllDirectories);
|
||||
foreach (string file in files)
|
||||
{
|
||||
string fileName = file.Substring(path.Length + 1);
|
||||
f.AddFile(fileName, System.IO.File.ReadAllBytes(file));
|
||||
}
|
||||
|
||||
if (mvarCurrentFolder == null)
|
||||
{
|
||||
fsom.Folders.Add(f);
|
||||
}
|
||||
else
|
||||
{
|
||||
mvarCurrentFolder.Folders.Add(f);
|
||||
}
|
||||
|
||||
RecursiveUpdateTreeView();
|
||||
UpdateListView();
|
||||
}
|
||||
}
|
||||
|
||||
private void AddExistingFolderToCurrent_Click(object sender, EventArgs e)
|
||||
{
|
||||
FileSystemObjectModel fsom = (ObjectModel as FileSystemObjectModel);
|
||||
if (fsom == null) return;
|
||||
|
||||
AwesomeControls.NativeDialogs.FolderBrowserDialog dlg = new AwesomeControls.NativeDialogs.FolderBrowserDialog();
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
string path = dlg.SelectedPath;
|
||||
string name = System.IO.Path.GetDirectoryName(path);
|
||||
|
||||
string[] files = System.IO.Directory.GetFiles(path, "*.*", System.IO.SearchOption.AllDirectories);
|
||||
foreach (string file in files)
|
||||
{
|
||||
if (mvarCurrentFolder == null)
|
||||
{
|
||||
fsom.AddFile(file, System.IO.File.ReadAllBytes(file));
|
||||
}
|
||||
else
|
||||
{
|
||||
mvarCurrentFolder.AddFile(file, System.IO.File.ReadAllBytes(file));
|
||||
}
|
||||
}
|
||||
|
||||
RecursiveUpdateTreeView();
|
||||
UpdateListView();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -162,265 +162,265 @@
|
||||
<data name="tsbAddFiles.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
RajjsbbqaQAAAABJRU5ErkJggg==
|
||||
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
|
||||
oROo0ThvcVEAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="tsbAddFolder.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
pzBh7wAAAABJRU5ErkJggg==
|
||||
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
|
||||
LAAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="tsbExtract.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
<data name="tsbUndelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
9Rn1E2/9AAAAAElFTkSuQmCC
|
||||
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
|
||||
9NRffyNGAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
@ -39,30 +39,67 @@ namespace UniversalEditor
|
||||
case PlatformID.Win32Windows:
|
||||
case PlatformID.WinCE:
|
||||
{
|
||||
string strSize = "32x32";
|
||||
IconMethods.IconSize icnSize = IconMethods.IconSize.Large;
|
||||
|
||||
if (iml.ImageSize.Width == 16 && iml.ImageSize.Height == 16)
|
||||
{
|
||||
Icon iconFile = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 0, IconMethods.IconSize.Small);
|
||||
iml.Images.Add("generic-file", iconFile);
|
||||
Icon iconDocument = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 1, IconMethods.IconSize.Small);
|
||||
iml.Images.Add("generic-document", iconDocument);
|
||||
Icon iconApplication = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 2, IconMethods.IconSize.Small);
|
||||
iml.Images.Add("generic-application", iconApplication);
|
||||
Icon iconFolderClosed = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 3, IconMethods.IconSize.Small);
|
||||
iml.Images.Add("generic-folder-closed", iconFolderClosed);
|
||||
Icon iconFolderOpen = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 4, IconMethods.IconSize.Small);
|
||||
iml.Images.Add("generic-folder-open", iconFolderOpen);
|
||||
strSize = "16x16";
|
||||
icnSize = IconMethods.IconSize.Small;
|
||||
}
|
||||
|
||||
Image imageFile = AwesomeControls.Theming.Theme.CurrentTheme.GetImage("ImageList/" + strSize + "/generic-file.png");
|
||||
if (imageFile != null)
|
||||
{
|
||||
iml.Images.Add("generic-file", imageFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
Icon iconFile = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 0, IconMethods.IconSize.Large);
|
||||
Icon iconFile = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 0, icnSize);
|
||||
iml.Images.Add("generic-file", iconFile);
|
||||
Icon iconDocument = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 1, IconMethods.IconSize.Large);
|
||||
}
|
||||
|
||||
Image imageDocument = AwesomeControls.Theming.Theme.CurrentTheme.GetImage("ImageList/" + strSize + "/generic-document.png");
|
||||
if (imageDocument != null)
|
||||
{
|
||||
iml.Images.Add("generic-document", imageDocument);
|
||||
}
|
||||
else
|
||||
{
|
||||
Icon iconDocument = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 1, icnSize);
|
||||
iml.Images.Add("generic-document", iconDocument);
|
||||
Icon iconApplication = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 2, IconMethods.IconSize.Large);
|
||||
}
|
||||
|
||||
Image imageApplication = AwesomeControls.Theming.Theme.CurrentTheme.GetImage("ImageList/" + strSize + "/generic-application.png");
|
||||
if (imageApplication != null)
|
||||
{
|
||||
iml.Images.Add("generic-application", imageApplication);
|
||||
}
|
||||
else
|
||||
{
|
||||
Icon iconApplication = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 2, icnSize);
|
||||
iml.Images.Add("generic-application", iconApplication);
|
||||
Icon iconFolderClosed = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 3, IconMethods.IconSize.Large);
|
||||
}
|
||||
|
||||
Image imageFolderClosed = AwesomeControls.Theming.Theme.CurrentTheme.GetImage("ImageList/" + strSize + "/generic-folder-closed.png");
|
||||
if (imageFolderClosed != null)
|
||||
{
|
||||
iml.Images.Add("generic-folder-closed", imageFolderClosed);
|
||||
}
|
||||
else
|
||||
{
|
||||
Icon iconFolderClosed = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 3, icnSize);
|
||||
iml.Images.Add("generic-folder-closed", iconFolderClosed);
|
||||
Icon iconFolderOpen = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 4, IconMethods.IconSize.Large);
|
||||
}
|
||||
|
||||
Image imageFolderOpen = AwesomeControls.Theming.Theme.CurrentTheme.GetImage("ImageList/" + strSize + "/generic-folder-open.png");
|
||||
if (imageFolderOpen != null)
|
||||
{
|
||||
iml.Images.Add("generic-folder-open", imageFolderOpen);
|
||||
}
|
||||
else
|
||||
{
|
||||
Icon iconFolderOpen = IconMethods.ExtractAssociatedIcon(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "shell32.dll", 4, icnSize);
|
||||
iml.Images.Add("generic-folder-open", iconFolderOpen);
|
||||
}
|
||||
return;
|
||||
|
||||
@ -88,7 +88,9 @@ namespace UniversalEditor.ObjectModels.FileSystem
|
||||
{
|
||||
if (mvarData == null && DataRequest == null)
|
||||
{
|
||||
throw new InvalidOperationException("Data is not represented as a byte array and data request is not handled");
|
||||
// throw new InvalidOperationException("Data is not represented as a byte array and data request is not handled");
|
||||
Console.WriteLine("DataRequest: " + mvarName + ": Data is not represented as a byte array and data request is not handled");
|
||||
return mvarData;
|
||||
}
|
||||
else if (mvarData == null && DataRequest != null)
|
||||
{
|
||||
|
||||
@ -219,7 +219,13 @@ namespace UniversalEditor.ObjectModels.FileSystem
|
||||
return parent.Folders.Add(path[path.Length - 1]);
|
||||
}
|
||||
|
||||
public File AddFile(string name)
|
||||
/// <summary>
|
||||
/// Adds a <see cref="File" /> to this <see cref="FileSystemObjectModel" />, building the parent directory hierarchy as appropriate.
|
||||
/// </summary>
|
||||
/// <param name="name">The full path of the <see cref="File" /> to create, including any parent directories.</param>
|
||||
/// <param name="fileData"></param>
|
||||
/// <returns></returns>
|
||||
public File AddFile(string name, byte[] fileData = null)
|
||||
{
|
||||
string[] path = name.Split(mvarPathSeparators, StringSplitOptions.None);
|
||||
Folder parent = null;
|
||||
@ -254,20 +260,21 @@ namespace UniversalEditor.ObjectModels.FileSystem
|
||||
}
|
||||
}
|
||||
|
||||
File file = new File();
|
||||
file.Name = path[path.Length - 1];
|
||||
if (fileData != null)
|
||||
{
|
||||
file.SetDataAsByteArray(fileData);
|
||||
}
|
||||
if (parent == null)
|
||||
{
|
||||
File file = new File();
|
||||
file.Name = path[path.Length - 1];
|
||||
mvarFiles.Add(file);
|
||||
return file;
|
||||
}
|
||||
else
|
||||
{
|
||||
File file = new File();
|
||||
file.Name = path[path.Length - 1];
|
||||
parent.Files.Add(file);
|
||||
return file;
|
||||
}
|
||||
return file;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -388,5 +395,43 @@ namespace UniversalEditor.ObjectModels.FileSystem
|
||||
GetAllObjectsRecursively(folder1, ref files, parentPath + pathSeparator + folder1.Name, pathSeparator, searchPattern);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the next available "New Folder" name for the given <see cref="IFileSystemContainer" />.
|
||||
/// </summary>
|
||||
/// <returns>A string "New Folder" if there are no other "New Folder"s in the given <see cref="IFileSystemContainer" />; otherwise, a string "New Folder (n)" where N is the number of "New Folder"s in the given <see cref="IFileSystemContainer" /> plus one.</returns>
|
||||
public static string GetNewFolderName(IFileSystemContainer container)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
foreach (Folder f in container.Folders)
|
||||
{
|
||||
if (f.Name.StartsWith("New Folder (") && f.Name.EndsWith(")"))
|
||||
{
|
||||
string strIntPart = f.Name.Substring("New Folder (".Length, f.Name.Length - "New Folder (".Length - 1);
|
||||
int intPart = 0;
|
||||
if (Int32.TryParse(strIntPart, out intPart))
|
||||
{
|
||||
if (intPart > count) count = intPart;
|
||||
}
|
||||
}
|
||||
else if (f.Name == "New Folder")
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
if (count == 0) return "New Folder";
|
||||
return "New Folder (" + (count + 1).ToString() + ")";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the next available "New Folder" name for this <see cref="FileSystemObjectModel" />.
|
||||
/// </summary>
|
||||
/// <returns>A string "New Folder" if there are no other "New Folder"s in this <see cref="FileSystemObjectModel" />; otherwise, a string "New Folder (n)" where N is the number of "New Folder"s in this <see cref="FileSystemObjectModel" /> plus one.</returns>
|
||||
public string GetNewFolderName()
|
||||
{
|
||||
return FileSystemObjectModel.GetNewFolderName(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -93,6 +93,15 @@ namespace UniversalEditor.ObjectModels.FileSystem
|
||||
private File.FileCollection mvarFiles = new File.FileCollection();
|
||||
public File.FileCollection Files { get { return mvarFiles; } }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the next available "New Folder" name for this folder.
|
||||
/// </summary>
|
||||
/// <returns>A string "New Folder" if there are no other "New Folder"s in this folder; otherwise, a string "New Folder (n)" where N is the number of "New Folder"s in this folder plus one.</returns>
|
||||
public string GetNewFolderName()
|
||||
{
|
||||
return FileSystemObjectModel.GetNewFolderName(this);
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
Folder clone = new Folder();
|
||||
@ -127,5 +136,54 @@ namespace UniversalEditor.ObjectModels.FileSystem
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
public File AddFile(string fileName, byte[] fileData)
|
||||
{
|
||||
string[] path = fileName.Split(new string[] { System.IO.Path.DirectorySeparatorChar.ToString(), System.IO.Path.AltDirectorySeparatorChar.ToString() }, StringSplitOptions.None);
|
||||
Folder parent = null;
|
||||
for (int i = 0; i < path.Length - 1; i++)
|
||||
{
|
||||
if (parent == null)
|
||||
{
|
||||
if (mvarFolders.Contains(path[i]))
|
||||
{
|
||||
parent = mvarFolders[path[i]];
|
||||
}
|
||||
else
|
||||
{
|
||||
parent = mvarFolders.Add(path[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (parent.Folders.Contains(path[i]))
|
||||
{
|
||||
parent = parent.Folders[path[i]];
|
||||
}
|
||||
else
|
||||
{
|
||||
parent = parent.Folders.Add(path[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (parent == null)
|
||||
{
|
||||
throw new System.IO.DirectoryNotFoundException();
|
||||
}
|
||||
}
|
||||
|
||||
File file = new File();
|
||||
file.Name = path[path.Length - 1];
|
||||
if (fileData != null) file.SetDataAsByteArray(fileData);
|
||||
if (parent == null)
|
||||
{
|
||||
mvarFiles.Add(file);
|
||||
}
|
||||
else
|
||||
{
|
||||
parent.Files.Add(file);
|
||||
}
|
||||
return file;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,5 +9,6 @@ namespace UniversalEditor.ObjectModels.FileSystem
|
||||
{
|
||||
File.FileCollection Files { get; }
|
||||
Folder.FolderCollection Folders { get; }
|
||||
string GetNewFolderName();
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@ namespace UniversalEditor.DataFormats.Project.Microsoft.VisualStudio
|
||||
{
|
||||
if (_dfr == null)
|
||||
{
|
||||
_dfr = base.MakeReferenceInternal();
|
||||
_dfr = new DataFormatReference(GetType());
|
||||
_dfr.Capabilities.Add(typeof(ProjectObjectModel), DataFormatCapabilities.All);
|
||||
}
|
||||
return _dfr;
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace UniversalEditor.DataFormats.FileSystem.Microsoft.Cabinet
|
||||
{
|
||||
public enum CABCompressionMethod : ushort
|
||||
{
|
||||
None = 0,
|
||||
MSZIP = 1,
|
||||
LZX = 5379
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,375 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using UniversalEditor.Accessors;
|
||||
using UniversalEditor.Compression;
|
||||
using UniversalEditor.IO;
|
||||
using UniversalEditor.ObjectModels.FileSystem;
|
||||
|
||||
namespace UniversalEditor.DataFormats.FileSystem.Microsoft.Cabinet
|
||||
{
|
||||
public class CABDataFormat : DataFormat
|
||||
{
|
||||
private static DataFormatReference _dfr = null;
|
||||
protected override DataFormatReference MakeReferenceInternal()
|
||||
{
|
||||
if (_dfr == null)
|
||||
{
|
||||
_dfr = base.MakeReferenceInternal();
|
||||
_dfr.Capabilities.Add(typeof(FileSystemObjectModel), DataFormatCapabilities.All);
|
||||
_dfr.Sources.Add("http://msdn.microsoft.com/en-us/library/bb267310.aspx#struct_spec");
|
||||
|
||||
_dfr.ExportOptions.Add(new CustomOptionNumber("CabinetReservedAreaSize", "Per-&cabinet reserved area size:", 0, 0, UInt16.MaxValue));
|
||||
_dfr.ExportOptions.Add(new CustomOptionNumber("FolderReservedAreaSize", "Per-&folder reserved area size:", 0, 0, Byte.MaxValue));
|
||||
_dfr.ExportOptions.Add(new CustomOptionNumber("DatablockReservedAreaSize", "Per-&datablock reserved area size:", 0, 0, Byte.MaxValue));
|
||||
|
||||
_dfr.ExportOptions.Add(new CustomOptionText("NextCabinetName", "&Next cabinet file name:"));
|
||||
_dfr.ExportOptions.Add(new CustomOptionText("NextDiskName", "Ne&xt cabinet disk name:"));
|
||||
_dfr.ExportOptions.Add(new CustomOptionText("PreviousCabinetName", "&Previous cabinet file name:"));
|
||||
_dfr.ExportOptions.Add(new CustomOptionText("PreviousDiskName", "Pre&vious cabinet disk name:"));
|
||||
}
|
||||
return _dfr;
|
||||
}
|
||||
|
||||
private ushort mvarCabinetReservedAreaSize = 0;
|
||||
public ushort CabinetReservedAreaSize { get { return mvarCabinetReservedAreaSize; } set { mvarCabinetReservedAreaSize = value; } }
|
||||
|
||||
private byte mvarFolderReservedAreaSize = 0;
|
||||
public byte FolderReservedAreaSize { get { return mvarFolderReservedAreaSize; } set { mvarFolderReservedAreaSize = value; } }
|
||||
|
||||
private byte mvarDatablockReservedAreaSize = 0;
|
||||
public byte DatablockReservedAreaSize { get { return mvarDatablockReservedAreaSize; } set { mvarDatablockReservedAreaSize = value; } }
|
||||
|
||||
private string mvarNextCabinetName = String.Empty;
|
||||
public string NextCabinetName { get { return mvarNextCabinetName; } set { mvarNextCabinetName = value; } }
|
||||
|
||||
private string mvarNextDiskName = String.Empty;
|
||||
public string NextDiskName { get { return mvarNextDiskName; } set { mvarNextDiskName = value; } }
|
||||
|
||||
private string mvarPreviousCabinetName = String.Empty;
|
||||
public string PreviousCabinetName { get { return mvarPreviousCabinetName; } set { mvarPreviousCabinetName = value; } }
|
||||
|
||||
private string mvarPreviousDiskName = String.Empty;
|
||||
public string PreviousDiskName { get { return mvarPreviousDiskName; } set { mvarPreviousDiskName = value; } }
|
||||
|
||||
protected override void LoadInternal(ref ObjectModel objectModel)
|
||||
{
|
||||
FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel);
|
||||
|
||||
Reader br = base.Accessor.Reader;
|
||||
|
||||
Internal.CFHEADER cfheader = ReadCFHEADER(br);
|
||||
mvarCabinetReservedAreaSize = cfheader.cabinetReservedAreaSize;
|
||||
mvarDatablockReservedAreaSize = cfheader.datablockReservedAreaSize;
|
||||
mvarFolderReservedAreaSize = cfheader.folderReservedAreaSize;
|
||||
|
||||
List<Internal.CFFOLDER> folders = new List<Internal.CFFOLDER>();
|
||||
for (ushort cfFolderID = 0; cfFolderID < cfheader.folderCount; cfFolderID++)
|
||||
{
|
||||
Internal.CFFOLDER cffolder = ReadCFFOLDER(br, cfheader);
|
||||
folders.Add(cffolder);
|
||||
}
|
||||
for (ushort cfFileID = 0; cfFileID < cfheader.fileCount; cfFileID++)
|
||||
{
|
||||
Internal.CFFILE cffile = ReadCFFILE(br);
|
||||
File file = fsom.AddFile(cffile.name);
|
||||
file.Size = cffile.decompressedSize;
|
||||
file.Properties.Add("DecompressedSize", cffile.decompressedSize);
|
||||
file.Properties.Add("offset", cffile.offset);
|
||||
file.Properties.Add("folder", folders[cffile.folderIndex]);
|
||||
file.Properties.Add("reader", br);
|
||||
file.DataRequest += file_DataRequest;
|
||||
}
|
||||
}
|
||||
|
||||
private Internal.CFHEADER ReadCFHEADER(Reader br)
|
||||
{
|
||||
Internal.CFHEADER cfheader = new Internal.CFHEADER();
|
||||
cfheader.signature = br.ReadFixedLengthString(4); // cabinet file signature
|
||||
if (cfheader.signature != "MSCF") throw new InvalidDataFormatException("File does not begin with \"MSCF\"");
|
||||
|
||||
cfheader.reserved1 = br.ReadUInt32(); // reserved
|
||||
cfheader.cabinetFileSize = br.ReadUInt32(); // size of this cabinet file in bytes
|
||||
if (br.Accessor.Length != cfheader.cabinetFileSize) throw new DataCorruptedException("Stored cabinet length does not match actual file length");
|
||||
|
||||
cfheader.reserved2 = br.ReadUInt32(); // reserved
|
||||
cfheader.firstFileOffset = br.ReadUInt32(); // offset of the first CFFILE entry
|
||||
cfheader.reserved3 = br.ReadUInt32(); // reserved
|
||||
|
||||
cfheader.versionMinor = br.ReadByte(); // cabinet file format version, minor
|
||||
cfheader.versionMajor = br.ReadByte(); // cabinet file format version, major
|
||||
|
||||
cfheader.folderCount = br.ReadUInt16(); // number of CFFOLDER entries in this cabinet
|
||||
cfheader.fileCount = br.ReadUInt16(); // number of CFFILE entries in this cabinet
|
||||
|
||||
cfheader.flags = (CABFlags)br.ReadUInt16(); // cabinet file option indicators:
|
||||
|
||||
cfheader.setID = br.ReadUInt16(); // must be the same for all cabinets in a set
|
||||
cfheader.iCabinet = br.ReadUInt16(); // number of this cabinet file in a set
|
||||
|
||||
if ((cfheader.flags & CABFlags.HasReservedArea) == CABFlags.HasReservedArea)
|
||||
{
|
||||
cfheader.cabinetReservedAreaSize = br.ReadUInt16(); // (optional) size of per-cabinet reserved area
|
||||
cfheader.folderReservedAreaSize = br.ReadByte(); // (optional) size of per-folder reserved area
|
||||
cfheader.datablockReservedAreaSize = br.ReadByte(); // (optional) size of per-datablock reserved area
|
||||
}
|
||||
|
||||
cfheader.reservedArea = br.ReadBytes(mvarCabinetReservedAreaSize); // (optional) per-cabinet reserved area
|
||||
|
||||
if ((cfheader.flags & CABFlags.HasPreviousCabinet) == CABFlags.HasPreviousCabinet)
|
||||
{
|
||||
cfheader.previousCabinetName = br.ReadNullTerminatedString(); /* (optional) name of previous cabinet file */
|
||||
cfheader.previousDiskName = br.ReadNullTerminatedString(); /* (optional) name of previous disk */
|
||||
}
|
||||
if ((cfheader.flags & CABFlags.HasNextCabinet) == CABFlags.HasNextCabinet)
|
||||
{
|
||||
cfheader.nextCabinetName = br.ReadNullTerminatedString(); /* (optional) name of next cabinet file */
|
||||
cfheader.nextDiskName = br.ReadNullTerminatedString(); /* (optional) name of next disk */
|
||||
}
|
||||
return cfheader;
|
||||
}
|
||||
private Internal.CFFILE ReadCFFILE(Reader br)
|
||||
{
|
||||
Internal.CFFILE cffile = new Internal.CFFILE();
|
||||
|
||||
cffile.decompressedSize = br.ReadUInt32();
|
||||
cffile.offset = br.ReadUInt32();
|
||||
cffile.folderIndex = br.ReadUInt16();
|
||||
|
||||
cffile.date = br.ReadUInt16();
|
||||
cffile.time = br.ReadUInt16();
|
||||
|
||||
cffile.attribs = br.ReadUInt16();
|
||||
cffile.name = br.ReadNullTerminatedString();
|
||||
return cffile;
|
||||
}
|
||||
private Internal.CFFOLDER ReadCFFOLDER(Reader br, Internal.CFHEADER cfheader)
|
||||
{
|
||||
Internal.CFFOLDER cffolder = new Internal.CFFOLDER();
|
||||
cffolder.firstDataBlockOffset = br.ReadUInt32(); // offset of the first CFDATA block in this folder
|
||||
cffolder.dataBlockCount = br.ReadUInt16(); // number of CFDATA blocks in this folder
|
||||
cffolder.compressionMethod = (CABCompressionMethod)br.ReadUInt16(); // compression type indicator
|
||||
if ((cfheader.flags & CABFlags.HasReservedArea) == CABFlags.HasReservedArea)
|
||||
{
|
||||
cffolder.reservedArea = br.ReadBytes(mvarFolderReservedAreaSize); // (optional) per-folder reserved area
|
||||
}
|
||||
return cffolder;
|
||||
}
|
||||
private Internal.CFDATA ReadCFDATA(Reader br)
|
||||
{
|
||||
Internal.CFDATA data = new Internal.CFDATA();
|
||||
data.checksum = br.ReadUInt32();
|
||||
data.compressedLength = br.ReadUInt16();
|
||||
data.decompressedLength = br.ReadUInt16();
|
||||
data.reservedArea = br.ReadBytes(mvarDatablockReservedAreaSize);
|
||||
data.data = br.ReadBytes(data.compressedLength);
|
||||
return data;
|
||||
}
|
||||
|
||||
private void file_DataRequest(object sender, DataRequestEventArgs e)
|
||||
{
|
||||
File file = (sender as File);
|
||||
uint decompressedSize = (uint)file.Properties["DecompressedSize"];
|
||||
uint offset = (uint)file.Properties["offset"];
|
||||
Reader br = (Reader)file.Properties["reader"];
|
||||
|
||||
Internal.CFFOLDER cffolder = (Internal.CFFOLDER)file.Properties["folder"];
|
||||
br.Accessor.Position = cffolder.firstDataBlockOffset;
|
||||
|
||||
byte[] decompressedData = new byte[decompressedSize];
|
||||
int j = 0;
|
||||
for (int i = 0; i < cffolder.dataBlockCount; i++)
|
||||
{
|
||||
Internal.CFDATA data = ReadCFDATA(br);
|
||||
switch (cffolder.compressionMethod)
|
||||
{
|
||||
case CABCompressionMethod.None:
|
||||
{
|
||||
// no compression
|
||||
file.Properties["CompressionMethod"] = CompressionMethod.None;
|
||||
Array.Copy(data.data, offset, decompressedData, j, decompressedData.Length);
|
||||
j += decompressedData.Length;
|
||||
break;
|
||||
}
|
||||
case CABCompressionMethod.MSZIP:
|
||||
{
|
||||
Reader br1 = new Reader(new MemoryAccessor(data.data));
|
||||
byte mszipSig1 = br1.ReadByte();
|
||||
byte mszipSig2 = br1.ReadByte();
|
||||
|
||||
byte[] rest = br1.ReadToEnd();
|
||||
byte[] decompressedDataLocal = CompressionModule.FromKnownCompressionMethod(CompressionMethod.Deflate).Decompress(rest);
|
||||
Array.Copy(decompressedDataLocal, offset, decompressedData, j, decompressedData.Length);
|
||||
j += decompressedDataLocal.Length;
|
||||
break;
|
||||
}
|
||||
case CABCompressionMethod.LZX:
|
||||
{
|
||||
file.Properties["CompressionMethod"] = Compression.CompressionMethod.LZX;
|
||||
decompressedData = CompressionModule.FromKnownCompressionMethod(CompressionMethod.LZX).Decompress(data.data);
|
||||
|
||||
// no compression
|
||||
Array.Copy(data.data, 0, decompressedData, j, data.data.Length);
|
||||
j += data.data.Length;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
throw new InvalidOperationException("unknown compression method");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
e.Data = decompressedData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#region Save
|
||||
private ushort PackDate(DateTime value)
|
||||
{
|
||||
return (ushort)(((value.Year - 1980) << 9) + (value.Month << 5) + value.Day);
|
||||
}
|
||||
private ushort PackTime(DateTime value)
|
||||
{
|
||||
return (ushort)((value.Hour << 11) + (value.Minute << 5) + (value.Second / 2));
|
||||
}
|
||||
|
||||
|
||||
private void WriteCFHEADER(Writer bw, Internal.CFHEADER cfheader)
|
||||
{
|
||||
bw.WriteFixedLengthString(cfheader.signature, 4);
|
||||
|
||||
bw.WriteUInt32(cfheader.reserved1); // reserved
|
||||
bw.WriteUInt32(cfheader.cabinetFileSize); // size of this cabinet file in bytes
|
||||
|
||||
bw.WriteUInt32(cfheader.reserved2); // reserved
|
||||
bw.WriteUInt32(cfheader.firstFileOffset); // offset of the first CFFILE entry
|
||||
bw.WriteUInt32(cfheader.reserved3); // reserved
|
||||
|
||||
bw.WriteByte(cfheader.versionMinor); // cabinet file format version, minor
|
||||
bw.WriteByte(cfheader.versionMajor); // cabinet file format version, major
|
||||
|
||||
bw.WriteUInt16(cfheader.folderCount); // number of CFFOLDER entries in this cabinet
|
||||
bw.WriteUInt16(cfheader.fileCount); // number of CFFILE entries in this cabinet
|
||||
|
||||
bw.WriteUInt16((ushort)cfheader.flags); // cabinet file option indicators
|
||||
|
||||
bw.WriteUInt16(cfheader.setID); // must be the same for all cabinets in a set
|
||||
bw.WriteUInt16(cfheader.iCabinet); // number of this cabinet file in a set
|
||||
|
||||
if ((cfheader.flags & CABFlags.HasReservedArea) == CABFlags.HasReservedArea)
|
||||
{
|
||||
bw.WriteUInt16(cfheader.cabinetReservedAreaSize); // (optional) size of per-cabinet reserved area
|
||||
bw.WriteByte(cfheader.folderReservedAreaSize); // (optional) size of per-folder reserved area
|
||||
bw.WriteByte(cfheader.datablockReservedAreaSize); // (optional) size of per-datablock reserved area
|
||||
}
|
||||
|
||||
bw.WriteFixedLengthBytes(cfheader.reservedArea, cfheader.cabinetReservedAreaSize);
|
||||
|
||||
if ((cfheader.flags & CABFlags.HasPreviousCabinet) == CABFlags.HasPreviousCabinet)
|
||||
{
|
||||
bw.WriteNullTerminatedString(cfheader.previousCabinetName); // (optional) name of previous cabinet file
|
||||
bw.WriteNullTerminatedString(cfheader.previousDiskName); // (optional) name of previous disk
|
||||
}
|
||||
if ((cfheader.flags & CABFlags.HasNextCabinet) == CABFlags.HasNextCabinet)
|
||||
{
|
||||
bw.WriteNullTerminatedString(cfheader.nextCabinetName); // (optional) name of next cabinet file
|
||||
bw.WriteNullTerminatedString(cfheader.nextDiskName); // (optional) name of next disk
|
||||
}
|
||||
}
|
||||
private void WriteCFFILE(Writer bw, Internal.CFFILE cffile)
|
||||
{
|
||||
bw.WriteUInt32(cffile.decompressedSize);
|
||||
bw.WriteUInt32(cffile.offset);
|
||||
bw.WriteUInt16(cffile.folderIndex);
|
||||
bw.WriteUInt16(cffile.date);
|
||||
bw.WriteUInt16(cffile.time);
|
||||
bw.WriteUInt16(cffile.attribs);
|
||||
bw.WriteNullTerminatedString(cffile.name);
|
||||
}
|
||||
private void WriteCFFOLDER(Writer bw, Internal.CFFOLDER cffolder, Internal.CFHEADER cfheader)
|
||||
{
|
||||
bw.WriteUInt32(cffolder.firstDataBlockOffset);
|
||||
bw.WriteUInt16(cffolder.dataBlockCount);
|
||||
bw.WriteUInt16((ushort)cffolder.compressionMethod);
|
||||
if ((cfheader.flags & CABFlags.HasReservedArea) == CABFlags.HasReservedArea)
|
||||
{
|
||||
bw.WriteFixedLengthBytes(cffolder.reservedArea, cfheader.folderReservedAreaSize);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void SaveInternal(ObjectModel objectModel)
|
||||
{
|
||||
FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel);
|
||||
Writer bw = base.Accessor.Writer;
|
||||
|
||||
// go through and build a list of files
|
||||
File[] files = fsom.GetAllFiles();
|
||||
|
||||
List<Internal.CFFILE> cffiles = new List<Internal.CFFILE>();
|
||||
List<Internal.CFFOLDER> cffolders = new List<Internal.CFFOLDER>();
|
||||
|
||||
Internal.CFHEADER cfheader = new Internal.CFHEADER();
|
||||
cfheader.signature = "MSCF";
|
||||
cfheader.cabinetFileSize = 0;
|
||||
|
||||
foreach (File file in files)
|
||||
{
|
||||
Internal.CFFILE cffile = new Internal.CFFILE();
|
||||
cffile.name = file.Name;
|
||||
cffile.decompressedSize = (uint)file.Size;
|
||||
cffile.offset = 0; // TODO: how to get the offset of the file?
|
||||
cffile.folderIndex = 0;
|
||||
cfheader.cabinetFileSize += cffile.decompressedSize;
|
||||
cffiles.Add(cffile);
|
||||
}
|
||||
|
||||
#region cffolder
|
||||
{
|
||||
Internal.CFFOLDER cffolder = new Internal.CFFOLDER();
|
||||
cffolder.compressionMethod = CABCompressionMethod.None;
|
||||
cffolder.dataBlockCount = 1;
|
||||
cffolder.firstDataBlockOffset = 0;
|
||||
cffolders.Add(cffolder);
|
||||
}
|
||||
#endregion
|
||||
|
||||
cfheader.firstFileOffset = 0;
|
||||
|
||||
cfheader.versionMajor = 3;
|
||||
cfheader.versionMinor = 1;
|
||||
|
||||
cfheader.folderCount = (ushort)cffolders.Count;
|
||||
cfheader.fileCount = (ushort)cffiles.Count;
|
||||
|
||||
cfheader.setID = 12345;
|
||||
cfheader.iCabinet = 0;
|
||||
|
||||
cfheader.cabinetReservedAreaSize = mvarCabinetReservedAreaSize;
|
||||
cfheader.folderReservedAreaSize = mvarFolderReservedAreaSize;
|
||||
cfheader.datablockReservedAreaSize = mvarDatablockReservedAreaSize;
|
||||
|
||||
cfheader.nextCabinetName = mvarNextCabinetName;
|
||||
cfheader.nextDiskName = mvarNextDiskName;
|
||||
cfheader.previousCabinetName = mvarPreviousCabinetName;
|
||||
cfheader.previousDiskName = mvarPreviousDiskName;
|
||||
|
||||
if (cfheader.cabinetReservedAreaSize != 0 || cfheader.folderReservedAreaSize != 0 || cfheader.datablockReservedAreaSize != 0) cfheader.flags |= CABFlags.HasReservedArea;
|
||||
if (!String.IsNullOrEmpty(cfheader.nextCabinetName) || !String.IsNullOrEmpty(cfheader.nextDiskName)) cfheader.flags |= CABFlags.HasNextCabinet;
|
||||
if (!String.IsNullOrEmpty(cfheader.previousCabinetName) || !String.IsNullOrEmpty(cfheader.previousCabinetName)) cfheader.flags |= CABFlags.HasPreviousCabinet;
|
||||
|
||||
WriteCFHEADER(bw, cfheader);
|
||||
|
||||
foreach (Internal.CFFOLDER cffolder in cffolders)
|
||||
{
|
||||
WriteCFFOLDER(bw, cffolder, cfheader);
|
||||
}
|
||||
foreach (Internal.CFFILE cffile in cffiles)
|
||||
{
|
||||
WriteCFFILE(bw, cffile);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace UniversalEditor.DataFormats.FileSystem.Microsoft.Cabinet
|
||||
{
|
||||
[Flags()]
|
||||
public enum CABFlags
|
||||
{
|
||||
HasPreviousCabinet = 0x0001,
|
||||
HasNextCabinet = 0x0002,
|
||||
HasReservedArea = 0x0004
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace UniversalEditor.DataFormats.FileSystem.Microsoft.Cabinet.Internal
|
||||
{
|
||||
internal struct CFDATA
|
||||
{
|
||||
/// <summary>
|
||||
/// checksum of this CFDATA entry
|
||||
/// </summary>
|
||||
public uint checksum;
|
||||
/// <summary>
|
||||
/// number of compressed bytes in this block
|
||||
/// </summary>
|
||||
public ushort compressedLength;
|
||||
/// <summary>
|
||||
/// number of uncompressed bytes in this block
|
||||
/// </summary>
|
||||
public ushort decompressedLength;
|
||||
/// <summary>
|
||||
/// (optional) per-datablock reserved area
|
||||
/// </summary>
|
||||
public byte[] reservedArea;
|
||||
/// <summary>
|
||||
/// compressed data bytes
|
||||
/// </summary>
|
||||
public byte[] data;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace UniversalEditor.DataFormats.FileSystem.Microsoft.Cabinet.Internal
|
||||
{
|
||||
internal struct CFFILE
|
||||
{
|
||||
/// <summary>
|
||||
/// uncompressed size of this file in bytes
|
||||
/// </summary>
|
||||
public uint decompressedSize;
|
||||
/// <summary>
|
||||
/// uncompressed offset of this file in the folder
|
||||
/// </summary>
|
||||
public uint offset;
|
||||
/// <summary>
|
||||
/// index into the CFFOLDER area
|
||||
/// </summary>
|
||||
public ushort folderIndex;
|
||||
/// <summary>
|
||||
/// date stamp for this file
|
||||
/// </summary>
|
||||
public ushort date;
|
||||
/// <summary>
|
||||
/// time stamp for this file
|
||||
/// </summary>
|
||||
public ushort time;
|
||||
/// <summary>
|
||||
/// attribute flags for this file
|
||||
/// </summary>
|
||||
public ushort attribs;
|
||||
/// <summary>
|
||||
/// name of this file
|
||||
/// </summary>
|
||||
public string name;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace UniversalEditor.DataFormats.FileSystem.Microsoft.Cabinet.Internal
|
||||
{
|
||||
internal struct CFFOLDER
|
||||
{
|
||||
/// <summary>
|
||||
/// offset of the first CFDATA block in this folder
|
||||
/// </summary>
|
||||
public uint firstDataBlockOffset;
|
||||
/// <summary>
|
||||
/// number of CFDATA blocks in this folder
|
||||
/// </summary>
|
||||
public ushort dataBlockCount;
|
||||
/// <summary>
|
||||
/// compression type indicator
|
||||
/// </summary>
|
||||
public CABCompressionMethod compressionMethod;
|
||||
/// <summary>
|
||||
/// (optional) per-folder reserved area
|
||||
/// </summary>
|
||||
public byte[] reservedArea;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace UniversalEditor.DataFormats.FileSystem.Microsoft.Cabinet.Internal
|
||||
{
|
||||
internal struct CFHEADER
|
||||
{
|
||||
public string signature;
|
||||
public uint reserved1;
|
||||
public uint cabinetFileSize;
|
||||
public uint reserved2;
|
||||
public uint firstFileOffset;
|
||||
public uint reserved3;
|
||||
public byte versionMinor;
|
||||
public byte versionMajor;
|
||||
|
||||
public ushort folderCount;
|
||||
public ushort fileCount;
|
||||
public CABFlags flags;
|
||||
|
||||
public ushort setID;
|
||||
public ushort iCabinet;
|
||||
|
||||
public ushort cabinetReservedAreaSize;
|
||||
public byte folderReservedAreaSize;
|
||||
public byte datablockReservedAreaSize;
|
||||
|
||||
public byte[] reservedArea;
|
||||
|
||||
public string previousCabinetName;
|
||||
public string previousDiskName;
|
||||
|
||||
public string nextCabinetName;
|
||||
public string nextDiskName;
|
||||
}
|
||||
}
|
||||
@ -37,6 +37,13 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DataFormats\DataLink\UniversalDataLink\UDLDataFormat.cs" />
|
||||
<Compile Include="DataFormats\FileSystem\Microsoft\Cabinet\Internal\CFDATA.cs" />
|
||||
<Compile Include="DataFormats\FileSystem\Microsoft\Cabinet\Internal\CFFILE.cs" />
|
||||
<Compile Include="DataFormats\FileSystem\Microsoft\Cabinet\Internal\CFFOLDER.cs" />
|
||||
<Compile Include="DataFormats\FileSystem\Microsoft\Cabinet\Internal\CFHEADER.cs" />
|
||||
<Compile Include="DataFormats\FileSystem\Microsoft\Cabinet\CABCompressionMethod.cs" />
|
||||
<Compile Include="DataFormats\FileSystem\Microsoft\Cabinet\CABDataFormat.cs" />
|
||||
<Compile Include="DataFormats\FileSystem\Microsoft\Cabinet\CABFlags.cs" />
|
||||
<Compile Include="DataFormats\FileSystem\Microsoft\CompoundDocument\CompoundDocumentDataFormat.cs" />
|
||||
<Compile Include="DataFormats\FileSystem\Microsoft\CompoundDocument\CompoundDocumentKnownSectorID.cs" />
|
||||
<Compile Include="DataFormats\FileSystem\Microsoft\MSCompressed\MSCompressedCompressionMethod.cs" />
|
||||
@ -53,6 +60,10 @@
|
||||
<Compile Include="DataFormats\Text\Formatted\XPS\XPSDataFormat.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\Libraries\UniversalEditor.Compression\UniversalEditor.Compression.csproj">
|
||||
<Project>{3f664673-7e22-4486-9ad0-fc81861d0b78}</Project>
|
||||
<Name>UniversalEditor.Compression</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\Libraries\UniversalEditor.Core\UniversalEditor.Core.csproj">
|
||||
<Project>{2D4737E6-6D95-408A-90DB-8DFF38147E85}</Project>
|
||||
<Name>UniversalEditor.Core</Name>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user