/// <summary> /// Registra una cancion personal en el servidor /// </summary> /// <param name="cancionPersonal">La cancion personal a registrar</param> /// <returns>La cancion personal registrada</returns> /// <exception cref="Exception">Alguna excepcion que pueda ocurrir al guardar la cancion</exception> public static async Task <CancionPersonal> RegisterSong(CancionPersonal cancionPersonal) { var path = "/v1/biblioteca-personal/canciones"; for (var i = 1; i <= CantidadIntentos; i++) { using (var response = await ApiClient.GetApiClient().PostAsJsonAsync(path, cancionPersonal)) { if (response.StatusCode == HttpStatusCode.Created) { var cancionRegistered = await response.Content.ReadAsAsync <CancionPersonal>(); return(cancionRegistered); } if (response.StatusCode == HttpStatusCode.Unauthorized) { await ApiServiceLogin.GetServiceLogin().ReLogin(); } else { ErrorGeneral error; error = await response.Content.ReadAsAsync <ErrorGeneral>(); throw new Exception(error.mensaje); } } } throw new Exception("AuntenticacionFallida"); }
/// <summary> /// Regresa la cancion personal en la cola de reproduccion /// </summary> /// <param name="anterior"> /// Inidica si la cancion personal a recuperar es la anterior en la cola de /// reproduccion o es la siguiente /// </param> /// <returns>Una CancionPersonal</returns> public CancionPersonal ObtenerCancionPersonal(bool anterior) { CancionPersonal cancionPersonal = null; if (anterior) { _posicionReproduccion -= 1; var cancionAnterior = _colaReproduccion.Find(ec => ec.Posicion == _posicionReproduccion); if (cancionAnterior != null && cancionAnterior.CancionPersonal != null) { cancionPersonal = cancionAnterior.CancionPersonal; } } else { _posicionReproduccion += 1; var proximaCancion = _colaReproduccion.Find(ec => ec.Posicion == _posicionReproduccion); if (proximaCancion != null && proximaCancion.CancionPersonal != null) { cancionPersonal = proximaCancion.CancionPersonal; } } return(cancionPersonal); }
/// <summary> /// Empieza la reproduccion de una cancion personal sin afectar la cola de reproduccion /// </summary> /// <param name="cancionPersonal">La cancion personal a reproducir</param> public void EmpezarAReproducirCancionPersonal(CancionPersonal cancionPersonal) { OnActualizacionCola?.Invoke(_colaDeReproduccion.ObtenerProximosElementosEnCola()); OnIniciaReproduccionCancionPersonal?.Invoke(cancionPersonal); OnCambioEstadoReproduccion?.Invoke(true); _estadoReproductor = EstadoReproductor.Reproduciendo; _duracionTotalDeCancionEnReproduccion = cancionPersonal.duracion; ReproducirCancion(cancionPersonal.id, true); }
/// <summary> /// Crea una cancion personal a partir de los elementos de la pantalla /// </summary> /// <returns>La CancionPersonal creada</returns> private CancionPersonal CrearCancionPersonal() { var cancion = new CancionPersonal { nombre = nombreCancionTextbox.Text, album = albumCancionTextbox.Text, artistas = artistasCancionTextbox.Text }; return(cancion); }
/// <summary> /// Agrega una cancion personal a la cola de reproducción /// </summary> /// <param name="cancionPersonal">La cancion perosnal a agregar</param> public void AgregarCancionPersonalACola(CancionPersonal cancionPersonal) { if (!ValidarLaCancionPersonalSeEncuentraEnCola(cancionPersonal.id)) { _posicionCola += 1; var elementoCola = new ElementoCola { CancionPersonal = cancionPersonal, YaSeReproducio = false, Posicion = _posicionCola }; _colaReproduccion.Add(elementoCola); } }
/// <summary> /// Coloca la informacion de una cancion personal en los elementos del reproductor /// </summary> /// <param name="cancionPersonal">La cancion personal a colocar su informacion</param> private void ColocarElementosCancionPersonal(CancionPersonal cancionPersonal) { if (cancionPersonal != null) { _cancionActual = null; _idCancionActual = 0; OcultarElementosSinConexion(); tiempoActualTextBlock.Text = "00:00"; duracionSlider.Value = 0; duracionSlider.Maximum = cancionPersonal.duracion; nombreCancionTextBlock.Text = cancionPersonal.nombre; artistaCacionTextBlock.Text = cancionPersonal.artistas; coverImage.Source = (BitmapImage)FindResource("CancionPersonal"); tiempoTotalTextBlock.Text = cancionPersonal.duracion_string; } }
/// <summary> /// Añade una cancion personal a la cola de reproduccion /// </summary> /// <param name="cancionPersonal">La cancion perosnal a agregar</param> public void AñadirCancionPersonalAColaDeReproduccion(CancionPersonal cancionPersonal) { _colaDeReproduccion.AgregarCancionPersonalACola(cancionPersonal); }
/// <summary> /// Registra la informacion de una cancion personal y sube la cancion al servidor /// </summary> private async void RegistrarNuevaCancion() { if (ValidarNombre() && ValidarArtistas() && ValidarAlbum() && ValidarCancionSeleccionada()) { DeshabilitarElementosPantalla(); var cancionARegistrar = CrearCancionPersonal(); try { _cancionRegistrada = await BibliotecaPersonalClient.RegisterSong(cancionARegistrar); try { var clienteCanciones = new SongsClient(); clienteCanciones.OnPorcentageUp += SubirPorcentajeAvanza; clienteCanciones.OnUploadTerminated += TerminarSubirCancion; await clienteCanciones.UploadSong(ArchivoSeleccionadoText.Text, _cancionRegistrada.id, true); } catch (RpcException) { new MensajeEmergente().MostrarMensajeError( "No se pudo subir la cancion personal, la puede volver a " + "subir mas adelante"); Close(); } catch (Exception ex) { if (ex.Message == "AuntenticacionFallida") { new MensajeEmergente().MostrarMensajeError("No se pudo autenticar con el usuario con el " + "cual inicio sesión, se guardo la informacion de la " + "cancion pero no el archivo"); } else { new MensajeEmergente().MostrarMensajeError(ex.Message); } Close(); } } catch (HttpRequestException) { new MensajeEmergente().MostrarMensajeError("No se puede conectar al servidor, porfavor verifique " + "su conexión a internet"); } catch (Exception ex) { if (ex.Message == "AuntenticacionFallida") { new MensajeEmergente().MostrarMensajeError("No se pudo autenticar con el usuario con el " + "cual inicio sesión, no se ha guardado la canción"); Close(); } else { new MensajeEmergente().MostrarMensajeError(ex.Message); } } HabilitarElementosPantalla(); } }