Beispiel #1
0
		public void LookupAlbumInfo(bool cache, bool cue, bool ctdb, CTDBMetadataSearch metadataSearch)
		{
			this.ctdb = ctdb;
			this.metadataSearch = metadataSearch;
			var releases = CUE.LookupAlbumInfo(cache, cue, false, CTDBMetadataSearch.None);
			this.Choices = releases;
			if (ctdb || metadataSearch != CTDBMetadataSearch.None)
				backgroundWorker1.RunWorkerAsync(null);
		}
Beispiel #2
0
        public void LookupAlbumInfo(bool cache, bool cue, bool ctdb, CTDBMetadataSearch metadataSearch)
        {
            this.ctdb           = ctdb;
            this.metadataSearch = metadataSearch;
            var releases = CUE.LookupAlbumInfo(cache, cue, false, CTDBMetadataSearch.None);

            this.Choices = releases;
            if (ctdb || metadataSearch != CTDBMetadataSearch.None)
            {
                backgroundWorker1.RunWorkerAsync(null);
            }
        }
Beispiel #3
0
        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;
            }
        }
Beispiel #4
0
 public void ContactDB(bool ctdb, bool fuzzy, CTDBMetadataSearch metadataSearch)
 {
     this.ContactDB(this.urlbase.Substring(7), this.userAgent, this.driveName, ctdb, fuzzy, metadataSearch);
 }
Beispiel #5
0
        public List<object> LookupAlbumInfo(bool useCache, bool useCUE, bool useCTDB, CTDBMetadataSearch metadataSearch)
        {
            List<object> Releases = new List<object>();

            CUEMetadata dbmeta = null;

            if (useCache && _localDB != null)
            {
                List<string> fullAudioPaths = this.SourcePaths.ConvertAll(p => CUEToolsLocalDBEntry.NormalizePath(p));
                var myEntry = _localDB.Find(e => e.Equals(this.TOC, fullAudioPaths));
                if (myEntry != null)
                    dbmeta = myEntry.Metadata;
            }

            if (dbmeta != null)
                Releases.Add(new CUEMetadataEntry(dbmeta, TOC, "local"));

            //if (useCache)
            //{
            //    try
            //    {
            //        CUEMetadata cache = CUEMetadata.Load(TOC.TOCID);
            //        if (cache != null)
            //            Releases.Add(new CUEMetadataEntry(cache, TOC, "local"));
            //    }
            //    catch (Exception ex)
            //    {
            //        System.Diagnostics.Trace.WriteLine(ex.Message);
            //    }
            //}

            if (useCUE)
            {
                if (dbmeta == null || !dbmeta.Contains(cueMetadata))
                {
                    if (cueMetadata.Contains(taglibMetadata) || !taglibMetadata.Contains(cueMetadata))
                        Releases.Add(new CUEMetadataEntry(new CUEMetadata(cueMetadata), TOC, "cue"));
                }
                if (dbmeta == null || !dbmeta.Contains(taglibMetadata))
                {
                    if (!cueMetadata.Contains(taglibMetadata))
                        Releases.Add(new CUEMetadataEntry(new CUEMetadata(taglibMetadata), TOC, "tags"));
                }
            }

            if (useCache && _localDB != null)
            {
                foreach (var entry in _localDB)
                    if (entry.DiscID == TOC.TOCID && entry.Metadata != null && (dbmeta == null || !dbmeta.Contains(entry.Metadata)))
                        Releases.Add(new CUEMetadataEntry(entry.Metadata, TOC, "local"));
            }

            bool ctdbFound = false;
            if (useCTDB)
            {
                ShowProgress("Looking up album via CTDB...", 0.0, null, null);
                var ctdb = new CUEToolsDB(TOC, proxy);
                ctdb.ContactDB(_config.advanced.CTDBServer, "CUETools " + CUEToolsVersion, null, false, false, metadataSearch);
                foreach (var meta in ctdb.Metadata)
                {
                    CUEMetadata metadata = new CUEMetadata(TOC.TOCID, (int)TOC.AudioTracks);
                    metadata.FillFromCtdb(meta, TOC.FirstAudio - 1);
                    CDImageLayout toc = TOC; //  TocFromCDEntry(meta);
                    Releases.Add(new CUEMetadataEntry(metadata, toc, meta.source));
                    ctdbFound = true;
                }
            }

            if (!ctdbFound && metadataSearch == CTDBMetadataSearch.Extensive)
            {
                ShowProgress("Looking up album via Freedb...", 0.0, null, null);

                FreedbHelper m_freedb = new FreedbHelper();
                m_freedb.Proxy = proxy;
                m_freedb.UserName = _config.advanced.FreedbUser;
                m_freedb.Hostname = _config.advanced.FreedbDomain;
                m_freedb.ClientName = "CUETools";
                m_freedb.Version = CUEToolsVersion;
                m_freedb.SetDefaultSiteAddress("freedb.org");

                QueryResult queryResult;
                QueryResultCollection coll;
                string code = string.Empty;
                try
                {
                    CDEntry cdEntry = null;
                    code = m_freedb.Query(AccurateRipVerify.CalculateCDDBQuery(_toc), out queryResult, out coll);
                    if (code == FreedbHelper.ResponseCodes.CODE_200)
                    {
                        ShowProgress("Looking up album via Freedb... " + queryResult.Discid, 0.5, null, null);
                        code = m_freedb.Read(queryResult, out cdEntry);
                        if (code == FreedbHelper.ResponseCodes.CODE_210)
                        {
                            CUEMetadata metadata = new CUEMetadata(TOC.TOCID, (int)TOC.AudioTracks);
                            metadata.FillFromFreedb(cdEntry, TOC.FirstAudio - 1);
                            CDImageLayout toc = TocFromCDEntry(cdEntry);
                            Releases.Add(new CUEMetadataEntry(metadata, toc, "freedb"));
                        }
                    }
                    else
                        if (code == FreedbHelper.ResponseCodes.CODE_210 ||
                            code == FreedbHelper.ResponseCodes.CODE_211)
                        {
                            int i = 0;
                            foreach (QueryResult qr in coll)
                            {
                                ShowProgress("Looking up album via freedb... " + qr.Discid, (++i + 0.0) / coll.Count, null, null);
                                CheckStop();
                                code = m_freedb.Read(qr, out cdEntry);
                                if (code == FreedbHelper.ResponseCodes.CODE_210)
                                {
                                    CUEMetadata metadata = new CUEMetadata(TOC.TOCID, (int)TOC.AudioTracks);
                                    metadata.FillFromFreedb(cdEntry, TOC.FirstAudio - 1);
                                    CDImageLayout toc = TocFromCDEntry(cdEntry);
                                    Releases.Add(new CUEMetadataEntry(metadata, toc, "freedb"));
                                }
                            }
                        }
                }
                catch (Exception ex)
                {
                    if (ex is StopException)
                        throw ex;
                }
            }

            ShowProgress("", 0, null, null);
            return Releases;
        }
Beispiel #6
0
        public void UseCUEToolsDB(string userAgent, string driveName, bool fuzzy, CTDBMetadataSearch metadataSearch)
        {
            ShowProgress((string)"Contacting CUETools database...", 0, null, null);

            _CUEToolsDB = new CUEToolsDB(_toc, proxy);
            _CUEToolsDB.UploadHelper.onProgress += new EventHandler<Krystalware.UploadHelper.UploadProgressEventArgs>(UploadProgress);
            _CUEToolsDB.ContactDB(_config.advanced.CTDBServer, userAgent, driveName, true, fuzzy, metadataSearch);

            if (!_isCD && !_toc[_toc.TrackCount].IsAudio && DataTrackLength == 0)
                foreach (DBEntry e in _CUEToolsDB.Entries)
                    if (e.toc.TrackCount == _toc.TrackCount && e.toc.AudioLength == _toc.AudioLength && !e.toc[e.toc.TrackCount].IsAudio)
                    {
                        DataTrackLength = e.toc[e.toc.TrackCount].Length;
                        break;
                    }

            ShowProgress("", 0.0, null, null);
            isUsingCUEToolsDB = true;
        }
		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=2"
                + "&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.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;
			}
		}
 public void ContactDB(bool ctdb, bool fuzzy, CTDBMetadataSearch metadataSearch)
 {
     this.ContactDB(this.urlbase.Substring(7), this.userAgent, this.driveName, ctdb, fuzzy, metadataSearch);
 }