Chimney.Shared.UserControls.ChimneyServerUserControl.chimneyMpdServer_OnList C# (CSharp) Method

chimneyMpdServer_OnList() private method

private chimneyMpdServer_OnList ( object sender, ResponseEventArgs e ) : void
sender object
e Chimney.MPD.ResponseEventArgs
return void
        async void chimneyMpdServer_OnList(object sender, ResponseEventArgs e)
        {

            Dictionary<string, string> tags = new Dictionary<string, string>();
            tags.Add("files", "Files");
            tags.Add("album", "Album");
            tags.Add("artist", "Artist");
            tags.Add("albumartist", "AlbumArtist");
            tags.Add("genre", "Genre");
            tags.Add("title", "Title");

            string listtype = "file";
            string filtertype = string.Empty;
            string filterwhat = string.Empty;

            bool suc = true;

            string groupby = string.Empty;

            if (e.arguments.Count > 0)
            {
                listtype = e.arguments[0];
                if(e.arguments.Count > 1)
                {
                    filtertype = (!e.arguments[1].Equals("group") && tags.ContainsKey(e.arguments[1].ToLower())) 
                        ? tags[e.arguments[1].ToLower()] 
                        : null;
                    int groupcounter = 2;
                    if (filtertype == null) groupcounter = 1;
                    else if (e.arguments.Count > 2)
                    {
                        filterwhat = e.arguments[2];
                        groupcounter++;
                    }
                    else filterwhat = null;
                    if (e.arguments.Count > groupcounter && e.arguments[groupcounter].Equals("group"))
                    {
                        for (int i = groupcounter; i < e.arguments.Count; i++ )
                        {
                            if(!e.arguments[i].Equals("group"))
                            {
                                if(tags.ContainsKey(e.arguments[i].ToLower())) groupby += " GROUP BY " + tags[e.arguments[i].ToLower()];
                            }
                        }
                    }
                }
            }

            string filterwhattype = (!string.IsNullOrEmpty(filtertype) && !string.IsNullOrEmpty(filterwhat)) 
                ? " WHERE " + filtertype + " = \"" + filterwhat + "\"" 
                : string.Empty; 

            List<File> queryResult = null;

            switch (listtype)
            {
                case ("album"):
                    queryResult = await Dbconnection.QueryAsync<File>("SELECT DISTINCT Album FROM Files" + filterwhattype + groupby);
                    break;
                case ("artist"):
                    queryResult = await Dbconnection.QueryAsync<File>("SELECT DISTINCT Artist FROM Files" + filterwhattype + groupby);
                    break;
                case ("genre"):
                    queryResult = await Dbconnection.QueryAsync<File>("SELECT DISTINCT Genre FROM Files" + filterwhattype + groupby);
                    break;
                case ("albumartist"):
                    queryResult = await Dbconnection.QueryAsync<File>("SELECT DISTINCT AlbumArtist FROM Files" + filterwhattype + groupby);
                    break;
                case ("file"):
                    queryResult = await Dbconnection.QueryAsync<File>("SELECT DISTINCT RelativePath FROM Files" + filterwhattype + groupby);
                    break;
                default:
                    break;
            }

            string response = string.Empty;

            foreach (File file in queryResult)
            {
                switch (listtype)
                {
                    case ("album"):
                        response += "Album: " + file.Album + "\n";
                        break;
                    case ("artist"):
                        response += "Artist: " + file.Artist + "\n";
                        break;
                    case ("genre"):
                        response += "Genre: " + file.Genre + "\n";
                        break;
                    case ("albumartist"):
                        response += "AlbumArtist: " + file.AlbumArtist + "\n";
                        break;
                    case ("file"):
                        response += "file: " + file.RelativePath + "\n";
                        break;
                    default:
                        break;
                }
            }

            if (suc) chimneyMpdServer.AppendResponse(response, e.id, e.position);
            else
            {
                string errorfile = string.Empty;
                if (e.arguments.Count > 0) errorfile = e.arguments.First<string>();
                chimneyMpdServer.ErrorResponse(MPDKeyWords.Response.ACK + " [50@0] {listall} could not find path:" + " \"" + errorfile + "\"", e.id, e.position);
            }
        }
ChimneyServerUserControl