예제 #1
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>   Compara en emision por cadena. </summary>
        ///
        /// <remarks>   Método predicado usado por el método FindAll para obtener todas las emisiones que pertenecen a una
        /// única cadena. Se apoya en el atributo de clase ID_cadena.</remarks>
        ///
        /// <param name="x">    Emisión actual </param>
        ///
        /// <returns>   true if it succeeds, false if it fails. </returns>
        ////////////////////////////////////////////////////////////////////////////////////////////////////

        private bool ComparaENEmisionPorCadena(ENEmision x)
        {
            return(x.Id_cadena == ID_cadena);
        }
예제 #2
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>   Compara en emision por fecha inicio. </summary>
        ///
        /// <remarks>   Método delegado usado para la ordenación, método Sort, del objeto Collection.List </remarks>
        ///
        /// <param name="x">    Emision actual </param>
        /// <param name="y">    Siguiente emisión </param>
        ///
        /// <returns>   . </returns>
        ////////////////////////////////////////////////////////////////////////////////////////////////////

        private int ComparaENEmisionPorFechaInicio(ENEmision x, ENEmision y)
        {
            return(x.FechaHoraInicio.CompareTo(y.FechaHoraInicio));
        }
예제 #3
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>   Leer xmltv. </summary>
        ///
        /// <remarks>   Procesa el documento XML rellenando la lista List que almacena las emisiones.
        ///
        /// Las etiquetas channel, contienen información de las cadenas, mientras que la etiqueta programme sobre
        /// los programas.
        /// Una vez leído el XML, se ordena la lista usando como criterio la fecha de emisión, y, posteriormente
        /// se recorre para realizar las inserciones en la BD de forma correcta. Cada emisión debe calcular su duración con relación
        /// a la siguiente emsión dentro de la cadena.
        /// </remarks>
        ///
        /// <param name="xElem">    The x coordinate element. </param>
        ////////////////////////////////////////////////////////////////////////////////////////////////////

        public void leerXMLtv(XElement xElem)
        {
            string infoLectura = "";


            infoLectura = etRespuesta.Text + "\nLeyendo XML...";
            MensajeSistema(etRespuesta, infoLectura, kMensajeSistema.mCORRECTO);
            MensajeSistema(etInfoXML, "Procesando XML...", kMensajeSistema.mCORRECTO);
            gbInfoXML.Visible = true;
            try
            {
                //La ruta del documento XML permite rutas relativas
                //respecto del ejecutable!
                int              numcad       = 0;
                int              numprog      = 0;
                Hashtable        miguiaTV     = new Hashtable();
                List <ENEmision> listaEmision = new List <ENEmision>();

                IEnumerable <XElement> ListaHijos = from el in xElem.Elements() select el;
                foreach (XElement e in ListaHijos)
                {
                    if (e.Name.LocalName == "channel")
                    {
                        IEnumerable <XElement> HijosDeChannel = from hijo in e.Elements() select hijo;
                        foreach (XElement h in HijosDeChannel)
                        {
                            if (h.Name.LocalName == "display-name")
                            {
                                ENCadena nuevo = new ENCadena(h.Value);
                                nuevo.Activo = true;
                                nuevo.Tipo   = Enum.GetName(typeof(kTipo), kTipo.Generalista);
                                // e.Attribute
                                int id = nuevo.existeNombreCadena();

                                if (id == -1) // No existe el nombre en la BD
                                {
                                    nuevo.insertarCadena();
                                    miguiaTV[e.FirstAttribute.Value] = nuevo.Id;
                                    infoLectura = etRespuesta.Text + "\nAñadido nuevo Canal: " + nuevo.Nombre;
                                    MensajeSistema(etRespuesta, infoLectura, kMensajeSistema.mCORRECTO);
                                }
                                else
                                {
                                    miguiaTV[e.FirstAttribute.Value] = id;
                                    numcad++;
                                }
                            }
                        }
                    }

                    if (e.Name.LocalName == "programme")
                    {
                        // Start
                        string start = SecurityElement.Escape(e.Attribute("start").Value);
                        // Channel
                        string channel = e.Attribute("channel").Value;

                        int    cadena = (int)miguiaTV[channel];
                        string nombre = SecurityElement.Escape(Validacion.SustituyeCaracteresRaros(e.Element("title").Value));

                        // string descripcion = xmlStringHelpers.ConvierteA_UTF8(e.Element("desc").Value);
                        string descripcion  = SecurityElement.Escape(Validacion.SustituyeCaracteresRaros(e.Element("desc").Value));
                        int    tematica     = 1;
                        int    calificacion = 1;
                        bool   novedad      = true;
                        bool   activo       = true;
                        int    id_programa  = -1;

                        ENPrograma p = new ENPrograma(cadena, tematica, calificacion, nombre, descripcion, activo, novedad);

                        if (!p.existePrograma())
                        {
                            p.InsertarPrograma();
                            id_programa = p.Id_Programa;
                            infoLectura = etRespuesta.Text + "\nAñadido nuevo Programa: " + p.Nombre;
                            MensajeSistema(etRespuesta, infoLectura, kMensajeSistema.mCORRECTO);
                            numprog++;
                        }
                        else
                        {
                            id_programa = p.ObtenerIdPrograma(0, nombre);
                        }

                        DateTimeConverter con = new DateTimeConverter();

                        string anyo    = start.Substring(0, 4);
                        string mes     = start.Substring(4, 2);
                        string dia     = start.Substring(6, 2);
                        string hora    = start.Substring(8, 2);
                        string minuto  = start.Substring(10, 2);
                        string segundo = start.Substring(12, 2);

                        DateTime  fechaHoraEmision = new DateTime(Convert.ToInt32(anyo), Convert.ToInt32(mes), Convert.ToInt32(dia), Convert.ToInt32(hora), Convert.ToInt32(minuto), Convert.ToInt32(segundo));
                        ENEmision emision          = new ENEmision(cadena, id_programa, fechaHoraEmision, 0);

                        listaEmision.Add(emision);
                    }
                }
                listaEmision.Sort(ComparaENEmisionPorFechaInicio);


                MensajeSistema(etInfoXML, "Creando estructura de datos interna...", kMensajeSistema.mADVERTENCIA);
                gbInfoXML.Visible = true;
                foreach (int id_cadena in miguiaTV.Values)
                {
                    List <ENEmision> emisionPorCadena = new List <ENEmision>();

                    ID_cadena = id_cadena;

                    emisionPorCadena = listaEmision.FindAll(ComparaENEmisionPorCadena);  //(totaller.AddBookToTotal)ComparaENEmisionPorCadena);
                    // Bucle que asigna las duraciones
                    for (int j = 0; j < emisionPorCadena.Count; j++)
                    {
                        if (j == (emisionPorCadena.Count) - 1)
                        {
                            // Ultima emision
                            emisionPorCadena[emisionPorCadena.Count - 1].Duracion = 30;
                            listaEmisionCompleta.Add(emisionPorCadena[emisionPorCadena.Count - 1]);
                        }
                        else
                        {
                            // Todas excepto la última
                            ENEmision completa = emisionPorCadena[j];

                            DateTime actual    = emisionPorCadena[j].FechaHoraInicio;
                            DateTime siguiente = emisionPorCadena[j + 1].FechaHoraInicio;

                            TimeSpan duracion = siguiente.Subtract(actual);

                            completa.Duracion = (int)Math.Ceiling(duracion.TotalMinutes);

                            listaEmisionCompleta.Add(completa);
                        }
                    }
                }

                infoLectura = etRespuesta.Text + "\nEstructura de datos interna cargada con la programación.";
                MensajeSistema(etRespuesta, infoLectura, kMensajeSistema.mCORRECTO);
                MensajeSistema(etInfoXML, "Proceso finalizado", kMensajeSistema.mCORRECTO);
                gbInfoXML.Visible = true;
            }
            catch (Exception ex)
            {
                if (MessageBox.Show("El fichero xml no está bien formado, hay que volver a generarlo. ¿Desea generar de nuevo el xml?", "TEVEO :: Aplicación de gestión", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                {
                    btnGenerarXML_Click((Button)btnCarga, null);
                }
            }
        }