コード例 #1
0
        public virtual void Run()
        {
            foreach(IMetadataProvider provider in service.Providers) {
                if (cancelled)
                    break;;

                try {
                    lock (this) {
                        current_job = provider.CreateJob(track);
                    }

                    current_job.Run();

                    if (cancelled)
                        break;;

                    foreach(StreamTag tag in current_job.ResultTags) {
                        AddTag(tag);
                    }

                    lock (this) {
                        current_job = null;
                    }
                } catch (System.Threading.ThreadAbortException) {
                    throw;
                } catch(Exception e) {
                   Hyena.Log.Exception (e);
                }
            }

            service.OnHaveResult (this);
        }
コード例 #2
0
        private void FetchForTrack(DatabaseTrackInfo track)
        {
            bool save = true;

            try {
                if (String.IsNullOrEmpty(track.AlbumTitle) || track.AlbumTitle == Catalog.GetString("Unknown Album") ||
                    String.IsNullOrEmpty(track.ArtistName) || track.ArtistName == Catalog.GetString("Unknown Artist"))
                {
                    // Do not try to fetch album art for these
                }
                else
                {
                    IMetadataLookupJob job = MetadataService.Instance.CreateJob(track);
                    job.Run();
                }
            } catch (System.Threading.ThreadAbortException) {
                save = false;
                throw;
            } catch (Exception e) {
                Log.Exception(e);
            } finally {
                if (save)
                {
                    bool have_cover_art = CoverArtSpec.CoverExists(track.ArtistName, track.AlbumTitle);
                    ServiceManager.DbConnection.Execute(
                        "INSERT OR REPLACE INTO CoverArtDownloads (AlbumID, Downloaded, LastAttempt) VALUES (?, ?, ?)",
                        track.AlbumId, have_cover_art, DateTime.Now);
                }
            }
        }
        public void Lookup(IBasicTrackInfo track, JobPriority priority)
        {
            if (track == null || queries == null || track.ArtworkId == null)
            {
                return;
            }

            if (String.IsNullOrEmpty(track.AlbumTitle) || track.AlbumTitle == AlbumInfo.UnknownAlbumTitle ||
                String.IsNullOrEmpty(track.ArtistName) || track.ArtistName == ArtistInfo.UnknownArtistName)
            {
                // Do not try to fetch album art for these
                return;
            }

            lock (((ICollection)queries).SyncRoot) {
                if (!queries.ContainsKey(track))
                {
                    IMetadataLookupJob job = CreateJob(track);
                    if (job == null)
                    {
                        return;
                    }

                    queries.Add(track, job);
                    Scheduler.Schedule(job, priority);
                }
            }
        }
        private void OnSchedulerJobFinished(IJob job)
        {
            if (!(job is IMetadataLookupJob))
            {
                return;
            }

            IMetadataLookupJob lookup_job = (IMetadataLookupJob)job;

            RemoveJob(lookup_job);
        }
コード例 #5
0
        private void OnSchedulerJobFinished(IJob job)
        {
            if (!(job is IMetadataLookupJob))
            {
                return;
            }

            IMetadataLookupJob lookup_job = (IMetadataLookupJob)job;

            if (RemoveJob(lookup_job))
            {
                Banshee.Base.ThreadAssist.ProxyToMain(delegate {
                    OnHaveResult(lookup_job.Track, lookup_job.ResultTags);
                });
            }
        }
コード例 #6
0
        private bool RemoveJob(IMetadataLookupJob job)
        {
            if (job == null || job.Track == null)
            {
                return(false);
            }

            lock (((ICollection)queries).SyncRoot) {
                if (queries.ContainsKey(job.Track))
                {
                    queries.Remove(job.Track);
                    return(true);
                }

                return(false);
            }
        }
コード例 #7
0
        private void FetchForTrack(DatabaseTrackInfo track)
        {
            bool save = true;

            try {
                if (!String.IsNullOrEmpty(track.ArtistName))
                {
                    IMetadataLookupJob job = MetadataService.Instance.CreateJob(track);
                    job.Run();
                }
            } catch (System.Threading.ThreadAbortException) {
                save = false;
                throw;
            } finally {
                if (save)
                {
                    // additional work might be done here
                }
            }
        }
コード例 #8
0
        public void Lookup(IBasicTrackInfo track, JobPriority priority)
        {
            if (track == null || queries == null || track.ArtworkId == null)
            {
                return;
            }

            lock (((ICollection)queries).SyncRoot) {
                if (!queries.ContainsKey(track))
                {
                    IMetadataLookupJob job = CreateJob(track);
                    if (job == null)
                    {
                        return;
                    }

                    queries.Add(track, job);
                    Scheduler.Schedule(job, priority);
                }
            }
        }
コード例 #9
0
        public virtual void Run()
        {
            foreach (IMetadataProvider provider in service.Providers)
            {
                if (cancelled)
                {
                    break;
                }
                ;

                try {
                    lock (this) {
                        current_job = provider.CreateJob(track);
                    }

                    current_job.Run();

                    if (cancelled)
                    {
                        break;
                    }
                    ;

                    foreach (StreamTag tag in current_job.ResultTags)
                    {
                        AddTag(tag);
                    }

                    lock (this) {
                        current_job = null;
                    }
                } catch (System.Threading.ThreadAbortException) {
                    throw;
                } catch (Exception e) {
                    Log.Error(e);
                }
            }

            service.OnHaveResult(this);
        }
コード例 #10
0
ファイル: CoverArtJob.cs プロジェクト: thoja21/banshee-1
        private void FetchForTrack(DatabaseTrackInfo track)
        {
            bool save = true;

            try {
                IMetadataLookupJob job = MetadataService.Instance.CreateJob(track);
                job.Run();
            } catch (System.Threading.ThreadAbortException) {
                save = false;
                throw;
            } catch (Exception e) {
                Log.Error(e);
            } finally {
                if (save)
                {
                    bool have_cover_art = CoverArtSpec.CoverExists(track.ArtistName, track.AlbumTitle);
                    ServiceManager.DbConnection.Execute(
                        "INSERT OR REPLACE INTO CoverArtDownloads (AlbumID, Downloaded, LastAttempt) VALUES (?, ?, ?)",
                        track.AlbumId, have_cover_art, DateTime.Now);
                }
            }
        }
コード例 #11
0
ファイル: MetadataService.cs プロジェクト: dufoli/banshee
        private bool RemoveJob(IMetadataLookupJob job)
        {
            if (job == null || job.Track == null) {
                return false;
            }

            lock (((ICollection)queries).SyncRoot) {
                if (queries.ContainsKey (job.Track)) {
                    queries.Remove (job.Track);
                    return true;
                }

                return false;
            }
        }
コード例 #12
0
        public virtual void Lookup(IBasicTrackInfo track)
        {
            IMetadataLookupJob job = CreateJob(track);

            job.Run();
        }