void list_LongClick(object sender, CFControlsExtender.Listview.ItemArgs e)
        {
            if (CurrentTab == Tabs.NowPlaying)
            {
                if (e.ItemId < NowPlayingTable.Rows.Count)
                {
                    var currentTrack = NowPlayingTable.Rows[e.ItemId]["TrackObject"] as ITrack;
                    if (currentTrack != null)
                    {
                        var choices = new string[] { "Album", "Artist" };
                        var choiceDialog = new MultipleChoiceDialog(this.CF_displayHooks.displayNumber, this.CF_displayHooks.rearScreen, "Search for:", choices);
                        choiceDialog.MainForm = base.MainForm;
                        choiceDialog.CF_pluginInit();
                        if (choiceDialog.ShowDialog(this) == DialogResult.OK)
                        {
                            int choice = choiceDialog.Choice;
                            switch (choice)
                            {
                                case 0:
                                    using (var albumBrowser = currentTrack.Album.Browse())
                                    {
                                        if (!albumBrowser.IsComplete)
                                        {
                                            CF_systemCommand(CF_Actions.SHOWINFO, "Please wait...");
                                            albumBrowser.WaitForCompletion();
                                            CF_systemCommand(CF_Actions.HIDEINFO);
                                        }

                                        List<ITrack> tracks = new List<ITrack>();
                                        foreach (var track in albumBrowser.Tracks)
                                        {
                                            if (track.IsAvailable)
                                            {
                                                tracks.Add(track);
                                            }
                                        }

                                        var resultTable = LoadTracksIntoTable(tracks);
                                        SwitchToTab(Tabs.Search, GroupingType.Songs, resultTable, currentTrack.Album.Name, currentTrack.Album.CoverId, true);
                                    }

                                    break;
                                case 1:
                                    if (currentTrack.Artists.Count > 1)
                                    {
                                        choices = currentTrack.Artists.Select(a => a.Name).Take(5).ToArray();
                                        choiceDialog = new MultipleChoiceDialog(this.CF_displayHooks.displayNumber, this.CF_displayHooks.rearScreen, "Search for:", choices);
                                        choiceDialog.MainForm = base.MainForm;
                                        choiceDialog.CF_pluginInit();
                                        if (choiceDialog.ShowDialog(this) == DialogResult.OK)
                                        {
                                            choice = choiceDialog.Choice;
                                        }
                                        else
                                            return;
                                    }
                                    else
                                    {
                                        choice = 0;
                                    }
                                    var artist = currentTrack.Artists.ElementAt(choice);
                                    using (var artistBrowser = artist.Browse(sp_artistbrowse_type.NO_TRACKS))
                                    {
                                        if (!artistBrowser.IsComplete)
                                        {
                                            CF_systemCommand(CF_Actions.SHOWINFO, "Please wait...");
                                            artistBrowser.WaitForCompletion();
                                            CF_systemCommand(CF_Actions.HIDEINFO);
                                        }

                                        var albums = GetAlbumsIncludingTopHits(artistBrowser);
                                        var resultTable = LoadAlbumsIntoTable(albums, false);
                                        SwitchToTab(Tabs.Search, GroupingType.Albums, resultTable, artist.Name, artistBrowser.PortraitIds.FirstOrDefault(), true);
                                    }
                                    break;
                            }
                        }
                    }
                }
            }
        }
        public override bool CF_pluginCMLCommand(string command, string[] strparams, CF_ButtonState state, int zone)
        {
            if (!_hasControl)
                return false;

            _zone = zone;
            switch (command)
            {
                case "Spotify.NowPlaying":
                    if (state >= CF_ButtonState.Click)
                    {
                        LoadNowPlaying();
                    }
                    return true;
                case "Spotify.Search":
                    if (state == CF_ButtonState.Click)
                    {
                        LoadTrackSearch();
                    }
                    return true;
                case "Spotify.SearchHold":
                    if (state == CF_ButtonState.HoldClick)
                    {
                        var choices = new string[] { "Songs", "Albums", "Artists", "Playlists" };
                        var choiceDialog = new MultipleChoiceDialog(this.CF_displayHooks.displayNumber, this.CF_displayHooks.rearScreen, "Search for:", choices);
                        choiceDialog.MainForm = base.MainForm;
                        choiceDialog.CF_pluginInit();
                        if (choiceDialog.ShowDialog(this) == DialogResult.OK)
                        {
                            int choice = choiceDialog.Choice;
                            switch (choice)
                            {
                                case 0:
                                    LoadTrackSearch();
                                    break;
                                case 1:
                                    LoadAlbumSearch();
                                    break;
                                case 2:
                                    LoadArtistSearch();
                                    break;
                                case 3:
                                    LoadPlaylistSearch();
                                    break;
                            }
                        }
                    }
                    return true;
                case "Spotify.Inbox":
                    if (state >= CF_ButtonState.Click)
                    {
                        var choices = new string[] { "Songs", "Albums", "Playlists"};
                        var choiceDialog = new MultipleChoiceDialog(this.CF_displayHooks.displayNumber, this.CF_displayHooks.rearScreen, "Retrieve Inbox of:", choices);
                        choiceDialog.MainForm = base.MainForm;
                        choiceDialog.CF_pluginInit();
                        if (choiceDialog.ShowDialog(this) == DialogResult.OK)
                        {
                            int choice = choiceDialog.Choice;
                            switch (choice)
                            {
                                case 0:
                                    LoadInboxTracks();
                                    break;
                                case 1:
                                    LoadInboxAlbums();
                                    break;
                                case 2:
                                    LoadInboxPlaylists();
                                    break;
                            }
                        }
                    }
                    return true;
                case "Spotify.Playlists":
                    if (state >= CF_ButtonState.Click)
                    {
                        LoadPlaylists();
                    }
                    return true;
                case "Spotify.Popular":
                    if (state >= CF_ButtonState.Click)
                    {
                        var choices = new string[] { "Songs", "Albums", "Artists", "Your starred songs" };
                        var choiceDialog = new MultipleChoiceDialog(this.CF_displayHooks.displayNumber, this.CF_displayHooks.rearScreen, "Retrieve Top List Of:", choices);
                        choiceDialog.MainForm = base.MainForm;
                        choiceDialog.CF_pluginInit();
                        if (choiceDialog.ShowDialog(this) == DialogResult.OK)
                        {
                            int choice = choiceDialog.Choice;
                            switch (choice)
                            {
                                case 0:
                                    LoadPopularTracks();
                                    break;
                                case 1:
                                    LoadPopularAlbums();
                                    break;
                                case 2:
                                    LoadPopularArtists();
                                    break;
                                case 3:
                                    LoadStarredTracks();
                                    break;
                            }
                        }
                    }
                    return true;
                case "Spotify.ScrollUp":
                    if (state >= CF_ButtonState.Click)
                    {
                        var list = advancedlistArray[CF_getAdvancedListID("mainList")];
                        list.PageUp();
                    }
                    return true;
                case "Spotify.ScrollDown":
                    if (state >= CF_ButtonState.Click)
                    {
                        var list = advancedlistArray[CF_getAdvancedListID("mainList")];
                        list.PageDown();
                    }
                    return true;
                case "Spotify.DynamicButton1":
                    if (state == CF_ButtonState.Click)
                    {
                        OnDynamic1Clicked();
                    }
                    return true;
                case "Spotify.DynamicButton2":
                    if (state == CF_ButtonState.Click)
                    {
                        OnDynamic2Clicked();
                    }
                    return true;
                case "Spotify.DynamicButton1Hold":
                    if (state == CF_ButtonState.HoldClick)
                    {
                        OnDynamic1Hold();
                    }
                    return true;
                case "Spotify.DynamicButton2Hold":
                    if (state >= CF_ButtonState.HoldClick)
                    {
                        OnDynamic2Hold();
                    }
                    return true;
                case "Spotify.Back":
                    {
                        if (state >= CF_ButtonState.Click)
                        {
                            OnBackClicked();
                        }
                    }
                    return true;
                case "Spotify.DynamicButton3":
                    {
                        if (state >= CF_ButtonState.Click)
                        {
                            OnDynamic3Clicked();
                        }
                    }
                    return true;
                case "Centrafuse.Main.PlayPause":
                    if (state >= CF_ButtonState.Click)
                    {
                        PlayPause();
                    }
                    return true;
                case "Centrafuse.Main.Rewind":
                    if (state >= CF_ButtonState.Click)
                    {
                        PlayPreviousTrack(true);
                    }
                    return true;
                case "Centrafuse.Main.FastForward":
                    if (state >= CF_ButtonState.Click)
                    {
                        PlayNextTrack(true);
                    }
                    return true;

                default:
                    return base.CF_pluginCMLCommand(command, strparams, state, zone);
            }
        }