public void UpdateAlbum(ClutterFlowAlbum actor)
 {
     ActiveAlbum = actor.Album;
     ActiveIndex = actor.Index;
     if (UpdatedAlbum != null)
     {
         UpdatedAlbum(ActiveAlbum, EventArgs.Empty);
     }
 }
 public void Enqueue(ClutterFlowAlbum cover)
 {
     if (!cover.Enqueued)
     {
         cover.Enqueued = true;
         LookupQueue.Enqueue(cover);
         Start();
     }
 }
        // Main work loop of the class.
        private void Run()
        {
            if (disposed)
            {
                return;
            }

            try {
                Log.Debug("ArtworkLookup Run ()");
                while (!Stopping)
                {
                    //Log.Debug ("ArtworkLookup Run locking focusLock");
                    lock (focusLock) {
                        //Log.Debug ("ArtworkLookup Run locked focusLock");
                        if (new_focus > -1)
                        {
                            LookupQueue.Focus = new_focus;
                        }
                        new_focus = -1;
                    }

                    while (!Stopping && LookupQueue != null && LookupQueue.Count == 0)
                    {
                        lock (SyncRoot) {
                            //Log.Debug ("ArtworkLookup Run - waiting for pulse");
                            bool ret = Monitor.Wait(SyncRoot, 5000);
                            if (!ret)
                            {
                                Stopping = true;
                            }
                            //Log.Debug ("ArtworkLookup Run - pulsed");
                        }
                    }
                    if (Stopping)
                    {
                        return;
                    }
                    ClutterFlowAlbum   cover    = LookupQueue.Dequeue();
                    float              size     = cover_manager.TextureSize;
                    string             cache_id = cover.PbId;
                    Cairo.ImageSurface surface  = artwork_manager.LookupScaleSurface(cache_id, (int)size);
                    if (surface != null)
                    {
                        Gtk.Application.Invoke(delegate {
                            SetCoverToSurface(cover, surface);
                        });
                    }
                }
            } finally {
                Log.Debug("ArtworkLookup Run done");
            }
        }
        private ClutterFlowBaseActor AddActorToList(AlbumInfo generator, SortedList <AlbumInfo, ClutterFlowBaseActor> list, CoverManager cover_manager)
        {
            if (generator == null)
            {
                generator = new AlbumInfo(AlbumInfo.UnknownAlbumTitle);
            }
            string key = ClutterFlowAlbum.CreateCacheKey(generator);
            ClutterFlowBaseActor actor = null;

            if (!Cache.TryGetValue(key, out actor))
            {
                actor = new ClutterFlowAlbum(generator, cover_manager);
                actor.Hide();
                Cache.Add(key, actor);
            }
            actor.SortLabel = Comparer.GetSortLabel(generator);
            list[generator] = actor;
            actor.Index     = list.Count;
            return(actor);
        }
 public void ScrollTo(AlbumInfo album)
 {
     cover_manager.Timeline.Timeout = 500; //give 'm some time to load the song etc.
     ScrollTo(ClutterFlowAlbum.CreateCacheKey(album));
 }
 private void SetCoverToSurface(ClutterFlowAlbum cover, Cairo.ImageSurface surface)
 {
     cover.Enqueued = false;
     //cover.SwappedToDefault = false;
     ClutterFlowActor.MakeReflection(surface, cover.Cover);
 }