Browse Source

Mods export

Dmitry Didenko 1 year ago
parent
commit
0a04dfaad0

+ 19 - 12
FactorioModManager/F_API.cs

@@ -74,27 +74,34 @@ namespace FactorioModManager
 
         public bool Connect()
         {
-            token = null;
-            Dictionary<string,string> values = new Dictionary<string, string>
+            try
+            {
+                token = null;
+                Dictionary<string, string> values = new Dictionary<string, string>
             {
                 {"username", Account.Username },
                 {"password",Account.Password }
             };
 
-            FormUrlEncodedContent content = new FormUrlEncodedContent(values);
+                FormUrlEncodedContent content = new FormUrlEncodedContent(values);
 
-            HttpResponseMessage response = client.PostAsync(auth_link, content).Result;
+                HttpResponseMessage response = client.PostAsync(auth_link, content).Result;
 
-            if (response.StatusCode == System.Net.HttpStatusCode.OK)
-            {
-                JArray arr = JArray.Parse(response.Content.ReadAsStringAsync().Result);
-                token = (string)arr[0];
-                Connected?.Invoke(true);
-                return true;
+                if (response.StatusCode == System.Net.HttpStatusCode.OK)
+                {
+                    JArray arr = JArray.Parse(response.Content.ReadAsStringAsync().Result);
+                    token = (string)arr[0];
+                    Connected?.Invoke(true);
+                    return true;
+                }
+                else
+                {
+                    Connected?.Invoke(false);
+                    return false;
+                }
             }
-            else
+            catch
             {
-                Connected?.Invoke(false);
                 return false;
             }
         }

+ 19 - 5
FactorioModManager/Form1.Designer.cs

@@ -80,6 +80,7 @@ namespace FactorioModManager
             this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
             this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
             this.tabPage3 = new System.Windows.Forms.TabPage();
+            this.importModPackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.menuStrip1.SuspendLayout();
             this.statusStrip1.SuspendLayout();
             this.tabPage2.SuspendLayout();
@@ -104,7 +105,8 @@ namespace FactorioModManager
             // toolStripMenuItem1
             // 
             this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.exportModPackToolStripMenuItem});
+            this.exportModPackToolStripMenuItem,
+            this.importModPackToolStripMenuItem});
             this.toolStripMenuItem1.Name = "toolStripMenuItem1";
             this.toolStripMenuItem1.Size = new System.Drawing.Size(125, 20);
             this.toolStripMenuItem1.Tag = "$File";
@@ -133,7 +135,7 @@ namespace FactorioModManager
             // changeSettingsToolStripMenuItem
             // 
             this.changeSettingsToolStripMenuItem.Name = "changeSettingsToolStripMenuItem";
-            this.changeSettingsToolStripMenuItem.Size = new System.Drawing.Size(159, 22);
+            this.changeSettingsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.changeSettingsToolStripMenuItem.Tag = "$ChangeSettings";
             this.changeSettingsToolStripMenuItem.Text = "Change settings";
             this.changeSettingsToolStripMenuItem.Click += new System.EventHandler(this.changeSettingsToolStripMenuItem_Click);
@@ -141,19 +143,19 @@ namespace FactorioModManager
             // toolStripSeparator1
             // 
             this.toolStripSeparator1.Name = "toolStripSeparator1";
-            this.toolStripSeparator1.Size = new System.Drawing.Size(156, 6);
+            this.toolStripSeparator1.Size = new System.Drawing.Size(177, 6);
             // 
             // exportSettingsToolStripMenuItem
             // 
             this.exportSettingsToolStripMenuItem.Name = "exportSettingsToolStripMenuItem";
-            this.exportSettingsToolStripMenuItem.Size = new System.Drawing.Size(159, 22);
+            this.exportSettingsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.exportSettingsToolStripMenuItem.Tag = "$ExportSettings";
             this.exportSettingsToolStripMenuItem.Text = "Export settings";
             // 
             // importSettingsToolStripMenuItem
             // 
             this.importSettingsToolStripMenuItem.Name = "importSettingsToolStripMenuItem";
-            this.importSettingsToolStripMenuItem.Size = new System.Drawing.Size(159, 22);
+            this.importSettingsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.importSettingsToolStripMenuItem.Tag = "$ImportSettings";
             this.importSettingsToolStripMenuItem.Text = "ImportSettings";
             // 
@@ -548,6 +550,8 @@ namespace FactorioModManager
             this.checkBox1.TabIndex = 3;
             this.checkBox1.UseVisualStyleBackColor = true;
             this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
+            this.checkBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.checkBox1_MouseDown);
+            this.checkBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.checkBox1_MouseUp);
             // 
             // textBox1
             // 
@@ -578,6 +582,8 @@ namespace FactorioModManager
             this.listView1.DrawSubItem += new System.Windows.Forms.DrawListViewSubItemEventHandler(this.listView1_DrawSubItem);
             this.listView1.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.listView1_ItemChecked);
             this.listView1.SelectedIndexChanged += new System.EventHandler(this.listView1_SelectedIndexChanged);
+            this.listView1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseDown);
+            this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
             // 
             // columnHeader3
             // 
@@ -607,6 +613,13 @@ namespace FactorioModManager
             this.tabPage3.Text = "tabPage3";
             this.tabPage3.UseVisualStyleBackColor = true;
             // 
+            // importModPackToolStripMenuItem
+            // 
+            this.importModPackToolStripMenuItem.Name = "importModPackToolStripMenuItem";
+            this.importModPackToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+            this.importModPackToolStripMenuItem.Tag = "$ImportModPack";
+            this.importModPackToolStripMenuItem.Text = "ImportModPack";
+            // 
             // Form1
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -693,6 +706,7 @@ namespace FactorioModManager
         private System.Windows.Forms.ColumnHeader columnHeader4;
         private System.Windows.Forms.ColumnHeader columnHeader5;
         private System.Windows.Forms.ColumnHeader columnHeader6;
+        private System.Windows.Forms.ToolStripMenuItem importModPackToolStripMenuItem;
     }
 }
 

+ 68 - 6
FactorioModManager/Form1.cs

@@ -5,12 +5,15 @@ using System.Data;
 using System.Diagnostics;
 using System.Drawing;
 using System.IO;
+using System.IO.Compression;
 using System.Linq;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Windows.Forms;
 
+using static FactorioModManager.ModWorker;
+
 namespace FactorioModManager
 {
     public partial class Form1 : Form
@@ -72,7 +75,7 @@ namespace FactorioModManager
             };
             foreach (Control control in this.Controls)
             {
-                MakeLinksClicable(control);
+                MakeLinksClickable(control);
             }
 
         }
@@ -87,6 +90,7 @@ namespace FactorioModManager
                 {
                     for (int i = 0; i < Worker.InstalledMods.Count; i++)
                     {
+                        ModWorker.Mod mod = Worker.InstalledMods[i];
                         ListViewItem item = listView1.Items.Add("");
                         item.SubItems[0].Tag = Worker.InstalledMods[i].Enabled;
                         item.SubItems[0].Text = "";
@@ -110,7 +114,7 @@ namespace FactorioModManager
             }));
         }
 
-        private void MakeLinksClicable(Control control)
+        private void MakeLinksClickable(Control control)
         {
             if (control is LinkLabel)
             {
@@ -124,7 +128,7 @@ namespace FactorioModManager
             {
                 foreach (Control ctrl in control.Controls)
                 {
-                    MakeLinksClicable(ctrl);
+                    MakeLinksClickable(ctrl);
                 }
             }
         }
@@ -216,13 +220,17 @@ namespace FactorioModManager
             e.DrawDefault = true;
         }
 
+        private bool setStateForce = false;
         private void checkBox1_CheckedChanged(object sender, EventArgs e)
         {
+            if (!userClick) return;
+            setStateForce = true;
             for(int i = 0; i < listView1.Items.Count; i++)
             {
                 listView1.Items[i].SubItems[0].Tag = checkBox1.Checked;
                 listView1.Items[i].Checked = checkBox1.Checked;
             }
+            setStateForce = false;
             listView1.Refresh();
         }
 
@@ -281,13 +289,14 @@ namespace FactorioModManager
 
         private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
         {
-            /*bool flag = true;
+            //Worker.InstalledMods[e.Item.Index].Enabled = e.Item.Checked;
+            /*if (setStateForce) return;
+            bool flag = true;
             foreach(ListViewItem item in listView1.Items)
             {
                 flag = flag && item.Checked;
             }
-            checkBox1.Checked = flag;
-            Worker.InstalledMods[e.Item.Index].Enabled = e.Item.Checked;*/
+            checkBox1.Checked = flag;*/
         }
 
         private void button2_Click(object sender, EventArgs e)
@@ -343,7 +352,60 @@ namespace FactorioModManager
 
         private void exportModPackToolStripMenuItem_Click(object sender, EventArgs e)
         {
+            SaveFileDialog dialog = new SaveFileDialog();
+            dialog.Filter = "*.fmpack|*.fmpack";
+            dialog.FileName = "factorio_mods.fmpack";
+            dialog.InitialDirectory = Directory.GetCurrentDirectory();
+            if (dialog.ShowDialog() == DialogResult.OK)
+            {
+                FileStream zp = File.Create(dialog.FileName);
+                ZipArchive result = new ZipArchive(zp,ZipArchiveMode.Create,false);
+
+                ZipArchiveEntry entry = result.CreateEntry("mod-list.json");
+                using(StreamWriter sw = new StreamWriter(entry.Open()))
+                {
+                    sw.WriteLine(Worker.GetModList(true));
+                }
+
+                List<Mod> mods = Worker.InstalledMods.Where(x => x.Enabled).ToList();
+                foreach (Mod mod in mods)
+                {
+                    if (DLC_MODS.Contains(mod.Name)) continue;
 
+                    using (Stream modInZip = result.CreateEntry(mod.FileName).Open())
+                    {
+                        byte[] file = File.ReadAllBytes(Path.Combine(Settings.GamePath, mod.FileName));
+                        modInZip.Write(file,0,file.Length);
+                    }
+                }
+                using (Stream modInZip = result.CreateEntry("mod-settings.dat").Open())
+                {
+                    byte[] file = File.ReadAllBytes(Path.Combine(Settings.GamePath, "mod-settings.dat"));
+                    modInZip.Write(file, 0, file.Length);
+                }
+                result.Dispose();
+            }
+        }
+
+        private bool userClick = false;
+        private void listView1_MouseDown(object sender, MouseEventArgs e)
+        {
+            userClick = true;
+        }
+
+        private void listView1_MouseUp(object sender, MouseEventArgs e)
+        {
+            userClick = false;
+        }
+
+        private void checkBox1_MouseDown(object sender, MouseEventArgs e)
+        {
+            userClick = true;
+        }
+
+        private void checkBox1_MouseUp(object sender, MouseEventArgs e)
+        {
+            userClick = false;
         }
 
         private void listView1_SelectedIndexChanged(object sender, EventArgs e)

+ 13 - 2
FactorioModManager/ModWorker.cs

@@ -9,6 +9,8 @@ using System.Text;
 using System.Threading.Tasks;
 using Newtonsoft.Json.Linq;
 
+using static FactorioModManager.ModWorker;
+
 namespace FactorioModManager
 {
     public class ModWorker
@@ -61,6 +63,8 @@ namespace FactorioModManager
 
             public Dictionary<string, Availability> Dependencies { get; } = new Dictionary<string, Availability>();
 
+            public string FileName => Name + "_" + Version.ToString() + ".zip";
+
             public static Mod CreateSimple(string name, string title,bool enabled)
             {
                 JObject json = new JObject()
@@ -259,9 +263,16 @@ namespace FactorioModManager
         public string GetModList(bool enabledOnly = false)
         {
             JObject json = new JObject();
-            JArray list = new JArray();
+            JArray list = new JArray
+            {
+                new JObject()
+                {
+                    {"name",  "base"},
+                    {"enabled", true}
+                }
+            };
 
-            List<Mod> mods = (enabledOnly) ? InstalledMods.Where(x=>x.Enabled).ToList() : InstalledMods;
+            List<Mod> mods = enabledOnly ? InstalledMods.Where(x=>x.Enabled).ToList() : InstalledMods;
             foreach (Mod mod in mods)
             {
                 list.Add(new JObject()