BH, Helferfunktionen, CHAT Refactor!!!!!!
This commit is contained in:
@@ -64,7 +64,7 @@ Public Class frmMessenger
|
||||
|
||||
End Sub
|
||||
Private Sub MyDatagridview1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvChats.CellClick '.CellContentClick
|
||||
If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> "" Then
|
||||
If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> 0 Then 'If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> "" Then
|
||||
Dim dgv_ChatID = If(dgvChats.SelectedRows.Count > 0, dgvChats.SelectedRows(0).Cells("chat_id").Value, -1)
|
||||
intiDGVChats(dgv_ChatID, False) ' Splate ungelesen sol sich ändern
|
||||
End If
|
||||
@@ -216,7 +216,54 @@ Public Class frmMessenger
|
||||
" & where & "
|
||||
) as T " & whereName & " ORDER BY chat_lastMsg DESC"
|
||||
|
||||
.DataSource = SQL.loadDgvBySql(sqlQery, "ADMIN")
|
||||
|
||||
Dim sqlQery_optimiced As String = "SELECT TOP 200
|
||||
c.chat_id,
|
||||
|
||||
CASE
|
||||
WHEN ISNULL(c.chat_name, '') <> '' THEN c.chat_name
|
||||
ELSE names.chat_name
|
||||
END AS chat_name,
|
||||
|
||||
ISNULL(unread.ungelesen, 0) AS ungelesen,
|
||||
|
||||
c.chat_lastMsg
|
||||
|
||||
FROM tblMessenger_Chat c
|
||||
|
||||
-- ensure current user is member
|
||||
INNER JOIN tblMessenger_ChatMembers m
|
||||
ON m.chatMb_chatId = c.chat_id
|
||||
AND m.chatMb_maId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
|
||||
|
||||
-- 🔹 get participant names (distinct!)
|
||||
OUTER APPLY (
|
||||
SELECT STRING_AGG(name, ', ') AS chat_name
|
||||
FROM (
|
||||
SELECT DISTINCT
|
||||
mit.mit_vname + ' ' + mit.mit_nname AS name
|
||||
FROM tblMessenger_ChatMembers m2
|
||||
INNER JOIN tblMitarbeiter mit
|
||||
ON mit.mit_id = m2.chatMb_maId
|
||||
WHERE m2.chatMb_chatId = c.chat_id
|
||||
AND m2.chatMb_maId <> " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
|
||||
) x
|
||||
) names
|
||||
|
||||
-- 🔹 unread count separated (no duplication!)
|
||||
OUTER APPLY (
|
||||
SELECT COUNT(*) AS ungelesen
|
||||
FROM tblMessenger_ChatMessages msg
|
||||
INNER JOIN tblMessenger_ChatMessageStatus s
|
||||
ON s.chatMgSt_chatMsgId = msg.chatMg_id
|
||||
WHERE msg.chatMg_chatId = c.chat_id
|
||||
AND s.chatMgSt_MaId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
|
||||
AND s.chatMgSt_gelesen = 0
|
||||
) unread WHERE c.chat_aktiv = " & IIf(Not cbxInaktiveChats.Checked, 1, 0) & "" & where & "ORDER BY c.chat_lastMsg DESC"
|
||||
|
||||
|
||||
|
||||
.DataSource = SQL.loadDgvBySql(sqlQery_optimiced, "ADMIN")
|
||||
|
||||
If .Columns.Count = 0 Then Exit Sub
|
||||
|
||||
@@ -547,10 +594,19 @@ Public Class frmMessenger
|
||||
|
||||
If CHAT IsNot Nothing Then
|
||||
|
||||
CHAT.LOAD_MESSAGES(topMessages)
|
||||
CHAT.LOAD_MESSAGES_NEW(topMessages)
|
||||
|
||||
' CHAT = New VERAG_PROG_ALLGEMEIN.cMessenger.cMessenger_Chat(dgvChats.SelectedRows(0).Cells("chat_id").Value)
|
||||
Dim newMsg As Boolean = False
|
||||
|
||||
Dim existingIds As New HashSet(Of Integer)
|
||||
|
||||
For Each ctrl In MyFlowLayoutPanel1.Controls
|
||||
existingIds.Add(ctrl.CHAT_MSG.chatMg_id)
|
||||
Next
|
||||
|
||||
|
||||
|
||||
For Each MSG In CHAT.CHAT_MESSAGES
|
||||
Dim found As Boolean = False
|
||||
For Each I In MyFlowLayoutPanel1.Controls
|
||||
@@ -602,6 +658,61 @@ Public Class frmMessenger
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub REFRESH_CHAT_NEW()
|
||||
Try
|
||||
If CHAT Is Nothing Then Exit Sub
|
||||
|
||||
' Load latest messages
|
||||
CHAT.LOAD_MESSAGES_NEW(topMessages)
|
||||
|
||||
' Build fast lookup for existing message IDs
|
||||
Dim existingIds As New HashSet(Of Integer)
|
||||
|
||||
For Each ctrl As Control In MyFlowLayoutPanel1.Controls
|
||||
Select Case ctrl.GetType()
|
||||
Case GetType(usrCntlMessenger_ChatElement)
|
||||
existingIds.Add(DirectCast(ctrl, usrCntlMessenger_ChatElement).CHAT_MSG.chatMg_id)
|
||||
|
||||
Case GetType(usrCntlMessenger_ChatAnhang)
|
||||
existingIds.Add(DirectCast(ctrl, usrCntlMessenger_ChatAnhang).CHAT_MSG.chatMg_id)
|
||||
|
||||
Case GetType(usrCntlMessenger_ChatEmoji)
|
||||
existingIds.Add(DirectCast(ctrl, usrCntlMessenger_ChatEmoji).CHAT_MSG.chatMg_id)
|
||||
|
||||
Case GetType(usrCntlMessenger_ChatElementDEL)
|
||||
existingIds.Add(DirectCast(ctrl, usrCntlMessenger_ChatElementDEL).CHAT_MSG.chatMg_id)
|
||||
End Select
|
||||
Next
|
||||
|
||||
Dim newMessageAdded As Boolean = False
|
||||
|
||||
MyFlowLayoutPanel1.SuspendLayout()
|
||||
|
||||
For Each MSG In CHAT.CHAT_MESSAGES
|
||||
If Not existingIds.Contains(MSG.chatMg_id) Then
|
||||
Dim ctrl = getControlFromMSG(MSG)
|
||||
If ctrl IsNot Nothing Then
|
||||
MyFlowLayoutPanel1.Controls.Add(ctrl)
|
||||
newMessageAdded = True
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
MyFlowLayoutPanel1.ResumeLayout()
|
||||
|
||||
If newMessageAdded Then
|
||||
MyFlowLayoutPanel1.VerticalScroll.Value = MyFlowLayoutPanel1.VerticalScroll.Maximum
|
||||
End If
|
||||
|
||||
checkOnlineOffline()
|
||||
|
||||
Catch ex As Exception
|
||||
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace,
|
||||
System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
'Sub ORDER_CHAT_MSG()
|
||||
' If Not CHECK_CHATMSG_ORDER() Then
|
||||
|
||||
@@ -689,15 +800,16 @@ Public Class frmMessenger
|
||||
MSG.chatMg_maFirma = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
|
||||
|
||||
If MSG.SAVE(True, CHAT.CHAT_MEMBERS) Then
|
||||
SEND_TOKEN_NEW_MESSAGE()
|
||||
' CHAT.CHAT_MESSAGES.Add(MSG)
|
||||
SET_ALL_READ()
|
||||
REFRESH_CHAT()
|
||||
rtbChatMessage.Text = ""
|
||||
rtbChatMessage.Focus()
|
||||
End If
|
||||
|
||||
End If
|
||||
SEND_TOKEN_NEW_MESSAGE()
|
||||
CHAT.CHAT_MESSAGES.Add(MSG)
|
||||
SET_ALL_READ()
|
||||
REFRESH_CHAT_NEW()
|
||||
rtbChatMessage.Text = ""
|
||||
rtbChatMessage.Focus()
|
||||
End If
|
||||
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
@@ -753,13 +865,13 @@ Public Class frmMessenger
|
||||
If CHAT IsNot Nothing And VERAG_PROG_ALLGEMEIN.cMessenger.NEW_MESSGE = True Then
|
||||
VERAG_PROG_ALLGEMEIN.cMessenger.NEW_MESSGE = False
|
||||
' MsgBox("asd")
|
||||
REFRESH_CHAT()
|
||||
REFRESH_CHAT_NEW()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub Timer_REFRESH_Tick(sender As Object, e As EventArgs) Handles Timer_REFRESH.Tick
|
||||
loaded = False
|
||||
REFRESH_CHAT()
|
||||
REFRESH_CHAT_NEW()
|
||||
Dim dgv_ChatID = If(dgvChats.SelectedRows.Count > 0, dgvChats.SelectedRows(0).Cells("chat_id").Value, -1)
|
||||
If checkNewestShit() Then ' prüft, ob neue Nachrichten gekommen sind, sont kein Refresh (stört das scrollen)
|
||||
intiDGVChats(dgv_ChatID, False)
|
||||
@@ -871,7 +983,7 @@ Public Class frmMessenger
|
||||
If dgvChats.Columns.Count > 0 Then
|
||||
|
||||
If e.ColumnIndex = dgvChats.Columns("ungelesen").Index Then
|
||||
If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> "" Then
|
||||
If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> 0 Then ' If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> "" Then
|
||||
dgvChats.Rows(e.RowIndex).Cells("ungelesen").Style.BackColor = Color.Red
|
||||
End If
|
||||
'For Each r As DataGridViewRow In .Rows
|
||||
@@ -946,10 +1058,10 @@ Public Class frmMessenger
|
||||
|
||||
If MSG.SAVE(True, CHAT.CHAT_MEMBERS) Then
|
||||
If reloadChat Then
|
||||
CHAT.CHAT_MESSAGES.Add(MSG)
|
||||
SEND_TOKEN_NEW_MESSAGE()
|
||||
' CHAT.CHAT_MESSAGES.Add(MSG)
|
||||
SET_ALL_READ()
|
||||
REFRESH_CHAT()
|
||||
REFRESH_CHAT_NEW()
|
||||
rtbChatMessage.Text = ""
|
||||
rtbChatMessage.Focus()
|
||||
End If
|
||||
@@ -972,7 +1084,7 @@ Public Class frmMessenger
|
||||
SEND_TOKEN_NEW_MESSAGE()
|
||||
' CHAT.CHAT_MESSAGES.Add(MSG)
|
||||
SET_ALL_READ()
|
||||
REFRESH_CHAT()
|
||||
REFRESH_CHAT_NEW()
|
||||
'rtbChatMessage.Text = filePath
|
||||
'rtbChatMessage.Focus()
|
||||
End If
|
||||
@@ -1155,7 +1267,7 @@ Public Class frmMessenger
|
||||
'CHAT neu laden!
|
||||
SEND_TOKEN_NEW_MESSAGE()
|
||||
SET_ALL_READ()
|
||||
REFRESH_CHAT()
|
||||
REFRESH_CHAT_NEW()
|
||||
rtbChatMessage.Text = ""
|
||||
rtbChatMessage.Focus()
|
||||
End If
|
||||
|
||||
Reference in New Issue
Block a user