Beispiel #1
0
        public bool ParseFingerprintRecognition(XmlElement xResult)
        {
            try
            {
                RecognizeCode   = (RecognizeCode)Convert.ToInt32(xResult.GetElementsByTagName("RecognizeResult")[0].Attributes["RecognizeCode"].Value);
                RecognizeResult = xResult.GetElementsByTagName("RecognizeResult")[0].InnerText;

                if (!TimeStatistics.ParseTimeStatistics((XmlElement)xResult.GetElementsByTagName("TimeStatistics")[0]))
                {
                    return(false);
                }

                foreach (XmlElement xFingerTrack in xResult.GetElementsByTagName("FingerTrack"))
                {
                    FingerTrack FingerTrack = new FingerTrack();
                    if (!FingerTrack.ParseFingerTrack(xFingerTrack))
                    {
                        return(false);
                    }
                    FingerTracks.Add(FingerTrack);
                } //foreach

                return(true);
            }
            catch
            {
            }

            return(false);
        }
Beispiel #2
0
        public CancellationTokenSource RetrieveMetaDataMuziekweb(string FingerTrackID, object userState = null, REST_ResultMetaDataMuziekweb callback = null)
        {
            if (string.IsNullOrEmpty(FingerTrackID))
            {
                return(null);
            }

            CancellationTokenSource cancelTokenSource = new CancellationTokenSource();

            Task task = Task.Factory.StartNew(() =>
            {
                // Were we already canceled?
                cancelTokenSource.Token.ThrowIfCancellationRequested();

                DateTime startTime          = DateTime.Now;
                bool succes                 = true;
                RecognizeCode RecognizeCode = RecognizeCode.OK;
                string RecognizeResult      = "";
                try
                {
                    RestClient client = CreateWSAPICDRNLClient;

                    // Build search request
                    RestRequest request = new RestRequest("v1/Fingerprint/TrackInfo.xml", Method.GET);
                    request.AddHeader("Accept-Encoding", "gzip,deflate");
                    request.AddParameter("FingerTrackID", FingerTrackID);

                    // Run and wait for result
                    IRestResponse response = client.Execute(request);
                    cancelTokenSource.Token.ThrowIfCancellationRequested();
                    if (response.ResponseStatus != ResponseStatus.Completed)
                    {
                        // error!
                        succes = false;
                    }

                    // decode xml on the fly (must be done because xml can get new tags and attributes without notice
                    XmlDocument xmlDoc = null;
                    XmlElement xResult = null;
                    if (succes)
                    {
                        xmlDoc = new XmlDocument();
                        xmlDoc.LoadXml(response.Content);

                        xResult = xmlDoc.GetElementsByTagName("Result")[0] as XmlElement;
                        if (xResult == null || xResult.Attributes["ErrorCode"].Value != "0")
                        {
                            // error
                            succes = false;
                        }
                    }

                    if (succes)
                    {
                        ResultSongs resultSongs = new ResultSongs();
                        succes = resultSongs.ParseSongs(xResult);

                        // do something with the result
                        cancelTokenSource.Token.ThrowIfCancellationRequested();
                        if (callback != null)
                        {
                            DoCallback(callback, this, true, resultSongs, userState);
                        }
                        // we're ready
                        return;
                    }
                }
                catch (Exception e)
                {
                    RecognizeCode   = RecognizeCode.EXCEPTION; // exception
                    RecognizeResult = e.ToString();
                }

                // return error result when we get here
                if (callback != null)
                {
                    ResultSongs resultSongs = new ResultSongs();
                    DoCallback(callback, this, false, resultSongs, userState);
                }
            }, cancelTokenSource.Token);

            return(cancelTokenSource);
        }
Beispiel #3
0
        public CancellationTokenSource DetectAudioFragmentSlow(FingerprintSignature fingerprint, object userState = null, REST_ResultFingerDetect callback = null)
        {
            if (fingerprint == null)
            {
                return(null);
            }

            CancellationTokenSource cancelTokenSource = new CancellationTokenSource();

            Task task = Task.Factory.StartNew(() =>
            {
                // Were we already canceled?
                cancelTokenSource.Token.ThrowIfCancellationRequested();

                DateTime startTime          = DateTime.Now;
                bool succes                 = true;
                RecognizeCode RecognizeCode = RecognizeCode.OK;
                string RecognizeResult      = "";
                try
                {
                    RestClient client = CreateFingerprintClient;

                    // Build search request
                    RestRequest request = new RestRequest("fingerprint/Recognize/Slow", Method.POST);
                    request.AddHeader("Accept-Encoding", "gzip,deflate");
                    StringBuilder sb = new StringBuilder(200 * 1024);
                    sb.Append("Fingerprint=");
                    sb.Append(RestSharp.Contrib.HttpUtility.UrlEncode(fingerprint.SignatureBase64));
                    sb.Append("&");
                    sb.Append("Reliabilities=");
                    sb.Append(RestSharp.Contrib.HttpUtility.UrlEncode(fingerprint.ReliabilitiesBase64));
                    request.AddParameter("application/x-www-form-urlencoded", sb.ToString(), ParameterType.RequestBody);

                    // Run and wait for result
                    IRestResponse response = client.Execute(request);
                    cancelTokenSource.Token.ThrowIfCancellationRequested();
                    if (response.ResponseStatus != ResponseStatus.Completed)
                    {
                        // error!
                        succes = false;

                        RecognizeCode   = RecognizeCode.EXCEPTION; // exception
                        RecognizeResult = response.ErrorMessage;
                        if (RecognizeResult.ToLower().Contains("timed out"))
                        {
                            RecognizeCode = RecognizeCode.TIMEOUT;
                        }
                        else if (RecognizeResult.ToLower().Contains("unable to connect"))
                        {
                            RecognizeCode = RecognizeCode.SERVERNOTFOUND;
                        }
                    }

                    // decode xml on the fly (must be done because xml can get new tags and attributes without notice
                    XmlDocument xmlDoc = null;
                    XmlElement xResult = null;
                    if (succes)
                    {
                        xmlDoc = new XmlDocument();
                        xmlDoc.LoadXml(response.Content);

                        xResult = xmlDoc.GetElementsByTagName("Result")[0] as XmlElement;
                        if (xResult == null || xResult.Attributes["ErrorCode"].Value != "0")
                        {
                            // error
                            succes = false;
                        }
                    }

                    if (succes)
                    {
                        ResultFingerprintRecognition resultRecognitions = new ResultFingerprintRecognition();
                        resultRecognitions.RecognizeCode   = 0;
                        resultRecognitions.RecognizeResult = "OK";
                        succes = resultRecognitions.ParseFingerprintRecognition(xResult);

                        // do something with the result
                        cancelTokenSource.Token.ThrowIfCancellationRequested();
                        if (callback != null)
                        {
                            DoCallback(callback, this, true, resultRecognitions, userState);
                        }
                        // we're ready
                        return;
                    }
                }
                catch (Exception e)
                {
                    RecognizeCode   = RecognizeCode.EXCEPTION; // exception
                    RecognizeResult = e.ToString();
                }

                // return error result when we get here
                if (callback != null)
                {
                    ResultFingerprintRecognition resultRecognitions = new ResultFingerprintRecognition();
                    resultRecognitions.RecognizeCode   = RecognizeCode;
                    resultRecognitions.RecognizeResult = RecognizeResult;
                    resultRecognitions.TimeStatistics.TotalQueryTime = DateTime.Now - startTime;

                    DoCallback(callback, this, false, resultRecognitions, userState);
                }
            }, cancelTokenSource.Token);

            return(cancelTokenSource);
        }