protected override UDPBaseResponse <ResponseAddFile> ParseResponse(UDPReturnCode code, string receivedData)
        {
            switch (code)
            {
            case UDPReturnCode.MYLIST_ENTRY_ADDED:
            {
                /* Response Format
                 * {int4 mylist id of new entry}
                 */
                // parse the MyList ID
                string[] arrResult = receivedData.Split('\n');
                if (arrResult.Length >= 2)
                {
                    int.TryParse(arrResult[1], out int myListID);
                    return(new UDPBaseResponse <ResponseAddFile>
                        {
                            Code = code,
                            Response = new ResponseAddFile
                            {
                                MyListID = myListID,
                                State = State,
                                IsWatched = IsWatched,
                                WatchedDate = WatchedDate
                            }
                        });
                }
                break;
            }

            case UDPReturnCode.FILE_ALREADY_IN_MYLIST:
            {
                /* Response Format
                 * {int4 lid}|{int4 fid}|{int4 eid}|{int4 aid}|{int4 gid}|{int4 date}|{int2 state}|{int4 viewdate}|{str storage}|{str source}|{str other}|{int2 filestate}
                 */
                //file already exists: read 'watched' status
                string[] arrResult = receivedData.Split('\n');
                if (arrResult.Length >= 2)
                {
                    string[] arrStatus   = arrResult[1].Split('|');
                    bool     hasMyListID = int.TryParse(arrStatus[0], out int myListID);
                    if (!hasMyListID)
                    {
                        throw new UnexpectedUDPResponseException
                              {
                                  Message    = "MyListID was not provided. Use AniDBMyList_RequestAddEpisode for generic files.",
                                  Response   = receivedData,
                                  ReturnCode = code
                              }
                    }
                    ;


                    GetFile_State state = (GetFile_State)int.Parse(arrStatus[6]);

                    int  viewdate = int.Parse(arrStatus[7]);
                    bool watched  = viewdate > 0;

                    DateTime?watchedDate = null;
                    if (watched)
                    {
                        DateTime utcDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                        utcDate = utcDate.AddSeconds(viewdate);

                        watchedDate = utcDate.ToLocalTime();
                    }

                    return(new UDPBaseResponse <ResponseAddFile>
                        {
                            Code = code,
                            Response = new ResponseAddFile
                            {
                                MyListID = myListID,
                                State = state,
                                IsWatched = watched,
                                WatchedDate = watchedDate
                            }
                        });
                }
                break;
            }
            }
            throw new UnexpectedUDPResponseException(code, receivedData);
        }
    }
        protected override UDPBaseResponse <ResponseAddFile> ParseResponse(UDPReturnCode code, string receivedData)
        {
            switch (code)
            {
            case UDPReturnCode.MYLIST_ENTRY_ADDED:
            {
                // We're adding a generic file, so it won't return a MyListID
                return(new UDPBaseResponse <ResponseAddFile>
                    {
                        Code = code,
                        Response = new ResponseAddFile
                        {
                            State = State,
                            IsWatched = IsWatched,
                            WatchedDate = WatchedDate
                        }
                    });
            }

            case UDPReturnCode.FILE_ALREADY_IN_MYLIST:
            {
                /* Response Format
                 * {int4 lid}|{int4 fid}|{int4 eid}|{int4 aid}|{int4 gid}|{int4 date}|{int2 state}|{int4 viewdate}|{str storage}|{str source}|{str other}|{int2 filestate}
                 */
                //file already exists: read 'watched' status
                string[] arrResult = receivedData.Split('\n');
                if (arrResult.Length >= 2)
                {
                    string[] arrStatus = arrResult[1].Split('|');
                    // We expect 0 for a MyListID
                    int.TryParse(arrStatus[0], out int myListID);

                    GetFile_State state = (GetFile_State)int.Parse(arrStatus[6]);

                    int  viewdate = int.Parse(arrStatus[7]);
                    bool watched  = viewdate > 0;

                    DateTime?watchedDate = null;
                    if (watched)
                    {
                        DateTime utcDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                        utcDate = utcDate.AddSeconds(viewdate);

                        watchedDate = utcDate.ToLocalTime();
                    }

                    return(new UDPBaseResponse <ResponseAddFile>
                        {
                            Code = code,
                            Response = new ResponseAddFile
                            {
                                MyListID = myListID,
                                State = state,
                                IsWatched = watched,
                                WatchedDate = watchedDate
                            }
                        });
                }
                break;
            }
            }
            throw new UnexpectedUDPResponseException(code, receivedData);
        }