Chimney.MPD.MPDKeyWords.Response.GetResponseObjects C# (CSharp) Method

GetResponseObjects() private static method

private static GetResponseObjects ( string>.List keyValuePairList ) : string>>>.List
keyValuePairList string>.List
return string>>>.List
            private static List<List<KeyValuePair<string, string>>> GetResponseObjects(List<KeyValuePair<string, string>> keyValuePairList)
            {
                var outerList = new List<List<KeyValuePair<string, string>>>();

                if (keyValuePairList != null)
                {
                    var innerList = new List<KeyValuePair<string, string>>();
                    var outer = false;
                    var i = 0;
                    foreach (var keyValuePair in keyValuePairList)
                    {
                        if ((i == 0 || outer) 
                            && (keyValuePair.Key.Equals(MPDKeyWords.Response.Sections.Outer.DIRECTORY)
                            || keyValuePair.Key.Equals(MPDKeyWords.Response.Sections.Outer.FILE)
                            || keyValuePair.Key.Equals(MPDKeyWords.Response.Sections.Outer.PLAYLIST)
                            || keyValuePair.Key.Equals(MPDKeyWords.Response.Sections.Outer.OUTPUTID)))
                        {
                            outer = true;
                            if (innerList.Count > 0) 
                                outerList.Add(innerList);
                            innerList = new List<KeyValuePair<string, string>>();
                        }
                        else if (!outer && 
                                (keyValuePair.Key.Equals(MPDKeyWords.Response.Sections.Inner.ARTIST)
                                || keyValuePair.Key.Equals(MPDKeyWords.Response.Sections.Inner.ALBUM)
                                || keyValuePair.Key.Equals(MPDKeyWords.Response.Sections.Inner.GENRE)))
                        {
                            outer = false;
                            if (innerList.Count > 0) 
                                outerList.Add(innerList);
                            innerList = new List<KeyValuePair<string, string>>();
                        }

                        innerList.Add(keyValuePair);
                        i++;

                    }
                    if (innerList.Count > 0)
                        outerList.Add(innerList);
                }

                return outerList;
            }
        }