using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Mip { public partial class frmChat : Form { public frmChat() { InitializeComponent(); } string idUserKomu = "0"; string idUserOd = "0"; DateTime maxDateTime = DateTime.MinValue; //float pocet = 0; private void dataGridView3_CellClick(object sender, DataGridViewCellEventArgs e) { idUserKomu = dataGridView3.Rows[dataGridView3.CurrentRow.Index].Cells["IDUsers"].Value.ToString(); idUserOd = classUser.ID.ToString(); textBox3.Enabled = true; label1.Enabled = true; povolitrefresh = true; classUser.IndexChat = dataGridView3.CurrentRow.Index; refreshChatUsers(); refreshListView(); } private void frmChat_Load(object sender, EventArgs e) { refreshChatUsers(); listView2.Columns.Add("Smer", 25,HorizontalAlignment.Center); listView2.Columns.Add("DatumCas", 80,HorizontalAlignment.Left); listView2.Columns.Add("Text", 350,HorizontalAlignment.Left); listView2.HeaderStyle = ColumnHeaderStyle.None; dataGridView3.ClearSelection(); string cmd = "SELECT IFNULL(MAX(`DatumCas`),0) AS `posledny` FROM `mip`.`tabchat` WHERE `Komu` = " + classUser.ID.ToString() + ";"; string strPoslednyDatum; classSQL.SQL(cmd, out strPoslednyDatum); if (strPoslednyDatum != "0") maxDateTime = Convert.ToDateTime(strPoslednyDatum); Timer refresh = new Timer(); refresh.Enabled = true; refresh.Interval = 1000; refresh.Tick += new System.EventHandler(refresh_Tick); } private void refresh_Tick(object sender, EventArgs e) { if (dataGridView3.SelectedRows.Count > 0) { refreshListView(); //refreshChatUsers(); } } //int selectedRow; private void refreshChatUsers() { /* SELECT CONCAT(IFNULL(`Titul`,''), ' ', `Priezvisko`, ' ', `Meno`) AS Meno, `OnlineStatus`, `IDUsers` FROM `tabusers` ORDER BY `OnlineStatus` DESC, `Priezvisko`; */ string cmd = @"SELECT CONCAT(IFNULL(`Titul`,''), ' ', `Priezvisko`, ' ', `Meno`) AS Meno, `OnlineStatus`, `IDUsers`, IF((SELECT COUNT(`Od`) FROM `tabchat` WHERE(`Od` = `tabusers`.IDUsers AND `Komu` = " + classUser.ID.ToString() + @" AND `tabchat`.`Status` = 'Neprečítaná'))=0,'False','True') AS NoveSpravy FROM `tabusers` ORDER BY `OnlineStatus` DESC, `Priezvisko`;"; DataTable tblChat = new DataTable(); classSQL.SQL(cmd, out tblChat); // vymaze uzivatela aby nemohol posielat spravy sam sebe DataRow[] drr = tblChat.Select("IDUsers=' " + classUser.ID.ToString() + " ' "); foreach (var row in drr) row.Delete(); dataGridView3.DataSource = tblChat; dataGridView3.Columns["IDUsers"].Visible = false; dataGridView3.Columns["Meno"].HeaderText = "Meno"; dataGridView3.Columns["OnlineStatus"].HeaderText = "Status"; dataGridView3.Columns["NoveSpravy"].Visible = false;//pridane aby sme mohly oznacit od koho ma uzivatel nove spravy dataGridView3.AutoResizeColumns(); dataGridView3.Columns["Meno"].Width = 125; dataGridView3.ClearSelection(); if (classUser.IndexChat <= dataGridView3.Rows.Count - 1) dataGridView3.Rows[classUser.IndexChat].Selected = true; else if (dataGridView3.Rows.Count != 0) dataGridView3.Rows[dataGridView3.Rows.Count - 1].Selected = true; } private void refreshListView() { string cmd = "SELECT IFNULL(MAX(`DatumCas`),0) AS `posledny` FROM `mip`.`tabchat` WHERE `Komu` = " + classUser.ID.ToString() + ";"; string strposlednyDatumNovy; classSQL.SQL(cmd, out strposlednyDatumNovy); DateTime novyHladanyMaxDateTime = DateTime.MinValue; //if (strposlednyDatumNovy != "0" || strposlednyDatumNovy !=null) novyHladanyMaxDateTime = Convert.ToDateTime(strposlednyDatumNovy); if (strposlednyDatumNovy != "") novyHladanyMaxDateTime = Convert.ToDateTime(strposlednyDatumNovy); if ((novyHladanyMaxDateTime > maxDateTime && dataGridView3.SelectedRows.Count >0 ) || povolitrefresh == true) { for (int i = listView2.Items.Count - 1; i >= 0; i--) listView2.Items[i].Remove(); string cmd2 = @"SELECT `Od`, `Komu`, DATE_FORMAT (`DatumCas`, '%e' '.' '%c' '. - ' '%H' ':' '%i') AS `DatCas`, `Text`, `Status`, `IDChat` FROM `tabchat` WHERE ((`Od` = " + idUserOd + " AND `Komu` = " + idUserKomu + ") OR (`Od` = " + idUserKomu + " AND `Komu` = " + idUserOd + ")) ORDER BY `DatumCas`;"; DataTable tbllistView = new DataTable(); classSQL.SQL(cmd2, out tbllistView); //"↑↓" for (int i = 0; i < tbllistView.Rows.Count; i++) { string smer = ""; string datumcas = ""; string text = ""; if (tbllistView.Rows[i].ItemArray[tbllistView.Columns["Od"].Ordinal].ToString() == idUserOd) smer = "↑"; else smer = "↓"; datumcas = tbllistView.Rows[i].ItemArray[tbllistView.Columns["DatCas"].Ordinal].ToString(); text = tbllistView.Rows[i].ItemArray[tbllistView.Columns["Text"].Ordinal].ToString(); addlistviewline(smer, datumcas, text); if (tbllistView.Rows[i].ItemArray[tbllistView.Columns["Od"].Ordinal].ToString() == idUserOd) listView2.Items[listView2.Items.Count - 1].ForeColor = Color.Blue; else { if (tbllistView.Rows[i].ItemArray[tbllistView.Columns["Status"].Ordinal].ToString() == "Neprečítaná") { string IDChat = tbllistView.Rows[i].ItemArray[tbllistView.Columns["IDChat"].Ordinal].ToString(); string cmd3 = @"UPDATE `mip`.`tabchat` SET `Status` = 'Prečítaná' WHERE `IDChat`=" + IDChat + ";"; classSQL.SQL(cmd3); listView2.Items[listView2.Items.Count - 1].ForeColor = Color.Red; } else { listView2.Items[listView2.Items.Count - 1].ForeColor = Color.Black; } } } if (listView2.Items.Count > 0) listView2.Items[listView2.Items.Count - 1].EnsureVisible(); if (strposlednyDatumNovy != "0") maxDateTime = Convert.ToDateTime(strposlednyDatumNovy); povolitrefresh = false; } } private void addlistviewline(String addsmer, String adddatumcas, String addtext) { ListViewItem newitem = new ListViewItem(addsmer); newitem.SubItems.Add(adddatumcas); newitem.SubItems.Add(addtext); listView2.Items.Add(newitem); } private void label3_Click(object sender, EventArgs e) { this.Close(); } bool vymazatText = false; bool povolitrefresh = false; private void textBox3_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 13) { string cmd = @"INSERT INTO `mip`.`tabchat` (`Od`, `Komu`, `DatumCas`, `Text`, `Status`) VALUES ('" + idUserOd + "', '" + idUserKomu + "', " + "NOW()" + ", '" + textBox3.Text + "', " + "'Neprečítaná');"; classSQL.SQL(cmd); povolitrefresh = true; refreshListView(); vymazatText = true; } } private void textBox3_TextChanged(object sender, EventArgs e) { } private void textBox3_KeyUp(object sender, KeyEventArgs e) { if (vymazatText == true) { textBox3.Clear(); vymazatText = false; } } private void frmChat_Leave(object sender, EventArgs e) { this.Close(); } private void dataGridView3_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { classGlobal.SetCellColor(dataGridView3, e.ColumnIndex, e.RowIndex, e.Value.ToString()); } private void dataGridView3_SelectionChanged(object sender, EventArgs e) { if(dataGridView3.SelectedRows.Count != 0) label1.Text = "Adresát: " + dataGridView3.Rows[dataGridView3.SelectedRows[0].Index].Cells["Meno"].Value.ToString(); } } }