Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/hakchi2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2017-02-23 08:30:09 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2017-02-23 08:30:09 +0300
commiteed0039b675387362319d29500bd2402bca9b355 (patch)
tree2fb13a5a34a5c143adf343eb92b2cd1df84e6bef
parent6a27d18caab4c4eae5691971027982fe6d97fd2d (diff)
Compressing support done
-rw-r--r--Apps/NesMiniApplication.cs41
-rw-r--r--Properties/Resources.ru-RU.resx20
-rw-r--r--SelectFileForm.Designer.cs10
-rw-r--r--SelectFileForm.resx118
-rw-r--r--SelectFileForm.ru-RU.resx3
-rw-r--r--WorkerForm.cs45
6 files changed, 150 insertions, 87 deletions
diff --git a/Apps/NesMiniApplication.cs b/Apps/NesMiniApplication.cs
index fe9d9df1..1d684f4b 100644
--- a/Apps/NesMiniApplication.cs
+++ b/Apps/NesMiniApplication.cs
@@ -21,7 +21,7 @@ namespace com.clusterrr.hakchi_gui
{
get { return code; }
}
- public const char DefaultPrefix = 'U';
+ public const char DefaultPrefix = 'Z';
public static Image DefaultCover { get { return Resources.blank_app; } }
internal const string DefaultApp = "/bin/path-to-your-app";
public virtual string GoogleSuffix
@@ -140,35 +140,46 @@ namespace com.clusterrr.hakchi_gui
if (import != null)
return (NesMiniApplication)import.Invoke(null, new object[] { fileName, rawRomData });
else
- return Import(fileName, rawRomData, appinfo.Prefix, appinfo.DefaultApp, appinfo.DefaultCover);
+ return Import(fileName, rawRomData, appinfo.Prefix, appinfo.DefaultApp, appinfo.DefaultCover, ConfigIni.Compress);
}
string application = extension.Length > 2 ? ("/bin/" + extension.Substring(1)) : DefaultApp;
return Import(fileName, rawRomData, DefaultPrefix, application, DefaultCover);
}
- private static NesMiniApplication Import(string fileName, byte[] rawRomData, char prefixCode, string application, Image defaultCover)
+ private static NesMiniApplication Import(string fileName, byte[] rawRomData, char prefixCode, string application, Image defaultCover, bool compress = false)
{
+ var crc32 = CRC32(rawRomData);
+ var code = GenerateCode(crc32, prefixCode);
+ var gamePath = Path.Combine(GamesDirectory, code);
bool sevenZipped = false;
- if (ConfigIni.Compress)
+ if (compress)
{
+ string temp = null;
try
{
- string temp = null;
- temp = Path.Combine(Path.GetTempPath(), fileName);
- File.WriteAllBytes(temp, rawRomData);
- rawRomData = Compress(temp);
- if (!string.IsNullOrEmpty(temp) && File.Exists(temp))
- File.Delete(temp);
- sevenZipped = true;
+ if (!File.Exists(fileName))
+ {
+ temp = Path.Combine(Path.GetTempPath(), Path.GetFileName(fileName));
+ File.WriteAllBytes(temp, rawRomData);
+ rawRomData = Compress(temp);
+ sevenZipped = true;
+ }
+ else
+ {
+ rawRomData = Compress(fileName);
+ sevenZipped = true;
+ }
}
catch (Exception ex)
{
Debug.WriteLine("Compression error: " + ex.Message + ex.Source);
}
+ finally
+ {
+ if (!string.IsNullOrEmpty(temp) && File.Exists(temp))
+ File.Delete(temp);
+ }
}
- var crc32 = CRC32(rawRomData);
- var code = GenerateCode(crc32, prefixCode);
- var gamePath = Path.Combine(GamesDirectory, code);
var romName = Regex.Replace(Path.GetFileName(fileName), @"[^A-Za-z0-9.-]", "_").Trim() + (sevenZipped ? ".7z" : "");
var romPath = Path.Combine(gamePath, romName);
if (Directory.Exists(gamePath))
@@ -513,7 +524,7 @@ namespace com.clusterrr.hakchi_gui
SevenZipExtractor.SetLibraryPath(Path.Combine(MainForm.BaseDirectory, IntPtr.Size == 8 ? @"tools\7z64.dll" : @"tools\7z.dll"));
var arch = new MemoryStream();
var compressor = new SevenZipCompressor();
- compressor.CompressionLevel = CompressionLevel.Ultra;
+ compressor.CompressionLevel = CompressionLevel.High;
compressor.CompressFiles(arch, filename);
arch.Seek(0, SeekOrigin.Begin);
var result = new byte[arch.Length];
diff --git a/Properties/Resources.ru-RU.resx b/Properties/Resources.ru-RU.resx
index c4295a76..d8fb2acd 100644
--- a/Properties/Resources.ru-RU.resx
+++ b/Properties/Resources.ru-RU.resx
@@ -362,7 +362,7 @@
<value>Вы действительно хотите удалить "{0}"?</value>
</data>
<data name="FolderContent" xml:space="preserve">
- <value>Контент будет перемещён в папку "Recycle Bin". Вы можете удалить её насовсем или переместить игры в другие директории.</value>
+ <value>Контент будет перемещён в папку "Корзина". Вы можете удалить её насовсем или переместить игры в другие директории.</value>
</data>
<data name="MainMenu" xml:space="preserve">
<value>Главное меню</value>
@@ -371,7 +371,7 @@
<value>Строим дерево папок...</value>
</data>
<data name="FolderNameUnsorted" xml:space="preserve">
- <value>Unsorted</value>
+ <value>Неотсортированные</value>
</data>
<data name="FoldersSaveQ" xml:space="preserve">
<value>Сохранить это дерево папок?</value>
@@ -380,10 +380,10 @@
<value>Папка "{0}" содержит {1} элементов.</value>
</data>
<data name="NewFolder" xml:space="preserve">
- <value>New folder</value>
+ <value>Новая папка</value>
</data>
<data name="NewGamesUnsorted" xml:space="preserve">
- <value>Новые игры помещены в папку "Unsorted".</value>
+ <value>Новые игры помещены в папку "Неотсортированные".</value>
</data>
<data name="AddingGames" xml:space="preserve">
<value>Обрабатываем и добавляем в базу игры. Пожалуйста, подождите...</value>
@@ -392,16 +392,16 @@
<value>Вы действительно хотите удалить {0} элементов?</value>
</data>
<data name="FolderNameBack" xml:space="preserve">
- <value>Back</value>
+ <value>Назад</value>
</data>
<data name="FolderNameNewFolder" xml:space="preserve">
- <value>New folder</value>
+ <value>Новая папка</value>
</data>
<data name="FolderNameOriginalGames" xml:space="preserve">
- <value>Original games</value>
+ <value>Оригинальные игры</value>
</data>
<data name="FolderNameTrashBin" xml:space="preserve">
- <value>Recycle Bin</value>
+ <value>Корзина</value>
</data>
<data name="InstallingMods" xml:space="preserve">
<value>Устанавливаем модули...</value>
@@ -421,7 +421,7 @@
<data name="MemoryFull" xml:space="preserve">
<value>Простите, слишком уж много игр, на {0}МБ, NES Mini такое не осилит.</value>
</data>
- <data name="String" xml:space="preserve">
- <value>MemoryFull</value>
+ <data name="FolderNameMoreGames" xml:space="preserve">
+ <value>Больше игр...</value>
</data>
</root> \ No newline at end of file
diff --git a/SelectFileForm.Designer.cs b/SelectFileForm.Designer.cs
index d08263ff..753e77f3 100644
--- a/SelectFileForm.Designer.cs
+++ b/SelectFileForm.Designer.cs
@@ -31,6 +31,7 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SelectFileForm));
this.listBoxFiles = new System.Windows.Forms.ListBox();
this.buttonOk = new System.Windows.Forms.Button();
+ this.buttonArchive = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// listBoxFiles
@@ -48,11 +49,19 @@
this.buttonOk.UseVisualStyleBackColor = true;
this.buttonOk.Click += new System.EventHandler(this.listBoxFiles_DoubleClick);
//
+ // buttonArchive
+ //
+ resources.ApplyResources(this.buttonArchive, "buttonArchive");
+ this.buttonArchive.DialogResult = System.Windows.Forms.DialogResult.Ignore;
+ this.buttonArchive.Name = "buttonArchive";
+ this.buttonArchive.UseVisualStyleBackColor = true;
+ //
// SelectFileForm
//
this.AcceptButton = this.buttonOk;
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.buttonArchive);
this.Controls.Add(this.buttonOk);
this.Controls.Add(this.listBoxFiles);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
@@ -66,5 +75,6 @@
private System.Windows.Forms.Button buttonOk;
internal System.Windows.Forms.ListBox listBoxFiles;
+ private System.Windows.Forms.Button buttonArchive;
}
} \ No newline at end of file
diff --git a/SelectFileForm.resx b/SelectFileForm.resx
index 50cec691..53f064c7 100644
--- a/SelectFileForm.resx
+++ b/SelectFileForm.resx
@@ -117,41 +117,35 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
+ <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+ <data name="listBoxFiles.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+ <value>Top, Bottom, Left, Right</value>
+ </data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="listBoxFiles.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 12</value>
</data>
- <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
- <value>6, 13</value>
- </data>
- <data name="&gt;&gt;buttonOk.Type" xml:space="preserve">
- <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <data name="listBoxFiles.Size" type="System.Drawing.Size, System.Drawing">
+ <value>290, 238</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="listBoxFiles.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
- <data name="buttonOk.TabIndex" type="System.Int32, mscorlib">
- <value>1</value>
- </data>
- <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <data name="buttonOk.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
- <value>Bottom, Left, Right</value>
- </data>
- <data name="&gt;&gt;$this.Type" xml:space="preserve">
- <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </data>
- <data name="&gt;&gt;buttonOk.ZOrder" xml:space="preserve">
- <value>0</value>
+ <data name="&gt;&gt;listBoxFiles.Name" xml:space="preserve">
+ <value>listBoxFiles</value>
</data>
- <data name="&gt;&gt;$this.Name" xml:space="preserve">
- <value>SelectFileForm</value>
+ <data name="&gt;&gt;listBoxFiles.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name="&gt;&gt;buttonOk.Parent" xml:space="preserve">
+ <data name="&gt;&gt;listBoxFiles.Parent" xml:space="preserve">
<value>$this</value>
</data>
- <data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
- <value>200, 200</value>
+ <data name="&gt;&gt;listBoxFiles.ZOrder" xml:space="preserve">
+ <value>2</value>
+ </data>
+ <data name="buttonOk.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+ <value>Bottom, Left</value>
</data>
<data name="buttonOk.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
@@ -159,35 +153,65 @@
<data name="buttonOk.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 259</value>
</data>
- <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
- <value>284, 304</value>
+ <data name="buttonOk.Size" type="System.Drawing.Size, System.Drawing">
+ <value>140, 33</value>
+ </data>
+ <data name="buttonOk.TabIndex" type="System.Int32, mscorlib">
+ <value>1</value>
+ </data>
+ <data name="buttonOk.Text" xml:space="preserve">
+ <value>OK</value>
</data>
<data name="&gt;&gt;buttonOk.Name" xml:space="preserve">
<value>buttonOk</value>
</data>
- <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
- <value>CenterParent</value>
+ <data name="&gt;&gt;buttonOk.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name="listBoxFiles.Size" type="System.Drawing.Size, System.Drawing">
- <value>260, 238</value>
+ <data name="&gt;&gt;buttonOk.Parent" xml:space="preserve">
+ <value>$this</value>
</data>
- <data name="&gt;&gt;listBoxFiles.Name" xml:space="preserve">
- <value>listBoxFiles</value>
+ <data name="&gt;&gt;buttonOk.ZOrder" xml:space="preserve">
+ <value>1</value>
</data>
- <data name="buttonOk.Size" type="System.Drawing.Size, System.Drawing">
- <value>260, 33</value>
+ <data name="buttonArchive.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+ <value>Bottom, Right</value>
</data>
- <data name="listBoxFiles.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
- <value>Top, Bottom, Left, Right</value>
+ <data name="buttonArchive.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+ <value>NoControl</value>
</data>
- <data name="&gt;&gt;listBoxFiles.Parent" xml:space="preserve">
+ <data name="buttonArchive.Location" type="System.Drawing.Point, System.Drawing">
+ <value>162, 259</value>
+ </data>
+ <data name="buttonArchive.Size" type="System.Drawing.Size, System.Drawing">
+ <value>140, 33</value>
+ </data>
+ <data name="buttonArchive.TabIndex" type="System.Int32, mscorlib">
+ <value>2</value>
+ </data>
+ <data name="buttonArchive.Text" xml:space="preserve">
+ <value>Import as archive</value>
+ </data>
+ <data name="&gt;&gt;buttonArchive.Name" xml:space="preserve">
+ <value>buttonArchive</value>
+ </data>
+ <data name="&gt;&gt;buttonArchive.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;buttonArchive.Parent" xml:space="preserve">
<value>$this</value>
</data>
- <data name="&gt;&gt;listBoxFiles.ZOrder" xml:space="preserve">
- <value>1</value>
+ <data name="&gt;&gt;buttonArchive.ZOrder" xml:space="preserve">
+ <value>0</value>
</data>
- <data name="buttonOk.Text" xml:space="preserve">
- <value>OK</value>
+ <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <value>True</value>
+ </metadata>
+ <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
+ <value>6, 13</value>
+ </data>
+ <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+ <value>314, 304</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
@@ -1321,13 +1345,19 @@
//////////////////////////////////8=
</value>
</data>
+ <data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
+ <value>330, 200</value>
+ </data>
+ <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
+ <value>CenterParent</value>
+ </data>
<data name="$this.Text" xml:space="preserve">
<value>Select file</value>
</data>
- <data name="&gt;&gt;listBoxFiles.Type" xml:space="preserve">
- <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <data name="&gt;&gt;$this.Name" xml:space="preserve">
+ <value>SelectFileForm</value>
+ </data>
+ <data name="&gt;&gt;$this.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
- <value>True</value>
- </metadata>
</root> \ No newline at end of file
diff --git a/SelectFileForm.ru-RU.resx b/SelectFileForm.ru-RU.resx
index 7d5cf27a..7b4919f2 100644
--- a/SelectFileForm.ru-RU.resx
+++ b/SelectFileForm.ru-RU.resx
@@ -117,6 +117,9 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
+ <data name="buttonArchive.Text" xml:space="preserve">
+ <value>Оставить в виде архива</value>
+ </data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
diff --git a/WorkerForm.cs b/WorkerForm.cs
index 243f91a1..7472e018 100644
--- a/WorkerForm.cs
+++ b/WorkerForm.cs
@@ -506,7 +506,7 @@ namespace com.clusterrr.hakchi_gui
if (maxProgress < 0)
{
if (stats.GamesProceed > 0)
- maxProgress = (int)(((double)kernel.Length / (double)67000 + 20) * (double)stats.TotalSize / (double)stats.Size +
+ maxProgress = (int)(((double)kernel.Length / (double)67000 + 20) * (double)stats.TotalSize / (double)stats.Size +
100 * ((int)Math.Ceiling((double)stats.TotalSize / (double)stats.Size) - 1));
else
maxProgress = (int)((double)kernel.Length / (double)67000 + 20);
@@ -914,8 +914,11 @@ namespace com.clusterrr.hakchi_gui
}
else if (nesFilesInArchive.Count > 1) // Many NES files, need to select
{
- if (SelectFileFromThread(nesFilesInArchive.ToArray()) == DialogResult.OK)
+ var r = SelectFileFromThread(nesFilesInArchive.ToArray());
+ if (r == DialogResult.OK)
fileName = selectedFile;
+ else if (r == DialogResult.Ignore)
+ fileName = file;
else continue;
}
else if (filesInArchive.Count == 1) // No NES files but only one another file
@@ -924,26 +927,32 @@ namespace com.clusterrr.hakchi_gui
}
else // Need to select
{
- if (SelectFileFromThread(filesInArchive.ToArray()) == DialogResult.OK)
+ var r = SelectFileFromThread(filesInArchive.ToArray());
+ if (r == DialogResult.OK)
fileName = selectedFile;
+ else if (r == DialogResult.Ignore)
+ fileName = file;
else continue;
}
- var o = new MemoryStream();
- if (Path.GetExtension(fileName).ToLower() == ".desktop" // App in archive, need the whole directory
- || szExtractor.ArchiveFileNames.Contains(Path.GetFileNameWithoutExtension(fileName)+".jpg") // Or it has cover in archive
- || szExtractor.ArchiveFileNames.Contains(Path.GetFileNameWithoutExtension(fileName) + ".png"))
+ if (fileName != file)
{
- tmp = Path.Combine(Path.GetTempPath(), fileName);
- Directory.CreateDirectory(tmp);
- szExtractor.ExtractArchive(tmp);
- fileName = Path.Combine(tmp, fileName);
- }
- else
- {
- szExtractor.ExtractFile(fileName, o);
- rawData = new byte[o.Length];
- o.Seek(0, SeekOrigin.Begin);
- o.Read(rawData, 0, (int)o.Length);
+ var o = new MemoryStream();
+ if (Path.GetExtension(fileName).ToLower() == ".desktop" // App in archive, need the whole directory
+ || szExtractor.ArchiveFileNames.Contains(Path.GetFileNameWithoutExtension(fileName) + ".jpg") // Or it has cover in archive
+ || szExtractor.ArchiveFileNames.Contains(Path.GetFileNameWithoutExtension(fileName) + ".png"))
+ {
+ tmp = Path.Combine(Path.GetTempPath(), fileName);
+ Directory.CreateDirectory(tmp);
+ szExtractor.ExtractArchive(tmp);
+ fileName = Path.Combine(tmp, fileName);
+ }
+ else
+ {
+ szExtractor.ExtractFile(fileName, o);
+ rawData = new byte[o.Length];
+ o.Seek(0, SeekOrigin.Begin);
+ o.Read(rawData, 0, (int)o.Length);
+ }
}
}
}