diff --git a/CUETools.CTDB/CTDBResponseEntry.cs b/CUETools.CTDB/CTDBResponseEntry.cs index d0ac67a..b286d88 100644 --- a/CUETools.CTDB/CTDBResponseEntry.cs +++ b/CUETools.CTDB/CTDBResponseEntry.cs @@ -7,7 +7,7 @@ namespace CUETools.CTDB public class CTDBResponseEntry { [XmlAttribute] - public string id { get; set; } + public long id { get; set; } [XmlAttribute] public string crc32 { get; set; } [XmlAttribute] diff --git a/CUETools.CTDB/CUEToolsDB.cs b/CUETools.CTDB/CUEToolsDB.cs index 96bb257..a04fecb 100644 --- a/CUETools.CTDB/CUEToolsDB.cs +++ b/CUETools.CTDB/CUEToolsDB.cs @@ -232,13 +232,24 @@ namespace CUETools.CTDB if (this.QueryExceptionStatus != WebExceptionStatus.Success && (this.QueryExceptionStatus != WebExceptionStatus.ProtocolError || this.QueryResponseStatus != HttpStatusCode.NotFound)) return this.DBStatus; - DBEntry confirm = this.MatchingEntry; - if (confirm != null) confidence = 1; int npar = AccurateRipVerify.maxNpar; var parity = verify.AR.GetParity(npar); - DoSubmit(confidence, quality, artist, title, barcode, false, confirm, parity, npar); + var confirms = this.MatchingEntries; + if (confirms.Count > 0) + { + confidence = 1; + foreach (var confirm in confirms) + { + subResult = null; + DoSubmit(confidence, quality, artist, title, barcode, false, confirm, parity, npar); + if (subResult == "parity needed") + DoSubmit(confidence, quality, artist, title, barcode, true, confirm, parity, npar); + } + return subResult; + } + DoSubmit(confidence, quality, artist, title, barcode, false, null, parity, npar); if (subResult == "parity needed") - DoSubmit(confidence, quality, artist, title, barcode, true, confirm, parity, npar); + DoSubmit(confidence, quality, artist, title, barcode, true, null, parity, npar); return subResult; } @@ -271,6 +282,13 @@ namespace CUETools.CTDB { files = new UploadFile[0]; } + + long maxId = 0; + foreach (var e in this.entries) + { + maxId = Math.Max(maxId, e.id); + } + HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlbase + "/submit2.php"); req.Proxy = proxy; req.UserAgent = this.userAgent; @@ -280,7 +298,8 @@ namespace CUETools.CTDB if (upload) form.Add("parityfile", "1"); if (confirm != null) - form.Add("confirmid", confirm.id); + form.Add("confirmid", confirm.id.ToString()); + form.Add("maxid", maxId.ToString()); form.Add("toc", toc.ToString()); form.Add("crc32", ((int)verify.CRC).ToString()); form.Add("trackcrcs", verify.TrackCRCs); @@ -437,17 +456,18 @@ namespace CUETools.CTDB } } - public DBEntry MatchingEntry + public List MatchingEntries { - get - { - if (this.QueryExceptionStatus != WebExceptionStatus.Success) - return null; - foreach (DBEntry entry in this.Entries) - if (entry.toc.ToString() == this.toc.ToString() && !entry.hasErrors) - return entry; - return null; - } + get + { + var res = new List(); + if (this.QueryExceptionStatus != WebExceptionStatus.Success) + return res; + foreach (DBEntry entry in this.Entries) + if (entry.toc.ToString() == this.toc.ToString() && !entry.hasErrors) + res.Add(entry); + return res; + } } public void Init(AccurateRipVerify ar) diff --git a/CUETools.CTDB/DBEntry.cs b/CUETools.CTDB/DBEntry.cs index 6c135cb..29dccaf 100644 --- a/CUETools.CTDB/DBEntry.cs +++ b/CUETools.CTDB/DBEntry.cs @@ -15,11 +15,11 @@ namespace CUETools.CTDB public bool canRecover; public CDRepairFix repair; public HttpStatusCode httpStatus; - public string id; + public long id; public CDImageLayout toc; public string hasParity; - public DBEntry(ushort[,] syndrome, int conf, int stride, uint crc, string id, CDImageLayout toc, string hasParity) + public DBEntry(ushort[,] syndrome, int conf, int stride, uint crc, long id, CDImageLayout toc, string hasParity) { this.syndrome = syndrome; this.id = id; diff --git a/CUETools/frmCUETools.cs b/CUETools/frmCUETools.cs index f49304c..266f538 100644 --- a/CUETools/frmCUETools.cs +++ b/CUETools/frmCUETools.cs @@ -1027,7 +1027,7 @@ namespace JDP && cueSheet.ArVerify.ARStatus == null && cueSheet.ArVerify.WorstConfidence() >= 2 && (cueSheet.AccurateRipId == null || AccurateRipVerify.CalculateAccurateRipId(cueSheet.TOC) == cueSheet.AccurateRipId) - && cueSheet.CTDB.MatchingEntry == null + && cueSheet.CTDB.MatchingEntries.Count == 0 && (cueSheet.CTDB.QueryExceptionStatus == WebExceptionStatus.Success || (cueSheet.CTDB.QueryExceptionStatus == WebExceptionStatus.ProtocolError && cueSheet.CTDB.QueryResponseStatus == HttpStatusCode.NotFound) )