//////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> Event handler. LLamada al evento asociado al botón Insertar. </summary> /// /// <remarks> TVO DPAA 2009-2010. </remarks> /// /// <param name="sender"> Source of the event. </param> /// <param name="e"> Event information. </param> //////////////////////////////////////////////////////////////////////////////////////////////////// //------------------------------------------------------Insertando private void buttonInsertarProg_Click(object sender, EventArgs e) { int insertadas = 0; int idCad = 0, idTem = 0, idCal = 0, idProg = 0; idCad = ObtenerIdCadena(cBICadena); idTem = ObtenerIdTematica(cBITematica); idCal = ObtenerIdCalif(cBICalificacion); ENPrograma programa = new ENPrograma(idCad, idTem, idCal, tBNombreProg.Text, tBDescripcion.Text, cBActProg.Checked, cBNovedad.Checked); try { TbSeccionBaseErrorProvider.Dispose(); if (buttonInsertarProg.Text == "Insertar") { if (ValidaFormulario(tBNombreProg.Text, cBITematica.Text, cBICalificacion.Text, cBICadena.Text, tBDescripcion.Text, cBActProg.Checked, cBNovedad.Checked)) { DataView dvProgramaExiste = new DataView(); ENPrograma programaExiste = new ENPrograma(tBNombreProg.Text); //Se busca un programa con ese nombre y cualquier tipo dvProgramaExiste = programaExiste.buscarPrograma(); if (dvProgramaExiste.Count == 0) //No existe el programa que queremos insertar { insertadas = programa.InsertarPrograma(); if (insertadas > 0) { MensajeSistema(labelMensajeSist, "Inserción correcta", kMensajeSistema.mCORRECTO); } else { MensajeSistema(labelMensajeSist, "ERROR: La inserción no se pudo realizar.", kMensajeSistema.mERROR); } } else { MensajeSistema(labelMensajeSist, "ERROR: El programa ya existe.", kMensajeSistema.mERROR); } gBMensajesSist.Visible = true; } else { gBMensajesSist.Visible = false; } } else { if (buttonInsertarProg.Text == "Modificar") { int id = int.Parse(dGVResultBProg.SelectedRows[0].Cells["idProg"].Value.ToString()); programa.Id_Programa = id; int modificadas = programa.modificarPrograma(); if (modificadas > 0) { MensajeSistema(labelMensajeSist, "Modificación correcta", kMensajeSistema.mCORRECTO); buttonBuscar_Click((object)buttonBuscar, null); } else { MensajeSistema(labelMensajeSist, "ERROR: La modificación no se pudo realizar.", kMensajeSistema.mERROR); } gBMensajesSist.Visible = true; } } } catch (ENException enex) { MensajeSistema(labelMensajeSist, enex.Message, kMensajeSistema.mERROR); gBMensajesSist.Visible = true; } }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// <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); } } }