/// <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>
 ///     Empieza a descargar la cancion con el id indicado
 /// </summary>
 /// <param name="idCancion">El id de la cancion a descargar</param>
 private void EmpezarADescargarCancion(int idCancion)
 {
     _songsClient.OnInitialRecivedSong    += RecibirCancion;
     _songsClient.OnSongChunkRived        += RecibirChunk;
     _songsClient.OnTerminatedRecivedSong += TerminarDeRecibirCancion;
     _songsClient.OnErrorRaised           += ManejarError;
     _songsClient.GetSong(idCancion, Calidad.Alta, false);
     _estadoManjadorDeCanciones = EstadoManjadorDeCanciones.Descargando;
     ActualizarCancionesPendientesDeUsuario();
 }
        /// <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;
            }
        }