Ejemplo n.º 1
0
        /// <summary>
        /// Read server responces and convert them into data objects
        /// </summary>
        private async Task HandleResponse(MpdResponseCollection response)
        {
            //bool handleResponseCriticalError = false;
            string errorMessage = string.Empty;

            try
            {
                switch (response.Command.Op)
                {
                case "update":      // в ответ на команду сервер возвращает" "updating_db: 1\n"  (Реализовано)
                case "stats": _Statistics.Update(response); break;

                case "status": _Status.Update(response); break;           // Реализовано

                case "currentsong": _CurrentSong.Update(response); break;

                case "lsinfo":
                    if (response.Count > 0)
                    {     //  Каталог не пустой
                        string currentfolder = string.Empty;
                        if (CurrentFolder.Length != 0)
                        {
                            currentfolder = CurrentFolder + "\\";
                        }
                        // Создаём временный список файлов и заполняем его данными из ответв сервера
                        ObservableObjectCollection <File> filelist = new ObservableObjectCollection <File>(_mainPage);
                        filelist.Update(response);

                        if (_filelistUpdatInProcess)
                        {
                            _filelistCancelUpdate = true;
                            while (_filelistUpdatInProcess)
                            {
                                await Task.Delay(TimeSpan.FromMilliseconds(100));
                            }
//                                while (_filelistUpdatInProcess);
                            _filelistCancelUpdate = false;
                        }
                        await UpdateFileList(filelist);
                    }
                    else
                    {      // Каталог не содержит файлов
                        _FileList.ClearAndNotify();
                    }
                    break;

                case "list":
                    switch (response.Command.Argument1)
                    {
                    case "genre": _Genres.Update(response); break;

                    case "artist": _Artists.Update(response); break;

                    case "album": _Albums.Update(response); break;

                    case "title": _Tracks.Update(response); break;
                    }
                    break;

                case "search": _Tracks.Update(response); break;

                case "playlistinfo": _Playlist.Update(response); break;

                case "listplaylists": _SavedPlaylists.Update(response); break;

                case "outputs":
                    if (response.Count > 0)
                    {
                        _Outputs.Update(response);
                    }
                    break;

                case "config":
                    break;

                default: break;
                }
                if (response.Command.Op != "status")
                {
                    NotifyCommandCompletion(response.Command.Op, "OK", response.Error);
                }
            }
            catch (BalboaNullValueException be)
            {
                _Terminating = true;
                errorMessage = string.Format(_resldr.GetString("NullValueExceptionMsg"),
                                             be.VariableName, be.MethodName, be.FileName, be.LineNumber);
            }
            catch (BalboaException be)
            {
                _Terminating = true;
                errorMessage = string.Format(_resldr.GetString("BalboaExceptionMsg"),
                                             be.MethodName, be.FileName, be.LineNumber, be.Message);
            }
            catch (Exception e)
            {
                _Terminating = true;
                string exceptionMessage = e.Message.Contains("\r\n") ? e.Message.Substring(0, e.Message.IndexOf("\r\n")) : e.Message;
                errorMessage = string.Format(_resldr.GetString("UnexpectedServerError"), exceptionMessage);
            }
            finally
            {
                if (_Terminating)
                {
                    //await Halt();
                    NotifyCriticalError(errorMessage);
                }
            }
        }