Пример #1
0
        /// <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();
 }
Пример #4
0
 /// <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);
        }
Пример #6
0
        /// <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;
            }
        }
Пример #10
0
 /// <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);
 }