Added code to retrieve metadata from media images using

DiscImageChef libraries.
This commit is contained in:
2017-04-29 08:43:43 +01:00
parent f0324fd8de
commit 6038c2b304
11 changed files with 2053 additions and 115 deletions

View File

@@ -9,6 +9,22 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Helpers", "Di
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Console", "DiscImageChef\DiscImageChef.Console\DiscImageChef.Console.csproj", "{CCAA7AFE-C094-4D82-A66D-630DE8A3F545}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.DiscImages", "DiscImageChef\DiscImageChef.DiscImages\DiscImageChef.DiscImages.csproj", "{74032CBC-339B-42F3-AF6F-E96C261F3E6A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Filesystems", "DiscImageChef\DiscImageChef.Filesystems\DiscImageChef.Filesystems.csproj", "{D7016DF2-5A5E-4524-B40D-BA2D59576688}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Filters", "DiscImageChef\DiscImageChef.Filters\DiscImageChef.Filters.csproj", "{D571B8EF-903D-4353-BDD5-B834F9F029EF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Partitions", "DiscImageChef\DiscImageChef.Partitions\DiscImageChef.Partitions.csproj", "{DA7AB65D-B5BA-4003-8893-A51BB071BA2F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.CommonTypes", "DiscImageChef\DiscImageChef.CommonTypes\DiscImageChef.CommonTypes.csproj", "{F2B84194-26EB-4227-B1C5-6602517E85AE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Claunia.RsrcFork", "DiscImageChef\Claunia.RsrcFork\Claunia.RsrcFork\Claunia.RsrcFork.csproj", "{CA231ED3-0C78-496C-AAFE-D085F6E9BEC6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Decoders", "DiscImageChef\DiscImageChef.Decoders\DiscImageChef.Decoders.csproj", "{0BEB3088-B634-4289-AE17-CDF2D25D00D5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Metadata", "DiscImageChef\DiscImageChef.Metadata\DiscImageChef.Metadata.csproj", "{9F213318-5CB8-4066-A757-074489C9F818}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
@@ -31,6 +47,38 @@ Global
{CCAA7AFE-C094-4D82-A66D-630DE8A3F545}.Debug|x86.Build.0 = Debug|Any CPU
{CCAA7AFE-C094-4D82-A66D-630DE8A3F545}.Release|x86.ActiveCfg = Release|Any CPU
{CCAA7AFE-C094-4D82-A66D-630DE8A3F545}.Release|x86.Build.0 = Release|Any CPU
{74032CBC-339B-42F3-AF6F-E96C261F3E6A}.Debug|x86.ActiveCfg = Debug|Any CPU
{74032CBC-339B-42F3-AF6F-E96C261F3E6A}.Debug|x86.Build.0 = Debug|Any CPU
{74032CBC-339B-42F3-AF6F-E96C261F3E6A}.Release|x86.ActiveCfg = Release|Any CPU
{74032CBC-339B-42F3-AF6F-E96C261F3E6A}.Release|x86.Build.0 = Release|Any CPU
{D7016DF2-5A5E-4524-B40D-BA2D59576688}.Debug|x86.ActiveCfg = Debug|Any CPU
{D7016DF2-5A5E-4524-B40D-BA2D59576688}.Debug|x86.Build.0 = Debug|Any CPU
{D7016DF2-5A5E-4524-B40D-BA2D59576688}.Release|x86.ActiveCfg = Release|Any CPU
{D7016DF2-5A5E-4524-B40D-BA2D59576688}.Release|x86.Build.0 = Release|Any CPU
{D571B8EF-903D-4353-BDD5-B834F9F029EF}.Debug|x86.ActiveCfg = Debug|Any CPU
{D571B8EF-903D-4353-BDD5-B834F9F029EF}.Debug|x86.Build.0 = Debug|Any CPU
{D571B8EF-903D-4353-BDD5-B834F9F029EF}.Release|x86.ActiveCfg = Release|Any CPU
{D571B8EF-903D-4353-BDD5-B834F9F029EF}.Release|x86.Build.0 = Release|Any CPU
{DA7AB65D-B5BA-4003-8893-A51BB071BA2F}.Debug|x86.ActiveCfg = Debug|Any CPU
{DA7AB65D-B5BA-4003-8893-A51BB071BA2F}.Debug|x86.Build.0 = Debug|Any CPU
{DA7AB65D-B5BA-4003-8893-A51BB071BA2F}.Release|x86.ActiveCfg = Release|Any CPU
{DA7AB65D-B5BA-4003-8893-A51BB071BA2F}.Release|x86.Build.0 = Release|Any CPU
{F2B84194-26EB-4227-B1C5-6602517E85AE}.Debug|x86.ActiveCfg = Debug|Any CPU
{F2B84194-26EB-4227-B1C5-6602517E85AE}.Debug|x86.Build.0 = Debug|Any CPU
{F2B84194-26EB-4227-B1C5-6602517E85AE}.Release|x86.ActiveCfg = Release|Any CPU
{F2B84194-26EB-4227-B1C5-6602517E85AE}.Release|x86.Build.0 = Release|Any CPU
{CA231ED3-0C78-496C-AAFE-D085F6E9BEC6}.Debug|x86.ActiveCfg = Debug|Any CPU
{CA231ED3-0C78-496C-AAFE-D085F6E9BEC6}.Debug|x86.Build.0 = Debug|Any CPU
{CA231ED3-0C78-496C-AAFE-D085F6E9BEC6}.Release|x86.ActiveCfg = Release|Any CPU
{CA231ED3-0C78-496C-AAFE-D085F6E9BEC6}.Release|x86.Build.0 = Release|Any CPU
{0BEB3088-B634-4289-AE17-CDF2D25D00D5}.Debug|x86.ActiveCfg = Debug|Any CPU
{0BEB3088-B634-4289-AE17-CDF2D25D00D5}.Debug|x86.Build.0 = Debug|Any CPU
{0BEB3088-B634-4289-AE17-CDF2D25D00D5}.Release|x86.ActiveCfg = Release|Any CPU
{0BEB3088-B634-4289-AE17-CDF2D25D00D5}.Release|x86.Build.0 = Release|Any CPU
{9F213318-5CB8-4066-A757-074489C9F818}.Debug|x86.ActiveCfg = Debug|Any CPU
{9F213318-5CB8-4066-A757-074489C9F818}.Debug|x86.Build.0 = Debug|Any CPU
{9F213318-5CB8-4066-A757-074489C9F818}.Release|x86.ActiveCfg = Release|Any CPU
{9F213318-5CB8-4066-A757-074489C9F818}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
Policies = $0

View File

@@ -1,3 +1,17 @@
2017-04-29 Natalia Portillo <claunia@claunia.com>
* Core.cs:
* DicCore.cs:
* Checksum.cs:
* PluginBase.cs:
* dlgMetadata.cs:
* gtk-gui/gui.stetic:
* osrepodbmgr.csproj:
* DetectImageFormat.cs:
* gtk-gui/osrepodbmgr.dlgMetadata.cs:
Added code to retrieve metadata from media images using
DiscImageChef libraries.
2017-04-29 Natalia Portillo <claunia@claunia.com>
* Core.cs:

551
osrepodbmgr/Checksum.cs Normal file
View File

@@ -0,0 +1,551 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : Checksum.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : Core methods.
//
// --[ Description ] ----------------------------------------------------------
//
// Methods to checksum data.
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2016 Natalia Portillo
// ****************************************************************************/
using System.Collections.Generic;
using DiscImageChef.Checksums;
using Schemas;
using System.Threading;
namespace osrepodbmgr
{
class Checksum
{
Adler32Context adler32ctx;
CRC16Context crc16ctx;
CRC32Context crc32ctx;
CRC64Context crc64ctx;
MD5Context md5ctx;
RIPEMD160Context ripemd160ctx;
SHA1Context sha1ctx;
SHA256Context sha256ctx;
SHA384Context sha384ctx;
SHA512Context sha512ctx;
SpamSumContext ssctx;
Thread adlerThread;
Thread crc16Thread;
Thread crc32Thread;
Thread crc64Thread;
Thread md5Thread;
Thread ripemd160Thread;
Thread sha1Thread;
Thread sha256Thread;
Thread sha384Thread;
Thread sha512Thread;
Thread spamsumThread;
adlerPacket adlerPkt;
crc16Packet crc16Pkt;
crc32Packet crc32Pkt;
crc64Packet crc64Pkt;
md5Packet md5Pkt;
ripemd160Packet ripemd160Pkt;
sha1Packet sha1Pkt;
sha256Packet sha256Pkt;
sha384Packet sha384Pkt;
sha512Packet sha512Pkt;
spamsumPacket spamsumPkt;
internal Checksum()
{
adler32ctx = new Adler32Context();
crc16ctx = new CRC16Context();
crc32ctx = new CRC32Context();
crc64ctx = new CRC64Context();
md5ctx = new MD5Context();
ripemd160ctx = new RIPEMD160Context();
sha1ctx = new SHA1Context();
sha256ctx = new SHA256Context();
sha384ctx = new SHA384Context();
sha512ctx = new SHA512Context();
ssctx = new SpamSumContext();
adlerThread = new Thread(updateAdler);
crc16Thread = new Thread(updateCRC16);
crc32Thread = new Thread(updateCRC32);
crc64Thread = new Thread(updateCRC64);
md5Thread = new Thread(updateMD5);
ripemd160Thread = new Thread(updateRIPEMD160);
sha1Thread = new Thread(updateSHA1);
sha256Thread = new Thread(updateSHA256);
sha384Thread = new Thread(updateSHA384);
sha512Thread = new Thread(updateSHA512);
spamsumThread = new Thread(updateSpamSum);
adlerPkt = new adlerPacket();
crc16Pkt = new crc16Packet();
crc32Pkt = new crc32Packet();
crc64Pkt = new crc64Packet();
md5Pkt = new md5Packet();
ripemd160Pkt = new ripemd160Packet();
sha1Pkt = new sha1Packet();
sha256Pkt = new sha256Packet();
sha384Pkt = new sha384Packet();
sha512Pkt = new sha512Packet();
spamsumPkt = new spamsumPacket();
adler32ctx.Init();
adlerPkt.context = adler32ctx;
crc16ctx.Init();
crc16Pkt.context = crc16ctx;
crc32ctx.Init();
crc32Pkt.context = crc32ctx;
crc64ctx.Init();
crc64Pkt.context = crc64ctx;
md5ctx.Init();
md5Pkt.context = md5ctx;
ripemd160ctx.Init();
ripemd160Pkt.context = ripemd160ctx;
sha1ctx.Init();
sha1Pkt.context = sha1ctx;
sha256ctx.Init();
sha256Pkt.context = sha256ctx;
sha384ctx.Init();
sha384Pkt.context = sha384ctx;
sha512ctx.Init();
sha512Pkt.context = sha512ctx;
ssctx.Init();
spamsumPkt.context = ssctx;
}
internal void Update(byte[] data)
{
adlerPkt.data = data;
adlerThread.Start(adlerPkt);
crc16Pkt.data = data;
crc16Thread.Start(crc16Pkt);
crc32Pkt.data = data;
crc32Thread.Start(crc32Pkt);
crc64Pkt.data = data;
crc64Thread.Start(crc64Pkt);
md5Pkt.data = data;
md5Thread.Start(md5Pkt);
ripemd160Pkt.data = data;
ripemd160Thread.Start(ripemd160Pkt);
sha1Pkt.data = data;
sha1Thread.Start(sha1Pkt);
sha256Pkt.data = data;
sha256Thread.Start(sha256Pkt);
sha384Pkt.data = data;
sha384Thread.Start(sha384Pkt);
sha512Pkt.data = data;
sha512Thread.Start(sha512Pkt);
spamsumPkt.data = data;
spamsumThread.Start(spamsumPkt);
while(adlerThread.IsAlive || crc16Thread.IsAlive ||
crc32Thread.IsAlive || crc64Thread.IsAlive ||
md5Thread.IsAlive || ripemd160Thread.IsAlive ||
sha1Thread.IsAlive || sha256Thread.IsAlive ||
sha384Thread.IsAlive || sha512Thread.IsAlive ||
spamsumThread.IsAlive)
{
}
adlerThread = new Thread(updateAdler);
crc16Thread = new Thread(updateCRC16);
crc32Thread = new Thread(updateCRC32);
crc64Thread = new Thread(updateCRC64);
md5Thread = new Thread(updateMD5);
ripemd160Thread = new Thread(updateRIPEMD160);
sha1Thread = new Thread(updateSHA1);
sha256Thread = new Thread(updateSHA256);
sha384Thread = new Thread(updateSHA384);
sha512Thread = new Thread(updateSHA512);
spamsumThread = new Thread(updateSpamSum);
}
internal List<ChecksumType> End()
{
List<ChecksumType> chks = new List<ChecksumType>();
ChecksumType chk = new ChecksumType();
chk.type = ChecksumTypeType.adler32;
chk.Value = adler32ctx.End();
chks.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.crc16;
chk.Value = crc16ctx.End();
chks.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.crc32;
chk.Value = crc32ctx.End();
chks.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.crc64;
chk.Value = crc64ctx.End();
chks.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.md5;
chk.Value = md5ctx.End();
chks.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.ripemd160;
chk.Value = ripemd160ctx.End();
chks.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.sha1;
chk.Value = sha1ctx.End();
chks.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.sha256;
chk.Value = sha256ctx.End();
chks.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.sha384;
chk.Value = sha384ctx.End();
chks.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.sha512;
chk.Value = sha512ctx.End();
chks.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.spamsum;
chk.Value = ssctx.End();
chks.Add(chk);
return chks;
}
internal static List<ChecksumType> GetChecksums(byte[] data)
{
Adler32Context adler32ctxData = new Adler32Context();
CRC16Context crc16ctxData = new CRC16Context();
CRC32Context crc32ctxData = new CRC32Context();
CRC64Context crc64ctxData = new CRC64Context();
MD5Context md5ctxData = new MD5Context();
RIPEMD160Context ripemd160ctxData = new RIPEMD160Context();
SHA1Context sha1ctxData = new SHA1Context();
SHA256Context sha256ctxData = new SHA256Context();
SHA384Context sha384ctxData = new SHA384Context();
SHA512Context sha512ctxData = new SHA512Context();
SpamSumContext ssctxData = new SpamSumContext();
Thread adlerThreadData = new Thread(updateAdler);
Thread crc16ThreadData = new Thread(updateCRC16);
Thread crc32ThreadData = new Thread(updateCRC32);
Thread crc64ThreadData = new Thread(updateCRC64);
Thread md5ThreadData = new Thread(updateMD5);
Thread ripemd160ThreadData = new Thread(updateRIPEMD160);
Thread sha1ThreadData = new Thread(updateSHA1);
Thread sha256ThreadData = new Thread(updateSHA256);
Thread sha384ThreadData = new Thread(updateSHA384);
Thread sha512ThreadData = new Thread(updateSHA512);
Thread spamsumThreadData = new Thread(updateSpamSum);
adlerPacket adlerPktData = new adlerPacket();
crc16Packet crc16PktData = new crc16Packet();
crc32Packet crc32PktData = new crc32Packet();
crc64Packet crc64PktData = new crc64Packet();
md5Packet md5PktData = new md5Packet();
ripemd160Packet ripemd160PktData = new ripemd160Packet();
sha1Packet sha1PktData = new sha1Packet();
sha256Packet sha256PktData = new sha256Packet();
sha384Packet sha384PktData = new sha384Packet();
sha512Packet sha512PktData = new sha512Packet();
spamsumPacket spamsumPktData = new spamsumPacket();
adler32ctxData.Init();
adlerPktData.context = adler32ctxData;
crc16ctxData.Init();
crc16PktData.context = crc16ctxData;
crc32ctxData.Init();
crc32PktData.context = crc32ctxData;
crc64ctxData.Init();
crc64PktData.context = crc64ctxData;
md5ctxData.Init();
md5PktData.context = md5ctxData;
ripemd160ctxData.Init();
ripemd160PktData.context = ripemd160ctxData;
sha1ctxData.Init();
sha1PktData.context = sha1ctxData;
sha256ctxData.Init();
sha256PktData.context = sha256ctxData;
sha384ctxData.Init();
sha384PktData.context = sha384ctxData;
sha512ctxData.Init();
sha512PktData.context = sha512ctxData;
ssctxData.Init();
spamsumPktData.context = ssctxData;
adlerPktData.data = data;
adlerThreadData.Start(adlerPktData);
crc16PktData.data = data;
crc16ThreadData.Start(crc16PktData);
crc32PktData.data = data;
crc32ThreadData.Start(crc32PktData);
crc64PktData.data = data;
crc64ThreadData.Start(crc64PktData);
md5PktData.data = data;
md5ThreadData.Start(md5PktData);
ripemd160PktData.data = data;
ripemd160ThreadData.Start(ripemd160PktData);
sha1PktData.data = data;
sha1ThreadData.Start(sha1PktData);
sha256PktData.data = data;
sha256ThreadData.Start(sha256PktData);
sha384PktData.data = data;
sha384ThreadData.Start(sha384PktData);
sha512PktData.data = data;
sha512ThreadData.Start(sha512PktData);
spamsumPktData.data = data;
spamsumThreadData.Start(spamsumPktData);
while(adlerThreadData.IsAlive || crc16ThreadData.IsAlive ||
crc32ThreadData.IsAlive || crc64ThreadData.IsAlive ||
md5ThreadData.IsAlive || ripemd160ThreadData.IsAlive ||
sha1ThreadData.IsAlive || sha256ThreadData.IsAlive ||
sha384ThreadData.IsAlive || sha512ThreadData.IsAlive ||
spamsumThreadData.IsAlive)
{
}
List<ChecksumType> dataChecksums = new List<ChecksumType>();
ChecksumType chk;
chk = new ChecksumType();
chk.type = ChecksumTypeType.adler32;
chk.Value = adler32ctxData.End();
dataChecksums.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.crc16;
chk.Value = crc16ctxData.End();
dataChecksums.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.crc32;
chk.Value = crc32ctxData.End();
dataChecksums.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.crc64;
chk.Value = crc64ctxData.End();
dataChecksums.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.md5;
chk.Value = md5ctxData.End();
dataChecksums.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.ripemd160;
chk.Value = ripemd160ctxData.End();
dataChecksums.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.sha1;
chk.Value = sha1ctxData.End();
dataChecksums.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.sha256;
chk.Value = sha256ctxData.End();
dataChecksums.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.sha384;
chk.Value = sha384ctxData.End();
dataChecksums.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.sha512;
chk.Value = sha512ctxData.End();
dataChecksums.Add(chk);
chk = new ChecksumType();
chk.type = ChecksumTypeType.spamsum;
chk.Value = ssctxData.End();
dataChecksums.Add(chk);
return dataChecksums;
}
#region Threading helpers
struct adlerPacket
{
public Adler32Context context;
public byte[] data;
}
struct crc16Packet
{
public CRC16Context context;
public byte[] data;
}
struct crc32Packet
{
public CRC32Context context;
public byte[] data;
}
struct crc64Packet
{
public CRC64Context context;
public byte[] data;
}
/*struct fletcher16Packet
{
public Fletcher16Context context;
public byte[] data;
}
struct fletcher32Packet
{
public Fletcher32Context context;
public byte[] data;
}*/
struct md5Packet
{
public MD5Context context;
public byte[] data;
}
struct ripemd160Packet
{
public RIPEMD160Context context;
public byte[] data;
}
struct sha1Packet
{
public SHA1Context context;
public byte[] data;
}
struct sha256Packet
{
public SHA256Context context;
public byte[] data;
}
struct sha384Packet
{
public SHA384Context context;
public byte[] data;
}
struct sha512Packet
{
public SHA512Context context;
public byte[] data;
}
struct spamsumPacket
{
public SpamSumContext context;
public byte[] data;
}
static void updateAdler(object packet)
{
((adlerPacket)packet).context.Update(((adlerPacket)packet).data);
}
static void updateCRC16(object packet)
{
((crc16Packet)packet).context.Update(((crc16Packet)packet).data);
}
static void updateCRC32(object packet)
{
((crc32Packet)packet).context.Update(((crc32Packet)packet).data);
}
static void updateCRC64(object packet)
{
((crc64Packet)packet).context.Update(((crc64Packet)packet).data);
}
/*static void updateFletcher16(object packet)
{
((fletcher16Packet)packet).context.Update(((fletcher16Packet)packet).data);
}
static void updateFletcher32(object packet)
{
((fletcher32Packet)packet).context.Update(((fletcher32Packet)packet).data);
}*/
static void updateMD5(object packet)
{
((md5Packet)packet).context.Update(((md5Packet)packet).data);
}
static void updateRIPEMD160(object packet)
{
((ripemd160Packet)packet).context.Update(((ripemd160Packet)packet).data);
}
static void updateSHA1(object packet)
{
((sha1Packet)packet).context.Update(((sha1Packet)packet).data);
}
static void updateSHA256(object packet)
{
((sha256Packet)packet).context.Update(((sha256Packet)packet).data);
}
static void updateSHA384(object packet)
{
((sha384Packet)packet).context.Update(((sha384Packet)packet).data);
}
static void updateSHA512(object packet)
{
((sha512Packet)packet).context.Update(((sha512Packet)packet).data);
}
static void updateSpamSum(object packet)
{
((spamsumPacket)packet).context.Update(((spamsumPacket)packet).data);
}
#endregion Threading helpers
}
}

View File

@@ -899,6 +899,9 @@ namespace osrepodbmgr
FileStream jfs = new FileStream(Path.Combine(destinationFolder, destinationFile + ".json"), FileMode.CreateNew, FileAccess.Write);
jms.CopyTo(jfs);
jfs.Close();
xms.Position = 0;
jms.Position = 0;
}
zipCounter = 0;

View File

@@ -0,0 +1,111 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : DetectImageFormat.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : Main program loop.
//
// --[ Description ] ----------------------------------------------------------
//
// Detects disc image format.
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2016 Natalia Portillo
// ****************************************************************************/
using System;
using DiscImageChef.Filters;
using DiscImageChef.ImagePlugins;
namespace osrepodbmgr
{
public static class ImageFormat
{
public static ImagePlugin Detect(Filter imageFilter)
{
try
{
ImagePlugin _imageFormat;
PluginBase plugins = new PluginBase();
plugins.RegisterAllPlugins();
_imageFormat = null;
// Check all but RAW plugin
foreach(ImagePlugin _imageplugin in plugins.ImagePluginsList.Values)
{
if(_imageplugin.PluginUUID != new Guid("12345678-AAAA-BBBB-CCCC-123456789000"))
{
try
{
Console.WriteLine("Format detection: Trying plugin {0}", _imageplugin.Name);
if(_imageplugin.IdentifyImage(imageFilter))
{
_imageFormat = _imageplugin;
break;
}
}
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
catch
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
{
}
}
}
// Check only RAW plugin
if(_imageFormat == null)
{
foreach(ImagePlugin _imageplugin in plugins.ImagePluginsList.Values)
{
if(_imageplugin.PluginUUID == new Guid("12345678-AAAA-BBBB-CCCC-123456789000"))
{
try
{
Console.WriteLine("Format detection: Trying plugin {0}", _imageplugin.Name);
if(_imageplugin.IdentifyImage(imageFilter))
{
_imageFormat = _imageplugin;
break;
}
}
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
catch
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
{
}
}
}
}
// Still not recognized
if(_imageFormat == null)
{
return null;
}
return _imageFormat;
}
catch
{
return null;
}
}
}
}

View File

@@ -25,22 +25,965 @@
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
using System;
using DiscImageChef.Filters;
using Schemas;
using System.IO;
using System.Collections.Generic;
using DiscImageChef.CommonTypes;
using DiscImageChef.ImagePlugins;
using DiscImageChef.PartPlugins;
using DiscImageChef.Filesystems;
using DiscImageChef.Decoders.PCMCIA;
namespace osrepodbmgr
{
public static partial class Core
{
public static void AddDisc()
public static void AddMedia()
{
// TODO: Call DiscImageChef
if(Failed != null)
Failed("Not yet implemented");
if(string.IsNullOrWhiteSpace(MainClass.selectedFile))
{
if(Failed != null)
Failed("There is no file set");
return;
}
string filesPath;
if(!string.IsNullOrEmpty(MainClass.tmpFolder) && Directory.Exists(MainClass.tmpFolder))
filesPath = MainClass.tmpFolder;
else
filesPath = MainClass.path;
string selectedFile = Path.Combine(filesPath, MainClass.selectedFile);
if(!File.Exists(selectedFile))
{
if(Failed != null)
Failed("Selected file does not exist");
return;
}
CICMMetadataType sidecar = new CICMMetadataType();
PluginBase plugins = new PluginBase();
plugins.RegisterAllPlugins();
ImagePlugin _imageFormat;
long maxProgress = 4;
long currentProgress = 0;
FiltersList filtersList = new FiltersList();
if(UpdateProgress != null)
UpdateProgress(null, "Detecting image filter", 1, maxProgress);
Filter inputFilter = filtersList.GetFilter(selectedFile);
if(inputFilter == null)
{
if(Failed != null)
Failed("Cannot open specified file.");
return;
}
try
{
if(UpdateProgress != null)
UpdateProgress(null, "Detecting image format", 2, maxProgress);
_imageFormat = ImageFormat.Detect(inputFilter);
if(_imageFormat == null)
{
if(Failed != null)
Failed("Image format not identified, not proceeding with analysis.");
return;
}
try
{
if(!_imageFormat.OpenImage(inputFilter))
{
if(Failed != null)
Failed("Unable to open image format\n" +
"No error given");
return;
}
}
catch(Exception ex)
{
if(Failed != null)
Failed(string.Format("Unable to open image format\n" +
"Error: {0}", ex.Message));
return;
}
FileInfo fi = new FileInfo(selectedFile);
FileStream fs = new FileStream(selectedFile, FileMode.Open, FileAccess.Read);
Checksum imgChkWorker = new Checksum();
if(UpdateProgress != null)
UpdateProgress(null, "Hashing image file", 3, maxProgress);
byte[] data;
long position = 0;
while(position < (fi.Length - 1048576))
{
data = new byte[1048576];
fs.Read(data, 0, 1048576);
if(UpdateProgress2 != null)
UpdateProgress2(null, string.Format("{0} of {1}", position, fi.Length), position, fi.Length);
imgChkWorker.Update(data);
position += 1048576;
}
data = new byte[fi.Length - position];
fs.Read(data, 0, (int)(fi.Length - position));
if(UpdateProgress2 != null)
UpdateProgress2(null, string.Format("{0} of {1}", position, fi.Length), position, fi.Length);
imgChkWorker.Update(data);
fs.Close();
List<ChecksumType> imgChecksums = imgChkWorker.End();
if(UpdateProgress2 != null)
UpdateProgress2(null, null, 0, 0);
switch(_imageFormat.ImageInfo.xmlMediaType)
{
case XmlMediaType.OpticalDisc:
{
maxProgress = 4 + _imageFormat.ImageInfo.readableMediaTags.Count + _imageFormat.GetTracks().Count;
if(UpdateProgress != null)
UpdateProgress(null, "Hashing image file", 3, maxProgress);
sidecar.OpticalDisc = new OpticalDiscType[1];
sidecar.OpticalDisc[0] = new OpticalDiscType();
sidecar.OpticalDisc[0].Checksums = imgChecksums.ToArray();
sidecar.OpticalDisc[0].Image = new ImageType();
sidecar.OpticalDisc[0].Image.format = _imageFormat.GetImageFormat();
sidecar.OpticalDisc[0].Image.offset = 0;
sidecar.OpticalDisc[0].Image.offsetSpecified = true;
sidecar.OpticalDisc[0].Image.Value = Path.GetFileName(selectedFile);
sidecar.OpticalDisc[0].Size = fi.Length;
sidecar.OpticalDisc[0].Sequence = new SequenceType();
if(_imageFormat.GetMediaSequence() != 0 && _imageFormat.GetLastDiskSequence() != 0)
{
sidecar.OpticalDisc[0].Sequence.MediaSequence = _imageFormat.GetMediaSequence();
sidecar.OpticalDisc[0].Sequence.TotalMedia = _imageFormat.GetMediaSequence();
}
else
{
sidecar.OpticalDisc[0].Sequence.MediaSequence = 1;
sidecar.OpticalDisc[0].Sequence.TotalMedia = 1;
}
sidecar.OpticalDisc[0].Sequence.MediaTitle = _imageFormat.GetImageName();
MediaType dskType = _imageFormat.ImageInfo.mediaType;
currentProgress = 3;
foreach(MediaTagType tagType in _imageFormat.ImageInfo.readableMediaTags)
{
currentProgress++;
if(UpdateProgress != null)
UpdateProgress(null, string.Format("Hashing file containing {0}", tagType), currentProgress, maxProgress);
switch(tagType)
{
case MediaTagType.CD_ATIP:
sidecar.OpticalDisc[0].ATIP = new DumpType();
sidecar.OpticalDisc[0].ATIP.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.CD_ATIP)).ToArray();
sidecar.OpticalDisc[0].ATIP.Size = _imageFormat.ReadDiskTag(MediaTagType.CD_ATIP).Length;
DiscImageChef.Decoders.CD.ATIP.CDATIP? atip = DiscImageChef.Decoders.CD.ATIP.Decode(_imageFormat.ReadDiskTag(MediaTagType.CD_ATIP));
if(atip.HasValue)
{
if(atip.Value.DDCD)
dskType = atip.Value.DiscType ? MediaType.DDCDRW : MediaType.DDCDR;
else
dskType = atip.Value.DiscType ? MediaType.CDRW : MediaType.CDR;
}
break;
case MediaTagType.DVD_BCA:
sidecar.OpticalDisc[0].BCA = new DumpType();
sidecar.OpticalDisc[0].BCA.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.DVD_BCA)).ToArray();
sidecar.OpticalDisc[0].BCA.Size = _imageFormat.ReadDiskTag(MediaTagType.DVD_BCA).Length;
break;
case MediaTagType.BD_BCA:
sidecar.OpticalDisc[0].BCA = new DumpType();
sidecar.OpticalDisc[0].BCA.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.BD_BCA)).ToArray();
sidecar.OpticalDisc[0].BCA.Size = _imageFormat.ReadDiskTag(MediaTagType.BD_BCA).Length;
break;
case MediaTagType.DVD_CMI:
sidecar.OpticalDisc[0].CMI = new DumpType();
DiscImageChef.Decoders.DVD.CSS_CPRM.LeadInCopyright? cmi = DiscImageChef.Decoders.DVD.CSS_CPRM.DecodeLeadInCopyright(_imageFormat.ReadDiskTag(MediaTagType.DVD_CMI));
if(cmi.HasValue)
{
switch(cmi.Value.CopyrightType)
{
case DiscImageChef.Decoders.DVD.CopyrightType.AACS:
sidecar.OpticalDisc[0].CopyProtection = "AACS";
break;
case DiscImageChef.Decoders.DVD.CopyrightType.CSS:
sidecar.OpticalDisc[0].CopyProtection = "CSS";
break;
case DiscImageChef.Decoders.DVD.CopyrightType.CPRM:
sidecar.OpticalDisc[0].CopyProtection = "CPRM";
break;
}
}
sidecar.OpticalDisc[0].CMI.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.DVD_CMI)).ToArray();
sidecar.OpticalDisc[0].CMI.Size = _imageFormat.ReadDiskTag(MediaTagType.DVD_CMI).Length;
break;
case MediaTagType.DVD_DMI:
sidecar.OpticalDisc[0].DMI = new DumpType();
sidecar.OpticalDisc[0].DMI.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.DVD_DMI)).ToArray();
sidecar.OpticalDisc[0].DMI.Size = _imageFormat.ReadDiskTag(MediaTagType.DVD_DMI).Length;
if(DiscImageChef.Decoders.Xbox.DMI.IsXbox(_imageFormat.ReadDiskTag(MediaTagType.DVD_DMI)))
{
dskType = MediaType.XGD;
sidecar.OpticalDisc[0].Dimensions = new DimensionsType();
sidecar.OpticalDisc[0].Dimensions.Diameter = 120;
}
else if(DiscImageChef.Decoders.Xbox.DMI.IsXbox360(_imageFormat.ReadDiskTag(MediaTagType.DVD_DMI)))
{
dskType = MediaType.XGD2;
sidecar.OpticalDisc[0].Dimensions = new DimensionsType();
sidecar.OpticalDisc[0].Dimensions.Diameter = 120;
}
break;
case MediaTagType.DVD_PFI:
sidecar.OpticalDisc[0].PFI = new DumpType();
sidecar.OpticalDisc[0].PFI.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.DVD_PFI)).ToArray();
sidecar.OpticalDisc[0].PFI.Size = _imageFormat.ReadDiskTag(MediaTagType.DVD_PFI).Length;
DiscImageChef.Decoders.DVD.PFI.PhysicalFormatInformation? pfi = DiscImageChef.Decoders.DVD.PFI.Decode(_imageFormat.ReadDiskTag(MediaTagType.DVD_PFI));
if(pfi.HasValue)
{
if(dskType != MediaType.XGD &&
dskType != MediaType.XGD2 &&
dskType != MediaType.XGD3)
{
switch(pfi.Value.DiskCategory)
{
case DiscImageChef.Decoders.DVD.DiskCategory.DVDPR:
dskType = MediaType.DVDPR;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.DVDPRDL:
dskType = MediaType.DVDPRDL;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.DVDPRW:
dskType = MediaType.DVDPRW;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.DVDPRWDL:
dskType = MediaType.DVDPRWDL;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.DVDR:
dskType = MediaType.DVDR;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.DVDRAM:
dskType = MediaType.DVDRAM;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.DVDROM:
dskType = MediaType.DVDROM;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.DVDRW:
dskType = MediaType.DVDRW;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.HDDVDR:
dskType = MediaType.HDDVDR;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.HDDVDRAM:
dskType = MediaType.HDDVDRAM;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.HDDVDROM:
dskType = MediaType.HDDVDROM;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.HDDVDRW:
dskType = MediaType.HDDVDRW;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.Nintendo:
dskType = MediaType.GOD;
break;
case DiscImageChef.Decoders.DVD.DiskCategory.UMD:
dskType = MediaType.UMD;
break;
}
if(dskType == MediaType.DVDR && pfi.Value.PartVersion == 6)
dskType = MediaType.DVDRDL;
if(dskType == MediaType.DVDRW && pfi.Value.PartVersion == 3)
dskType = MediaType.DVDRWDL;
if(dskType == MediaType.GOD && pfi.Value.DiscSize == DiscImageChef.Decoders.DVD.DVDSize.OneTwenty)
dskType = MediaType.WOD;
sidecar.OpticalDisc[0].Dimensions = new DimensionsType();
if(dskType == MediaType.UMD)
sidecar.OpticalDisc[0].Dimensions.Diameter = 60;
else if(pfi.Value.DiscSize == DiscImageChef.Decoders.DVD.DVDSize.Eighty)
sidecar.OpticalDisc[0].Dimensions.Diameter = 80;
else if(pfi.Value.DiscSize == DiscImageChef.Decoders.DVD.DVDSize.OneTwenty)
sidecar.OpticalDisc[0].Dimensions.Diameter = 120;
}
}
break;
case MediaTagType.CD_PMA:
sidecar.OpticalDisc[0].PMA = new DumpType();
sidecar.OpticalDisc[0].PMA.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.CD_PMA)).ToArray();
sidecar.OpticalDisc[0].PMA.Size = _imageFormat.ReadDiskTag(MediaTagType.CD_PMA).Length;
break;
}
}
try
{
List<Session> sessions = _imageFormat.GetSessions();
sidecar.OpticalDisc[0].Sessions = sessions != null ? sessions.Count : 1;
}
catch
{
sidecar.OpticalDisc[0].Sessions = 1;
}
List<Track> tracks = _imageFormat.GetTracks();
List<Schemas.TrackType> trksLst = null;
if(tracks != null)
{
sidecar.OpticalDisc[0].Tracks = new int[1];
sidecar.OpticalDisc[0].Tracks[0] = tracks.Count;
trksLst = new List<Schemas.TrackType>();
}
foreach(Track trk in tracks)
{
currentProgress++;
if(UpdateProgress != null)
UpdateProgress(null, string.Format("Hashing track {0}", trk.TrackSequence), currentProgress, maxProgress);
Schemas.TrackType xmlTrk = new Schemas.TrackType();
switch(trk.TrackType)
{
case DiscImageChef.ImagePlugins.TrackType.Audio:
xmlTrk.TrackType1 = TrackTypeTrackType.audio;
break;
case DiscImageChef.ImagePlugins.TrackType.CDMode2Form2:
xmlTrk.TrackType1 = TrackTypeTrackType.m2f2;
break;
case DiscImageChef.ImagePlugins.TrackType.CDMode2Formless:
xmlTrk.TrackType1 = TrackTypeTrackType.mode2;
break;
case DiscImageChef.ImagePlugins.TrackType.CDMode2Form1:
xmlTrk.TrackType1 = TrackTypeTrackType.m2f1;
break;
case DiscImageChef.ImagePlugins.TrackType.CDMode1:
xmlTrk.TrackType1 = TrackTypeTrackType.mode1;
break;
case DiscImageChef.ImagePlugins.TrackType.Data:
switch(sidecar.OpticalDisc[0].DiscType)
{
case "BD":
xmlTrk.TrackType1 = TrackTypeTrackType.bluray;
break;
case "DDCD":
xmlTrk.TrackType1 = TrackTypeTrackType.ddcd;
break;
case "DVD":
xmlTrk.TrackType1 = TrackTypeTrackType.dvd;
break;
case "HD DVD":
xmlTrk.TrackType1 = TrackTypeTrackType.hddvd;
break;
default:
xmlTrk.TrackType1 = TrackTypeTrackType.mode1;
break;
}
break;
}
xmlTrk.Sequence = new TrackSequenceType();
xmlTrk.Sequence.Session = trk.TrackSession;
xmlTrk.Sequence.TrackNumber = (int)trk.TrackSequence;
xmlTrk.StartSector = (long)trk.TrackStartSector;
xmlTrk.EndSector = (long)trk.TrackEndSector;
if(trk.Indexes.ContainsKey(0))
{
ulong idx0;
if(trk.Indexes.TryGetValue(0, out idx0))
xmlTrk.StartSector = (long)idx0;
}
if(sidecar.OpticalDisc[0].DiscType == "CD" ||
sidecar.OpticalDisc[0].DiscType == "GD")
{
xmlTrk.StartMSF = LbaToMsf(xmlTrk.StartSector);
xmlTrk.EndMSF = LbaToMsf(xmlTrk.EndSector);
}
else if(sidecar.OpticalDisc[0].DiscType == "DDCD")
{
xmlTrk.StartMSF = DdcdLbaToMsf(xmlTrk.StartSector);
xmlTrk.EndMSF = DdcdLbaToMsf(xmlTrk.EndSector);
}
xmlTrk.Image = new ImageType();
xmlTrk.Image.Value = Path.GetFileName(trk.TrackFile);
if(trk.TrackFileOffset > 0)
{
xmlTrk.Image.offset = (long)trk.TrackFileOffset;
xmlTrk.Image.offsetSpecified = true;
}
xmlTrk.Image.format = trk.TrackFileType;
xmlTrk.Size = (xmlTrk.EndSector - xmlTrk.StartSector + 1) * trk.TrackRawBytesPerSector;
xmlTrk.BytesPerSector = trk.TrackBytesPerSector;
uint sectorsToRead = 512;
Checksum trkChkWorker = new Checksum();
ulong sectors = (ulong)(xmlTrk.EndSector - xmlTrk.StartSector + 1);
ulong doneSectors = 0;
while(doneSectors < sectors)
{
byte[] sector;
if((sectors - doneSectors) >= sectorsToRead)
{
sector = _imageFormat.ReadSectorsLong(doneSectors, sectorsToRead, (uint)xmlTrk.Sequence.TrackNumber);
if(UpdateProgress2 != null)
UpdateProgress2(null, string.Format("Sector {0} of {1}", doneSectors, sectors), position, fi.Length);
doneSectors += sectorsToRead;
}
else
{
sector = _imageFormat.ReadSectorsLong(doneSectors, (uint)(sectors - doneSectors), (uint)xmlTrk.Sequence.TrackNumber);
if(UpdateProgress2 != null)
UpdateProgress2(null, string.Format("Sector {0} of {1}", doneSectors, sectors), position, fi.Length);
doneSectors += (sectors - doneSectors);
}
trkChkWorker.Update(sector);
}
List<ChecksumType> trkChecksums = trkChkWorker.End();
xmlTrk.Checksums = trkChecksums.ToArray();
if(UpdateProgress2 != null)
UpdateProgress2(null, null, 0, 0);
if(trk.TrackSubchannelType != TrackSubchannelType.None)
{
if(UpdateProgress != null)
UpdateProgress(null, string.Format("Hashing subchannel of track {0}", trk.TrackSequence), currentProgress, maxProgress);
xmlTrk.SubChannel = new SubChannelType();
xmlTrk.SubChannel.Image = new ImageType();
switch(trk.TrackSubchannelType)
{
case TrackSubchannelType.Packed:
case TrackSubchannelType.PackedInterleaved:
xmlTrk.SubChannel.Image.format = "rw";
break;
case TrackSubchannelType.Raw:
case TrackSubchannelType.RawInterleaved:
xmlTrk.SubChannel.Image.format = "rw_raw";
break;
case TrackSubchannelType.Q16:
case TrackSubchannelType.Q16Interleaved:
xmlTrk.SubChannel.Image.format = "q16";
break;
}
if(trk.TrackFileOffset > 0)
{
xmlTrk.SubChannel.Image.offset = (long)trk.TrackSubchannelOffset;
xmlTrk.SubChannel.Image.offsetSpecified = true;
}
xmlTrk.SubChannel.Image.Value = trk.TrackSubchannelFile;
// TODO: Packed subchannel has different size?
xmlTrk.SubChannel.Size = (xmlTrk.EndSector - xmlTrk.StartSector + 1) * 96;
Checksum subChkWorker = new Checksum();
sectors = (ulong)(xmlTrk.EndSector - xmlTrk.StartSector + 1);
doneSectors = 0;
while(doneSectors < sectors)
{
byte[] sector;
if((sectors - doneSectors) >= sectorsToRead)
{
sector = _imageFormat.ReadSectorsTag(doneSectors, sectorsToRead, (uint)xmlTrk.Sequence.TrackNumber, SectorTagType.CDSectorSubchannel);
if(UpdateProgress2 != null)
UpdateProgress2(null, string.Format("Sector {0} of {1}", doneSectors, sectors), position, fi.Length);
doneSectors += sectorsToRead;
}
else
{
sector = _imageFormat.ReadSectorsTag(doneSectors, (uint)(sectors - doneSectors), (uint)xmlTrk.Sequence.TrackNumber, SectorTagType.CDSectorSubchannel);
if(UpdateProgress2 != null)
UpdateProgress2(null, string.Format("Sector {0} of {1}", doneSectors, sectors), position, fi.Length);
doneSectors += (sectors - doneSectors);
}
subChkWorker.Update(sector);
}
List<ChecksumType> subChecksums = subChkWorker.End();
xmlTrk.SubChannel.Checksums = subChecksums.ToArray();
if(UpdateProgress2 != null)
UpdateProgress2(null, null, 0, 0);
}
if(UpdateProgress != null)
UpdateProgress(null, "Checking filesystems", maxProgress-1, maxProgress);
List<Partition> partitions = new List<Partition>();
foreach(PartPlugin _partplugin in plugins.PartPluginsList.Values)
{
List<Partition> _partitions;
if(_partplugin.GetInformation(_imageFormat, out _partitions))
partitions.AddRange(_partitions);
}
xmlTrk.FileSystemInformation = new PartitionType[1];
if(partitions.Count > 0)
{
xmlTrk.FileSystemInformation = new PartitionType[partitions.Count];
for(int i = 0; i < partitions.Count; i++)
{
xmlTrk.FileSystemInformation[i] = new PartitionType();
xmlTrk.FileSystemInformation[i].Description = partitions[i].PartitionDescription;
xmlTrk.FileSystemInformation[i].EndSector = (int)(partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1);
xmlTrk.FileSystemInformation[i].Name = partitions[i].PartitionName;
xmlTrk.FileSystemInformation[i].Sequence = (int)partitions[i].PartitionSequence;
xmlTrk.FileSystemInformation[i].StartSector = (int)partitions[i].PartitionStartSector;
xmlTrk.FileSystemInformation[i].Type = partitions[i].PartitionType;
List<FileSystemType> lstFs = new List<FileSystemType>();
foreach(Filesystem _plugin in plugins.PluginsList.Values)
{
try
{
if(_plugin.Identify(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1))
{
string foo;
_plugin.GetInformation(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1, out foo);
lstFs.Add(_plugin.XmlFSType);
if(_plugin.XmlFSType.Type == "Opera")
dskType = MediaType.ThreeDO;
if(_plugin.XmlFSType.Type == "PC Engine filesystem")
dskType = MediaType.SuperCDROM2;
if(_plugin.XmlFSType.Type == "Nintendo Wii filesystem")
dskType = MediaType.WOD;
if(_plugin.XmlFSType.Type == "Nintendo Gamecube filesystem")
dskType = MediaType.GOD;
}
}
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
catch
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
{
//DicConsole.DebugWriteLine("Create-sidecar command", "Plugin {0} crashed", _plugin.Name);
}
}
if(lstFs.Count > 0)
xmlTrk.FileSystemInformation[i].FileSystems = lstFs.ToArray();
}
}
else
{
xmlTrk.FileSystemInformation[0] = new PartitionType();
xmlTrk.FileSystemInformation[0].EndSector = (int)xmlTrk.EndSector;
xmlTrk.FileSystemInformation[0].StartSector = (int)xmlTrk.StartSector;
List<FileSystemType> lstFs = new List<FileSystemType>();
foreach(Filesystem _plugin in plugins.PluginsList.Values)
{
try
{
if(_plugin.Identify(_imageFormat, (ulong)xmlTrk.StartSector, (ulong)xmlTrk.EndSector))
{
string foo;
_plugin.GetInformation(_imageFormat, (ulong)xmlTrk.StartSector, (ulong)xmlTrk.EndSector, out foo);
lstFs.Add(_plugin.XmlFSType);
if(_plugin.XmlFSType.Type == "Opera")
dskType = MediaType.ThreeDO;
if(_plugin.XmlFSType.Type == "PC Engine filesystem")
dskType = MediaType.SuperCDROM2;
if(_plugin.XmlFSType.Type == "Nintendo Wii filesystem")
dskType = MediaType.WOD;
if(_plugin.XmlFSType.Type == "Nintendo Gamecube filesystem")
dskType = MediaType.GOD;
}
}
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
catch
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
{
//DicConsole.DebugWriteLine("Create-sidecar command", "Plugin {0} crashed", _plugin.Name);
}
}
if(lstFs.Count > 0)
xmlTrk.FileSystemInformation[0].FileSystems = lstFs.ToArray();
}
trksLst.Add(xmlTrk);
}
if(UpdateProgress != null)
UpdateProgress(null, "Finishing", maxProgress, maxProgress);
if(trksLst != null)
sidecar.OpticalDisc[0].Track = trksLst.ToArray();
string dscType, dscSubType;
DiscImageChef.Metadata.MediaType.MediaTypeToString(dskType, out dscType, out dscSubType);
sidecar.OpticalDisc[0].DiscType = dscType;
sidecar.OpticalDisc[0].DiscSubType = dscSubType;
if(!string.IsNullOrEmpty(_imageFormat.ImageInfo.driveManufacturer) ||
!string.IsNullOrEmpty(_imageFormat.ImageInfo.driveModel) ||
!string.IsNullOrEmpty(_imageFormat.ImageInfo.driveFirmwareRevision) ||
!string.IsNullOrEmpty(_imageFormat.ImageInfo.driveSerialNumber))
{
sidecar.OpticalDisc[0].DumpHardwareArray = new DumpHardwareType[1];
sidecar.OpticalDisc[0].DumpHardwareArray[0].Extents = new ExtentType[0];
sidecar.OpticalDisc[0].DumpHardwareArray[0].Extents[0].Start = 0;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Extents[0].End = (int)_imageFormat.ImageInfo.sectors;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Manufacturer = _imageFormat.ImageInfo.driveManufacturer;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Model = _imageFormat.ImageInfo.driveModel;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Firmware = _imageFormat.ImageInfo.driveFirmwareRevision;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Serial = _imageFormat.ImageInfo.driveSerialNumber;
sidecar.OpticalDisc[0].DumpHardwareArray[0].Software = new SoftwareType();
sidecar.OpticalDisc[0].DumpHardwareArray[0].Software.Name = _imageFormat.GetImageApplication();
sidecar.OpticalDisc[0].DumpHardwareArray[0].Software.Version = _imageFormat.GetImageApplicationVersion();
}
MainClass.workingDisc = sidecar.OpticalDisc[0];
if(Finished != null)
Finished();
return;
}
case XmlMediaType.BlockMedia:
{
maxProgress = 3 + _imageFormat.ImageInfo.readableMediaTags.Count;
if(UpdateProgress != null)
UpdateProgress(null, "Hashing image file", 3, maxProgress);
sidecar.BlockMedia = new BlockMediaType[1];
sidecar.BlockMedia[0] = new BlockMediaType();
sidecar.BlockMedia[0].Checksums = imgChecksums.ToArray();
sidecar.BlockMedia[0].Image = new ImageType();
sidecar.BlockMedia[0].Image.format = _imageFormat.GetImageFormat();
sidecar.BlockMedia[0].Image.offset = 0;
sidecar.BlockMedia[0].Image.offsetSpecified = true;
sidecar.BlockMedia[0].Image.Value = Path.GetFileName(selectedFile);
sidecar.BlockMedia[0].Size = fi.Length;
sidecar.BlockMedia[0].Sequence = new SequenceType();
if(_imageFormat.GetMediaSequence() != 0 && _imageFormat.GetLastDiskSequence() != 0)
{
sidecar.BlockMedia[0].Sequence.MediaSequence = _imageFormat.GetMediaSequence();
sidecar.BlockMedia[0].Sequence.TotalMedia = _imageFormat.GetMediaSequence();
}
else
{
sidecar.BlockMedia[0].Sequence.MediaSequence = 1;
sidecar.BlockMedia[0].Sequence.TotalMedia = 1;
}
sidecar.BlockMedia[0].Sequence.MediaTitle = _imageFormat.GetImageName();
currentProgress = 3;
foreach(MediaTagType tagType in _imageFormat.ImageInfo.readableMediaTags)
{
currentProgress++;
if(UpdateProgress != null)
UpdateProgress(null, string.Format("Hashing file containing {0}", tagType), currentProgress, maxProgress);
switch(tagType)
{
case MediaTagType.ATAPI_IDENTIFY:
sidecar.BlockMedia[0].ATA = new ATAType();
sidecar.BlockMedia[0].ATA.Identify = new DumpType();
sidecar.BlockMedia[0].ATA.Identify.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.ATAPI_IDENTIFY)).ToArray();
sidecar.BlockMedia[0].ATA.Identify.Size = _imageFormat.ReadDiskTag(MediaTagType.ATAPI_IDENTIFY).Length;
break;
case MediaTagType.ATA_IDENTIFY:
sidecar.BlockMedia[0].ATA = new ATAType();
sidecar.BlockMedia[0].ATA.Identify = new DumpType();
sidecar.BlockMedia[0].ATA.Identify.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.ATA_IDENTIFY)).ToArray();
sidecar.BlockMedia[0].ATA.Identify.Size = _imageFormat.ReadDiskTag(MediaTagType.ATA_IDENTIFY).Length;
break;
case MediaTagType.PCMCIA_CIS:
byte[] cis = _imageFormat.ReadDiskTag(MediaTagType.PCMCIA_CIS);
sidecar.BlockMedia[0].PCMCIA = new PCMCIAType();
sidecar.BlockMedia[0].PCMCIA.CIS = new DumpType();
sidecar.BlockMedia[0].PCMCIA.CIS.Checksums = Checksum.GetChecksums(cis).ToArray();
sidecar.BlockMedia[0].PCMCIA.CIS.Size = cis.Length;
DiscImageChef.Decoders.PCMCIA.Tuple[] tuples = CIS.GetTuples(cis);
if(tuples != null)
{
foreach(DiscImageChef.Decoders.PCMCIA.Tuple tuple in tuples)
{
if(tuple.Code == TupleCodes.CISTPL_MANFID)
{
ManufacturerIdentificationTuple manfid = CIS.DecodeManufacturerIdentificationTuple(tuple);
if(manfid != null)
{
sidecar.BlockMedia[0].PCMCIA.ManufacturerCode = manfid.ManufacturerID;
sidecar.BlockMedia[0].PCMCIA.CardCode = manfid.CardID;
sidecar.BlockMedia[0].PCMCIA.ManufacturerCodeSpecified = true;
sidecar.BlockMedia[0].PCMCIA.CardCodeSpecified = true;
}
}
else if(tuple.Code == TupleCodes.CISTPL_VERS_1)
{
Level1VersionTuple vers = CIS.DecodeLevel1VersionTuple(tuple);
if(vers != null)
{
sidecar.BlockMedia[0].PCMCIA.Manufacturer = vers.Manufacturer;
sidecar.BlockMedia[0].PCMCIA.ProductName = vers.Product;
sidecar.BlockMedia[0].PCMCIA.Compliance = string.Format("{0}.{1}", vers.MajorVersion, vers.MinorVersion);
sidecar.BlockMedia[0].PCMCIA.AdditionalInformation = vers.AdditionalInformation;
}
}
}
}
break;
case MediaTagType.SCSI_INQUIRY:
sidecar.BlockMedia[0].SCSI = new SCSIType();
sidecar.BlockMedia[0].SCSI.Inquiry = new DumpType();
sidecar.BlockMedia[0].SCSI.Inquiry.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.SCSI_INQUIRY)).ToArray();
sidecar.BlockMedia[0].SCSI.Inquiry.Size = _imageFormat.ReadDiskTag(MediaTagType.SCSI_INQUIRY).Length;
break;
case MediaTagType.SD_CID:
if(sidecar.BlockMedia[0].SecureDigital == null)
sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType();
sidecar.BlockMedia[0].SecureDigital.CID = new DumpType();
sidecar.BlockMedia[0].SecureDigital.CID.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.SD_CID)).ToArray();
sidecar.BlockMedia[0].SecureDigital.CID.Size = _imageFormat.ReadDiskTag(MediaTagType.SD_CID).Length;
break;
case MediaTagType.SD_CSD:
if(sidecar.BlockMedia[0].SecureDigital == null)
sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType();
sidecar.BlockMedia[0].SecureDigital.CSD = new DumpType();
sidecar.BlockMedia[0].SecureDigital.CSD.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.SD_CSD)).ToArray();
sidecar.BlockMedia[0].SecureDigital.CSD.Size = _imageFormat.ReadDiskTag(MediaTagType.SD_CSD).Length;
break;
case MediaTagType.SD_ExtendedCSD:
if(sidecar.BlockMedia[0].SecureDigital == null)
sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType();
sidecar.BlockMedia[0].SecureDigital.ExtendedCSD = new DumpType();
sidecar.BlockMedia[0].SecureDigital.ExtendedCSD.Checksums = Checksum.GetChecksums(_imageFormat.ReadDiskTag(MediaTagType.SD_ExtendedCSD)).ToArray();
sidecar.BlockMedia[0].SecureDigital.ExtendedCSD.Size = _imageFormat.ReadDiskTag(MediaTagType.SD_ExtendedCSD).Length;
break;
}
}
string dskType, dskSubType;
DiscImageChef.Metadata.MediaType.MediaTypeToString(_imageFormat.ImageInfo.mediaType, out dskType, out dskSubType);
sidecar.BlockMedia[0].DiskType = dskType;
sidecar.BlockMedia[0].DiskSubType = dskSubType;
sidecar.BlockMedia[0].Dimensions = DiscImageChef.Metadata.Dimensions.DimensionsFromMediaType(_imageFormat.ImageInfo.mediaType);
sidecar.BlockMedia[0].LogicalBlocks = (long)_imageFormat.GetSectors();
sidecar.BlockMedia[0].LogicalBlockSize = (int)_imageFormat.GetSectorSize();
// TODO: Detect it
sidecar.BlockMedia[0].PhysicalBlockSize = (int)_imageFormat.GetSectorSize();
if(UpdateProgress != null)
UpdateProgress(null, "Checking filesystems", maxProgress - 1, maxProgress);
List<Partition> partitions = new List<Partition>();
foreach(PartPlugin _partplugin in plugins.PartPluginsList.Values)
{
List<Partition> _partitions;
if(_partplugin.GetInformation(_imageFormat, out _partitions))
{
partitions = _partitions;
break;
}
}
sidecar.BlockMedia[0].FileSystemInformation = new PartitionType[1];
if(partitions.Count > 0)
{
sidecar.BlockMedia[0].FileSystemInformation = new PartitionType[partitions.Count];
for(int i = 0; i < partitions.Count; i++)
{
sidecar.BlockMedia[0].FileSystemInformation[i] = new PartitionType();
sidecar.BlockMedia[0].FileSystemInformation[i].Description = partitions[i].PartitionDescription;
sidecar.BlockMedia[0].FileSystemInformation[i].EndSector = (int)(partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1);
sidecar.BlockMedia[0].FileSystemInformation[i].Name = partitions[i].PartitionName;
sidecar.BlockMedia[0].FileSystemInformation[i].Sequence = (int)partitions[i].PartitionSequence;
sidecar.BlockMedia[0].FileSystemInformation[i].StartSector = (int)partitions[i].PartitionStartSector;
sidecar.BlockMedia[0].FileSystemInformation[i].Type = partitions[i].PartitionType;
List<FileSystemType> lstFs = new List<FileSystemType>();
foreach(Filesystem _plugin in plugins.PluginsList.Values)
{
try
{
if(_plugin.Identify(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1))
{
string foo;
_plugin.GetInformation(_imageFormat, partitions[i].PartitionStartSector, partitions[i].PartitionStartSector + partitions[i].PartitionSectors - 1, out foo);
lstFs.Add(_plugin.XmlFSType);
}
}
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
catch
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
{
//DicConsole.DebugWriteLine("Create-sidecar command", "Plugin {0} crashed", _plugin.Name);
}
}
if(lstFs.Count > 0)
sidecar.BlockMedia[0].FileSystemInformation[i].FileSystems = lstFs.ToArray();
}
}
else
{
sidecar.BlockMedia[0].FileSystemInformation[0] = new PartitionType();
sidecar.BlockMedia[0].FileSystemInformation[0].StartSector = 0;
sidecar.BlockMedia[0].FileSystemInformation[0].EndSector = (int)(_imageFormat.GetSectors() - 1);
List<FileSystemType> lstFs = new List<FileSystemType>();
foreach(Filesystem _plugin in plugins.PluginsList.Values)
{
try
{
if(_plugin.Identify(_imageFormat, 0, _imageFormat.GetSectors() - 1))
{
string foo;
_plugin.GetInformation(_imageFormat, 0, _imageFormat.GetSectors() - 1, out foo);
lstFs.Add(_plugin.XmlFSType);
}
}
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
catch
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
{
//DicConsole.DebugWriteLine("Create-sidecar command", "Plugin {0} crashed", _plugin.Name);
}
}
if(lstFs.Count > 0)
sidecar.BlockMedia[0].FileSystemInformation[0].FileSystems = lstFs.ToArray();
}
// TODO: Implement support for getting CHS
if(UpdateProgress != null)
UpdateProgress(null, "Finishing", maxProgress, maxProgress);
MainClass.workingDisk = sidecar.BlockMedia[0];
if(Finished != null)
Finished();
return;
}
case XmlMediaType.LinearMedia:
{
if(Failed != null)
Failed("Linear media not yet supported.");
return;
}
case XmlMediaType.AudioMedia:
{
if(Failed != null)
Failed("Audio media not yet supported.");
return;
}
}
if(Failed != null)
Failed("Should've not arrived here.");
return;
}
catch(Exception ex)
{
if(Failed!=null)
Failed(string.Format("Error reading file: {0}\n{1}", ex.Message, ex.StackTrace));
}
}
public static void AddDisk()
static string LbaToMsf(long lba)
{
// TODO: Call DiscImageChef
if(Failed != null)
Failed("Not yet implemented");
long m, s, f;
if(lba >= -150)
{
m = (lba + 150) / (75 * 60);
lba -= m * (75 * 60);
s = (lba + 150) / 75;
lba -= s * 75;
f = lba + 150;
}
else
{
m = (lba + 450150) / (75 * 60);
lba -= m * (75 * 60);
s = (lba + 450150) / 75;
lba -= s * 75;
f = lba + 450150;
}
return string.Format("{0}:{1:D2}:{2:D2}", m, s, f);
}
static string DdcdLbaToMsf(long lba)
{
long h, m, s, f;
if(lba >= -150)
{
h = (lba + 150) / (75 * 60 * 60);
lba -= h * (75 * 60 * 60);
m = (lba + 150) / (75 * 60);
lba -= m * (75 * 60);
s = (lba + 150) / 75;
lba -= s * 75;
f = lba + 150;
}
else
{
h = (lba + 450150 * 2) / (75 * 60 * 60);
lba -= h * (75 * 60 * 60);
m = (lba + 450150 * 2) / (75 * 60);
lba -= m * (75 * 60);
s = (lba + 450150 * 2) / 75;
lba -= s * 75;
f = lba + 450150 * 2;
}
return string.Format("{3}:{0:D2}:{1:D2}:{2:D2}", m, s, f, h);
}
}
}

137
osrepodbmgr/PluginBase.cs Normal file
View File

@@ -0,0 +1,137 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : Plugins.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : Plugins
//
// --[ Description ] ----------------------------------------------------------
//
// Base methods for plugins.
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2016 Natalia Portillo
// ****************************************************************************/
using System;
using System.Collections.Generic;
using DiscImageChef.Filesystems;
using DiscImageChef.PartPlugins;
using DiscImageChef.ImagePlugins;
using System.Reflection;
namespace osrepodbmgr
{
public class PluginBase
{
public SortedDictionary<string, Filesystem> PluginsList;
public SortedDictionary<string, PartPlugin> PartPluginsList;
public SortedDictionary<string, ImagePlugin> ImagePluginsList;
public PluginBase()
{
PluginsList = new SortedDictionary<string, Filesystem>();
PartPluginsList = new SortedDictionary<string, PartPlugin>();
ImagePluginsList = new SortedDictionary<string, ImagePlugin>();
}
public void RegisterAllPlugins()
{
Assembly assembly;
assembly = Assembly.GetAssembly(typeof(ImagePlugin));
foreach(Type type in assembly.GetTypes())
{
try
{
if(type.IsSubclassOf(typeof(ImagePlugin)))
{
ImagePlugin plugin = (ImagePlugin)type.GetConstructor(Type.EmptyTypes).Invoke(new object[] { });
RegisterImagePlugin(plugin);
}
}
catch(Exception exception)
{
Console.WriteLine("Exception {0}", exception);
}
}
assembly = Assembly.GetAssembly(typeof(PartPlugin));
foreach(Type type in assembly.GetTypes())
{
try
{
if(type.IsSubclassOf(typeof(PartPlugin)))
{
PartPlugin plugin = (PartPlugin)type.GetConstructor(Type.EmptyTypes).Invoke(new object[] { });
RegisterPartPlugin(plugin);
}
}
catch(Exception exception)
{
Console.WriteLine("Exception {0}", exception);
}
}
assembly = Assembly.GetAssembly(typeof(Filesystem));
foreach(Type type in assembly.GetTypes())
{
try
{
if(type.IsSubclassOf(typeof(Filesystem)))
{
Filesystem plugin = (Filesystem)type.GetConstructor(Type.EmptyTypes).Invoke(new object[] { });
RegisterPlugin(plugin);
}
}
catch(Exception exception)
{
Console.WriteLine("Exception {0}", exception);
}
}
}
void RegisterImagePlugin(ImagePlugin plugin)
{
if(!ImagePluginsList.ContainsKey(plugin.Name.ToLower()))
{
ImagePluginsList.Add(plugin.Name.ToLower(), plugin);
}
}
void RegisterPlugin(Filesystem plugin)
{
if(!PluginsList.ContainsKey(plugin.Name.ToLower()))
{
PluginsList.Add(plugin.Name.ToLower(), plugin);
}
}
void RegisterPartPlugin(PartPlugin partplugin)
{
if(!PartPluginsList.ContainsKey(partplugin.Name.ToLower()))
{
PartPluginsList.Add(partplugin.Name.ToLower(), partplugin);
}
}
}
}

View File

@@ -485,8 +485,11 @@ namespace osrepodbmgr
files.Add(disk.SCSI.ModeSense.Image);
if(disk.SCSI.ModeSense10 != null)
files.Add(disk.SCSI.ModeSense10.Image);
foreach(EVPDType evpd in disk.SCSI.EVPD)
files.Add(evpd.Image);
if(disk.SCSI.EVPD != null)
{
foreach(EVPDType evpd in disk.SCSI.EVPD)
files.Add(evpd.Image);
}
}
if(disk.SecureDigital != null)
{
@@ -710,15 +713,17 @@ namespace osrepodbmgr
notebook3.GetNthPage(5).Visible = false;
notebook3.GetNthPage(6).Visible = false;
notebook3.GetNthPage(8).Visible = false;
prgAddDisc.Visible = true;
prgAddDisc1.Visible = true;
prgAddDisc2.Visible = true;
Core.Failed += OnDiscAddFailed;
Core.Finished += OnDiscAddFinished;
Core.UpdateProgress += UpdateDiscProgress;
Core.UpdateProgress += UpdateDiscProgress1;
Core.UpdateProgress2 += UpdateDiscProgress2;
MainClass.workingDisc = null;
btnStopAddDisc.Visible = true;
btnAddDisc.Visible = false;
btnRemoveDiscs.Visible = false;
thdDisc = new Thread(Core.AddDisc);
thdDisc = new Thread(Core.AddMedia);
thdDisc.Start();
}
@@ -730,15 +735,27 @@ namespace osrepodbmgr
OnDiscAddFailed(null);
}
public void UpdateDiscProgress(string text, string inner, long current, long maximum)
public void UpdateDiscProgress1(string text, string inner, long current, long maximum)
{
Application.Invoke(delegate
{
prgAddDisc.Text = text + inner;
prgAddDisc1.Text = text + inner;
if(maximum > 0)
prgAddDisc.Fraction = current / (double)maximum;
prgAddDisc1.Fraction = current / (double)maximum;
else
prgAddDisc.Pulse();
prgAddDisc1.Pulse();
});
}
public void UpdateDiscProgress2(string text, string inner, long current, long maximum)
{
Application.Invoke(delegate
{
prgAddDisc2.Text = text + inner;
if(maximum > 0)
prgAddDisc2.Fraction = current / (double)maximum;
else
prgAddDisc2.Pulse();
});
}
@@ -761,10 +778,12 @@ namespace osrepodbmgr
notebook3.GetNthPage(5).Visible = true;
notebook3.GetNthPage(6).Visible = true;
notebook3.GetNthPage(8).Visible = true;
prgAddDisc.Visible = true;
prgAddDisc1.Visible = false;
prgAddDisc2.Visible = false;
Core.Failed -= OnDiscAddFailed;
Core.Finished -= OnDiscAddFinished;
Core.UpdateProgress -= UpdateDiscProgress;
Core.UpdateProgress -= UpdateDiscProgress1;
Core.UpdateProgress2 -= UpdateDiscProgress2;
MainClass.workingDisc = null;
btnStopAddDisc.Visible = false;
btnAddDisc.Visible = true;
@@ -801,12 +820,18 @@ namespace osrepodbmgr
files.Add(disc.DMI.Image);
if(disc.LastRMD != null)
files.Add(disc.LastRMD.Image);
foreach(BorderType border in disc.LeadIn)
files.Add(border.Image);
if(disc.LeadIn != null)
{
foreach(BorderType border in disc.LeadIn)
files.Add(border.Image);
}
if(disc.LeadInCdText != null)
files.Add(disc.LeadInCdText.Image);
foreach(BorderType border in disc.LeadOut)
files.Add(border.Image);
if(disc.LeadOut != null)
{
foreach(BorderType border in disc.LeadOut)
files.Add(border.Image);
}
if(disc.MediaID != null)
files.Add(disc.MediaID.Image);
if(disc.PAC != null)
@@ -823,8 +848,11 @@ namespace osrepodbmgr
files.Add(disc.SAI.Image);
if(disc.TOC != null)
files.Add(disc.TOC.Image);
foreach(TrackType track in disc.Track)
files.Add(track.Image.Value);
if(disc.Track != null)
{
foreach(TrackType track in disc.Track)
files.Add(track.Image.Value);
}
foreach(string file in files)
{
@@ -863,10 +891,12 @@ namespace osrepodbmgr
notebook3.GetNthPage(5).Visible = true;
notebook3.GetNthPage(6).Visible = true;
notebook3.GetNthPage(8).Visible = true;
prgAddDisc.Visible = true;
prgAddDisc1.Visible = false;
prgAddDisc2.Visible = false;
Core.Failed -= OnDiscAddFailed;
Core.Finished -= OnDiscAddFinished;
Core.UpdateProgress -= UpdateDiscProgress;
Core.UpdateProgress -= UpdateDiscProgress1;
Core.UpdateProgress2 -= UpdateDiscProgress2;
MainClass.workingDisc = null;
btnStopAddDisc.Visible = false;
btnAddDisc.Visible = true;
@@ -902,15 +932,17 @@ namespace osrepodbmgr
notebook3.GetNthPage(5).Visible = false;
notebook3.GetNthPage(6).Visible = false;
notebook3.GetNthPage(7).Visible = false;
prgAddDisk.Visible = true;
prgAddDisk1.Visible = true;
prgAddDisk2.Visible = true;
Core.Failed += OnDiskAddFailed;
Core.Finished += OnDiskAddFinished;
Core.UpdateProgress += UpdateDiskProgress;
Core.UpdateProgress += UpdateDiskProgress1;
Core.UpdateProgress2 += UpdateDiskProgress2;
MainClass.workingDisk = null;
btnStopAddDisk.Visible = true;
btnAddDisk.Visible = false;
btnRemoveDisk.Visible = false;
thdDisk = new Thread(Core.AddDisk);
thdDisk = new Thread(Core.AddMedia);
thdDisk.Start();
}
@@ -922,15 +954,27 @@ namespace osrepodbmgr
OnDiskAddFailed(null);
}
public void UpdateDiskProgress(string text, string inner, long current, long maximum)
public void UpdateDiskProgress1(string text, string inner, long current, long maximum)
{
Application.Invoke(delegate
{
prgAddDisk.Text = text + inner;
prgAddDisk1.Text = text + inner;
if(maximum > 0)
prgAddDisk.Fraction = current / (double)maximum;
prgAddDisk1.Fraction = current / (double)maximum;
else
prgAddDisk.Pulse();
prgAddDisk1.Pulse();
});
}
public void UpdateDiskProgress2(string text, string inner, long current, long maximum)
{
Application.Invoke(delegate
{
prgAddDisk2.Text = text + inner;
if(maximum > 0)
prgAddDisk2.Fraction = current / (double)maximum;
else
prgAddDisk2.Pulse();
});
}
@@ -953,10 +997,12 @@ namespace osrepodbmgr
notebook3.GetNthPage(5).Visible = true;
notebook3.GetNthPage(6).Visible = true;
notebook3.GetNthPage(7).Visible = true;
prgAddDisk.Visible = true;
prgAddDisk1.Visible = false;
prgAddDisk2.Visible = false;
Core.Failed -= OnDiskAddFailed;
Core.Finished -= OnDiskAddFinished;
Core.UpdateProgress -= UpdateDiskProgress;
Core.UpdateProgress -= UpdateDiskProgress1;
Core.UpdateProgress2 -= UpdateDiskProgress2;
MainClass.workingDisk = null;
btnStopAddDisk.Visible = false;
btnAddDisk.Visible = true;
@@ -995,8 +1041,11 @@ namespace osrepodbmgr
files.Add(disk.SCSI.ModeSense.Image);
if(disk.SCSI.ModeSense10 != null)
files.Add(disk.SCSI.ModeSense10.Image);
foreach(EVPDType evpd in disk.SCSI.EVPD)
files.Add(evpd.Image);
if(disk.SCSI.EVPD != null)
{
foreach(EVPDType evpd in disk.SCSI.EVPD)
files.Add(evpd.Image);
}
}
if(disk.SecureDigital != null)
{
@@ -1007,10 +1056,16 @@ namespace osrepodbmgr
if(disk.SecureDigital.ExtendedCSD != null)
files.Add(disk.SecureDigital.ExtendedCSD.Image);
}
foreach(TapePartitionType tapePart in disk.TapeInformation)
files.Add(tapePart.Image.Value);
foreach(BlockTrackType track in disk.Track)
files.Add(track.Image.Value);
if(disk.TapeInformation != null)
{
foreach(TapePartitionType tapePart in disk.TapeInformation)
files.Add(tapePart.Image.Value);
}
if(disk.Track != null)
{
foreach(BlockTrackType track in disk.Track)
files.Add(track.Image.Value);
}
if(disk.USB != null && disk.USB.Descriptors != null)
files.Add(disk.USB.Descriptors.Image);
@@ -1051,10 +1106,12 @@ namespace osrepodbmgr
notebook3.GetNthPage(5).Visible = true;
notebook3.GetNthPage(6).Visible = true;
notebook3.GetNthPage(7).Visible = true;
prgAddDisk.Visible = true;
prgAddDisk1.Visible = false;
prgAddDisk2.Visible = false;
Core.Failed -= OnDiskAddFailed;
Core.Finished -= OnDiskAddFinished;
Core.UpdateProgress -= UpdateDiskProgress;
Core.UpdateProgress -= UpdateDiskProgress1;
Core.UpdateProgress2 -= UpdateDiskProgress2;
MainClass.workingDisk = null;
btnStopAddDisk.Visible = false;
btnAddDisk.Visible = true;

View File

@@ -1236,7 +1236,7 @@ QNX/QNX/20090229/source.zip</property>
<widget class="Gtk.Notebook" id="notebook3">
<property name="MemberName" />
<property name="CanFocus">True</property>
<property name="CurrentPage">0</property>
<property name="CurrentPage">7</property>
<child>
<widget class="Gtk.VBox" id="vbox3">
<property name="MemberName" />
@@ -2814,7 +2814,7 @@ QNX/QNX/20090229/source.zip</property>
</packing>
</child>
<child>
<widget class="Gtk.ProgressBar" id="prgAddDisc">
<widget class="Gtk.ProgressBar" id="prgAddDisc1">
<property name="MemberName" />
</widget>
<packing>
@@ -2824,6 +2824,18 @@ QNX/QNX/20090229/source.zip</property>
<property name="Fill">False</property>
</packing>
</child>
<child>
<widget class="Gtk.ProgressBar" id="prgAddDisc2">
<property name="MemberName" />
<property name="Visible">False</property>
</widget>
<packing>
<property name="Position">4</property>
<property name="AutoSize">True</property>
<property name="Expand">False</property>
<property name="Fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="Position">7</property>
@@ -2980,7 +2992,7 @@ QNX/QNX/20090229/source.zip</property>
</packing>
</child>
<child>
<widget class="Gtk.ProgressBar" id="prgAddDisk">
<widget class="Gtk.ProgressBar" id="prgAddDisk1">
<property name="MemberName" />
</widget>
<packing>
@@ -2990,6 +3002,18 @@ QNX/QNX/20090229/source.zip</property>
<property name="Fill">False</property>
</packing>
</child>
<child>
<widget class="Gtk.ProgressBar" id="prgAddDisk2">
<property name="MemberName" />
<property name="Visible">False</property>
</widget>
<packing>
<property name="Position">4</property>
<property name="AutoSize">True</property>
<property name="Expand">False</property>
<property name="Fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="Position">8</property>

View File

@@ -260,7 +260,9 @@ namespace osrepodbmgr
private global::Gtk.Button btnStopAddDisc;
private global::Gtk.ProgressBar prgAddDisc;
private global::Gtk.ProgressBar prgAddDisc1;
private global::Gtk.ProgressBar prgAddDisc2;
private global::Gtk.Label label22;
@@ -286,7 +288,9 @@ namespace osrepodbmgr
private global::Gtk.Button btnStopAddDisk;
private global::Gtk.ProgressBar prgAddDisk;
private global::Gtk.ProgressBar prgAddDisk1;
private global::Gtk.ProgressBar prgAddDisk2;
private global::Gtk.Label label32;
@@ -308,7 +312,7 @@ namespace osrepodbmgr
this.notebook3 = new global::Gtk.Notebook();
this.notebook3.CanFocus = true;
this.notebook3.Name = "notebook3";
this.notebook3.CurrentPage = 0;
this.notebook3.CurrentPage = 7;
// Container child notebook3.Gtk.Notebook+NotebookChild
this.vbox3 = new global::Gtk.VBox();
this.vbox3.Name = "vbox3";
@@ -1459,16 +1463,24 @@ namespace osrepodbmgr
w120.Expand = false;
w120.Fill = false;
// Container child vbox11.Gtk.Box+BoxChild
this.prgAddDisc = new global::Gtk.ProgressBar();
this.prgAddDisc.Name = "prgAddDisc";
this.vbox11.Add(this.prgAddDisc);
global::Gtk.Box.BoxChild w121 = ((global::Gtk.Box.BoxChild)(this.vbox11[this.prgAddDisc]));
this.prgAddDisc1 = new global::Gtk.ProgressBar();
this.prgAddDisc1.Name = "prgAddDisc1";
this.vbox11.Add(this.prgAddDisc1);
global::Gtk.Box.BoxChild w121 = ((global::Gtk.Box.BoxChild)(this.vbox11[this.prgAddDisc1]));
w121.Position = 3;
w121.Expand = false;
w121.Fill = false;
// Container child vbox11.Gtk.Box+BoxChild
this.prgAddDisc2 = new global::Gtk.ProgressBar();
this.prgAddDisc2.Name = "prgAddDisc2";
this.vbox11.Add(this.prgAddDisc2);
global::Gtk.Box.BoxChild w122 = ((global::Gtk.Box.BoxChild)(this.vbox11[this.prgAddDisc2]));
w122.Position = 4;
w122.Expand = false;
w122.Fill = false;
this.notebook3.Add(this.vbox11);
global::Gtk.Notebook.NotebookChild w122 = ((global::Gtk.Notebook.NotebookChild)(this.notebook3[this.vbox11]));
w122.Position = 7;
global::Gtk.Notebook.NotebookChild w123 = ((global::Gtk.Notebook.NotebookChild)(this.notebook3[this.vbox11]));
w123.Position = 7;
// Notebook tab
this.label22 = new global::Gtk.Label();
this.label22.Name = "label22";
@@ -1488,18 +1500,18 @@ namespace osrepodbmgr
this.lblNewDisk.Name = "lblNewDisk";
this.lblNewDisk.LabelProp = global::Mono.Unix.Catalog.GetString("Choose disk to add:");
this.hbox29.Add(this.lblNewDisk);
global::Gtk.Box.BoxChild w123 = ((global::Gtk.Box.BoxChild)(this.hbox29[this.lblNewDisk]));
w123.Position = 0;
w123.Expand = false;
w123.Fill = false;
global::Gtk.Box.BoxChild w124 = ((global::Gtk.Box.BoxChild)(this.hbox29[this.lblNewDisk]));
w124.Position = 0;
w124.Expand = false;
w124.Fill = false;
// Container child hbox29.Gtk.Box+BoxChild
this.cmbFilesForNewDisk = global::Gtk.ComboBox.NewText();
this.cmbFilesForNewDisk.Name = "cmbFilesForNewDisk";
this.hbox29.Add(this.cmbFilesForNewDisk);
global::Gtk.Box.BoxChild w124 = ((global::Gtk.Box.BoxChild)(this.hbox29[this.cmbFilesForNewDisk]));
w124.Position = 1;
w124.Expand = false;
w124.Fill = false;
global::Gtk.Box.BoxChild w125 = ((global::Gtk.Box.BoxChild)(this.hbox29[this.cmbFilesForNewDisk]));
w125.Position = 1;
w125.Expand = false;
w125.Fill = false;
// Container child hbox29.Gtk.Box+BoxChild
this.btnAddDisk = new global::Gtk.Button();
this.btnAddDisk.CanFocus = true;
@@ -1508,15 +1520,15 @@ namespace osrepodbmgr
this.btnAddDisk.UseUnderline = true;
this.btnAddDisk.Label = "gtk-add";
this.hbox29.Add(this.btnAddDisk);
global::Gtk.Box.BoxChild w125 = ((global::Gtk.Box.BoxChild)(this.hbox29[this.btnAddDisk]));
w125.Position = 2;
w125.Expand = false;
w125.Fill = false;
this.vbox12.Add(this.hbox29);
global::Gtk.Box.BoxChild w126 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.hbox29]));
w126.Position = 0;
global::Gtk.Box.BoxChild w126 = ((global::Gtk.Box.BoxChild)(this.hbox29[this.btnAddDisk]));
w126.Position = 2;
w126.Expand = false;
w126.Fill = false;
this.vbox12.Add(this.hbox29);
global::Gtk.Box.BoxChild w127 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.hbox29]));
w127.Position = 0;
w127.Expand = false;
w127.Fill = false;
// Container child vbox12.Gtk.Box+BoxChild
this.GtkScrolledWindow8 = new global::Gtk.ScrolledWindow();
this.GtkScrolledWindow8.Name = "GtkScrolledWindow8";
@@ -1527,8 +1539,8 @@ namespace osrepodbmgr
this.treeDisks.Name = "treeDisks";
this.GtkScrolledWindow8.Add(this.treeDisks);
this.vbox12.Add(this.GtkScrolledWindow8);
global::Gtk.Box.BoxChild w128 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.GtkScrolledWindow8]));
w128.Position = 1;
global::Gtk.Box.BoxChild w129 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.GtkScrolledWindow8]));
w129.Position = 1;
// Container child vbox12.Gtk.Box+BoxChild
this.hbox28 = new global::Gtk.HBox();
this.hbox28.Name = "hbox28";
@@ -1541,11 +1553,11 @@ namespace osrepodbmgr
this.btnRemoveDisk.UseUnderline = true;
this.btnRemoveDisk.Label = "gtk-remove";
this.hbox28.Add(this.btnRemoveDisk);
global::Gtk.Box.BoxChild w129 = ((global::Gtk.Box.BoxChild)(this.hbox28[this.btnRemoveDisk]));
w129.PackType = ((global::Gtk.PackType)(1));
w129.Position = 0;
w129.Expand = false;
w129.Fill = false;
global::Gtk.Box.BoxChild w130 = ((global::Gtk.Box.BoxChild)(this.hbox28[this.btnRemoveDisk]));
w130.PackType = ((global::Gtk.PackType)(1));
w130.Position = 0;
w130.Expand = false;
w130.Fill = false;
// Container child hbox28.Gtk.Box+BoxChild
this.btnClearDisks = new global::Gtk.Button();
this.btnClearDisks.CanFocus = true;
@@ -1554,11 +1566,11 @@ namespace osrepodbmgr
this.btnClearDisks.UseUnderline = true;
this.btnClearDisks.Label = "gtk-clear";
this.hbox28.Add(this.btnClearDisks);
global::Gtk.Box.BoxChild w130 = ((global::Gtk.Box.BoxChild)(this.hbox28[this.btnClearDisks]));
w130.PackType = ((global::Gtk.PackType)(1));
w130.Position = 1;
w130.Expand = false;
w130.Fill = false;
global::Gtk.Box.BoxChild w131 = ((global::Gtk.Box.BoxChild)(this.hbox28[this.btnClearDisks]));
w131.PackType = ((global::Gtk.PackType)(1));
w131.Position = 1;
w131.Expand = false;
w131.Fill = false;
// Container child hbox28.Gtk.Box+BoxChild
this.btnStopAddDisk = new global::Gtk.Button();
this.btnStopAddDisk.CanFocus = true;
@@ -1567,27 +1579,35 @@ namespace osrepodbmgr
this.btnStopAddDisk.UseUnderline = true;
this.btnStopAddDisk.Label = "gtk-stop";
this.hbox28.Add(this.btnStopAddDisk);
global::Gtk.Box.BoxChild w131 = ((global::Gtk.Box.BoxChild)(this.hbox28[this.btnStopAddDisk]));
w131.PackType = ((global::Gtk.PackType)(1));
w131.Position = 2;
w131.Expand = false;
w131.Fill = false;
this.vbox12.Add(this.hbox28);
global::Gtk.Box.BoxChild w132 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.hbox28]));
global::Gtk.Box.BoxChild w132 = ((global::Gtk.Box.BoxChild)(this.hbox28[this.btnStopAddDisk]));
w132.PackType = ((global::Gtk.PackType)(1));
w132.Position = 2;
w132.Expand = false;
w132.Fill = false;
// Container child vbox12.Gtk.Box+BoxChild
this.prgAddDisk = new global::Gtk.ProgressBar();
this.prgAddDisk.Name = "prgAddDisk";
this.vbox12.Add(this.prgAddDisk);
global::Gtk.Box.BoxChild w133 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.prgAddDisk]));
w133.Position = 3;
this.vbox12.Add(this.hbox28);
global::Gtk.Box.BoxChild w133 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.hbox28]));
w133.Position = 2;
w133.Expand = false;
w133.Fill = false;
// Container child vbox12.Gtk.Box+BoxChild
this.prgAddDisk1 = new global::Gtk.ProgressBar();
this.prgAddDisk1.Name = "prgAddDisk1";
this.vbox12.Add(this.prgAddDisk1);
global::Gtk.Box.BoxChild w134 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.prgAddDisk1]));
w134.Position = 3;
w134.Expand = false;
w134.Fill = false;
// Container child vbox12.Gtk.Box+BoxChild
this.prgAddDisk2 = new global::Gtk.ProgressBar();
this.prgAddDisk2.Name = "prgAddDisk2";
this.vbox12.Add(this.prgAddDisk2);
global::Gtk.Box.BoxChild w135 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.prgAddDisk2]));
w135.Position = 4;
w135.Expand = false;
w135.Fill = false;
this.notebook3.Add(this.vbox12);
global::Gtk.Notebook.NotebookChild w134 = ((global::Gtk.Notebook.NotebookChild)(this.notebook3[this.vbox12]));
w134.Position = 8;
global::Gtk.Notebook.NotebookChild w136 = ((global::Gtk.Notebook.NotebookChild)(this.notebook3[this.vbox12]));
w136.Position = 8;
// Notebook tab
this.label32 = new global::Gtk.Label();
this.label32.Name = "label32";
@@ -1595,14 +1615,14 @@ namespace osrepodbmgr
this.notebook3.SetTabLabel(this.vbox12, this.label32);
this.label32.ShowAll();
w1.Add(this.notebook3);
global::Gtk.Box.BoxChild w135 = ((global::Gtk.Box.BoxChild)(w1[this.notebook3]));
w135.Position = 0;
global::Gtk.Box.BoxChild w137 = ((global::Gtk.Box.BoxChild)(w1[this.notebook3]));
w137.Position = 0;
// Internal child osrepodbmgr.dlgMetadata.ActionArea
global::Gtk.HButtonBox w136 = this.ActionArea;
w136.Name = "dialog1_ActionArea";
w136.Spacing = 10;
w136.BorderWidth = ((uint)(5));
w136.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4));
global::Gtk.HButtonBox w138 = this.ActionArea;
w138.Name = "dialog1_ActionArea";
w138.Spacing = 10;
w138.BorderWidth = ((uint)(5));
w138.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4));
// Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
this.buttonCancel = new global::Gtk.Button();
this.buttonCancel.CanDefault = true;
@@ -1612,9 +1632,9 @@ namespace osrepodbmgr
this.buttonCancel.UseUnderline = true;
this.buttonCancel.Label = "gtk-cancel";
this.AddActionWidget(this.buttonCancel, -6);
global::Gtk.ButtonBox.ButtonBoxChild w137 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w136[this.buttonCancel]));
w137.Expand = false;
w137.Fill = false;
global::Gtk.ButtonBox.ButtonBoxChild w139 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w138[this.buttonCancel]));
w139.Expand = false;
w139.Fill = false;
// Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
this.buttonOk = new global::Gtk.Button();
this.buttonOk.CanDefault = true;
@@ -1624,10 +1644,10 @@ namespace osrepodbmgr
this.buttonOk.UseUnderline = true;
this.buttonOk.Label = "gtk-ok";
this.AddActionWidget(this.buttonOk, -5);
global::Gtk.ButtonBox.ButtonBoxChild w138 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w136[this.buttonOk]));
w138.Position = 1;
w138.Expand = false;
w138.Fill = false;
global::Gtk.ButtonBox.ButtonBoxChild w140 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w138[this.buttonOk]));
w140.Position = 1;
w140.Expand = false;
w140.Fill = false;
if((this.Child != null))
{
this.Child.ShowAll();
@@ -1635,6 +1655,8 @@ namespace osrepodbmgr
this.DefaultWidth = 909;
this.DefaultHeight = 533;
this.btnStopAddDisc.Hide();
this.prgAddDisc2.Hide();
this.prgAddDisk2.Hide();
this.Show();
this.chkBoxUnknownReleaseType.Toggled += new global::System.EventHandler(this.OnChkBoxUnknownReleaseTypeToggled);
this.chkReleaseDate.Toggled += new global::System.EventHandler(this.OnChkReleaseDateToggled);

View File

@@ -86,12 +86,12 @@
<Compile Include="Settings.cs" />
<Compile Include="PlatformID.cs" />
<Compile Include="DetectOS.cs" />
<Compile Include="..\CICMMetadata\dotnet\cicm.cs">
<Link>cicm.cs</Link>
</Compile>
<Compile Include="dlgMetadata.cs" />
<Compile Include="gtk-gui\osrepodbmgr.dlgMetadata.cs" />
<Compile Include="DicCore.cs" />
<Compile Include="PluginBase.cs" />
<Compile Include="DetectImageFormat.cs" />
<Compile Include="Checksum.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
@@ -101,6 +101,34 @@
<Project>{CC48B324-A532-4A45-87A6-6F91F7141E8D}</Project>
<Name>DiscImageChef.Checksums</Name>
</ProjectReference>
<ProjectReference Include="..\DiscImageChef\DiscImageChef.DiscImages\DiscImageChef.DiscImages.csproj">
<Project>{74032CBC-339B-42F3-AF6F-E96C261F3E6A}</Project>
<Name>DiscImageChef.DiscImages</Name>
</ProjectReference>
<ProjectReference Include="..\DiscImageChef\DiscImageChef.Filesystems\DiscImageChef.Filesystems.csproj">
<Project>{D7016DF2-5A5E-4524-B40D-BA2D59576688}</Project>
<Name>DiscImageChef.Filesystems</Name>
</ProjectReference>
<ProjectReference Include="..\DiscImageChef\DiscImageChef.Filters\DiscImageChef.Filters.csproj">
<Project>{D571B8EF-903D-4353-BDD5-B834F9F029EF}</Project>
<Name>DiscImageChef.Filters</Name>
</ProjectReference>
<ProjectReference Include="..\DiscImageChef\DiscImageChef.Partitions\DiscImageChef.Partitions.csproj">
<Project>{DA7AB65D-B5BA-4003-8893-A51BB071BA2F}</Project>
<Name>DiscImageChef.Partitions</Name>
</ProjectReference>
<ProjectReference Include="..\DiscImageChef\DiscImageChef.CommonTypes\DiscImageChef.CommonTypes.csproj">
<Project>{F2B84194-26EB-4227-B1C5-6602517E85AE}</Project>
<Name>DiscImageChef.CommonTypes</Name>
</ProjectReference>
<ProjectReference Include="..\DiscImageChef\DiscImageChef.Decoders\DiscImageChef.Decoders.csproj">
<Project>{0BEB3088-B634-4289-AE17-CDF2D25D00D5}</Project>
<Name>DiscImageChef.Decoders</Name>
</ProjectReference>
<ProjectReference Include="..\DiscImageChef\DiscImageChef.Metadata\DiscImageChef.Metadata.csproj">
<Project>{9F213318-5CB8-4066-A757-074489C9F818}</Project>
<Name>DiscImageChef.Metadata</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\System.Data.SQLite.Core.1.0.105.0\build\net45\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.105.0\build\net45\System.Data.SQLite.Core.targets')" />