Libmpc.Mpc.PlChangesPosId C# (CSharp) Method

PlChangesPosId() public method

Returns the ids and positions of the changed tracks in the playlist since the given version.
public PlChangesPosId ( int version ) : int>>.List
version int
return int>>.List
        public List<KeyValuePair<int, int>> PlChangesPosId(int version)
        {
            MpdResponse response = this.getConnection().Exec("plchangesposid", new string[] { version.ToString() });

              if (response.IsError)
            throw new MpdResponseException(response.ErrorCode, response.ErrorMessage);

              if (response.Count % 2 != 0)
            throw new InvalidMpdResponseException("Response to command plchangesposid contains an odd number of lines!");

              List<KeyValuePair<int, int>> ret = new List<KeyValuePair<int, int>>();

              for (int i = 0; i < response.Count; i += 2) {
            KeyValuePair<string, string> posLine = response[i];
            KeyValuePair<string, string> idLine = response[i + 1];

            if ((posLine.Key == null) || (posLine.Value == null))
              throw new InvalidMpdResponseException("Invalid format of line " + i + "!");
            if ((idLine.Key == null) || (idLine.Value == null))
              throw new InvalidMpdResponseException("Invalid format of line " + (i + 1) + "!");

            if (!posLine.Key.Equals("cpos"))
              throw new InvalidMpdResponseException("Line " + i + " does not start with \"cpos\"!");
            if (!idLine.Key.Equals("Id"))
              throw new InvalidMpdResponseException("Line " + (i + 1) + " does not start with \"Id\"!");

            int tryPos = -1;
            if (!int.TryParse(posLine.Value, out tryPos))
              throw new InvalidMpdResponseException("Tag value on line " + i + " is not a number.");
            int tryId = -1;
            if (!int.TryParse(idLine.Value, out tryId))
              throw new InvalidMpdResponseException("Tag value on line " + (i + 1) + " is not a number.");

            ret.Add(new KeyValuePair<int, int>(tryPos, tryId));
              }

              return ret;
        }