Merge pull request #1 from gjefferyes/master

pull request tryout
This commit is contained in:
LnmVolbo
2015-06-22 19:23:36 -07:00
52 changed files with 1298 additions and 2467 deletions

24
LICENSE Normal file
View File

@@ -0,0 +1,24 @@
Released under the respect the work of the original author license.
-------------------------------------------------------------------
The source code for RomVault has been released for the benefit of the emulation community.
This means you should ask yourself if you make a change/improvement/branch of this code, does your changes
also benefit the emulation community? If so then please give back to the community in a respectful way.
What does giving back to the community in a respectful way mean:
Ideally it means contribute your changes back to the author of the source, so that your changes can be worked into the main build.
If you make a reasonably large change that you think others will benefit from put out your own branches for other people to try,
and then maybe this can also be worked into the main code.
It means DO NOT make a small change/fix, re-brand the program and claim you are the greatest developer ever for releasing 'your' software.
This type of behaviour is disrespectful to the original author and the emulation community, and is against the nature of this license.
If you want to use large parts of this code (such as the DAT reader or torrentZip library) in your own project go right ahead,
I hope you can do something cool with this code to add to or improve your new and existing projects. Please let the author know how you
are using it, it would be cool to hear about other things this is being used for.
DO NOT sell this software or any derivative works from this software without permission from the author.
I have put 100's of hours of development into this code and only ever asked for donations to support this project.
So if you go and grab this code and start selling it or derivative works, that is disrespecting the nature of this license,
and so not permitted without permission.

View File

@@ -27,7 +27,6 @@ namespace ROMVault2
_sw.Close();
Console.WriteLine("Dat creation complete");
Console.ReadLine();
}
private static void WriteDatFile(RvDir dir)
@@ -76,8 +75,8 @@ namespace ROMVault2
RvDir game = dir.Child(i) as RvDir;
if (game != null && game.FileType == FileType.Zip)
{
WriteLine(d + "<game name=\"" + clean(Path.GetFileNameWithoutExtension(game.Name)) + "\">");
WriteLine(d + " <description>" + clean(Path.GetFileNameWithoutExtension(game.Name)) + "</description>");
WriteLine(d + "<game name=\"" + clean(game.Name) + "\">");
WriteLine(d + " <description>" + clean(game.Name) + "</description>");
for (int j = 0; j < game.ChildCount; j++)

View File

@@ -116,10 +116,6 @@ namespace ROMVault2.DatReaders
{
fs.Close();
fs.Dispose();
string message = string.Format("Error Occured Reading Dat: {0}\r\nSource: {1}\r\nMessage: {2}\r\n", strFilename, e.Source, e.Message);
if (e.InnerException != null)
message += string.Format("\r\nINNER EXCEPTION:\r\nSource: {0}\r\nMessage: {1}\r\n", e.InnerException.Source, e.InnerException.Message);
ReportError.SendErrorMessageDat(message, strFilename);
_bgw.ReportProgress(0, new bgwShowError(strFilename, string.Format("Error Occured Reading Dat:\r\n{0}\r\n", e.Message)));
return false;
}
@@ -274,6 +270,10 @@ namespace ROMVault2.DatReaders
// loop the ROMs in the parent sets
for (int r1 = 0; r1 < romofGame.ChildCount; r1++)
{
// don't search fixes for files marked as nodump
if (((RvFile)mGame.Child(r)).Status == "nodump" || ((RvFile)romofGame.Child(r1)).Status == "nodump")
continue;
// only find fixes if the Name and the Size of the ROMs are the same
if (mGame.Child(r).Name != romofGame.Child(r1).Name || ((RvFile)mGame.Child(r)).Size != ((RvFile)romofGame.Child(r1)).Size)
continue;
@@ -289,11 +289,13 @@ namespace ROMVault2.DatReaders
if (b1)
{
((RvFile)mGame.Child(r)).CRC = ((RvFile)romofGame.Child(r1)).CRC;
((RvFile)mGame.Child(r)).FileStatusSet(FileStatus.CRCFromDAT);
((RvFile)mGame.Child(r)).Status = "(CRCFound)";
}
else
{
((RvFile)romofGame.Child(r1)).CRC = ((RvFile)mGame.Child(r)).CRC;
((RvFile)romofGame.Child(r1)).FileStatusSet(FileStatus.CRCFromDAT);
((RvFile)romofGame.Child(r1)).Status = "(CRCFound)";
}
@@ -432,6 +434,8 @@ namespace ROMVault2.DatReaders
byte[] chdMD51 = ((RvFile)romofGame.Child(r1)).MD5CHD;
if (chdMD50 != null && chdMD51 != null && !ArrByte.bCompare(chdMD50, chdMD51)) continue;
// don't merge if only one of the ROM is nodump
if ((((RvFile)romofGame.Child(r1)).Status == "nodump") != (((RvFile)mGame.Child(r)).Status == "nodump")) continue;
found = true;
break;
@@ -450,9 +454,9 @@ namespace ROMVault2.DatReaders
return;
string parentName = searchGame.Game.GetData(RvGame.GameData.RomOf);
if (String.IsNullOrEmpty(parentName) || parentName==searchGame.Name)
if (String.IsNullOrEmpty(parentName) || parentName == searchGame.Name)
parentName = searchGame.Game.GetData(RvGame.GameData.CloneOf);
if (String.IsNullOrEmpty(parentName) || parentName==searchGame.Name)
if (String.IsNullOrEmpty(parentName) || parentName == searchGame.Name)
return;
int intIndex;

View File

@@ -28,20 +28,16 @@ namespace ROMVault2.DatReaders
XmlNodeList dirNodeList = doc.DocumentElement.SelectNodes("dir");
if (dirNodeList != null)
{
for (int i = 0; i < dirNodeList.Count; i++)
{
LoadDirFromDat(ref tDat, dirNodeList[i], thisFileType);
}
foreach (XmlNode dirNode in dirNodeList)
LoadDirFromDat(ref tDat, dirNode, thisFileType);
}
XmlNodeList gameNodeList = doc.DocumentElement.SelectNodes("game");
if (gameNodeList != null)
{
for (int i = 0; i < gameNodeList.Count; i++)
{
LoadGameFromDat(ref tDat, gameNodeList[i], thisFileType);
}
foreach (XmlNode gameNode in gameNodeList)
LoadGameFromDat(ref tDat, gameNode, thisFileType);
}
return true;
@@ -60,22 +56,27 @@ namespace ROMVault2.DatReaders
XmlNodeList dirNodeList = doc.DocumentElement.SelectNodes("dir");
if (dirNodeList != null)
{
for (int i = 0; i < dirNodeList.Count; i++)
{
LoadDirFromDat(ref tDat, dirNodeList[i], thisFileType);
}
foreach (XmlNode dirNode in dirNodeList)
LoadDirFromDat(ref tDat, dirNode, thisFileType);
}
XmlNodeList gameNodeList = doc.DocumentElement.SelectNodes("game");
if (gameNodeList != null)
{
for (int i = 0; i < gameNodeList.Count; i++)
{
LoadGameFromDat(ref tDat, gameNodeList[i], thisFileType);
}
foreach (XmlNode gameNode in gameNodeList)
LoadGameFromDat(ref tDat, gameNode, thisFileType);
}
XmlNodeList machineNodeList = doc.DocumentElement.SelectNodes("machine");
if (machineNodeList != null)
{
foreach (XmlNode machineNode in machineNodeList)
LoadGameFromDat(ref tDat, machineNode, thisFileType);
}
return true;
}
@@ -149,7 +150,7 @@ namespace ROMVault2.DatReaders
}
val = VarFix.String(packingNode.Attributes.GetNamedItem("dir")).ToLower(); // noautodir , nogame
if (!String.IsNullOrEmpty(val))
tDat.AddData(RvDat.DatData.DirSetup,val);
tDat.AddData(RvDat.DatData.DirSetup, val);
}
}

View File

@@ -31,7 +31,6 @@ namespace ROMVault2
public static void SendAndShowDat(string message, string filename)
{
ReportError.SendErrorMessageDat(message, filename);
if (_bgw != null)
_bgw.ReportProgress(0, new bgwShowError(filename, message));
}

View File

@@ -1,146 +0,0 @@
/******************************************************
* ROMVault2 is written by Gordon J. *
* Contact gordon@romvault.com *
* Copyright 2014 *
******************************************************/
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.Windows.Forms;
using ROMVault2.RvDB;
using ROMVault2.SupportedFiles;
namespace ROMVault2
{
public class RomCellDraw : DataGridViewImageCell
{
private readonly Color _bgCol;
private readonly string _bitmapName;
public RomCellDraw(string name,Color bgCol)
{
_bitmapName = name;
_bgCol = bgCol;
}
protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
{
graphics.FillRectangle(new SolidBrush(_bgCol), cellBounds);
Bitmap bm= rvImages.GetBitmap(_bitmapName);
if (bm != null)
{
graphics.DrawImage(bm, cellBounds.Left, cellBounds.Top, bm.Width,bm.Height);
bm.Dispose();
}
else
Debug.WriteLine("Missing Graphic for " + _bitmapName);
}
}
public class DirCellDraw : DataGridViewImageCell
{
private readonly Color _bgCol;
private readonly RvDir _cellDir;
public DirCellDraw(RvDir cellDir, Color bgCol)
{
_cellDir = cellDir;
_bgCol = bgCol;
}
protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
{
graphics.FillRectangle(new SolidBrush(_bgCol), cellBounds);
string bitmapName;
switch (_cellDir.FileType)
{
case FileType.Zip:
if (_cellDir.RepStatus == RepStatus.DirCorrect && _cellDir.ZipStatus==ZipStatus.TrrntZip)
bitmapName = "ZipTZ";
else
bitmapName = "Zip" + _cellDir.RepStatus;
break;
default:
bitmapName = "Dir" + _cellDir.RepStatus;
break;
}
Bitmap bm = rvImages.GetBitmap(bitmapName);
if (bm != null)
{
graphics.DrawImage(bm, cellBounds.Left + 10, cellBounds.Top, 21, 17);
bm.Dispose();
}
else
Debug.WriteLine("Missing Graphic for " + bitmapName);
}
}
public class DirCellStatusDraw : DataGridViewImageCell
{
private readonly RvDir _dir;
public DirCellStatusDraw(RvDir dir)
{
_dir = dir;
}
protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
{
Font drawFont = new Font("Arial", 9);
SolidBrush drawBrushBlack = new SolidBrush(Color.Black);
SolidBrush drawBrushWhite = new SolidBrush(Color.White);
graphics.FillRectangle(drawBrushWhite, cellBounds);
int gOff;
int columnIndex = 0;
for (int l = 0; l < RepairStatus.DisplayOrder.Length; l++)
{
if (l >= 13) columnIndex = l;
if (_dir.DirStatus.Get(RepairStatus.DisplayOrder[l]) <= 0) continue;
gOff = cellBounds.Left + FrmMain.GameGridColumnXPositions[columnIndex];
Bitmap bm = rvImages.GetBitmap(@"G_" + RepairStatus.DisplayOrder[l]);
if (bm != null)
{
graphics.DrawImage(bm, gOff, cellBounds.Top, 21, 18);
bm.Dispose();
}
else
Debug.WriteLine("Missing Graphics for " + "G_" + RepairStatus.DisplayOrder[l]);
columnIndex++;
}
columnIndex = 0;
for (int l = 0; l < RepairStatus.DisplayOrder.Length; l++)
{
if (l >= 13)
columnIndex = l;
if (_dir.DirStatus.Get(RepairStatus.DisplayOrder[l]) > 0)
{
gOff = cellBounds.Left + FrmMain.GameGridColumnXPositions[columnIndex];
graphics.DrawString(_dir.DirStatus.Get(RepairStatus.DisplayOrder[l]).ToString(CultureInfo.InvariantCulture), drawFont, drawBrushBlack, new PointF(gOff + 20, cellBounds.Top + 3));
columnIndex++;
}
}
drawBrushBlack.Dispose();
drawBrushWhite.Dispose();
drawFont.Dispose();
}
}
}

View File

@@ -820,11 +820,12 @@ namespace ROMVault2
tFile.FileStatusSet(FileStatus.SHA1CHDVerified);
return;
case CHD.CHDManCheck.Corrupt:
_bgw.ReportProgress(0, new bgwShowError(error, filename));
_bgw.ReportProgress(0, new bgwShowError(filename, error));
tFile.GotStatus = GotStatus.Corrupt;
return;
case CHD.CHDManCheck.CHDReturnError:
case CHD.CHDManCheck.CHDUnknownError:
_bgw.ReportProgress(0, new bgwShowError(error, filename));
_bgw.ReportProgress(0, new bgwShowError(filename, error));
return;
case CHD.CHDManCheck.ChdmanNotFound:
return;

View File

@@ -362,7 +362,6 @@ namespace ROMVault2
{
int error = Error.GetLastError();
ReportProgress(new bgwShowError(sourceFullName, "Error Setting File Attributes to Normal. Before Case correction Rename. Code " + error));
ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Before Case correction Rename. Code" + error + " : " + sourceFullName);
}
File.Move(sourceFullName, fixFile.FullName);
@@ -383,7 +382,6 @@ namespace ROMVault2
{
int error = Error.GetLastError();
ReportProgress(new bgwShowError(filename, "Error Setting File Attributes to Normal. Before Delete. Code " + error));
ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Before Delete. Code " + error + " : " + filename);
}
File.Delete(filename);
}
@@ -436,7 +434,6 @@ namespace ROMVault2
{
int error = Error.GetLastError();
ReportProgress(new bgwShowError(fixFilePath, "Error Setting File Attributes to Normal. Before Delete Moving ToSort. Code " + error));
ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Before Delete Moving ToSort. Code " + error + " : " + fixFilePath);
}
File.Delete(fixFilePath);
@@ -500,7 +497,6 @@ namespace ROMVault2
{
int error = Error.GetLastError();
_bgw.ReportProgress(0, new bgwShowError(fixFilePath, "Error Setting File Attributes to Normal. Before Delete Moving ToSort. Code " + error));
ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Before Delete Moving ToSort. Code " + error + " : " + fixFilePath);
}
File.Delete(fixFilePath);
@@ -1407,7 +1403,6 @@ namespace ROMVault2
{
int error = Error.GetLastError();
ReportProgress(new bgwShowError(filename, "Error Setting File Attributes to Normal. Deleting Original Fix File. Code " + error));
ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Deleting Original Fix File. Code " + error + " : " + filename);
}
try
{
@@ -1417,7 +1412,6 @@ namespace ROMVault2
{
int error = Error.GetLastError();
_error = "Error While trying to delete file " + filename + ". Code " + error;
ReportError.SendErrorMessage("Error While trying to delete file. Code " + error + " : " + filename);
if (tempZipOut != null && tempZipOut.ZipOpen != ZipOpenType.Closed)
tempZipOut.ZipFileClose();
@@ -1684,7 +1678,6 @@ namespace ROMVault2
{
int error = Error.GetLastError();
ReportProgress(new bgwShowError(fixZipFullName, "Error Setting File Attributes to Normal. Before Moving To Corrupt. Code " + error));
ReportError.SendErrorMessage("Error Setting File Attributes to Normal. Before Moving To Corrupt. Code " + error + " : " + fixZipFullName);
}

View File

@@ -1,6 +1,6 @@
namespace ROMVault2
{
partial class frmHelpAbout
partial class FrmHelpAbout
{
/// <summary>
/// Required designer variable.
@@ -67,10 +67,10 @@
this.label2.Text = "support@romvault.com";
this.label2.Click += new System.EventHandler(this.label2_Click);
//
// frmHelpAbout
// FrmHelpAbout
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackgroundImage = global::ROMVault2.rvImages.romvaultTZ;
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.ClientSize = new System.Drawing.Size(471, 172);
@@ -79,10 +79,10 @@
this.Controls.Add(this.lblVersion);
this.DoubleBuffered = true;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "frmHelpAbout";
this.Name = "FrmHelpAbout";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "frmHelpAbout";
this.Text = "FrmHelpAbout";
this.ResumeLayout(false);
this.PerformLayout();
@@ -94,4 +94,4 @@
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
}
}
}

View File

@@ -9,9 +9,9 @@ using System.Windows.Forms;
namespace ROMVault2
{
public partial class frmHelpAbout : Form
public partial class FrmHelpAbout : Form
{
public frmHelpAbout()
public FrmHelpAbout()
{
InitializeComponent();

View File

@@ -1,6 +1,6 @@
namespace ROMVault2
{
partial class frmKey
partial class FrmKey
{
/// <summary>
/// Required designer variable.
@@ -28,21 +28,21 @@
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmKey));
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmKey));
this.SuspendLayout();
//
// frmKey
// FrmKey
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.SystemColors.ControlDark;
this.ClientSize = new System.Drawing.Size(600, 532);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "frmKey";
this.Name = "FrmKey";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Color Key to ROM Status";
this.Load += new System.EventHandler(this.frmKey_Load);
this.Load += new System.EventHandler(this.FrmKey_Load);
this.ResumeLayout(false);
}
@@ -52,4 +52,4 @@
}
}
}

View File

@@ -11,14 +11,14 @@ using System.Windows.Forms;
namespace ROMVault2
{
public partial class frmKey : Form
public partial class FrmKey : Form
{
public frmKey()
public FrmKey()
{
InitializeComponent();
}
private void frmKey_Load(object sender, EventArgs e)
private void FrmKey_Load(object sender, EventArgs e)
{
List<RepStatus> displayList= new List<RepStatus>
{

View File

@@ -106,8 +106,6 @@
this.fixReportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.aboutRomVaultToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.checkForUpdateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.registratioToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.dataGridViewImageColumn1 = new System.Windows.Forms.DataGridViewImageColumn();
this.dataGridViewImageColumn2 = new System.Windows.Forms.DataGridViewImageColumn();
this.dataGridViewImageColumn3 = new System.Windows.Forms.DataGridViewImageColumn();
@@ -286,7 +284,7 @@
this.gbDatInfo.Controls.Add(this.label8);
this.gbDatInfo.Location = new System.Drawing.Point(5, 0);
this.gbDatInfo.Name = "gbDatInfo";
this.gbDatInfo.Size = new System.Drawing.Size(440, 147);
this.gbDatInfo.Size = new System.Drawing.Size(468, 147);
this.gbDatInfo.TabIndex = 3;
this.gbDatInfo.TabStop = false;
this.gbDatInfo.Text = "Dat Info :";
@@ -517,7 +515,7 @@
//
// btnColorKey
//
this.btnColorKey.Location = new System.Drawing.Point(568, 85);
this.btnColorKey.Location = new System.Drawing.Point(547, 85);
this.btnColorKey.Name = "btnColorKey";
this.btnColorKey.Size = new System.Drawing.Size(89, 23);
this.btnColorKey.TabIndex = 9;
@@ -528,7 +526,7 @@
// chkBoxShowMerged
//
this.chkBoxShowMerged.AutoSize = true;
this.chkBoxShowMerged.Location = new System.Drawing.Point(568, 68);
this.chkBoxShowMerged.Location = new System.Drawing.Point(547, 68);
this.chkBoxShowMerged.Name = "chkBoxShowMerged";
this.chkBoxShowMerged.Size = new System.Drawing.Size(125, 17);
this.chkBoxShowMerged.TabIndex = 8;
@@ -541,7 +539,7 @@
this.chkBoxShowFixed.AutoSize = true;
this.chkBoxShowFixed.Checked = true;
this.chkBoxShowFixed.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkBoxShowFixed.Location = new System.Drawing.Point(568, 52);
this.chkBoxShowFixed.Location = new System.Drawing.Point(547, 52);
this.chkBoxShowFixed.Name = "chkBoxShowFixed";
this.chkBoxShowFixed.Size = new System.Drawing.Size(102, 17);
this.chkBoxShowFixed.TabIndex = 7;
@@ -554,7 +552,7 @@
this.chkBoxShowMissing.AutoSize = true;
this.chkBoxShowMissing.Checked = true;
this.chkBoxShowMissing.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkBoxShowMissing.Location = new System.Drawing.Point(568, 36);
this.chkBoxShowMissing.Location = new System.Drawing.Point(547, 36);
this.chkBoxShowMissing.Name = "chkBoxShowMissing";
this.chkBoxShowMissing.Size = new System.Drawing.Size(124, 17);
this.chkBoxShowMissing.TabIndex = 6;
@@ -567,7 +565,7 @@
this.chkBoxShowCorrect.AutoSize = true;
this.chkBoxShowCorrect.Checked = true;
this.chkBoxShowCorrect.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkBoxShowCorrect.Location = new System.Drawing.Point(568, 20);
this.chkBoxShowCorrect.Location = new System.Drawing.Point(547, 20);
this.chkBoxShowCorrect.Name = "chkBoxShowCorrect";
this.chkBoxShowCorrect.Size = new System.Drawing.Size(123, 17);
this.chkBoxShowCorrect.TabIndex = 5;
@@ -579,7 +577,7 @@
//
this.gbSetInfo.Location = new System.Drawing.Point(5, 0);
this.gbSetInfo.Name = "gbSetInfo";
this.gbSetInfo.Size = new System.Drawing.Size(416, 147);
this.gbSetInfo.Size = new System.Drawing.Size(532, 147);
this.gbSetInfo.TabIndex = 4;
this.gbSetInfo.TabStop = false;
this.gbSetInfo.Text = "Game Info :";
@@ -654,9 +652,11 @@
this.GameGrid.ShowRowErrors = false;
this.GameGrid.Size = new System.Drawing.Size(697, 267);
this.GameGrid.TabIndex = 4;
this.GameGrid.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.GameGrid_CellFormatting);
this.GameGrid.SelectionChanged += new System.EventHandler(this.GameGridSelectionChanged);
this.GameGrid.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.GameGridMouseDoubleClick);
this.GameGrid.MouseUp += new System.Windows.Forms.MouseEventHandler(this.GameGrid_MouseUp);
this.GameGrid.ColumnHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.GameGridColumnHeaderMouseClick);
//
// Type
//
@@ -665,7 +665,7 @@
this.Type.Name = "Type";
this.Type.ReadOnly = true;
this.Type.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.Type.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
this.Type.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this.Type.Width = 40;
//
// CGame
@@ -673,6 +673,7 @@
this.CGame.HeaderText = "Game (Directory / Zip)";
this.CGame.Name = "CGame";
this.CGame.ReadOnly = true;
this.CGame.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic;
this.CGame.Width = 220;
//
// CDescription
@@ -680,6 +681,7 @@
this.CDescription.HeaderText = "Description";
this.CDescription.Name = "CDescription";
this.CDescription.ReadOnly = true;
this.CDescription.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic;
this.CDescription.Width = 220;
//
// CCorrect
@@ -688,6 +690,7 @@
this.CCorrect.Name = "CCorrect";
this.CCorrect.ReadOnly = true;
this.CCorrect.Resizable = System.Windows.Forms.DataGridViewTriState.False;
this.CCorrect.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this.CCorrect.Width = 500;
//
// RomGrid
@@ -746,6 +749,7 @@
this.RomGrid.ShowRowErrors = false;
this.RomGrid.Size = new System.Drawing.Size(697, 315);
this.RomGrid.TabIndex = 21;
this.RomGrid.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.RomGrid_CellFormatting);
this.RomGrid.SelectionChanged += new System.EventHandler(this.RomGridSelectionChanged);
this.RomGrid.MouseUp += new System.Windows.Forms.MouseEventHandler(this.RomGridMouseUp);
//
@@ -756,7 +760,7 @@
this.CGot.Name = "CGot";
this.CGot.ReadOnly = true;
this.CGot.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.CGot.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
this.CGot.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this.CGot.Width = 65;
//
// CRom
@@ -928,9 +932,7 @@
// helpToolStripMenuItem
//
this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.aboutRomVaultToolStripMenuItem,
this.checkForUpdateToolStripMenuItem,
this.registratioToolStripMenuItem});
this.aboutRomVaultToolStripMenuItem});
this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
this.helpToolStripMenuItem.Text = "Help";
@@ -938,24 +940,10 @@
// aboutRomVaultToolStripMenuItem
//
this.aboutRomVaultToolStripMenuItem.Name = "aboutRomVaultToolStripMenuItem";
this.aboutRomVaultToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
this.aboutRomVaultToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
this.aboutRomVaultToolStripMenuItem.Text = "About RomVault";
this.aboutRomVaultToolStripMenuItem.Click += new System.EventHandler(this.AboutRomVaultToolStripMenuItemClick);
//
// checkForUpdateToolStripMenuItem
//
this.checkForUpdateToolStripMenuItem.Name = "checkForUpdateToolStripMenuItem";
this.checkForUpdateToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
this.checkForUpdateToolStripMenuItem.Text = "Check For Update";
this.checkForUpdateToolStripMenuItem.Click += new System.EventHandler(this.checkForUpdateToolStripMenuItem_Click);
//
// registratioToolStripMenuItem
//
this.registratioToolStripMenuItem.Name = "registratioToolStripMenuItem";
this.registratioToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
this.registratioToolStripMenuItem.Text = "Registration";
this.registratioToolStripMenuItem.Click += new System.EventHandler(this.RegistratioToolStripMenuItemClick);
//
// dataGridViewImageColumn1
//
this.dataGridViewImageColumn1.FillWeight = 40F;
@@ -986,8 +974,7 @@
//
// FrmMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(1264, 762);
this.Controls.Add(this.splitContainer1);
this.Controls.Add(this.menuStrip1);
@@ -1075,7 +1062,6 @@
private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem aboutRomVaultToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem checkForUpdateToolStripMenuItem;
private System.Windows.Forms.DataGridViewImageColumn Type;
private System.Windows.Forms.DataGridViewTextBoxColumn CGame;
private System.Windows.Forms.DataGridViewTextBoxColumn CDescription;
@@ -1092,7 +1078,6 @@
private System.Windows.Forms.DataGridViewTextBoxColumn CStatus;
private System.Windows.Forms.DataGridViewTextBoxColumn ZipIndex;
private System.Windows.Forms.DataGridViewTextBoxColumn ZipHeader;
private System.Windows.Forms.ToolStripMenuItem registratioToolStripMenuItem;
private System.Windows.Forms.Label lblDITRomsFixable;
private System.Windows.Forms.Label lblDIRomsFixable;
private System.Windows.Forms.ToolStripMenuItem reportsToolStripMenuItem;

View File

@@ -1,4 +1,4 @@
/******************************************************
/******************************************************
* ROMVault2 is written by Gordon J. *
* Contact gordon@romvault.com *
* Copyright 2010 *
@@ -7,18 +7,16 @@ using System;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.ServiceModel;
using System.Windows.Forms;
using ROMVault2.Properties;
using ROMVault2.RVRef;
using ROMVault2.RvDB;
using ROMVault2.Utils;
using ROMVault2.SupportedFiles;
namespace ROMVault2
{
public partial class FrmMain : Form
{
private static readonly Color CBlue = Color.FromArgb(214, 214, 255);
private static readonly Color CGreyBlue = Color.FromArgb(214, 224, 255);
private static readonly Color CRed = Color.FromArgb(255, 214, 214);
@@ -37,10 +35,12 @@ namespace ROMVault2
private readonly Color[] _displayColor;
private bool _updatingGameGrid;
private int _gameGridSortColumnIndex;
private SortOrder _gameGridSortOrder = SortOrder.Descending;
private static int[] _gameGridColumnXPositions;
public static int[] GameGridColumnXPositions;
private frmKey _fk;
private FrmKey _fk;
private Single _scaleFactorX = 1;
private Single _scaleFactorY = 1;
@@ -101,7 +101,7 @@ namespace ROMVault2
_displayColor[(int)RepStatus.Deleted] = CWhite;
GameGridColumnXPositions = new int[(int)RepStatus.EndValue];
_gameGridColumnXPositions = new int[(int)RepStatus.EndValue];
DirTree.Setup(ref DB.DirTree);
@@ -410,33 +410,33 @@ namespace ROMVault2
if (cf != DirTree.GetSelected())
DatSetSelected(cf);
if (e.Button == MouseButtons.Right)
if (e.Button != MouseButtons.Right)
return;
RvDir tn = (RvDir)sender;
ContextMenu mnuContext = new ContextMenu();
MenuItem mnuFile = new MenuItem
{
RvDir tn = (RvDir)sender;
Index = 0,
Text = Resources.FrmMain_DirTreeRvSelected_Set_ROM_DIR,
Tag = tn.TreeFullName
};
mnuFile.Click += MnuFileClick;
mnuContext.MenuItems.Add(mnuFile);
ContextMenu mnuContext = new ContextMenu();
MenuItem mnuFile = new MenuItem
{
Index = 0,
Text = Resources.FrmMain_DirTreeRvSelected_Set_ROM_DIR,
Tag = tn.TreeFullName
};
mnuFile.Click += MnuFileClick;
mnuContext.MenuItems.Add(mnuFile);
MenuItem mnuMakeDat = new MenuItem
{
Index = 1,
Text = @"Make Dat",
Tag = tn
};
mnuMakeDat.Click += MnuMakeDatClick;
mnuContext.MenuItems.Add(mnuMakeDat);
mnuContext.Show(DirTree, e.Location);
}
MenuItem mnuMakeDat = new MenuItem
{
Index = 1,
Text = @"Make Dat",
Tag = tn
};
mnuMakeDat.Click += MnuMakeDatClick;
mnuContext.MenuItems.Add(mnuMakeDat);
mnuContext.Show(DirTree, e.Location);
}
#region "DAT display code"
@@ -444,9 +444,23 @@ namespace ROMVault2
private void DatSetSelected(RvBase cf)
{
DirTree.Refresh();
if (Settings.IsMono)
{
if (GameGrid.RowCount > 0)
GameGrid.CurrentCell = GameGrid[0,0];
if (RomGrid.RowCount > 0)
RomGrid.CurrentCell = RomGrid[0,0];
}
GameGrid.Rows.Clear();
RomGrid.Rows.Clear();
// clear sorting
GameGrid.Columns[_gameGridSortColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.None;
_gameGridSortColumnIndex = 0;
_gameGridSortOrder = SortOrder.Descending;
if (cf == null)
return;
@@ -479,6 +493,9 @@ namespace ROMVault2
private void splitContainer3_Panel1_Resize(object sender, EventArgs e)
{
// fixes a rendering issue in mono
if (splitContainer3.Panel1.Width == 0) return;
gbDatInfo.Width = splitContainer3.Panel1.Width - (gbDatInfo.Left * 2);
}
@@ -576,13 +593,29 @@ namespace ROMVault2
lblDITRomsUnknown.Text = (tDir.DirStatus.CountUnknown() + tDir.DirStatus.CountInToSort()).ToString(CultureInfo.InvariantCulture);
_updatingGameGrid = true;
if (Settings.IsMono)
{
if (GameGrid.RowCount > 0)
GameGrid.CurrentCell = GameGrid[0,0];
if (RomGrid.RowCount > 0)
RomGrid.CurrentCell = RomGrid[0,0];
}
GameGrid.Rows.Clear();
RomGrid.Rows.Clear();
// clear sorting
GameGrid.Columns[_gameGridSortColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.None;
_gameGridSortColumnIndex = 0;
_gameGridSortOrder = SortOrder.Descending;
ReportStatus tDirStat;
GameGridColumnXPositions = new int[(int)RepStatus.EndValue];
_gameGridColumnXPositions = new int[(int)RepStatus.EndValue];
int rowCount = 0;
for (int j = 0; j < tDir.ChildCount; j++)
{
@@ -607,6 +640,8 @@ namespace ROMVault2
if (!show) continue;
rowCount++;
int columnIndex = 0;
for (int l = 0; l < RepairStatus.DisplayOrder.Length; l++)
{
@@ -615,20 +650,22 @@ namespace ROMVault2
if (tDirStat.Get(RepairStatus.DisplayOrder[l]) <= 0) continue;
int len = DigitLength(tDirStat.Get(RepairStatus.DisplayOrder[l])) * 7 + 26;
if (len > GameGridColumnXPositions[columnIndex])
GameGridColumnXPositions[columnIndex] = len;
if (len > _gameGridColumnXPositions[columnIndex])
_gameGridColumnXPositions[columnIndex] = len;
columnIndex++;
}
}
GameGrid.RowCount = rowCount;
int t = 0;
for (int l = 0; l < (int)RepStatus.EndValue; l++)
{
int colWidth = GameGridColumnXPositions[l];
GameGridColumnXPositions[l] = t;
int colWidth = _gameGridColumnXPositions[l];
_gameGridColumnXPositions[l] = t;
t += colWidth;
}
int row = 0;
for (int j = 0; j < tDir.ChildCount; j++)
{
RvDir tChildDir = tDir.Child(j) as RvDir;
@@ -651,42 +688,10 @@ namespace ROMVault2
show = show || !(gCorrect || gMissing || gUnknown || gInToSort || gFixes);
if (!show) continue;
Color bgCol = Color.FromArgb(255, 255, 255);
foreach (RepStatus t1 in RepairStatus.DisplayOrder)
{
if (tDirStat.Get(t1) <= 0) continue;
bgCol = _displayColor[(int)t1];
break;
}
GameGrid.Rows.Add();
int iRow = GameGrid.Rows.Count - 1;
GameGrid.Rows[iRow].Selected = false;
GameGrid.Rows[iRow].Tag = tChildDir;
GameGrid.Rows[iRow].Cells[0].Style.BackColor = bgCol;
GameGrid.Rows[iRow].Cells[1].Style.BackColor = bgCol;
GameGrid.Rows[iRow].Cells[2].Style.BackColor = bgCol;
if (String.IsNullOrEmpty(tChildDir.FileName))
GameGrid.Rows[iRow].Cells[1].Value = tChildDir.Name;
else
GameGrid.Rows[iRow].Cells[1].Value = tChildDir.Name + " (Found: " + tChildDir.FileName + ")";
if (tChildDir.Game != null)
GameGrid.Rows[iRow].Cells[2].Value = tChildDir.Game.GetData(RvGame.GameData.Description);
DirCellDraw tDirCellDraw = new DirCellDraw(tChildDir, bgCol);
GameGrid.Rows[iRow].Cells[0] = tDirCellDraw;
DirCellStatusDraw tCellStatusDraw = new DirCellStatusDraw(tChildDir);
GameGrid.Rows[iRow].Cells[3] = tCellStatusDraw;
GameGrid.Rows[row].Selected = false;
GameGrid.Rows[row].Tag = tChildDir;
row++;
}
_updatingGameGrid = false;
@@ -730,13 +735,219 @@ namespace ROMVault2
}
}
private void GameGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (_updatingGameGrid)
return;
Rectangle cellBounds = GameGrid.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false);
RvDir tRvDir = (RvDir)GameGrid.Rows[e.RowIndex].Tag;
ReportStatus tDirStat = tRvDir.DirStatus;
Color bgCol = Color.FromArgb(255, 255, 255);
if (cellBounds.Width == 0 || cellBounds.Height == 0)
return;
foreach (RepStatus t1 in RepairStatus.DisplayOrder)
{
if (tDirStat.Get(t1) <= 0) continue;
bgCol = _displayColor[(int)t1];
break;
}
if (GameGrid.Columns[e.ColumnIndex].Name == "Type")
{
e.CellStyle.BackColor = bgCol;
e.CellStyle.SelectionBackColor = bgCol;
Bitmap bmp = new Bitmap(cellBounds.Width, cellBounds.Height);
Graphics g = Graphics.FromImage(bmp);
string bitmapName;
switch (tRvDir.FileType)
{
case FileType.Zip:
if (tRvDir.RepStatus == RepStatus.DirCorrect && tRvDir.ZipStatus == ZipStatus.TrrntZip)
bitmapName = "ZipTZ";
else
bitmapName = "Zip" + tRvDir.RepStatus;
break;
default:
// hack because DirDirInToSort image doesnt exist.
if (tRvDir.RepStatus == RepStatus.DirInToSort)
bitmapName = "Dir" + RepStatus.DirUnknown;
else
bitmapName = "Dir" + tRvDir.RepStatus;
break;
}
Bitmap bm = rvImages.GetBitmap(bitmapName);
if (bm != null)
{
g.DrawImage(bm, (cellBounds.Width - cellBounds.Height) / 2, 0, 18, 18);
bm.Dispose();
}
else
Debug.WriteLine("Missing Graphic for " + bitmapName);
e.Value = bmp;
}
else if (GameGrid.Columns[e.ColumnIndex].Name == "CGame")
{
e.CellStyle.BackColor = bgCol;
if (String.IsNullOrEmpty(tRvDir.FileName))
e.Value = tRvDir.Name;
else
e.Value = tRvDir.Name + " (Found: " + tRvDir.FileName + ")";
}
else if (GameGrid.Columns[e.ColumnIndex].Name == "CDescription")
{
e.CellStyle.BackColor = bgCol;
if (tRvDir.Game != null)
e.Value = tRvDir.Game.GetData(RvGame.GameData.Description);
}
else if (GameGrid.Columns[e.ColumnIndex].Name == "CCorrect")
{
e.CellStyle.SelectionBackColor = Color.White;
Bitmap bmp = new Bitmap(cellBounds.Width, cellBounds.Height);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White);
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit;
Font drawFont = new Font("Arial", 9);
SolidBrush drawBrushBlack = new SolidBrush(Color.Black);
int gOff;
int columnIndex = 0;
for (int l = 0; l < RepairStatus.DisplayOrder.Length; l++)
{
if (l >= 13) columnIndex = l;
if (tRvDir.DirStatus.Get(RepairStatus.DisplayOrder[l]) <= 0) continue;
gOff = _gameGridColumnXPositions[columnIndex];
Bitmap bm = rvImages.GetBitmap(@"G_" + RepairStatus.DisplayOrder[l]);
if (bm != null)
{
g.DrawImage(bm, gOff, 0, 21, 18);
bm.Dispose();
}
else
Debug.WriteLine("Missing Graphics for " + "G_" + RepairStatus.DisplayOrder[l]);
columnIndex++;
}
columnIndex = 0;
for (int l = 0; l < RepairStatus.DisplayOrder.Length; l++)
{
if (l >= 13)
columnIndex = l;
if (tRvDir.DirStatus.Get(RepairStatus.DisplayOrder[l]) > 0)
{
gOff = _gameGridColumnXPositions[columnIndex];
g.DrawString(tRvDir.DirStatus.Get(RepairStatus.DisplayOrder[l]).ToString(CultureInfo.InvariantCulture), drawFont, drawBrushBlack, new PointF(gOff + 20, 3));
columnIndex++;
}
}
drawBrushBlack.Dispose();
drawFont.Dispose();
e.Value = bmp;
}
else
Console.WriteLine("WARN: GameGrid_CellFormatting() unknown column: {0}", GameGrid.Columns[e.ColumnIndex].Name);
}
private void GameGridColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
// only allow sort on CGame/CDescription
if (e.ColumnIndex != 1 && e.ColumnIndex != 2)
return;
DataGridViewColumn newColumn = GameGrid.Columns[e.ColumnIndex];
DataGridViewColumn oldColumn = GameGrid.Columns[_gameGridSortColumnIndex];
if (newColumn == oldColumn)
{
_gameGridSortOrder = _gameGridSortOrder == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending;
}
else
{
oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
_gameGridSortOrder = SortOrder.Ascending;
}
GameGrid.Sort(new GameGridRowComparer(_gameGridSortOrder, e.ColumnIndex));
newColumn.HeaderCell.SortGlyphDirection = _gameGridSortOrder;
_gameGridSortColumnIndex = e.ColumnIndex;
}
private class GameGridRowComparer : System.Collections.IComparer
{
private readonly int _sortMod = 1;
private readonly int _columnIndex;
public GameGridRowComparer(SortOrder sortOrder, int index)
{
_columnIndex = index;
if (sortOrder == SortOrder.Descending)
_sortMod = -1;
}
public int Compare(object a, object b)
{
DataGridViewRow aRow = (DataGridViewRow)a;
DataGridViewRow bRow = (DataGridViewRow)b;
RvDir aRvDir = (RvDir)aRow.Tag;
RvDir bRvDir = (RvDir)bRow.Tag;
int result = 0;
switch (_columnIndex)
{
case 1: // CGame
result = String.CompareOrdinal(aRvDir.Name, bRvDir.Name);
break;
case 2: // CDescription
String aDes = "";
String bDes = "";
if (aRvDir.Game != null)
aDes = aRvDir.Game.GetData(RvGame.GameData.Description);
if (bRvDir.Game != null)
bDes = bRvDir.Game.GetData(RvGame.GameData.Description);
result = String.CompareOrdinal(aDes, bDes);
// if desciptions match, fall through to sorting by name
if (result == 0)
result = String.CompareOrdinal(aRvDir.Name, bRvDir.Name);
break;
default:
Console.WriteLine("WARN: GameGridRowComparer::Compare() Invalid columnIndex: {0}", _columnIndex);
break;
}
return _sortMod * result;
}
}
#endregion
#region "Rom Grid Code"
private void splitContainer4_Panel1_Resize(object sender, EventArgs e)
{
// fixes a rendering issue in mono
if (splitContainer4.Panel1.Width == 0) return;
int chkLeft = splitContainer4.Panel1.Width - 150;
if (chkLeft < 430) chkLeft = 430;
@@ -752,7 +963,7 @@ namespace ROMVault2
private void gbSetInfo_Resize(object sender, EventArgs e)
{
int leftPos = 84;
const int leftPos = 84;
int rightPos = gbSetInfo.Width - 15;
if (rightPos > 750) rightPos = 750;
int width = rightPos - leftPos;
@@ -782,14 +993,14 @@ namespace ROMVault2
lblSITDeveloper.Width = width;
int width3 = (int)((double)width * 0.24);
int P2 = (int)((double)width * 0.38);
int p2 = (int)((double)width * 0.38);
int width4 = (int) ((double) width*0.24);
lblSITEdition.Width = width3;
lblSIVersion.Left = leftPos + P2 - 78;
lblSITVersion.Left = leftPos + P2;
lblSIVersion.Left = leftPos + p2 - 78;
lblSITVersion.Left = leftPos + p2;
lblSITVersion.Width = width3;
lblSIType.Left = leftPos + width - width3 - 78;
@@ -799,8 +1010,8 @@ namespace ROMVault2
lblSITMedia.Width = width3;
lblSILanguage.Left = leftPos + P2 - 78;
lblSITLanguage.Left = leftPos + P2;
lblSILanguage.Left = leftPos + p2 - 78;
lblSITLanguage.Left = leftPos + p2;
lblSITLanguage.Width = width3;
lblSIPlayers.Left = leftPos + width - width3 - 78;
@@ -809,8 +1020,8 @@ namespace ROMVault2
lblSITRatings.Width = width3;
lblSIGenre.Left = leftPos + P2 - 78;
lblSITGenre.Left = leftPos + P2;
lblSIGenre.Left = leftPos + p2 - 78;
lblSITGenre.Left = leftPos + p2;
lblSITGenre.Width = width3;
lblSIPeripheral.Left = leftPos + width - width3 - 78;
@@ -1052,6 +1263,9 @@ namespace ROMVault2
}
}
if (Settings.IsMono && RomGrid.RowCount > 0)
RomGrid.CurrentCell = RomGrid[0,0];
RomGrid.Rows.Clear();
AddDir(tGame, "");
GC.Collect();
@@ -1085,11 +1299,7 @@ namespace ROMVault2
{
RomGrid.Rows.Add();
int row = RomGrid.Rows.Count - 1;
string imageName = "R_" + tRomTable.DatStatus + "_" + tRomTable.RepStatus;
RomCellDraw tDirCellDraw = new RomCellDraw(imageName, _displayColor[(int)tRomTable.RepStatus]);
RomGrid.Rows[row].Cells[0] = tDirCellDraw;
RomGrid.Rows[row].Tag = tRomTable;
for (int i = 0; i < RomGrid.Rows[row].Cells.Count; i++)
RomGrid.Rows[row].Cells[i].Style.BackColor = _displayColor[(int)tRomTable.RepStatus];
@@ -1170,6 +1380,29 @@ namespace ROMVault2
}
}
}
private void RomGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (_updatingGameGrid)
return;
Rectangle cellBounds = RomGrid.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false);
RvFile tRvFile = (RvFile)RomGrid.Rows[e.RowIndex].Tag;
if (cellBounds.Width == 0 || cellBounds.Height == 0)
return;
if (RomGrid.Columns[e.ColumnIndex].Name == "CGot")
{
Bitmap bmp = new Bitmap(cellBounds.Width, cellBounds.Height);
Graphics g = Graphics.FromImage(bmp);
string bitmapName = "R_" + tRvFile.DatStatus + "_" + tRvFile.RepStatus;
g.DrawImage(rvImages.GetBitmap(bitmapName), 0, 0, 54, 18);
e.Value = bmp;
}
}
#endregion
private void RomGridSelectionChanged(object sender, EventArgs e)
@@ -1201,7 +1434,7 @@ namespace ROMVault2
{
if (_fk == null || _fk.IsDisposed)
_fk = new frmKey();
_fk = new FrmKey();
_fk.Show();
}
@@ -1215,7 +1448,7 @@ namespace ROMVault2
private void BtnReportClick(object sender, EventArgs e)
{
Report.MakeFixFiles();
//frmReport newreporter = new frmReport();
//FrmReport newreporter = new FrmReport();
//newreporter.ShowDialog();
//newreporter.Dispose();
}
@@ -1236,7 +1469,7 @@ namespace ROMVault2
private void AboutRomVaultToolStripMenuItemClick(object sender, EventArgs e)
{
frmHelpAbout fha = new frmHelpAbout();
FrmHelpAbout fha = new FrmHelpAbout();
fha.ShowDialog(this);
fha.Dispose();
}
@@ -1277,63 +1510,27 @@ namespace ROMVault2
private void GameGrid_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
int currentMouseOverRow = GameGrid.HitTest(e.X, e.Y).RowIndex;
if (currentMouseOverRow >= 0)
{
object r1 = GameGrid.Rows[currentMouseOverRow].Cells[1].Value;
string filename = r1 != null ? r1.ToString() : "";
object r2 = GameGrid.Rows[currentMouseOverRow].Cells[2].Value;
string description = r2 != null ? r2.ToString() : "";
if (e.Button != MouseButtons.Right)
return;
try
{
Clipboard.Clear();
Clipboard.SetText("Name : " + filename + Environment.NewLine + "Desc : " + description + Environment.NewLine);
}
catch
{
}
int currentMouseOverRow = GameGrid.HitTest(e.X, e.Y).RowIndex;
if (currentMouseOverRow >= 0)
{
object r1 = GameGrid.Rows[currentMouseOverRow].Cells[1].Value;
string filename = r1 != null ? r1.ToString() : "";
object r2 = GameGrid.Rows[currentMouseOverRow].Cells[2].Value;
string description = r2 != null ? r2.ToString() : "";
try
{
Clipboard.Clear();
Clipboard.SetText("Name : " + filename + Environment.NewLine + "Desc : " + description + Environment.NewLine);
}
catch
{
}
}
}
private void RegistratioToolStripMenuItemClick(object sender, EventArgs e)
{
FrmRegistration freg = new FrmRegistration();
freg.ShowDialog(this);
freg.Dispose();
}
private void checkForUpdateToolStripMenuItem_Click(object sender, EventArgs e)
{
BasicHttpBinding b = new BasicHttpBinding();
EndpointAddress ep = new EndpointAddress(@"http://services.romvault.com/Service1.svc");
Service1Client s = new Service1Client(b, ep);
string v = s.GetLatestVersion1(Program.Version, Program.SubVersion);
string thisV = Program.Version + "." + Program.SubVersion.ToString("0000");
int res = String.Compare(v, thisV, StringComparison.Ordinal);
if (res > 0)
{
string url = s.GetUpdateLink1(Program.Version, Program.SubVersion);
MessageBox.Show(Resources.Program_Main_There_is_a_new_release_download_now_from + url);
Process.Start(url);
}
else
{
MessageBox.Show(@"You are running the latest version " + Program.Version + "." + Program.SubVersion);
}
}
}
}

View File

@@ -74,7 +74,7 @@
//
// cancelButton
//
this.cancelButton.Location = new System.Drawing.Point(420, 99);
this.cancelButton.Location = new System.Drawing.Point(424, 99);
this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(75, 23);
this.cancelButton.TabIndex = 2;
@@ -123,7 +123,7 @@
this.ErrorGrid.ShowCellToolTips = false;
this.ErrorGrid.ShowEditingIcon = false;
this.ErrorGrid.ShowRowErrors = false;
this.ErrorGrid.Size = new System.Drawing.Size(591, 186);
this.ErrorGrid.Size = new System.Drawing.Size(511, 186);
this.ErrorGrid.TabIndex = 6;
this.ErrorGrid.SelectionChanged += new System.EventHandler(this.ErrorGridSelectionChanged);
//
@@ -165,7 +165,7 @@
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.ErrorGrid);
this.splitContainer1.Size = new System.Drawing.Size(591, 320);
this.splitContainer1.Size = new System.Drawing.Size(511, 320);
this.splitContainer1.SplitterDistance = 130;
this.splitContainer1.TabIndex = 8;
//
@@ -184,9 +184,8 @@
//
// FrmProgressWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(591, 320);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(511, 320);
this.Controls.Add(this.splitContainer1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FrmProgressWindow";

View File

@@ -26,7 +26,7 @@ namespace ROMVault2
_titleRoot = titleRoot;
InitializeComponent();
ClientSize = new Size(498, 131);
ClientSize = new Size(511, 131);
_titleRoot = titleRoot;
@@ -128,8 +128,8 @@ namespace ROMVault2
if (!_errorOpen)
{
_errorOpen = true;
ClientSize = new Size(498, 292);
MinimumSize = new Size(498, 292);
ClientSize = new Size(511, 292);
MinimumSize = new Size(511, 292);
FormBorderStyle = FormBorderStyle.SizableToolWindow;
}
@@ -153,8 +153,8 @@ namespace ROMVault2
if (!_errorOpen)
{
_errorOpen = true;
ClientSize = new Size(498, 292);
MinimumSize = new Size(498, 292);
ClientSize = new Size(511, 292);
MinimumSize = new Size(511, 292);
FormBorderStyle = FormBorderStyle.SizableToolWindow;
}

View File

@@ -244,7 +244,7 @@
// FrmProgressWindowFix
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(1027, 500);
this.Controls.Add(this.splitContainer1);

View File

@@ -1,121 +0,0 @@
namespace ROMVault2
{
partial class FrmRegistration
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.txtName = new System.Windows.Forms.TextBox();
this.txtEmail = new System.Windows.Forms.TextBox();
this.btnOK = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label1
//
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(420, 49);
this.label1.TabIndex = 0;
this.label1.Text = "To make RomVault 2 the best is can be, RomVault 2 will send error reports to the " +
"author. Please fill out this from so that the Author can contact you in the case" +
" of a crash.";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 58);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(120, 13);
this.label2.TabIndex = 1;
this.label2.Text = "Your Name: (Username)";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(12, 100);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(103, 13);
this.label3.TabIndex = 2;
this.label3.Text = "Your Contact Email :";
//
// txtName
//
this.txtName.Location = new System.Drawing.Point(15, 74);
this.txtName.Name = "txtName";
this.txtName.Size = new System.Drawing.Size(417, 20);
this.txtName.TabIndex = 3;
//
// txtEmail
//
this.txtEmail.Location = new System.Drawing.Point(15, 116);
this.txtEmail.Name = "txtEmail";
this.txtEmail.Size = new System.Drawing.Size(417, 20);
this.txtEmail.TabIndex = 4;
//
// btnOK
//
this.btnOK.Location = new System.Drawing.Point(303, 145);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(128, 23);
this.btnOK.TabIndex = 5;
this.btnOK.Text = "OK";
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// FrmRegistration
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(444, 178);
this.ControlBox = false;
this.Controls.Add(this.btnOK);
this.Controls.Add(this.txtEmail);
this.Controls.Add(this.txtName);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "FrmRegistration";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Registration";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.TextBox txtEmail;
private System.Windows.Forms.Button btnOK;
}
}

View File

@@ -1,28 +0,0 @@
/******************************************************
* ROMVault2 is written by Gordon J. *
* Contact gordon@romvault.com *
* Copyright 2014 *
******************************************************/
using System;
using System.Windows.Forms;
namespace ROMVault2
{
public partial class FrmRegistration : Form
{
public FrmRegistration()
{
InitializeComponent();
txtName.Text = Settings.Username;
txtEmail.Text = Settings.EMail;
}
private void btnOK_Click(object sender, EventArgs e)
{
Settings.Username = txtName.Text;
Settings.EMail = txtEmail.Text;
Close();
}
}
}

View File

@@ -198,7 +198,7 @@
// FrmSetDir
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(694, 391);
this.Controls.Add(this.btnResetAll);
this.Controls.Add(this.btnClose);

View File

@@ -35,6 +35,9 @@ namespace ROMVault2
private void UpdateGrid()
{
if (Settings.IsMono && DataGridGames.RowCount > 0)
DataGridGames.CurrentCell = DataGridGames[0,0];
DataGridGames.Rows.Clear();
foreach (DirMap t in Settings.DirPathMap)
{
@@ -77,7 +80,7 @@ namespace ROMVault2
{
ShowNewFolderButton = true,
Description = Resources.FrmSetDir_BtnSetRomLocationClick_Please_select_a_folder_for_This_Rom_Set,
RootFolder = Environment.SpecialFolder.DesktopDirectory,
RootFolder = (Settings.IsMono ? Environment.SpecialFolder.MyComputer : Environment.SpecialFolder.DesktopDirectory),
SelectedPath = DBHelper.GetRealPath(_datLocation)
};
if (browse.ShowDialog() == DialogResult.OK)

View File

@@ -220,7 +220,7 @@
// FrmSettings
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(545, 346);
this.Controls.Add(this.chkDoubleCheckDelete);
this.Controls.Add(this.label5);

View File

@@ -88,7 +88,7 @@ namespace ROMVault2
{
ShowNewFolderButton = true,
Description = Resources.FrmSettings_BtnDatClick_Please_select_a_folder_for_DAT_Root,
RootFolder = Environment.SpecialFolder.DesktopDirectory,
RootFolder = (Settings.IsMono ? Environment.SpecialFolder.MyComputer : Environment.SpecialFolder.DesktopDirectory),
SelectedPath = Settings.DatRoot
};

View File

@@ -1,6 +1,6 @@
namespace ROMVault2
{
partial class frmShowError
partial class FrmShowError
{
/// <summary>
/// Required designer variable.
@@ -28,7 +28,7 @@
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmShowError));
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmShowError));
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
@@ -62,17 +62,17 @@
this.label1.TabIndex = 2;
this.label1.Text = "Sending Error Message to RomVault.Com";
//
// frmShowError
// FrmShowError
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(589, 583);
this.Controls.Add(this.label1);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "frmShowError";
this.Name = "FrmShowError";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "RomVault Error report";
this.ResumeLayout(false);
@@ -86,4 +86,4 @@
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label label1;
}
}
}

View File

@@ -9,9 +9,9 @@ using System.Windows.Forms;
namespace ROMVault2
{
public partial class frmShowError : Form
public partial class FrmShowError : Form
{
public frmShowError()
public FrmShowError()
{
InitializeComponent();
}

View File

@@ -35,7 +35,6 @@
this.progressBar = new System.Windows.Forms.ProgressBar();
this.lblVersion = new System.Windows.Forms.Label();
this.bgWork = new System.ComponentModel.BackgroundWorker();
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// lblStatus
@@ -74,24 +73,13 @@
//
this.bgWork.WorkerReportsProgress = true;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 185);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(35, 13);
this.label1.TabIndex = 6;
this.label1.Text = "label1";
//
// FrmSplashScreen
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.ClientSize = new System.Drawing.Size(465, 207);
this.ControlBox = false;
this.Controls.Add(this.label1);
this.Controls.Add(this.lblVersion);
this.Controls.Add(this.progressBar);
this.Controls.Add(this.lblStatus);
@@ -100,10 +88,9 @@
this.Name = "FrmSplashScreen";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "frmSplashScreen";
this.Text = "FrmSplashScreen";
this.Shown += new System.EventHandler(this.FrmSplashScreenShown);
this.ResumeLayout(false);
this.PerformLayout();
}
@@ -114,6 +101,5 @@
private System.Windows.Forms.ProgressBar progressBar;
private System.Windows.Forms.Label lblVersion;
private System.ComponentModel.BackgroundWorker bgWork;
private System.Windows.Forms.Label label1;
}
}
}

View File

@@ -6,11 +6,9 @@
using System;
using System.ComponentModel;
using System.ServiceModel;
using System.Threading;
using System.Windows.Forms;
using ROMVault2.Properties;
using ROMVault2.RVRef;
using ROMVault2.RvDB;
namespace ROMVault2
@@ -26,8 +24,6 @@ namespace ROMVault2
Opacity = 0;
timer1.Interval = 50;
label1.Text = @"Registered to : " + Settings.Username + @" Contact Email (" + Settings.EMail + @")";
bgWork.DoWork += StartUpCode;
bgWork.ProgressChanged += BgwProgressChanged;
bgWork.RunWorkerCompleted += BgwRunWorkerCompleted;
@@ -42,64 +38,11 @@ namespace ROMVault2
private void StartUpCode(object sender, DoWorkEventArgs e)
{
BasicHttpBinding b = new BasicHttpBinding { SendTimeout = new TimeSpan(0, 0, 20), ReceiveTimeout = new TimeSpan(0, 0, 20) };
EndpointAddress ep = new EndpointAddress(@"http://services.romvault.com/Service1.svc");
Service1Client s = new Service1Client(b, ep);
if (string.IsNullOrEmpty(Settings.Username) || string.IsNullOrEmpty(Settings.EMail))
{
FrmRegistration freg = new FrmRegistration();
freg.ShowDialog();
freg.Dispose();
}
bool isNetworkAvailable = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
string r = "OK";
try
{
if (isNetworkAvailable)
r = s.SendUser1(Settings.Username, Settings.EMail, Program.Version, Program.SubVersion);
}
catch (Exception)
{
r = "OK";
}
if (r != "OK")
{
Program.ErrorMessage=Resources.Program_Main_You_are_not_Authorised_to_use_this_program;
return;
}
// normal check ends
string thisV = Program.Version + "." + Program.SubVersion.ToString("0000");
string v = thisV;
try
{
if (isNetworkAvailable)
v = s.GetLatestVersion1(Program.Version, Program.SubVersion);
}
catch (Exception)
{
v = thisV;
}
if (String.Compare(v, thisV, StringComparison.Ordinal) > 0)
{
Program.URL = s.GetUpdateLink1(Program.Version, Program.SubVersion);
Program.ErrorMessage=Resources.Program_Main_There_is_a_new_release_download_now_from + Program.URL;
return;
}
s.Close();
RepairStatus.InitStatusCheck();
Settings.SetDefaults();
DB.Read(sender,e);
}

View File

@@ -0,0 +1,569 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="bgWork.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@@ -47,12 +47,7 @@ namespace ROMVault2.IO
public string FullName;
public long LastWriteTime;
public long Length;
public int fileAttributes;
public bool isHidden
{
get { return (fileAttributes & Win32Native.FILE_ATTRIBUTE_HIDDEN) != 0; }
}
public FileInfo()
{ }
@@ -62,6 +57,17 @@ namespace ROMVault2.IO
FullName = path;
Name = Path.GetFileName(path);
if (Settings.IsUnix)
{
System.IO.FileInfo fi = new System.IO.FileInfo(path);
if(!fi.Exists) return;
Length = fi.Length;
LastWriteTime = fi.LastWriteTimeUtc.Ticks;
return;
}
string fileName = NameFix.AddLongPathPrefix(path);
Win32Native.WIN32_FILE_ATTRIBUTE_DATA wIn32FileAttributeData = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
@@ -71,7 +77,6 @@ namespace ROMVault2.IO
Length = Convert.Length(wIn32FileAttributeData.fileSizeHigh, wIn32FileAttributeData.fileSizeLow);
LastWriteTime = Convert.Time(wIn32FileAttributeData.ftLastWriteTimeHigh, wIn32FileAttributeData.ftLastWriteTimeLow);
fileAttributes = wIn32FileAttributeData.fileAttributes;
}
}
@@ -81,13 +86,7 @@ namespace ROMVault2.IO
public string Name;
public string FullName;
public long LastWriteTime;
public int fileAttributes;
public bool isHidden
{
get { return (fileAttributes & Win32Native.FILE_ATTRIBUTE_HIDDEN) != 0; }
}
public DirectoryInfo()
{ }
public DirectoryInfo(string path)
@@ -95,6 +94,16 @@ namespace ROMVault2.IO
FullName = path;
Name = Path.GetFileName(path);
if (Settings.IsUnix)
{
System.IO.DirectoryInfo fi = new System.IO.DirectoryInfo(path);
if(!fi.Exists) return;
LastWriteTime = fi.LastWriteTimeUtc.Ticks;
return;
}
string fileName = NameFix.AddLongPathPrefix(path);
Win32Native.WIN32_FILE_ATTRIBUTE_DATA wIn32FileAttributeData = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
@@ -102,7 +111,6 @@ namespace ROMVault2.IO
if (!b || (wIn32FileAttributeData.fileAttributes & Win32Native.FILE_ATTRIBUTE_DIRECTORY) == 0) return;
LastWriteTime = Convert.Time(wIn32FileAttributeData.ftLastWriteTimeHigh, wIn32FileAttributeData.ftLastWriteTimeLow);
fileAttributes = wIn32FileAttributeData.fileAttributes;
}
@@ -115,6 +123,25 @@ namespace ROMVault2.IO
{
List<DirectoryInfo> dirs = new List<DirectoryInfo>();
if (Settings.IsUnix)
{
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(FullName);
System.IO.DirectoryInfo[] arrDi = di.GetDirectories(SearchPattern);
foreach (System.IO.DirectoryInfo tDi in arrDi)
{
DirectoryInfo lDi = new DirectoryInfo
{
Name = tDi.Name,
FullName = Path.Combine(FullName, tDi.Name),
LastWriteTime = tDi.LastWriteTimeUtc.Ticks
};
dirs.Add(lDi);
}
return dirs.ToArray();
}
string dirName = NameFix.AddLongPathPrefix(FullName);
Win32Native.WIN32_FIND_DATA findData = new Win32Native.WIN32_FIND_DATA();
@@ -135,8 +162,7 @@ namespace ROMVault2.IO
{
Name = currentFileName,
FullName = Path.Combine(FullName, currentFileName),
LastWriteTime = Convert.Time(findData.ftLastWriteTimeHigh, findData.ftLastWriteTimeLow),
fileAttributes = findData.dwFileAttributes
LastWriteTime = Convert.Time(findData.ftLastWriteTimeHigh, findData.ftLastWriteTimeLow)
};
dirs.Add(di);
}
@@ -157,6 +183,24 @@ namespace ROMVault2.IO
{
List<FileInfo> files = new List<FileInfo>();
if (Settings.IsUnix)
{
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(FullName);
System.IO.FileInfo[] arrDi = di.GetFiles(SearchPattern);
foreach (System.IO.FileInfo tDi in arrDi)
{
FileInfo lDi = new FileInfo
{
Name = tDi.Name,
FullName = Path.Combine(FullName, tDi.Name),
Length = tDi.Length,
LastWriteTime = tDi.LastWriteTimeUtc.Ticks
};
files.Add(lDi);
}
return files.ToArray();
}
string dirName = NameFix.AddLongPathPrefix(FullName);
Win32Native.WIN32_FIND_DATA findData = new Win32Native.WIN32_FIND_DATA();
@@ -177,8 +221,7 @@ namespace ROMVault2.IO
Name = currentFileName,
FullName = Path.Combine(FullName, currentFileName),
Length = Convert.Length(findData.nFileSizeHigh, findData.nFileSizeLow),
LastWriteTime = Convert.Time(findData.ftLastWriteTimeHigh, findData.ftLastWriteTimeLow),
fileAttributes = findData.dwFileAttributes
LastWriteTime = Convert.Time(findData.ftLastWriteTimeHigh, findData.ftLastWriteTimeLow)
};
files.Add(fi);
}
@@ -196,6 +239,10 @@ namespace ROMVault2.IO
{
public static bool Exists(string path)
{
if (Settings.IsUnix)
return System.IO.Directory.Exists(path);
string fixPath = NameFix.AddLongPathPrefix(path);
Win32Native.WIN32_FILE_ATTRIBUTE_DATA wIn32FileAttributeData = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
@@ -205,6 +252,13 @@ namespace ROMVault2.IO
}
public static void Move(String sourceDirName, String destDirName)
{
if (Settings.IsUnix)
{
System.IO.Directory.Move(sourceDirName, destDirName);
return;
}
if (sourceDirName == null)
throw new ArgumentNullException("sourceDirName");
if (sourceDirName.Length == 0)
@@ -234,6 +288,12 @@ namespace ROMVault2.IO
}
public static void Delete(String path)
{
if (Settings.IsUnix)
{
System.IO.Directory.Delete(path);
return;
}
String fullPath = NameFix.AddLongPathPrefix(path);
Win32Native.RemoveDirectory(fullPath);
@@ -241,6 +301,13 @@ namespace ROMVault2.IO
public static void CreateDirectory(String path)
{
if (Settings.IsUnix)
{
System.IO.Directory.CreateDirectory(path);
return;
}
if (path == null)
throw new ArgumentNullException("path");
if (path.Length == 0)
@@ -256,6 +323,10 @@ namespace ROMVault2.IO
{
public static bool Exists(string path)
{
if (Settings.IsUnix)
return System.IO.File.Exists(path);
string fixPath = NameFix.AddLongPathPrefix(path);
Win32Native.WIN32_FILE_ATTRIBUTE_DATA wIn32FileAttributeData = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
@@ -269,6 +340,12 @@ namespace ROMVault2.IO
}
public static void Copy(String sourceFileName, String destFileName, bool overwrite)
{
if (Settings.IsUnix)
{
System.IO.File.Copy(sourceFileName, destFileName, overwrite);
return;
}
if (sourceFileName == null || destFileName == null)
throw new ArgumentNullException((sourceFileName == null ? "sourceFileName" : "destFileName"), "ArgumentNull_FileName");
if (sourceFileName.Length == 0 || destFileName.Length == 0)
@@ -310,6 +387,12 @@ namespace ROMVault2.IO
}
public static void Move(String sourceFileName, String destFileName)
{
if (Settings.IsUnix)
{
System.IO.File.Move(sourceFileName, destFileName);
return;
}
if (sourceFileName == null || destFileName == null)
throw new ArgumentNullException((sourceFileName == null ? "sourceFileName" : "destFileName"), "ArgumentNull_FileName");
if (sourceFileName.Length == 0 || destFileName.Length == 0)
@@ -329,6 +412,13 @@ namespace ROMVault2.IO
}
public static void Delete(String path)
{
if (Settings.IsUnix)
{
System.IO.File.Delete(path);
return;
}
string fixPath = NameFix.AddLongPathPrefix(path);
if (!Win32Native.DeleteFile(fixPath))
@@ -341,6 +431,20 @@ namespace ROMVault2.IO
public static bool SetAttributes(String path, FileAttributes fileAttributes)
{
if (Settings.IsUnix)
{
try
{
System.IO.File.SetAttributes(path, (System.IO.FileAttributes) fileAttributes);
return true;
}
catch (Exception)
{
return false;
}
}
String fullPath = NameFix.AddLongPathPrefix(path);
return Win32Native.SetFileAttributes(fullPath, (int)fileAttributes);
}
@@ -362,6 +466,9 @@ namespace ROMVault2.IO
}
public static string Combine(string path1, string path2)
{
if (Settings.IsUnix)
return System.IO.Path.Combine(path1, path2);
if (path1 == null || path2 == null)
throw new ArgumentNullException((path1 == null) ? "path1" : "path2");
//CheckInvalidPathChars(path1);
@@ -431,6 +538,10 @@ namespace ROMVault2.IO
}
public static String GetDirectoryName(String path)
{
if (Settings.IsUnix)
return System.IO.Path.GetDirectoryName(path);
if (path != null)
{
int root = GetRootLength(path);
@@ -489,6 +600,19 @@ namespace ROMVault2.IO
public static int OpenFileRead(string path, out System.IO.Stream stream)
{
if (Settings.IsUnix)
{
try
{
stream=new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read);
return 0;
}
catch (Exception)
{
stream = null;
return Marshal.GetLastWin32Error();
}
}
string filename = NameFix.AddLongPathPrefix(path);
SafeFileHandle hFile = Win32Native.CreateFile(filename,
@@ -510,6 +634,21 @@ namespace ROMVault2.IO
public static int OpenFileWrite(string path, out System.IO.Stream stream)
{
if (Settings.IsUnix)
{
try
{
stream = new System.IO.FileStream(path, System.IO.FileMode.Create, System.IO.FileAccess.Write);
return 0;
}
catch (Exception)
{
stream = null;
return Marshal.GetLastWin32Error();
}
}
string filename = NameFix.AddLongPathPrefix(path);
SafeFileHandle hFile = Win32Native.CreateFile(filename,
GENERIC_WRITE,
@@ -536,6 +675,9 @@ namespace ROMVault2.IO
{
public static string GetShortPath(string path)
{
if (Settings.IsUnix)
return path;
int remove = 0;
string retPath;
if (path.StartsWith(@"\\"))

View File

@@ -14,8 +14,8 @@ namespace ROMVault2
{
//public static UsernamePassword Up;
public static readonly Encoding Enc = Encoding.GetEncoding(28591);
public const string Version = "2.1";
public const int SubVersion = 25;
public const string Version = "2.2";
public const int SubVersion = 3;
public static string ErrorMessage;
public static string URL;

View File

@@ -9,7 +9,7 @@
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ROMVault2</RootNamespace>
<AssemblyName>ROMVault21</AssemblyName>
<AssemblyName>ROMVault22</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
@@ -35,8 +35,8 @@
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>.\</OutputPath>
<DefineConstants>TRACE;DEBUG;UNMANAGED, COMPRESS, LZMA_STREAM, DOTNET20</DefineConstants>
<OutputPath>..\..\Stage\</OutputPath>
<DefineConstants>TRACE;DEBUG;UNMANAGED;COMPRESS;LZMA_STREAM;DOTNET20</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
@@ -55,7 +55,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>..\..\Stage\</OutputPath>
<DefineConstants>TRACE;DEBUG;UNMANAGED, COMPRESS, LZMA_STREAM, DOTNET20</DefineConstants>
<DefineConstants>TRACE;DEBUG;UNMANAGED;COMPRESS;LZMA_STREAM;DOTNET20</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<CodeAnalysisLogFile>..\..\Stage2\ROMVault2.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
@@ -70,7 +70,7 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<OutputPath>..\..\Stage\</OutputPath>
<DefineConstants>TRACE;UNMANAGED, COMPRESS, LZMA_STREAM, DOTNET20</DefineConstants>
<DefineConstants>TRACE;UNMANAGED;COMPRESS;LZMA_STREAM;DOTNET20</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
@@ -89,7 +89,6 @@
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
@@ -107,7 +106,7 @@
<Compile Include="FrmProgressWindowFix.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmProgressWindowFix.designer.cs">
<Compile Include="FrmProgressWindowFix.Designer.cs">
<DependentUpon>FrmProgressWindowFix.cs</DependentUpon>
</Compile>
<Compile Include="RvDB\FileStatus.cs" />
@@ -128,17 +127,17 @@
<Compile Include="DatReaders\DatXMLReader.cs" />
<Compile Include="DatUpdate.cs" />
<Compile Include="FileScanning.cs" />
<Compile Include="frmHelpAbout.cs">
<Compile Include="FrmHelpAbout.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmHelpAbout.Designer.cs">
<DependentUpon>frmHelpAbout.cs</DependentUpon>
<Compile Include="FrmHelpAbout.Designer.cs">
<DependentUpon>FrmHelpAbout.cs</DependentUpon>
</Compile>
<Compile Include="frmKey.cs">
<Compile Include="FrmKey.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmKey.designer.cs">
<DependentUpon>frmKey.cs</DependentUpon>
<Compile Include="FrmKey.Designer.cs">
<DependentUpon>FrmKey.cs</DependentUpon>
</Compile>
<Compile Include="FrmProgressWindow.cs">
<SubType>Form</SubType>
@@ -146,36 +145,29 @@
<Compile Include="FrmProgressWindow.Designer.cs">
<DependentUpon>FrmProgressWindow.cs</DependentUpon>
</Compile>
<Compile Include="FrmRegistration.cs">
<Compile Include="FrmSetDir.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmRegistration.Designer.cs">
<DependentUpon>FrmRegistration.cs</DependentUpon>
<Compile Include="FrmSetDir.Designer.cs">
<DependentUpon>FrmSetDir.cs</DependentUpon>
</Compile>
<Compile Include="frmSetDir.cs">
<Compile Include="FrmSettings.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmSetDir.Designer.cs">
<DependentUpon>frmSetDir.cs</DependentUpon>
<Compile Include="FrmSettings.Designer.cs">
<DependentUpon>FrmSettings.cs</DependentUpon>
</Compile>
<Compile Include="frmSettings.cs">
<Compile Include="FrmShowError.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmSettings.Designer.cs">
<DependentUpon>frmSettings.cs</DependentUpon>
<Compile Include="FrmShowError.Designer.cs">
<DependentUpon>FrmShowError.cs</DependentUpon>
</Compile>
<Compile Include="DirCellDraw.cs" />
<Compile Include="frmShowError.cs">
<Compile Include="FrmSplashScreen.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmShowError.designer.cs">
<DependentUpon>frmShowError.cs</DependentUpon>
</Compile>
<Compile Include="frmSplashScreen.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmSplashScreen.Designer.cs">
<DependentUpon>frmSplashScreen.cs</DependentUpon>
<Compile Include="FrmSplashScreen.Designer.cs">
<DependentUpon>FrmSplashScreen.cs</DependentUpon>
</Compile>
<Compile Include="ReportError.cs" />
<Compile Include="rvImages1.Designer.cs">
@@ -190,11 +182,6 @@
<Compile Include="rvTree.Designer.cs">
<DependentUpon>rvTree.cs</DependentUpon>
</Compile>
<Compile Include="Service References\RVRef\Reference.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Reference.svcmap</DependentUpon>
</Compile>
<Compile Include="Settings.cs" />
<Compile Include="RvDB\DB.cs" />
<Compile Include="FrmMain.cs">
@@ -225,11 +212,11 @@
<Compile Include="SupportedFiles\Zip\ZLib\ZlibCodec.cs" />
<Compile Include="SupportedFiles\Zip\ZLib\ZlibConstants.cs" />
<Compile Include="SupportedFiles\Zip\ZLib\ZlibStream.cs" />
<EmbeddedResource Include="frmHelpAbout.resx">
<DependentUpon>frmHelpAbout.cs</DependentUpon>
<EmbeddedResource Include="FrmHelpAbout.resx">
<DependentUpon>FrmHelpAbout.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmKey.resx">
<DependentUpon>frmKey.cs</DependentUpon>
<EmbeddedResource Include="FrmKey.resx">
<DependentUpon>FrmKey.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="FrmMain.resx">
@@ -241,18 +228,15 @@
<EmbeddedResource Include="FrmProgressWindowFix.resx">
<DependentUpon>FrmProgressWindowFix.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmRegistration.resx">
<DependentUpon>FrmRegistration.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmSettings.resx">
<DependentUpon>frmSettings.cs</DependentUpon>
<EmbeddedResource Include="FrmSettings.resx">
<DependentUpon>FrmSettings.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="frmShowError.resx">
<DependentUpon>frmShowError.cs</DependentUpon>
<EmbeddedResource Include="FrmShowError.resx">
<DependentUpon>FrmShowError.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmSplashScreen.resx">
<DependentUpon>frmSplashScreen.cs</DependentUpon>
<EmbeddedResource Include="FrmSplashScreen.resx">
<DependentUpon>FrmSplashScreen.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
@@ -281,13 +265,6 @@
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<None Include="Service References\RVRef\Service1.xsd">
<SubType>Designer</SubType>
</None>
<None Include="Service References\RVRef\Service11.wsdl" />
<None Include="Service References\RVRef\Service11.xsd">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
@@ -311,19 +288,6 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="chip.ico" />
<None Include="Service References\RVRef\Service11.disco" />
<None Include="Service References\RVRef\Reference.svcmap">
<Generator>WCF Proxy Generator</Generator>
<LastGenOutput>Reference.cs</LastGenOutput>
</None>
<None Include="Service References\RVRef\configuration.svcinfo" />
<None Include="Service References\RVRef\configuration91.svcinfo" />
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Service References\" />
</ItemGroup>
<ItemGroup>
<WCFMetadataStorage Include="Service References\RVRef\" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

View File

@@ -40,7 +40,7 @@ namespace ROMVault2
{
ShowNewFolderButton = true,
Description = @"Please select a folder for Dats",
RootFolder = Environment.SpecialFolder.DesktopDirectory,
RootFolder = (Settings.IsMono ? Environment.SpecialFolder.MyComputer : Environment.SpecialFolder.DesktopDirectory),
SelectedPath = @"apps"
};

View File

@@ -10,7 +10,6 @@ using System.Globalization;
using System.IO;
using System.ServiceModel;
using System.Windows.Forms;
using ROMVault2.RVRef;
using ROMVault2.RvDB;
using ROMVault2.Utils;
@@ -32,9 +31,7 @@ namespace ROMVault2
}
message += string.Format("\r\nSTACK TRACE:\r\n{0}", e.Exception.StackTrace);
SendErrorMessage(message);
frmShowError fshow = new frmShowError();
FrmShowError fshow = new FrmShowError();
fshow.settype(message);
fshow.ShowDialog();
@@ -58,9 +55,7 @@ namespace ROMVault2
}
message += string.Format("\r\nSTACK TRACE:\r\n{0}", e.StackTrace);
SendErrorMessage(message);
frmShowError fshow = new frmShowError();
FrmShowError fshow = new FrmShowError();
fshow.settype(message);
fshow.ShowDialog();
@@ -80,9 +75,7 @@ namespace ROMVault2
message += string.Format("\r\nSTACK TRACE:\r\n{0}", Environment.StackTrace);
SendErrorMessage(message);
frmShowError fshow = new frmShowError();
FrmShowError fshow = new FrmShowError();
fshow.settype(message);
fshow.ShowDialog();
@@ -103,7 +96,6 @@ namespace ROMVault2
public static void SendAndShow(string message, string caption = "RomVault", MessageBoxButtons buttons = MessageBoxButtons.OK, MessageBoxIcon icon = MessageBoxIcon.Exclamation)
{
SendErrorMessage(message);
Show(message, caption, buttons, icon);
}
@@ -115,49 +107,6 @@ namespace ROMVault2
MessageBox.Show(text, caption, buttons, icon);
}
public static void SendErrorMessage(string message)
{
bool isNetworkAvailable = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
if (!isNetworkAvailable) return;
string st = Environment.StackTrace;
BasicHttpBinding b = new BasicHttpBinding { SendTimeout = new TimeSpan(0, 0, 5), ReceiveTimeout = new TimeSpan(0, 0, 5) };
EndpointAddress e = new EndpointAddress(@"http://services.romvault.com/Service1.svc");
Service1Client s = new Service1Client(b, e);
try
{
s.SendErrorMessage3(Settings.Username, Settings.EMail, Program.Version, Program.SubVersion, message + "\n" + st);
}
catch
{
}
s.Close();
}
public static void SendErrorMessageDat(string message, string filename)
{
bool isNetworkAvailable = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
if (!isNetworkAvailable) return;
BasicHttpBinding b = new BasicHttpBinding { SendTimeout = new TimeSpan(0, 0, 5), ReceiveTimeout = new TimeSpan(0, 0, 5) };
EndpointAddress e = new EndpointAddress(@"http://services.romvault.com/Service1.svc");
Service1Client s = new Service1Client(b, e);
try
{
s.SendDATErrorMessage3(Settings.Username, Settings.EMail, Program.Version, Program.SubVersion, message, filename);
}
catch
{
}
s.Close();
}
private static string _logfilename;
public static void ReportList(List<RvFile> files)
@@ -225,4 +174,4 @@ namespace ROMVault2
sw.Close();
}
}
}
}

View File

@@ -1,137 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34003
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ROMVault2.RVRef {
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="RVRef.IService1")]
public interface IService1 {
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/CheckPassword", ReplyAction="http://tempuri.org/IService1/CheckPasswordResponse")]
string CheckPassword(string username, string password);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendUser", ReplyAction="http://tempuri.org/IService1/SendUserResponse")]
string SendUser(string username, string email, int version);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendUser1", ReplyAction="http://tempuri.org/IService1/SendUser1Response")]
string SendUser1(string username, string email, string version, int subversion);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetLatestVersion", ReplyAction="http://tempuri.org/IService1/GetLatestVersionResponse")]
int GetLatestVersion(int versionNow);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetLatestVersion1", ReplyAction="http://tempuri.org/IService1/GetLatestVersion1Response")]
string GetLatestVersion1(string version, int subversion);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetUpdateLink", ReplyAction="http://tempuri.org/IService1/GetUpdateLinkResponse")]
string GetUpdateLink();
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetUpdateLink1", ReplyAction="http://tempuri.org/IService1/GetUpdateLink1Response")]
string GetUpdateLink1(string version, int subversion);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendErrorMessage", ReplyAction="http://tempuri.org/IService1/SendErrorMessageResponse")]
void SendErrorMessage(string username, string error);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendErrorMessage1", ReplyAction="http://tempuri.org/IService1/SendErrorMessage1Response")]
void SendErrorMessage1(string username, string email, string error);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendErrorMessage2", ReplyAction="http://tempuri.org/IService1/SendErrorMessage2Response")]
void SendErrorMessage2(string username, string email, int version, string error);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendErrorMessage3", ReplyAction="http://tempuri.org/IService1/SendErrorMessage3Response")]
void SendErrorMessage3(string username, string email, string version, int subversion, string error);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendDATErrorMessage2", ReplyAction="http://tempuri.org/IService1/SendDATErrorMessage2Response")]
void SendDATErrorMessage2(string username, string email, int version, string error, string filename);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/SendDATErrorMessage3", ReplyAction="http://tempuri.org/IService1/SendDATErrorMessage3Response")]
void SendDATErrorMessage3(string username, string email, string version, int subversion, string error, string filename);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface IService1Channel : ROMVault2.RVRef.IService1, System.ServiceModel.IClientChannel {
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class Service1Client : System.ServiceModel.ClientBase<ROMVault2.RVRef.IService1>, ROMVault2.RVRef.IService1 {
public Service1Client() {
}
public Service1Client(string endpointConfigurationName) :
base(endpointConfigurationName) {
}
public Service1Client(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public Service1Client(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public Service1Client(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress) {
}
public string CheckPassword(string username, string password) {
return base.Channel.CheckPassword(username, password);
}
public string SendUser(string username, string email, int version) {
return base.Channel.SendUser(username, email, version);
}
public string SendUser1(string username, string email, string version, int subversion) {
return base.Channel.SendUser1(username, email, version, subversion);
}
public int GetLatestVersion(int versionNow) {
return base.Channel.GetLatestVersion(versionNow);
}
public string GetLatestVersion1(string version, int subversion) {
return base.Channel.GetLatestVersion1(version, subversion);
}
public string GetUpdateLink() {
return base.Channel.GetUpdateLink();
}
public string GetUpdateLink1(string version, int subversion) {
return base.Channel.GetUpdateLink1(version, subversion);
}
public void SendErrorMessage(string username, string error) {
base.Channel.SendErrorMessage(username, error);
}
public void SendErrorMessage1(string username, string email, string error) {
base.Channel.SendErrorMessage1(username, email, error);
}
public void SendErrorMessage2(string username, string email, int version, string error) {
base.Channel.SendErrorMessage2(username, email, version, error);
}
public void SendErrorMessage3(string username, string email, string version, int subversion, string error) {
base.Channel.SendErrorMessage3(username, email, version, subversion, error);
}
public void SendDATErrorMessage2(string username, string email, int version, string error, string filename) {
base.Channel.SendDATErrorMessage2(username, email, version, error, filename);
}
public void SendDATErrorMessage3(string username, string email, string version, int subversion, string error, string filename) {
base.Channel.SendDATErrorMessage3(username, email, version, subversion, error, filename);
}
}
}

View File

@@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="bf99e9bc-8e26-46b0-b7b2-041f41153d41" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
<ClientOptions>
<GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
<EnableDataBinding>true</EnableDataBinding>
<ExcludedTypes />
<ImportXmlTypes>false</ImportXmlTypes>
<GenerateInternalTypes>false</GenerateInternalTypes>
<GenerateMessageContracts>false</GenerateMessageContracts>
<NamespaceMappings />
<CollectionMappings />
<GenerateSerializableTypes>true</GenerateSerializableTypes>
<Serializer>Auto</Serializer>
<UseSerializerForFaults>true</UseSerializerForFaults>
<ReferenceAllAssemblies>true</ReferenceAllAssemblies>
<ReferencedAssemblies />
<ReferencedDataContractTypes />
<ServiceContractMappings />
</ClientOptions>
<MetadataSources>
<MetadataSource Address="http://services.romvault.com/Service1.svc" Protocol="http" SourceId="1" />
</MetadataSources>
<Metadata>
<MetadataFile FileName="Service1.xsd" MetadataType="Schema" ID="e82447ff-62bb-409b-a9a8-1eb69a23803f" SourceId="1" SourceUrl="http://services.romvault.com/Service1.svc?xsd=xsd1" />
<MetadataFile FileName="Service11.xsd" MetadataType="Schema" ID="b1a313ae-4281-4d1f-899f-b62a9030ce84" SourceId="1" SourceUrl="http://services.romvault.com/Service1.svc?xsd=xsd0" />
<MetadataFile FileName="Service11.disco" MetadataType="Disco" ID="4d89d5a9-fda6-41a7-8ea9-42e5667474e7" SourceId="1" SourceUrl="http://services.romvault.com/Service1.svc?disco" />
<MetadataFile FileName="Service11.wsdl" MetadataType="Wsdl" ID="6ec539f3-86eb-438b-b86f-c5ee07c53368" SourceId="1" SourceUrl="http://services.romvault.com/Service1.svc?wsdl" />
</Metadata>
<Extensions>
<ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
<ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
</Extensions>
</ReferenceGroup>

View File

@@ -1,42 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="anyType" nillable="true" type="xs:anyType" />
<xs:element name="anyURI" nillable="true" type="xs:anyURI" />
<xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
<xs:element name="boolean" nillable="true" type="xs:boolean" />
<xs:element name="byte" nillable="true" type="xs:byte" />
<xs:element name="dateTime" nillable="true" type="xs:dateTime" />
<xs:element name="decimal" nillable="true" type="xs:decimal" />
<xs:element name="double" nillable="true" type="xs:double" />
<xs:element name="float" nillable="true" type="xs:float" />
<xs:element name="int" nillable="true" type="xs:int" />
<xs:element name="long" nillable="true" type="xs:long" />
<xs:element name="QName" nillable="true" type="xs:QName" />
<xs:element name="short" nillable="true" type="xs:short" />
<xs:element name="string" nillable="true" type="xs:string" />
<xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
<xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
<xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
<xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
<xs:element name="char" nillable="true" type="tns:char" />
<xs:simpleType name="char">
<xs:restriction base="xs:int" />
</xs:simpleType>
<xs:element name="duration" nillable="true" type="tns:duration" />
<xs:simpleType name="duration">
<xs:restriction base="xs:duration">
<xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
<xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
<xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
</xs:restriction>
</xs:simpleType>
<xs:element name="guid" nillable="true" type="tns:guid" />
<xs:simpleType name="guid">
<xs:restriction base="xs:string">
<xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
</xs:restriction>
</xs:simpleType>
<xs:attribute name="FactoryType" type="xs:QName" />
<xs:attribute name="Id" type="xs:ID" />
<xs:attribute name="Ref" type="xs:IDREF" />
</xs:schema>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
<contractRef ref="http://services.romvault.com/Service1.svc?wsdl" docRef="http://services.romvault.com/Service1.svc" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
</discovery>

View File

@@ -1,266 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Service1" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="http://services.romvault.com/Service1.svc?xsd=xsd0" namespace="http://tempuri.org/" />
<xsd:import schemaLocation="http://services.romvault.com/Service1.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
</xsd:schema>
</wsdl:types>
<wsdl:message name="IService1_CheckPassword_InputMessage">
<wsdl:part name="parameters" element="tns:CheckPassword" />
</wsdl:message>
<wsdl:message name="IService1_CheckPassword_OutputMessage">
<wsdl:part name="parameters" element="tns:CheckPasswordResponse" />
</wsdl:message>
<wsdl:message name="IService1_SendUser_InputMessage">
<wsdl:part name="parameters" element="tns:SendUser" />
</wsdl:message>
<wsdl:message name="IService1_SendUser_OutputMessage">
<wsdl:part name="parameters" element="tns:SendUserResponse" />
</wsdl:message>
<wsdl:message name="IService1_SendUser1_InputMessage">
<wsdl:part name="parameters" element="tns:SendUser1" />
</wsdl:message>
<wsdl:message name="IService1_SendUser1_OutputMessage">
<wsdl:part name="parameters" element="tns:SendUser1Response" />
</wsdl:message>
<wsdl:message name="IService1_GetLatestVersion_InputMessage">
<wsdl:part name="parameters" element="tns:GetLatestVersion" />
</wsdl:message>
<wsdl:message name="IService1_GetLatestVersion_OutputMessage">
<wsdl:part name="parameters" element="tns:GetLatestVersionResponse" />
</wsdl:message>
<wsdl:message name="IService1_GetLatestVersion1_InputMessage">
<wsdl:part name="parameters" element="tns:GetLatestVersion1" />
</wsdl:message>
<wsdl:message name="IService1_GetLatestVersion1_OutputMessage">
<wsdl:part name="parameters" element="tns:GetLatestVersion1Response" />
</wsdl:message>
<wsdl:message name="IService1_GetUpdateLink_InputMessage">
<wsdl:part name="parameters" element="tns:GetUpdateLink" />
</wsdl:message>
<wsdl:message name="IService1_GetUpdateLink_OutputMessage">
<wsdl:part name="parameters" element="tns:GetUpdateLinkResponse" />
</wsdl:message>
<wsdl:message name="IService1_GetUpdateLink1_InputMessage">
<wsdl:part name="parameters" element="tns:GetUpdateLink1" />
</wsdl:message>
<wsdl:message name="IService1_GetUpdateLink1_OutputMessage">
<wsdl:part name="parameters" element="tns:GetUpdateLink1Response" />
</wsdl:message>
<wsdl:message name="IService1_SendErrorMessage_InputMessage">
<wsdl:part name="parameters" element="tns:SendErrorMessage" />
</wsdl:message>
<wsdl:message name="IService1_SendErrorMessage_OutputMessage">
<wsdl:part name="parameters" element="tns:SendErrorMessageResponse" />
</wsdl:message>
<wsdl:message name="IService1_SendErrorMessage1_InputMessage">
<wsdl:part name="parameters" element="tns:SendErrorMessage1" />
</wsdl:message>
<wsdl:message name="IService1_SendErrorMessage1_OutputMessage">
<wsdl:part name="parameters" element="tns:SendErrorMessage1Response" />
</wsdl:message>
<wsdl:message name="IService1_SendErrorMessage2_InputMessage">
<wsdl:part name="parameters" element="tns:SendErrorMessage2" />
</wsdl:message>
<wsdl:message name="IService1_SendErrorMessage2_OutputMessage">
<wsdl:part name="parameters" element="tns:SendErrorMessage2Response" />
</wsdl:message>
<wsdl:message name="IService1_SendErrorMessage3_InputMessage">
<wsdl:part name="parameters" element="tns:SendErrorMessage3" />
</wsdl:message>
<wsdl:message name="IService1_SendErrorMessage3_OutputMessage">
<wsdl:part name="parameters" element="tns:SendErrorMessage3Response" />
</wsdl:message>
<wsdl:message name="IService1_SendDATErrorMessage2_InputMessage">
<wsdl:part name="parameters" element="tns:SendDATErrorMessage2" />
</wsdl:message>
<wsdl:message name="IService1_SendDATErrorMessage2_OutputMessage">
<wsdl:part name="parameters" element="tns:SendDATErrorMessage2Response" />
</wsdl:message>
<wsdl:message name="IService1_SendDATErrorMessage3_InputMessage">
<wsdl:part name="parameters" element="tns:SendDATErrorMessage3" />
</wsdl:message>
<wsdl:message name="IService1_SendDATErrorMessage3_OutputMessage">
<wsdl:part name="parameters" element="tns:SendDATErrorMessage3Response" />
</wsdl:message>
<wsdl:portType name="IService1">
<wsdl:operation name="CheckPassword">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/CheckPassword" message="tns:IService1_CheckPassword_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/CheckPasswordResponse" message="tns:IService1_CheckPassword_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="SendUser">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/SendUser" message="tns:IService1_SendUser_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/SendUserResponse" message="tns:IService1_SendUser_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="SendUser1">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/SendUser1" message="tns:IService1_SendUser1_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/SendUser1Response" message="tns:IService1_SendUser1_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="GetLatestVersion">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/GetLatestVersion" message="tns:IService1_GetLatestVersion_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/GetLatestVersionResponse" message="tns:IService1_GetLatestVersion_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="GetLatestVersion1">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/GetLatestVersion1" message="tns:IService1_GetLatestVersion1_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/GetLatestVersion1Response" message="tns:IService1_GetLatestVersion1_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="GetUpdateLink">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/GetUpdateLink" message="tns:IService1_GetUpdateLink_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/GetUpdateLinkResponse" message="tns:IService1_GetUpdateLink_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="GetUpdateLink1">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/GetUpdateLink1" message="tns:IService1_GetUpdateLink1_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/GetUpdateLink1Response" message="tns:IService1_GetUpdateLink1_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="SendErrorMessage">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/SendErrorMessage" message="tns:IService1_SendErrorMessage_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/SendErrorMessageResponse" message="tns:IService1_SendErrorMessage_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="SendErrorMessage1">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/SendErrorMessage1" message="tns:IService1_SendErrorMessage1_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/SendErrorMessage1Response" message="tns:IService1_SendErrorMessage1_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="SendErrorMessage2">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/SendErrorMessage2" message="tns:IService1_SendErrorMessage2_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/SendErrorMessage2Response" message="tns:IService1_SendErrorMessage2_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="SendErrorMessage3">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/SendErrorMessage3" message="tns:IService1_SendErrorMessage3_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/SendErrorMessage3Response" message="tns:IService1_SendErrorMessage3_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="SendDATErrorMessage2">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/SendDATErrorMessage2" message="tns:IService1_SendDATErrorMessage2_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/SendDATErrorMessage2Response" message="tns:IService1_SendDATErrorMessage2_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="SendDATErrorMessage3">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/SendDATErrorMessage3" message="tns:IService1_SendDATErrorMessage3_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/IService1/SendDATErrorMessage3Response" message="tns:IService1_SendDATErrorMessage3_OutputMessage" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="BasicHttpBinding_IService1" type="tns:IService1">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="CheckPassword">
<soap:operation soapAction="http://tempuri.org/IService1/CheckPassword" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SendUser">
<soap:operation soapAction="http://tempuri.org/IService1/SendUser" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SendUser1">
<soap:operation soapAction="http://tempuri.org/IService1/SendUser1" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetLatestVersion">
<soap:operation soapAction="http://tempuri.org/IService1/GetLatestVersion" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetLatestVersion1">
<soap:operation soapAction="http://tempuri.org/IService1/GetLatestVersion1" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetUpdateLink">
<soap:operation soapAction="http://tempuri.org/IService1/GetUpdateLink" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetUpdateLink1">
<soap:operation soapAction="http://tempuri.org/IService1/GetUpdateLink1" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SendErrorMessage">
<soap:operation soapAction="http://tempuri.org/IService1/SendErrorMessage" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SendErrorMessage1">
<soap:operation soapAction="http://tempuri.org/IService1/SendErrorMessage1" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SendErrorMessage2">
<soap:operation soapAction="http://tempuri.org/IService1/SendErrorMessage2" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SendErrorMessage3">
<soap:operation soapAction="http://tempuri.org/IService1/SendErrorMessage3" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SendDATErrorMessage2">
<soap:operation soapAction="http://tempuri.org/IService1/SendDATErrorMessage2" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SendDATErrorMessage3">
<soap:operation soapAction="http://tempuri.org/IService1/SendDATErrorMessage3" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="Service1">
<wsdl:port name="BasicHttpBinding_IService1" binding="tns:BasicHttpBinding_IService1">
<soap:address location="http://services.romvault.com/Service1.svc" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@@ -1,198 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="CheckPassword">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="username" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="password" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CheckPasswordResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="CheckPasswordResult" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendUser">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="username" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="email" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="version" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendUserResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="SendUserResult" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendUser1">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="username" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="email" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="version" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="subversion" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendUser1Response">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="SendUser1Result" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetLatestVersion">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="versionNow" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetLatestVersionResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="GetLatestVersionResult" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetLatestVersion1">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="version" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="subversion" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetLatestVersion1Response">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="GetLatestVersion1Result" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetUpdateLink">
<xs:complexType>
<xs:sequence />
</xs:complexType>
</xs:element>
<xs:element name="GetUpdateLinkResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="GetUpdateLinkResult" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetUpdateLink1">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="version" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="subversion" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetUpdateLink1Response">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="GetUpdateLink1Result" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendErrorMessage">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="username" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="error" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendErrorMessageResponse">
<xs:complexType>
<xs:sequence />
</xs:complexType>
</xs:element>
<xs:element name="SendErrorMessage1">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="username" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="email" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="error" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendErrorMessage1Response">
<xs:complexType>
<xs:sequence />
</xs:complexType>
</xs:element>
<xs:element name="SendErrorMessage2">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="username" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="email" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="version" type="xs:int" />
<xs:element minOccurs="0" name="error" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendErrorMessage2Response">
<xs:complexType>
<xs:sequence />
</xs:complexType>
</xs:element>
<xs:element name="SendErrorMessage3">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="username" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="email" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="version" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="subversion" type="xs:int" />
<xs:element minOccurs="0" name="error" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendErrorMessage3Response">
<xs:complexType>
<xs:sequence />
</xs:complexType>
</xs:element>
<xs:element name="SendDATErrorMessage2">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="username" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="email" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="version" type="xs:int" />
<xs:element minOccurs="0" name="error" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="filename" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendDATErrorMessage2Response">
<xs:complexType>
<xs:sequence />
</xs:complexType>
</xs:element>
<xs:element name="SendDATErrorMessage3">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="username" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="email" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="version" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="subversion" type="xs:int" />
<xs:element minOccurs="0" name="error" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="filename" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendDATErrorMessage3Response">
<xs:complexType>
<xs:sequence />
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
<behaviors />
<bindings>
<binding digest="System.ServiceModel.Configuration.BasicHttpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data name=&quot;BasicHttpBinding_IService1&quot; /&gt;" bindingType="basicHttpBinding" name="BasicHttpBinding_IService1" />
</bindings>
<endpoints>
<endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://services.romvault.com/Service1.svc&quot; binding=&quot;basicHttpBinding&quot; bindingConfiguration=&quot;BasicHttpBinding_IService1&quot; contract=&quot;RVRef.IService1&quot; name=&quot;BasicHttpBinding_IService1&quot; /&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://services.romvault.com/Service1.svc&quot; binding=&quot;basicHttpBinding&quot; bindingConfiguration=&quot;BasicHttpBinding_IService1&quot; contract=&quot;RVRef.IService1&quot; name=&quot;BasicHttpBinding_IService1&quot; /&gt;" contractName="RVRef.IService1" name="BasicHttpBinding_IService1" />
</endpoints>
</configurationSnapshot>

View File

@@ -1,201 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="Q9vfTyG5baoe1++y9zlXEcaBfIk=">
<bindingConfigurations>
<bindingConfiguration bindingType="basicHttpBinding" name="BasicHttpBinding_IService1">
<properties>
<property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>BasicHttpBinding_IService1</serializedValue>
</property>
<property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/allowCookies" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/bypassProxyOnLocal" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>StrongWildcard</serializedValue>
</property>
<property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>65536</serializedValue>
</property>
<property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/proxyAddress" isComplexType="false" isExplicitlyDefined="false" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
</property>
<property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>0</serializedValue>
</property>
<property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>0</serializedValue>
</property>
<property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>0</serializedValue>
</property>
<property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>0</serializedValue>
</property>
<property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>0</serializedValue>
</property>
<property path="/textEncoding" isComplexType="false" isExplicitlyDefined="false" clrType="System.Text.Encoding, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.Text.UTF8Encoding</serializedValue>
</property>
<property path="/transferMode" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>Buffered</serializedValue>
</property>
<property path="/useDefaultWebProxy" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/messageEncoding" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.WSMessageEncoding, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>Text</serializedValue>
</property>
<property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.BasicHttpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.BasicHttpSecurityElement</serializedValue>
</property>
<property path="/security/mode" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.BasicHttpSecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>None</serializedValue>
</property>
<property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.HttpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.HttpTransportSecurityElement</serializedValue>
</property>
<property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.HttpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>None</serializedValue>
</property>
<property path="/security/transport/proxyCredentialType" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.HttpProxyCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>None</serializedValue>
</property>
<property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
</property>
<property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>Never</serializedValue>
</property>
<property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>TransportSelected</serializedValue>
</property>
<property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>(Collection)</serializedValue>
</property>
<property path="/security/transport/realm" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.BasicHttpMessageSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.BasicHttpMessageSecurityElement</serializedValue>
</property>
<property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.BasicHttpMessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>UserName</serializedValue>
</property>
<property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>Default</serializedValue>
</property>
</properties>
</bindingConfiguration>
</bindingConfigurations>
<endpoints>
<endpoint name="BasicHttpBinding_IService1" contract="RVRef.IService1" bindingType="basicHttpBinding" address="http://services.romvault.com/Service1.svc" bindingConfiguration="BasicHttpBinding_IService1">
<properties>
<property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>http://services.romvault.com/Service1.svc</serializedValue>
</property>
<property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>basicHttpBinding</serializedValue>
</property>
<property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>BasicHttpBinding_IService1</serializedValue>
</property>
<property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>RVRef.IService1</serializedValue>
</property>
<property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
</property>
<property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>&lt;Header /&gt;</serializedValue>
</property>
<property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
</property>
<property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
</property>
<property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
</property>
<property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
</property>
<property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
</property>
<property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
</property>
<property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
</property>
<property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>My</serializedValue>
</property>
<property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>LocalMachine</serializedValue>
</property>
<property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>FindBySubjectDistinguishedName</serializedValue>
</property>
<property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>False</serializedValue>
</property>
<property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>BasicHttpBinding_IService1</serializedValue>
</property>
<property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
</properties>
</endpoint>
</endpoints>
</SavedWcfConfigurationInformation>

View File

@@ -48,47 +48,20 @@ namespace ROMVault2
public static bool CacheSaveTimerEnabled = true;
public static int CacheSaveTimePeriod = 10;
public static string EMail
public static bool IsUnix
{
get
{
RegistryKey regKey1 = Registry.CurrentUser;
regKey1 = regKey1.CreateSubKey("Software\\RomVault2\\User");
return regKey1.GetValue("Email", "").ToString();
}
set
{
RegistryKey regKey = Registry.CurrentUser;
regKey = regKey.CreateSubKey("Software\\RomVault2\\User");
regKey.SetValue("Email", value);
int p = (int)Environment.OSVersion.Platform;
return ((p == 4) || (p == 6) || (p == 128));
}
}
public static string Username
{
get
{
RegistryKey regKey1 = Registry.CurrentUser;
regKey1 = regKey1.CreateSubKey("Software\\RomVault2\\User");
return regKey1.GetValue("UserName", "").ToString();
}
set
{
RegistryKey regKey = Registry.CurrentUser;
regKey = regKey.CreateSubKey("Software\\RomVault2\\User");
regKey.SetValue("UserName", value);
}
}
public static bool IsMono { get { return (Type.GetType ("Mono.Runtime") != null); } }
public static void SetDefaults()
{
CacheFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "RomVault2_"+DBVersion.Version+".Cache");
CacheFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "RomVault2_" + DBVersion.Version + ".Cache");
//DatRoot = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DatRoot");
DatRoot = "DatRoot";
@@ -135,10 +108,10 @@ namespace ROMVault2
bw.Write(ver); //int
bw.Write(DatRoot); //string
bw.Write((Int32)ScanLevel);
bw.Write((Int32)ScanLevel);
bw.Write((Int32)FixLevel);
bw.Write(DebugLogsEnabled); //bool
bw.Write(IgnoreFiles.Count); //int
foreach (string t in IgnoreFiles)
{

View File

@@ -245,10 +245,14 @@ namespace ROMVault2.SupportedFiles.CHD
_result = "";
_resultType = CHDManCheck.Unset;
string chdPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "chdman.exe");
string chdExe = "chdman.exe";
if (Settings.IsUnix)
chdExe = "chdman";
string chdPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, chdExe);
if (!File.Exists(chdPath))
{
result = "chdman not found";
result = chdExe + " Not Found.";
return CHDManCheck.ChdmanNotFound;
}
@@ -330,7 +334,7 @@ namespace ROMVault2.SupportedFiles.CHD
switch (_outputLineCount)
{
case 0:
if (sOut.Length < 53 || sOut.Substring(0, 53) != "chdman - MAME Compressed Hunks of Data (CHD) manager ")
if (!System.Text.RegularExpressions.Regex.IsMatch(sOut, @"^chdman - MAME Compressed Hunks of Data \(CHD\) manager ([0-9\.]+) \(.*\)"))
{
_result = "Incorrect startup of CHDMan :" + sOut;
_resultType = CHDManCheck.CHDReturnError;
@@ -352,7 +356,6 @@ namespace ROMVault2.SupportedFiles.CHD
break;
default:
_result = "Unexpected output from chdman :" + sOut;
ReportError.SendErrorMessage("CHDOutputHandler returned =" + sOut);
_resultType = CHDManCheck.CHDUnknownError;
break;
}
@@ -367,70 +370,60 @@ namespace ROMVault2.SupportedFiles.CHD
// Collect the process command output.
if (String.IsNullOrEmpty(outLine.Data)) return;
string sOut = outLine.Data;
ReportError.LogOut("CHDError: " + sOut);
// We can get fed multiple lines worth of data because of \r line feeds
string[] sLines = outLine.Data.Split(new string[] { "\r" }, StringSplitOptions.None);
_bgw.ReportProgress(0, new bgwText3(sOut));
foreach (string sLine in sLines) {
if (_resultType != CHDManCheck.Unset)
{
if(_errorLines>0)
if (string.IsNullOrEmpty(sLine)) continue;
ReportError.LogOut("CHDError: " + sLine);
_bgw.ReportProgress(0, new bgwText3(sLine));
if (_resultType != CHDManCheck.Unset)
{
_errorLines -= 1;
_result += "\r\n" + sOut;
if (_errorLines>0)
{
_errorLines -= 1;
_result += "\r\n" + sLine;
}
}
else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"^No verification to be done; CHD has (uncompressed|no checksum)"))
{
_result = sLine;
_resultType = CHDManCheck.Corrupt;
}
else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"^Error (opening|reading) CHD file.*"))
{
_result = sLine;
_resultType = CHDManCheck.Corrupt;
}
else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"^Error opening parent CHD file .*:"))
{
_result = sLine;
_resultType = CHDManCheck.Corrupt;
}
else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"^Error: (Raw|Overall) SHA1 in header"))
{
_result = sLine;
_resultType = CHDManCheck.Corrupt;
}
else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"^Out of memory"))
{
_result = sLine;
_resultType = CHDManCheck.Corrupt;
}
// Verifying messages are a non-error
else if (System.Text.RegularExpressions.Regex.IsMatch(sLine, @"Verifying, \d+\.\d+\% complete\.\.\."))
{
}
else
{
_result = "Unknown message : " + sLine;
_resultType = CHDManCheck.CHDUnknownError;
}
return;
}
if (sOut.Length > 44)
if (sOut.Substring(0, 23) == "Error reading CHD file " && sOut.Substring(sOut.Length - 21, 21) == ": decompression error")
{
_result = sOut;
_resultType = CHDManCheck.Corrupt;
return;
}
if (sOut.Length > 35)
if (sOut.Substring(0, 23) == "Error opening CHD file " && sOut.Substring(sOut.Length - 21, 21) == ": decompression error")
{
_result = sOut;
_resultType = CHDManCheck.Corrupt;
return;
}
if (sOut.Length > 35)
if (sOut.Substring(0, 23) == "Error opening CHD file " && sOut.Substring(sOut.Length - 12, 12) == ": read error")
{
_result = sOut;
_resultType = CHDManCheck.Corrupt;
return;
}
if (sOut.Length > 25)
if (sOut.Substring(0, 25) == "Error: Raw SHA1 in header")
{
_result = sOut;
_errorLines = 1;
_resultType = CHDManCheck.Corrupt;
return;
}
if (sOut.Length == 13)
if (sOut == "Out of memory")
{
_result = sOut;
_resultType = CHDManCheck.Corrupt;
return;
}
// check for Verifying message
if (sOut.Length >= 24)
if (sOut.Substring(0, 11) == "Verifying, " && sOut.Substring(sOut.Length - 13, 13) == " complete... ")
{
//_resultType = CHDManCheck.Good;
return;
}
ReportError.SendErrorMessage("CHDErrorHandler returned =" + sOut);
_result = "Unknown message : " + sOut;
_resultType = CHDManCheck.CHDUnknownError;
}

View File

@@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -1,587 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="bgWork.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@@ -33,7 +33,7 @@
// rvTree
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.DoubleBuffered = true;
this.Name = "RvTree";

View File

@@ -60,7 +60,7 @@ namespace ROMVault2
pTree.Tree.TreeBranches = pTreeBranches;
pTree.Tree.RTree = new Rectangle(0, _yPos - 8, nodeDepth * 18, 16);
pTree.Tree.RTree = new Rectangle(0, _yPos - 8, 1 + nodeDepth * 18, 16);
pTree.Tree.RExpand = new Rectangle(5 + nodeDepth * 18, _yPos + 4, 9, 9);
pTree.Tree.RChecked = new Rectangle(20 + nodeDepth * 18, _yPos + 2, 13, 13);
pTree.Tree.RIcon = new Rectangle(35 + nodeDepth * 18, _yPos, 16, 16);