diff --git a/Yura/Archive/ArchiveFile.cs b/Yura/Archive/ArchiveFile.cs
index f50e2e3..1200c2a 100644
--- a/Yura/Archive/ArchiveFile.cs
+++ b/Yura/Archive/ArchiveFile.cs
@@ -28,13 +28,6 @@ public ArchiveFile(string path)
/// The content of the file
public abstract byte[] Read(ArchiveRecord record);
- ///
- /// Writes the data to a file in the archive
- ///
- /// The file record, must be an existing record
- /// The data to write
- public abstract void Write(ArchiveRecord record, byte[] data);
-
///
/// Gets the specialisation mask of a record
///
@@ -42,11 +35,6 @@ public ArchiveFile(string path)
/// The specialisation mask
public abstract uint GetSpecialisationMask(ArchiveRecord record);
- ///
- /// Whether the archive implementation supports writing
- ///
- public abstract bool CanWrite { get; }
-
///
/// Gets or sets the file list
///
diff --git a/Yura/Archive/DefianceArchive.cs b/Yura/Archive/DefianceArchive.cs
index be0446f..3a0006c 100644
--- a/Yura/Archive/DefianceArchive.cs
+++ b/Yura/Archive/DefianceArchive.cs
@@ -1,5 +1,4 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
using System.IO;
using StreamReader = Yura.IO.StreamReader;
@@ -71,8 +70,6 @@ public override IReadOnlyList Records
}
}
- public override bool CanWrite => false;
-
public override byte[] Read(ArchiveRecord record)
{
var file = record as DefianceRecord;
@@ -88,11 +85,6 @@ public override byte[] Read(ArchiveRecord record)
return bytes;
}
- public override void Write(ArchiveRecord record, byte[] data)
- {
- throw new NotImplementedException();
- }
-
public override uint GetSpecialisationMask(ArchiveRecord record)
{
// defiance does not use specialisation
diff --git a/Yura/Archive/DeusExArchive.cs b/Yura/Archive/DeusExArchive.cs
index a5cc598..8196343 100644
--- a/Yura/Archive/DeusExArchive.cs
+++ b/Yura/Archive/DeusExArchive.cs
@@ -82,8 +82,6 @@ public override IReadOnlyList Records
}
}
- public override bool CanWrite => false;
-
public override byte[] Read(ArchiveRecord record)
{
var file = record as DeusExRecord;
@@ -108,11 +106,6 @@ public override byte[] Read(ArchiveRecord record)
return bytes;
}
- public override void Write(ArchiveRecord record, byte[] data)
- {
- throw new NotImplementedException();
- }
-
public override uint GetSpecialisationMask(ArchiveRecord record)
{
var file = record as DeusExRecord;
diff --git a/Yura/Archive/LegendArchive.cs b/Yura/Archive/LegendArchive.cs
index c93b493..7a0c0fd 100644
--- a/Yura/Archive/LegendArchive.cs
+++ b/Yura/Archive/LegendArchive.cs
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
-using System.Linq;
using StreamReader = Yura.IO.StreamReader;
namespace Yura.Archive
@@ -79,8 +78,6 @@ public override IReadOnlyList Records
}
}
- public override bool CanWrite => true;
-
public override byte[] Read(ArchiveRecord record)
{
var file = record as LegendRecord;
@@ -115,91 +112,6 @@ public override byte[] Read(ArchiveRecord record)
return bytes;
}
- public override void Write(ArchiveRecord record, byte[] data)
- {
- var file = record as LegendRecord;
-
- // find offset to write the file
- var offset = FindFirstSpace(data.Length, file);
-
- file.Offset = (uint)(offset >> 11);
- file.Size = (uint)data.Length;
-
- var bigfile = (file.Offset << 11) / _alignment;
-
- // find right bigfile
- var name = Path.GetFileNameWithoutExtension(_file);
- var filename = Path.GetDirectoryName(_file) + Path.DirectorySeparatorChar + name + "." + bigfile.ToString("000");
-
- // write the file data
- var stream = File.OpenWrite(filename);
-
- stream.Position = offset % _alignment;
- stream.Write(data);
-
- stream.Close();
-
- // update file header
- stream = File.OpenWrite(_file);
-
- // find position of record in header
- stream.Position = 4 + (_files.Count * 4) + (_files.IndexOf(file) * 16);
-
- var size = BitConverter.GetBytes(file.Size);
- stream.Write(size);
-
- var bOffset = BitConverter.GetBytes(file.Offset);
- stream.Write(bOffset);
-
- stream.Close();
- }
-
- public long FindFirstSpace(int size, ArchiveRecord ignore)
- {
- // order records by offset
- var records = _files.Where(x => x != ignore).OrderBy(x => x.Offset).ToList();
-
- for (int i = 0; i < records.Count; i++)
- {
- var record = records[i];
-
- // get first free position
- var offset = (record.Offset << 11) + record.Size;
-
- // find next aligned offset
- while ((offset & 2047) != 0) offset++;
-
- var end = offset + size;
- var bigfile = (record.Offset << 11) / _alignment;
-
- if (i >= records.Count - 1)
- {
- for (int j = 0; j < 10; j++)
- {
- if (end < (bigfile + 1) * _alignment)
- {
- return offset;
- }
-
- bigfile++;
- offset = (uint)(bigfile * _alignment);
-
- if (bigfile > 999) break;
- }
-
- break;
- }
-
- // check if file fits
- if (end < records[i + 1].Offset << 11 && end < (bigfile + 1) * _alignment)
- {
- return offset;
- }
- }
-
- throw new Exception("Failed to find space in bigfile");
- }
-
public override uint GetSpecialisationMask(ArchiveRecord record)
{
var file = record as LegendRecord;
diff --git a/Yura/Archive/TigerArchive.cs b/Yura/Archive/TigerArchive.cs
index dea1c52..d4fe167 100644
--- a/Yura/Archive/TigerArchive.cs
+++ b/Yura/Archive/TigerArchive.cs
@@ -120,8 +120,6 @@ public override IReadOnlyList Records
}
}
- public override bool CanWrite => false;
-
public override byte[] Read(ArchiveRecord record)
{
var file = record as TigerRecord;
@@ -144,11 +142,6 @@ public override byte[] Read(ArchiveRecord record)
return bytes;
}
- public override void Write(ArchiveRecord record, byte[] data)
- {
- throw new NotImplementedException();
- }
-
public override uint GetSpecialisationMask(ArchiveRecord record)
{
var file = record as TigerRecord;
diff --git a/Yura/MainWindow.xaml b/Yura/MainWindow.xaml
index 4ec968c..4b4c482 100644
--- a/Yura/MainWindow.xaml
+++ b/Yura/MainWindow.xaml
@@ -69,9 +69,7 @@
-
+
diff --git a/Yura/MainWindow.xaml.cs b/Yura/MainWindow.xaml.cs
index 0e046a9..07c3c07 100644
--- a/Yura/MainWindow.xaml.cs
+++ b/Yura/MainWindow.xaml.cs
@@ -38,8 +38,6 @@ public partial class MainWindow : Window
private TextureFormat _textureFormat;
private Game _currentGame;
- private List _currentFolder;
-
// the current open bigfile
private ArchiveFile _bigfile;
@@ -230,8 +228,6 @@ public void SwitchDirectory(string path, string selectedFile = null)
PathBox.Text = bigfile + "\\" + path;
}
- _currentFolder = files;
-
ShowFiles(files, selectedFile);
}
@@ -549,48 +545,6 @@ private void SearchBox_KeyDown(object sender, KeyEventArgs e)
// TODO clear selection in directory view
}
}
-
- private void FileView_Drop(object sender, DragEventArgs e)
- {
- if (_bigfile == null || !_bigfile.CanWrite)
- {
- return;
- }
-
- if (e.Data.GetDataPresent(DataFormats.FileDrop))
- {
- var files = (string[])e.Data.GetData(DataFormats.FileDrop);
-
- foreach (var file in files)
- {
- // currently only support replacing file, so find the current file record in the folder
- var filename = Path.GetFileName(file);
- var record = _currentFolder.FirstOrDefault(x => x.Name != null && Path.GetFileName(x.Name) == filename);
-
- if (record == null)
- {
- MessageBox.Show("Unable to add file, make sure a file exists with same name in the current folder.", "Failed to add file", MessageBoxButton.OK, MessageBoxImage.Error);
- return;
- }
-
- try
- {
- // read file and write into archive, bigfile implementation will take care of
- // finding an offset and writing it
- var data = File.ReadAllBytes(file);
-
- _bigfile.Write(record, data);
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message, "Failed to add file", MessageBoxButton.OK, MessageBoxImage.Error);
- return;
- }
- }
-
- MessageBox.Show($"{files.Length} files added", "Files added", MessageBoxButton.OK, MessageBoxImage.Information);
- }
- }
}
public class DirectoryViewFolder