2017-10-06 14:06:40 -07:00
|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
|
|
using SabreTools.Library.Data;
|
|
|
|
|
|
|
|
|
|
|
|
namespace SabreTools.Library.Dats
|
2017-10-06 13:29:58 -07:00
|
|
|
|
{
|
|
|
|
|
|
public class DatStats
|
|
|
|
|
|
{
|
|
|
|
|
|
#region Private instance variables
|
|
|
|
|
|
|
2017-10-06 14:06:40 -07:00
|
|
|
|
// Object used to lock stats updates
|
|
|
|
|
|
private object _lockObject = new object();
|
|
|
|
|
|
|
|
|
|
|
|
// Overall item count
|
2017-10-06 14:10:28 -07:00
|
|
|
|
private long _count = 0;
|
2017-10-06 14:06:40 -07:00
|
|
|
|
|
|
|
|
|
|
// Individual DatItem type counts
|
2017-10-06 14:10:28 -07:00
|
|
|
|
private long _archiveCount = 0;
|
|
|
|
|
|
private long _biosSetCount = 0;
|
|
|
|
|
|
private long _diskCount = 0;
|
|
|
|
|
|
private long _releaseCount = 0;
|
|
|
|
|
|
private long _romCount = 0;
|
|
|
|
|
|
private long _sampleCount = 0;
|
2017-10-06 14:06:40 -07:00
|
|
|
|
|
|
|
|
|
|
// Total reported size
|
2017-10-06 14:10:28 -07:00
|
|
|
|
private long _totalSize = 0;
|
2017-10-06 14:06:40 -07:00
|
|
|
|
|
|
|
|
|
|
// Individual hash counts
|
2017-10-06 14:10:28 -07:00
|
|
|
|
private long _crcCount = 0;
|
|
|
|
|
|
private long _md5Count = 0;
|
|
|
|
|
|
private long _sha1Count = 0;
|
|
|
|
|
|
private long _sha256Count = 0;
|
|
|
|
|
|
private long _sha384Count = 0;
|
|
|
|
|
|
private long _sha512Count = 0;
|
2017-10-06 14:06:40 -07:00
|
|
|
|
|
|
|
|
|
|
// Individual status counts
|
2017-10-06 14:10:28 -07:00
|
|
|
|
private long _baddumpCount = 0;
|
|
|
|
|
|
private long _goodCount = 0;
|
|
|
|
|
|
private long _nodumpCount = 0;
|
|
|
|
|
|
private long _verifiedCount = 0;
|
2017-10-06 13:29:58 -07:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Publicly facing variables
|
|
|
|
|
|
|
2017-10-06 14:06:40 -07:00
|
|
|
|
// Overall item count
|
2017-10-06 13:29:58 -07:00
|
|
|
|
public long Count
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _count; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _count = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
2017-10-06 14:06:40 -07:00
|
|
|
|
|
|
|
|
|
|
// Individual DatItem type counts
|
|
|
|
|
|
public long ArchiveCount
|
2017-10-06 13:29:58 -07:00
|
|
|
|
{
|
2017-10-06 14:06:40 -07:00
|
|
|
|
get { return _archiveCount; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _archiveCount = value; }
|
2017-10-06 14:06:40 -07:00
|
|
|
|
}
|
|
|
|
|
|
public long BiosSetCount
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _biosSetCount; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _biosSetCount = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
|
|
|
|
|
public long DiskCount
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _diskCount; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _diskCount = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
2017-10-06 14:06:40 -07:00
|
|
|
|
public long ReleaseCount
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _releaseCount; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _releaseCount = value; }
|
2017-10-06 14:06:40 -07:00
|
|
|
|
}
|
|
|
|
|
|
public long RomCount
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _romCount; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _romCount = value; }
|
2017-10-06 14:06:40 -07:00
|
|
|
|
}
|
|
|
|
|
|
public long SampleCount
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _sampleCount; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _sampleCount = value; }
|
2017-10-06 14:06:40 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Total reported size
|
2017-10-06 13:29:58 -07:00
|
|
|
|
public long TotalSize
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _totalSize; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _totalSize = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
2017-10-06 14:06:40 -07:00
|
|
|
|
|
|
|
|
|
|
// Individual hash counts
|
2017-10-06 13:29:58 -07:00
|
|
|
|
public long CRCCount
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _crcCount; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _crcCount = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
|
|
|
|
|
public long MD5Count
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _md5Count; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _md5Count = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
|
|
|
|
|
public long SHA1Count
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _sha1Count; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _sha1Count = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
|
|
|
|
|
public long SHA256Count
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _sha256Count; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _sha256Count = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
|
|
|
|
|
public long SHA384Count
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _sha384Count; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _sha384Count = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
|
|
|
|
|
public long SHA512Count
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _sha512Count; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _sha512Count = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
2017-10-06 14:06:40 -07:00
|
|
|
|
|
|
|
|
|
|
// Individual status counts
|
2017-10-06 13:29:58 -07:00
|
|
|
|
public long BaddumpCount
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _baddumpCount; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _baddumpCount = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
2017-10-06 14:06:40 -07:00
|
|
|
|
public long GoodCount
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _goodCount; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _goodCount = value; }
|
2017-10-06 14:06:40 -07:00
|
|
|
|
}
|
2017-10-06 13:29:58 -07:00
|
|
|
|
public long NodumpCount
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _nodumpCount; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _nodumpCount = value; }
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
2017-10-06 14:06:40 -07:00
|
|
|
|
public long VerifiedCount
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return _verifiedCount; }
|
2017-10-06 14:42:20 -07:00
|
|
|
|
set { _verifiedCount = value; }
|
2017-10-06 14:06:40 -07:00
|
|
|
|
}
|
2017-10-06 13:29:58 -07:00
|
|
|
|
|
|
|
|
|
|
#endregion
|
2017-10-06 14:06:40 -07:00
|
|
|
|
|
|
|
|
|
|
#region Instance Methods
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Add to the statistics given a DatItem
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="item">Item to add info from</param>
|
2017-10-06 14:13:23 -07:00
|
|
|
|
public void AddItem(DatItem item)
|
2017-10-06 14:06:40 -07:00
|
|
|
|
{
|
|
|
|
|
|
// No matter what the item is, we increate the count
|
|
|
|
|
|
lock (_lockObject)
|
|
|
|
|
|
{
|
|
|
|
|
|
_count += 1;
|
|
|
|
|
|
|
|
|
|
|
|
// Now we do different things for each item type
|
|
|
|
|
|
|
|
|
|
|
|
switch (item.Type)
|
|
|
|
|
|
{
|
|
|
|
|
|
case ItemType.Archive:
|
|
|
|
|
|
_archiveCount += 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ItemType.BiosSet:
|
|
|
|
|
|
_biosSetCount += 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ItemType.Disk:
|
|
|
|
|
|
_diskCount += 1;
|
|
|
|
|
|
if (((Disk)item).ItemStatus != ItemStatus.Nodump)
|
|
|
|
|
|
{
|
|
|
|
|
|
_md5Count += (String.IsNullOrEmpty(((Disk)item).MD5) ? 0 : 1);
|
|
|
|
|
|
_sha1Count += (String.IsNullOrEmpty(((Disk)item).SHA1) ? 0 : 1);
|
|
|
|
|
|
_sha256Count += (String.IsNullOrEmpty(((Disk)item).SHA256) ? 0 : 1);
|
|
|
|
|
|
_sha384Count += (String.IsNullOrEmpty(((Disk)item).SHA384) ? 0 : 1);
|
|
|
|
|
|
_sha512Count += (String.IsNullOrEmpty(((Disk)item).SHA512) ? 0 : 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_baddumpCount += (((Disk)item).ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
|
|
|
|
|
_goodCount += (((Disk)item).ItemStatus == ItemStatus.Good ? 1 : 0);
|
|
|
|
|
|
_nodumpCount += (((Disk)item).ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
|
|
|
|
|
_verifiedCount += (((Disk)item).ItemStatus == ItemStatus.Verified ? 1 : 0);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ItemType.Release:
|
|
|
|
|
|
_releaseCount += 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ItemType.Rom:
|
|
|
|
|
|
_romCount += 1;
|
|
|
|
|
|
if (((Rom)item).ItemStatus != ItemStatus.Nodump)
|
|
|
|
|
|
{
|
|
|
|
|
|
_totalSize += ((Rom)item).Size;
|
|
|
|
|
|
_crcCount += (String.IsNullOrEmpty(((Rom)item).CRC) ? 0 : 1);
|
|
|
|
|
|
_md5Count += (String.IsNullOrEmpty(((Rom)item).MD5) ? 0 : 1);
|
|
|
|
|
|
_sha1Count += (String.IsNullOrEmpty(((Rom)item).SHA1) ? 0 : 1);
|
|
|
|
|
|
_sha256Count += (String.IsNullOrEmpty(((Rom)item).SHA256) ? 0 : 1);
|
|
|
|
|
|
_sha384Count += (String.IsNullOrEmpty(((Rom)item).SHA384) ? 0 : 1);
|
|
|
|
|
|
_sha512Count += (String.IsNullOrEmpty(((Rom)item).SHA512) ? 0 : 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_baddumpCount += (((Rom)item).ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
|
|
|
|
|
_goodCount += (((Rom)item).ItemStatus == ItemStatus.Good ? 1 : 0);
|
|
|
|
|
|
_nodumpCount += (((Rom)item).ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
|
|
|
|
|
_verifiedCount += (((Rom)item).ItemStatus == ItemStatus.Verified ? 1 : 0);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ItemType.Sample:
|
|
|
|
|
|
_sampleCount += 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Remove from the statistics given a DatItem
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="item">Item to remove info for</param>
|
2017-10-06 14:13:23 -07:00
|
|
|
|
public void RemoveItem(DatItem item)
|
2017-10-06 14:06:40 -07:00
|
|
|
|
{
|
|
|
|
|
|
// No matter what the item is, we increate the count
|
|
|
|
|
|
lock (_lockObject)
|
|
|
|
|
|
{
|
|
|
|
|
|
_count -= 1;
|
|
|
|
|
|
|
|
|
|
|
|
// Now we do different things for each item type
|
|
|
|
|
|
|
|
|
|
|
|
switch (item.Type)
|
|
|
|
|
|
{
|
|
|
|
|
|
case ItemType.Archive:
|
|
|
|
|
|
_archiveCount -= 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ItemType.BiosSet:
|
|
|
|
|
|
_biosSetCount -= 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ItemType.Disk:
|
|
|
|
|
|
_diskCount -= 1;
|
|
|
|
|
|
if (((Disk)item).ItemStatus != ItemStatus.Nodump)
|
|
|
|
|
|
{
|
|
|
|
|
|
_md5Count -= (String.IsNullOrEmpty(((Disk)item).MD5) ? 0 : 1);
|
|
|
|
|
|
_sha1Count -= (String.IsNullOrEmpty(((Disk)item).SHA1) ? 0 : 1);
|
|
|
|
|
|
_sha256Count -= (String.IsNullOrEmpty(((Disk)item).SHA256) ? 0 : 1);
|
|
|
|
|
|
_sha384Count -= (String.IsNullOrEmpty(((Disk)item).SHA384) ? 0 : 1);
|
|
|
|
|
|
_sha512Count -= (String.IsNullOrEmpty(((Disk)item).SHA512) ? 0 : 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_baddumpCount -= (((Disk)item).ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
|
|
|
|
|
_goodCount -= (((Disk)item).ItemStatus == ItemStatus.Good ? 1 : 0);
|
|
|
|
|
|
_nodumpCount -= (((Disk)item).ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
|
|
|
|
|
_verifiedCount -= (((Disk)item).ItemStatus == ItemStatus.Verified ? 1 : 0);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ItemType.Release:
|
|
|
|
|
|
_releaseCount -= 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ItemType.Rom:
|
|
|
|
|
|
_romCount -= 1;
|
|
|
|
|
|
if (((Rom)item).ItemStatus != ItemStatus.Nodump)
|
|
|
|
|
|
{
|
|
|
|
|
|
_totalSize -= ((Rom)item).Size;
|
|
|
|
|
|
_crcCount -= (String.IsNullOrEmpty(((Rom)item).CRC) ? 0 : 1);
|
|
|
|
|
|
_md5Count -= (String.IsNullOrEmpty(((Rom)item).MD5) ? 0 : 1);
|
|
|
|
|
|
_sha1Count -= (String.IsNullOrEmpty(((Rom)item).SHA1) ? 0 : 1);
|
|
|
|
|
|
_sha256Count -= (String.IsNullOrEmpty(((Rom)item).SHA256) ? 0 : 1);
|
|
|
|
|
|
_sha384Count -= (String.IsNullOrEmpty(((Rom)item).SHA384) ? 0 : 1);
|
|
|
|
|
|
_sha512Count -= (String.IsNullOrEmpty(((Rom)item).SHA512) ? 0 : 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_baddumpCount -= (((Rom)item).ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
|
|
|
|
|
_goodCount -= (((Rom)item).ItemStatus == ItemStatus.Good ? 1 : 0);
|
|
|
|
|
|
_nodumpCount -= (((Rom)item).ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
|
|
|
|
|
_verifiedCount -= (((Rom)item).ItemStatus == ItemStatus.Verified ? 1 : 0);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ItemType.Sample:
|
|
|
|
|
|
_sampleCount -= 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Reset all statistics
|
|
|
|
|
|
/// </summary>
|
2017-10-06 14:13:23 -07:00
|
|
|
|
public void Reset()
|
2017-10-06 14:06:40 -07:00
|
|
|
|
{
|
|
|
|
|
|
_count = 0;
|
|
|
|
|
|
|
|
|
|
|
|
_archiveCount = 0;
|
|
|
|
|
|
_biosSetCount = 0;
|
|
|
|
|
|
_diskCount = 0;
|
|
|
|
|
|
_releaseCount = 0;
|
|
|
|
|
|
_romCount = 0;
|
|
|
|
|
|
_sampleCount = 0;
|
|
|
|
|
|
|
|
|
|
|
|
_totalSize = 0;
|
|
|
|
|
|
|
|
|
|
|
|
_crcCount = 0;
|
|
|
|
|
|
_md5Count = 0;
|
|
|
|
|
|
_sha1Count = 0;
|
|
|
|
|
|
_sha256Count = 0;
|
|
|
|
|
|
_sha384Count = 0;
|
|
|
|
|
|
_sha512Count = 0;
|
|
|
|
|
|
|
|
|
|
|
|
_baddumpCount = 0;
|
|
|
|
|
|
_goodCount = 0;
|
|
|
|
|
|
_nodumpCount = 0;
|
|
|
|
|
|
_verifiedCount = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion // Instance Methods
|
2017-10-06 13:29:58 -07:00
|
|
|
|
}
|
|
|
|
|
|
}
|