public CTDBResponse Submit(int confidence, int quality, string artist, string title, string barcode) { if (this.QueryExceptionStatus != WebExceptionStatus.Success && (this.QueryExceptionStatus != WebExceptionStatus.ProtocolError || this.QueryResponseStatus != HttpStatusCode.NotFound)) { return(null); } CTDBResponse resp = null; subResult = ""; var confirms = this.MatchingEntries; if (confirms.Count > 0) { confidence = 1; foreach (var confirm in confirms) { resp = DoSubmit(confidence, quality, artist, title, barcode, false, confirm, AccurateRipVerify.maxNpar); if (resp.ParityNeeded) { resp = DoSubmit(confidence, quality, artist, title, barcode, true, confirm, Math.Min(AccurateRipVerify.maxNpar, resp.npar)); } subResult = subResult + (subResult == "" ? "" : ", ") + resp.message; } return(resp); } resp = DoSubmit(confidence, quality, artist, title, barcode, false, null, AccurateRipVerify.maxNpar); if (resp.ParityNeeded) { resp = DoSubmit(confidence, quality, artist, title, barcode, true, null, Math.Min(AccurateRipVerify.maxNpar, resp.npar)); } subResult = resp.message; return(resp); }
public void ContactDB(string server, string userAgent, string driveName, bool ctdb, bool fuzzy, CTDBMetadataSearch metadataSearch) { this.driveName = driveName; this.userAgent = userAgent + " (" + Environment.OSVersion.VersionString + ")" + (driveName != null ? " (" + driveName + ")" : ""); this.urlbase = "http://" + (server ?? defaultServer); this.total = 0; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlbase + "/lookup2.php" + "?version=3" + "&ctdb=" + (ctdb ? 1 : 0) + "&fuzzy=" + (fuzzy ? 1 : 0) + "&metadata=" + (metadataSearch == CTDBMetadataSearch.None ? "none" : metadataSearch == CTDBMetadataSearch.Fast ? "fast" : metadataSearch == CTDBMetadataSearch.Default ? "default" : "extensive") + "&toc=" + toc.ToString()); req.Method = "GET"; req.Proxy = proxy; req.UserAgent = this.userAgent; req.Timeout = connectTimeout; req.ReadWriteTimeout = socketTimeout; req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; if (uploadHelper.onProgress != null) { uploadHelper.onProgress(this, new UploadProgressEventArgs(req.RequestUri.AbsoluteUri, 0)); } this.subResult = null; this.entries = new List <DBEntry>(); this.metadata = new List <CTDBResponseMeta>(); currentReq = req; try { using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse()) { this.QueryExceptionStatus = WebExceptionStatus.ProtocolError; this.QueryResponseStatus = resp.StatusCode; this.QueryExceptionMessage = resp.StatusDescription; if (this.QueryResponseStatus == HttpStatusCode.OK) { XmlSerializer serializer = new XmlSerializer(typeof(CTDBResponse)); this.total = 0; using (Stream responseStream = resp.GetResponseStream()) { CTDBResponse ctdbResp = serializer.Deserialize(responseStream) as CTDBResponse; if (ctdbResp.entry != null) { foreach (var ctdbRespEntry in ctdbResp.entry) { if (ctdbRespEntry.toc == null) { continue; } this.total += ctdbRespEntry.confidence; var entry = new DBEntry(ctdbRespEntry); entries.Add(entry); } } if (ctdbResp.metadata != null && ctdbResp.metadata.Length != 0) { metadata.AddRange(ctdbResp.metadata); } } if (entries.Count == 0) { this.QueryResponseStatus = HttpStatusCode.NotFound; } else { this.QueryExceptionStatus = WebExceptionStatus.Success; } } } } catch (WebException ex) { this.QueryExceptionStatus = ex.Status; this.QueryExceptionMessage = ex.Message; if (this.QueryExceptionStatus == WebExceptionStatus.ProtocolError) { this.QueryResponseStatus = (ex.Response as HttpWebResponse).StatusCode; this.QueryExceptionMessage = (ex.Response as HttpWebResponse).StatusDescription; } } catch (Exception ex) { this.QueryExceptionStatus = WebExceptionStatus.UnknownError; this.QueryExceptionMessage = ex.Message; } finally { currentReq = null; } }