diff options
author | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2017-02-15 19:44:34 +0300 |
---|---|---|
committer | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2017-02-15 19:44:34 +0300 |
commit | b259fe4222817ccc0ae2f552f879e22d2c3c8681 (patch) | |
tree | 9a1618205842818e0f8fcb00e4f8903bc2a22bbc /SelectModsForm.cs | |
parent | 0128c2cdce3bc8d0afa32058edfbfb75ba5f21d7 (diff) |
Huge rework. Finally module system from madmonkey. Hooray!
Diffstat (limited to 'SelectModsForm.cs')
-rw-r--r-- | SelectModsForm.cs | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/SelectModsForm.cs b/SelectModsForm.cs new file mode 100644 index 00000000..358ad4ac --- /dev/null +++ b/SelectModsForm.cs @@ -0,0 +1,103 @@ +using SevenZip;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace com.clusterrr.hakchi_gui
+{
+ public partial class SelectModsForm : Form
+ {
+ private readonly string baseDirectory;
+ private readonly string usermodsDirectory;
+ private readonly string[] readmeFiles;
+
+ public SelectModsForm()
+ {
+ InitializeComponent();
+ baseDirectory = MainForm.BaseDirectory;
+ usermodsDirectory = Path.Combine(baseDirectory, "user_mods");
+ var modsList = new List<string>();
+ if (Directory.Exists(usermodsDirectory))
+ {
+ modsList.AddRange(from m
+ in Directory.GetDirectories(usermodsDirectory, "*.hmod", SearchOption.TopDirectoryOnly)
+ select Path.GetFileNameWithoutExtension(m));
+ modsList.AddRange(from m
+ in Directory.GetFiles(usermodsDirectory, "*.hmod", SearchOption.TopDirectoryOnly)
+ select Path.GetFileNameWithoutExtension(m));
+ }
+ readmeFiles = new string[] { "readme.txt", "readme.md", "readme" };
+ checkedListBoxMods.Items.Clear();
+ checkedListBoxMods.Items.AddRange(modsList.ToArray());
+ }
+
+ private void buttonOk_Click(object sender, EventArgs e)
+ {
+ if (checkedListBoxMods.CheckedItems.Count > 0)
+ DialogResult = DialogResult.OK;
+ else
+ DialogResult = DialogResult.Cancel;
+ Close();
+ }
+
+ private void checkedListBoxMods_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (checkedListBoxMods.SelectedItem == null)
+ {
+ textBoxReadme.Text = "";
+ textBoxReadme.Enabled = false;
+ return;
+ }
+ var selected = checkedListBoxMods.SelectedItem.ToString();
+ var text = "";
+ var dir = Path.Combine(usermodsDirectory, selected + ".hmod");
+ if (Directory.Exists(dir))
+ {
+ foreach (var f in readmeFiles)
+ {
+ var fn = Path.Combine(dir, f);
+ if (File.Exists(fn))
+ {
+ text = File.ReadAllText(fn);
+ break;
+ }
+ }
+ }
+ else if (File.Exists(dir))
+ {
+ SevenZipExtractor.SetLibraryPath(Path.Combine(baseDirectory, IntPtr.Size == 8 ? @"tools\7z64.dll" : @"tools\7z.dll"));
+ using (var szExtractor = new SevenZipExtractor(dir))
+ {
+ var tar = new MemoryStream();
+ szExtractor.ExtractFile(0, tar);
+ tar.Seek(0, SeekOrigin.Begin);
+ using (var szExtractorTar = new SevenZipExtractor(tar))
+ {
+ foreach (var f in readmeFiles)
+ {
+ if (szExtractorTar.ArchiveFileNames.Contains(f))
+ {
+ var o = new MemoryStream();
+ szExtractorTar.ExtractFile(f, o);
+ var rawData = new byte[o.Length];
+ o.Seek(0, SeekOrigin.Begin);
+ o.Read(rawData, 0, (int)o.Length);
+ text = Encoding.UTF8.GetString(rawData);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ textBoxReadme.Text = text;
+ textBoxReadme.Enabled = text.Length > 0;
+ }
+ }
+}
|