/// <summary> /// Regresa la cancion sin conexion en la cola de reproduccion /// </summary> /// <param name="anterior"> /// Inidica si la cancion sin conexion a recuperar es la anterior en la cola de reproduccion o es /// la siguiente /// </param> /// <returns>Una CancionSinConexion</returns> public CancionSinConexion ObtenerCancionSinConexion(bool anterior) { CancionSinConexion cancionSinConexion = null; if (anterior) { _posicionReproduccion -= 1; var cancionAnterior = _colaReproduccion.Find(ec => ec.Posicion == _posicionReproduccion); if (cancionAnterior != null && cancionAnterior.CancionSinConexion != null) { cancionSinConexion = cancionAnterior.CancionSinConexion; } } else { _posicionReproduccion += 1; var proximaCancion = _colaReproduccion.Find(ec => ec.Posicion == _posicionReproduccion); if (proximaCancion != null && proximaCancion.CancionSinConexion != null) { cancionSinConexion = proximaCancion.CancionSinConexion; } } return(cancionSinConexion); }
/// <summary> /// Se encarga de almacenar la cancion cuando ya se termino de descargar y de agregarla a la lista de canciones /// descargadas /// </summary> private void TerminarDeRecibirCancion() { _songsClient.OnInitialRecivedSong -= RecibirCancion; _songsClient.OnSongChunkRived -= RecibirChunk; _songsClient.OnTerminatedRecivedSong -= TerminarDeRecibirCancion; _estadoManjadorDeCanciones = EstadoManjadorDeCanciones.Guardando; var usuarioActual = ManejadorDeUsuariosLogeados.GetManejadorDeUsuariosLogeados().ObtenerUsuarioLogeado(); var ruta = CrearRutaParaGuardarCancion(usuarioActual.nombre_usuario, _seEncuentraDescargando.id, _extensionCancion); var seGuardo = GuardarCancion(_bufferCancion, ruta); _bufferCancion.Dispose(); if (seGuardo) { _seEncuentraDescargando.ruta_cancion = ruta; _seEncuentraDescargando.estado_descarga = CancionSinConexion.EstadoDescarga.Descargado; usuarioActual.canciones_sin_conexion.Add(_seEncuentraDescargando); } else { _colaCancionesSinConexion.Enqueue(_seEncuentraDescargando); _seEncuentraDescargando.estado_descarga = CancionSinConexion.EstadoDescarga.Error; } _seEncuentraDescargando = null; ActualizarCancionesPendientesDeUsuario(); IniciarDescarga(); }
/// <summary> /// Se encarga de manejar los errores que puedan ocurrir al descargar la cancion /// </summary> /// <param name="message">El mensaje del error</param> private void ManejarError(string message) { _seEncuentraDescargando.estado_descarga = CancionSinConexion.EstadoDescarga.Error; _colaCancionesSinConexion.Enqueue(_seEncuentraDescargando); _seEncuentraDescargando = null; ActualizarCancionesPendientesDeUsuario(); Thread.Sleep(10000); IniciarDescarga(); }
/// <summary> /// Empieza la reproduccion de una cancion sin conexion sin afectar a la cola de reproduccion /// </summary> /// <param name="cancion">La cancion sin conexion a reproducir</param> public void EmpezarAReproducirCancionSinConexion(CancionSinConexion cancion) { OnActualizacionCola?.Invoke(_colaDeReproduccion.ObtenerProximosElementosEnCola()); OnIniciaReproduccionCancion?.Invoke(cancion); OnCambioEstadoReproduccion?.Invoke(true); _estadoReproductor = EstadoReproductor.Reproduciendo; _duracionTotalDeCancionEnReproduccion = cancion.duracion; ReproducirCancionSinConexion(cancion.ruta_cancion); }
/// <summary> /// Busca una cancion sin conexion en la lista de canciones por su id /// </summary> /// <param name="idCancion">El id de la cancion a buscar</param> /// <returns>La cancion a la cual pertenece el id</returns> private CancionSinConexion BuscarCancionSinConexion(int idCancion) { CancionSinConexion cancion = null; if (_cancionesDescargadas != null) { cancion = _cancionesDescargadas.Find(cs => cs.id == idCancion); } return(cancion); }
/// <summary> /// Agrega una cancion sin conexion a la cola de reproducción /// </summary> /// <param name="cancionSinConexion">La cancion sin conexion a agregar</param> public void AgregarCancionSinConexionACola(CancionSinConexion cancionSinConexion) { _posicionCola += 1; var elementoCola = new ElementoCola { CancionSinConexion = cancionSinConexion, YaSeReproducio = false, Posicion = _posicionCola }; _colaReproduccion.Add(elementoCola); }
/// <summary> /// Agrega una cancion a la cola de descarga para las canciones sin conexion /// </summary> /// <param name="cancion">La cancion a agregar a canciones sin conexion</param> public void AgregarCancionSinConexion(Cancion cancion) { if (!SeEncuentraEnCancionesSinConexion(cancion.id)) { var cancionSinConexion = CrearCancionSinConexionDeCancion(cancion); _colaCancionesSinConexion.Enqueue(cancionSinConexion); ActualizarCancionesPendientesDeUsuario(); if (_seEncuentraDescargando == null) { _seEncuentraDescargando = _colaCancionesSinConexion.Dequeue(); _seEncuentraDescargando.estado_descarga = CancionSinConexion.EstadoDescarga.Descargando; EmpezarADescargarCancion(_seEncuentraDescargando.id); } } }
/// <summary> /// Coloca la siguiente cancion en la cola a descargar /// </summary> protected void IniciarDescarga() { if (_colaCancionesSinConexion.Count > 0 && _seEncuentraDescargando == null) { _seEncuentraDescargando = _colaCancionesSinConexion.Dequeue(); _seEncuentraDescargando.estado_descarga = CancionSinConexion.EstadoDescarga.Descargando; EmpezarADescargarCancion(_seEncuentraDescargando.id); } else { _estadoManjadorDeCanciones = EstadoManjadorDeCanciones.Detenido; } ActualizarCancionesPendientesDeUsuario(); }
/// <summary> /// Coloca todas las canciones pendientes de descarga o descargando en la lista de canciones pendientes del usuario /// </summary> public void TerminarDeDescargarCanciones() { var usuario = ManejadorDeUsuariosLogeados.GetManejadorDeUsuariosLogeados().ObtenerUsuarioLogeado(); if (usuario != null) { if (_seEncuentraDescargando != null) { _colaCancionesSinConexion.Enqueue(_seEncuentraDescargando); } usuario.canciones_pendientes_descarga = _colaCancionesSinConexion.ToList(); if (_songsClient != null) { _songsClient.OnInitialRecivedSong -= RecibirCancion; _songsClient.OnSongChunkRived -= RecibirChunk; _songsClient.OnTerminatedRecivedSong -= TerminarDeRecibirCancion; _songsClient = new SongsClient(); } _extensionCancion = ""; _estadoManjadorDeCanciones = EstadoManjadorDeCanciones.Detenido; _colaCancionesSinConexion.Clear(); _seEncuentraDescargando = null; } }
/// <summary> /// Añade una cancion sin conexion a la cola de reproduccion /// </summary> /// <param name="cancionSinConexion"></param> public void AñadirCancionSinConexionAColaDeReproduccion(CancionSinConexion cancionSinConexion) { _colaDeReproduccion.AgregarCancionSinConexionACola(cancionSinConexion); }