Last active
          December 16, 2021 06:36 
        
      - 
      
 - 
        
Save sytsereitsma/2e415651ba9be237279fa79e7a3f40ff to your computer and use it in GitHub Desktop.  
    Remove all duplicate bug entries from email list
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | Option Explicit | |
| Private Enum deleteReason | |
| DoNotDelete = 0 | |
| userComment = 1 | |
| DuplicateComment = 2 | |
| End Enum | |
| Private Function WordBefore(ByVal str As String, pos As Long) As String | |
| Dim startPos As Long | |
| startPos = pos - 1 | |
| str = UCase(str) | |
| Do While startPos <> 0 | |
| If InStr("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123459789_", Mid(str, startPos, 1)) = 0 Then | |
| Exit Do | |
| Else | |
| startPos = startPos - 1 | |
| End If | |
| Loop | |
| startPos = startPos + 1 | |
| WordBefore = Mid(str, startPos, (pos - startPos)) | |
| End Function | |
| Private Function WordAfter(ByVal str As String, pos As Long, Optional ByVal wordChars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_") As String | |
| Dim endPos As Long | |
| endPos = pos + 1 | |
| Dim strLen As Long | |
| strLen = Len(str) | |
| str = UCase(str) | |
| Do While endPos < strLen | |
| If InStr(wordChars, Mid(str, endPos, 1)) = 0 Then | |
| Exit Do | |
| Else | |
| endPos = endPos + 1 | |
| End If | |
| Loop | |
| If endPos > strLen Then | |
| WordAfter = "" | |
| Else | |
| If endPos = strLen Then | |
| endPos = endPos + 1 | |
| End If | |
| WordAfter = Mid(str, pos + 1, endPos - (pos + 1)) | |
| End If | |
| End Function | |
| Private Function GetBugNumber(ByVal subject As String) As String | |
| Dim bugId As String | |
| Dim firstDash As Long | |
| Dim secondDash As Long | |
| Dim product As String | |
| Dim project As String | |
| Dim bugNumber As String | |
| bugId = "" | |
| firstDash = 0 | |
| secondDash = InStr(subject, "-") | |
| Do While bugId = "" | |
| firstDash = secondDash | |
| secondDash = InStr(firstDash + 1, subject, "-") | |
| If firstDash <> 0 And secondDash <> 0 Then | |
| product = WordBefore(subject, firstDash) | |
| project = WordAfter(subject, firstDash) | |
| If WordBefore(subject, secondDash) = project Then | |
| bugNumber = WordAfter(subject, secondDash, "0123456789") | |
| If bugNumber <> "" Then | |
| bugId = product + "-" + project + "-" + bugNumber | |
| End If | |
| End If | |
| Else | |
| bugId = "" | |
| Exit Do | |
| End If | |
| Loop | |
| Debug.Print bugId + " -> '" + subject + "'" | |
| GetBugNumber = bugId | |
| End Function | |
| Private Function GetUserName(ByRef currentUser As Recipient) As String | |
| Dim sepPos As Integer | |
| sepPos = InStr(currentUser.name, ", ") | |
| If sepPos <> 0 Then | |
| GetUserName = Mid(currentUser.name, sepPos + 2) + " " + Left(currentUser.name, sepPos - 1) | |
| Else | |
| GetUserName = currentUser.name | |
| End If | |
| End Function | |
| Private Function CanDelete(ByRef mail As MailItem, ByRef bugs, ByRef userCommentIntro As String) As deleteReason | |
| Dim bugNumber As String | |
| CanDelete = DoNotDelete | |
| If InStr(mail.Body, userCommentIntro) <> 0 Then | |
| CanDelete = userComment | |
| ElseIf InStr(mail.Body, "Your submission") <> 0 Or InStr(mail.subject, "(Sytse Reitsma)") <> 0 Or InStr(mail.Body, "An action was done by Sytse Reitsma") <> 0 Then | |
| CanDelete = userComment | |
| Else | |
| bugNumber = GetBugNumber(mail.subject) | |
| If bugNumber <> "" Then | |
| If bugs.Contains(bugNumber) Then | |
| CanDelete = DuplicateComment | |
| Else | |
| bugs.Add (bugNumber) | |
| End If | |
| End If | |
| End If | |
| End Function | |
| Private Sub RemoveDuplicatesFolder(ByVal folderName As String, noDelete As Boolean) | |
| Dim objNS As Outlook.NameSpace | |
| Dim objFolder As Outlook.MAPIFolder | |
| Dim deletedCount As Integer | |
| Dim totalCount As Integer | |
| Dim userCommentIntro As String | |
| Dim bugs | |
| Dim i As Integer | |
| Dim canDeleteReason As deleteReason | |
| Set objNS = GetNamespace("MAPI") | |
| Set objFolder = objNS.GetDefaultFolder(olFolderInbox) | |
| Set objFolder = objFolder.Folders(folderName) | |
| userCommentIntro = "An action was done by " + GetUserName(objNS.currentUser) | |
| Set bugs = CreateObject("System.Collections.ArrayList") | |
| deletedCount = 0 | |
| totalCount = objFolder.Items.Count | |
| For i = objFolder.Items.Count To 1 Step -1 | |
| If TypeName(objFolder.Items(i)) = "MailItem" Then | |
| canDeleteReason = CanDelete(objFolder.Items(i), bugs, userCommentIntro) | |
| If canDeleteReason <> DoNotDelete Then | |
| If canDeleteReason = userComment Then Debug.Print "Deleting own comment'" + objFolder.Items(i).subject + "'" | |
| If canDeleteReason = DuplicateComment Then Debug.Print "Deleting duplicate'" + objFolder.Items(i).subject + "'" | |
| If Not noDelete Then objFolder.Items(i).Delete | |
| deletedCount = deletedCount + 1 | |
| End If | |
| End If | |
| Next | |
| MsgBox folderName + ": Deleted " + CStr(deletedCount) + " of " + CStr(totalCount) + " messages." | |
| End Sub | |
| Sub RemoveDuplicates() | |
| RemoveDuplicatesFolder "Bugs", False | |
| RemoveDuplicatesFolder "Azure", False | |
| End Sub | |
| Private Sub FooTheBar() | |
| Debug.Print GetBugNumber("[EXTERNAL] [Build succeeded] MoogNV-Jenkins-SimAndTest - SimAndTest:features/TestController/hpu_improvements - MoogNV - 62cd76bd") | |
| End Sub | 
Option Explicit
Private Enum deleteReason
 DoNotDelete = 0
 DuplicateComment = 2
End Enum
Private Function GetPRNumber(ByVal subject As String) As String
    Dim prStartIndex As Long
    Dim prEndIndex As Long
    
    Const prHeader As String = "Pull request #"
    'THK/SocketBoard - Pull request #358: AHWP-2173: Use hardware PWM for CP signal
    prStartIndex = InStr(subject, prHeader)
    GetPRNumber = ""
    If prStartIndex <> 0 Then
        prStartIndex = prStartIndex + Len(prHeader)
        prEndIndex = InStr(prStartIndex + 1, subject, ":")
        If prEndIndex <> 0 Then
            GetPRNumber = Mid(subject, prStartIndex, prEndIndex)
        End If
    End If
    Debug.Print GetPRNumber; " <= " + subject
End Function
Private Function GetJiraTicket(ByVal subject As String) As String
    Dim startIndex As Long
    Dim endIndex As Long
    
    Const header As String = "[JIRA] ("
    '[JIRA] (AHWP-2540) Create an "es" console command for Eventbus Stats
    startIndex = InStr(subject, header)
    GetJiraTicket = ""
    If startIndex <> 0 Then
        startIndex = startIndex + Len(header)
        endIndex = InStr(startIndex + 1, subject, ")")
        If endIndex <> 0 Then
            GetJiraTicket = Mid(subject, startIndex, endIndex)
        End If
    End If
    Debug.Print GetJiraTicket; " <= " + subject
End Function
Private Function GetUserName(ByRef currentUser As Recipient) As String
    Dim sepPos As Integer
    
    sepPos = InStr(currentUser.Name, ", ")
    If sepPos <> 0 Then
        GetUserName = Mid(currentUser.Name, sepPos + 2) + " " + Left(currentUser.Name, sepPos - 1)
    Else
        GetUserName = currentUser.Name
    End If
End Function
Private Function CanDelete(ByRef mail As MailItem, ByRef prIds) As deleteReason
    Dim prNumber As String
    Dim jiraTicket As String
    
    CanDelete = DoNotDelete
    
    prNumber = GetPRNumber(mail.subject)
    If prNumber <> "" Then
        If prIds.Contains(prNumber) Then
            CanDelete = DuplicateComment
        Else
            prIds.Add (prNumber)
        End If
    Else
        jiraTicket = GetJiraTicket(mail.subject)
        If jiraTicket <> "" Then
            If prIds.Contains(jiraTicket) Then
                CanDelete = DuplicateComment
            Else
                prIds.Add (jiraTicket)
            End If
        End If
    End If
End Function
Private Sub RemoveDuplicateTicketMailsFromFolder(ByVal folderName As String, noDelete As Boolean)
    Dim objNS As Outlook.NameSpace
    Dim objFolder As Outlook.MAPIFolder
    Dim deletedCount As Integer
    Dim totalCount As Integer
    Dim prIds
    Dim i As Integer
    Dim canDeleteReason As deleteReason
    
    
    Set objNS = GetNamespace("MAPI")
    Set objFolder = objNS.GetDefaultFolder(olFolderInbox)
    Set objFolder = objFolder.Folders(folderName)
    Set prIds = CreateObject("System.Collections.ArrayList")
    
    deletedCount = 0
    totalCount = objFolder.Items.Count
    For i = objFolder.Items.Count To 1 Step -1
        If TypeName(objFolder.Items(i)) = "MailItem" Then
            canDeleteReason = CanDelete(objFolder.Items(i), prIds)
            If canDeleteReason <> DoNotDelete Then
                If canDeleteReason = DuplicateComment Then Debug.Print "Deleting duplicate'" + objFolder.Items(i).subject + "'"
                If Not noDelete Then objFolder.Items(i).Delete
                deletedCount = deletedCount + 1
            End If
        End If
    Next
    
    MsgBox folderName + ": Deleted " + CStr(deletedCount) + " of " + CStr(totalCount) + " messages."
End Sub
Private Sub RemoveDuplicateConfluenceMails(noDelete As Boolean)
    Dim objNS As Outlook.NameSpace
    Dim objFolder As Outlook.MAPIFolder
    Dim deletedCount As Integer
    Dim totalCount As Integer
    Dim subjects
    Dim i As Integer
    Dim canDeleteReason As deleteReason
    
    
    Set objNS = GetNamespace("MAPI")
    Set objFolder = objNS.GetDefaultFolder(olFolderInbox)
    Set objFolder = objFolder.Folders("Confluence")
    Set subjects = CreateObject("System.Collections.ArrayList")
    
    deletedCount = 0
    totalCount = objFolder.Items.Count
    For i = objFolder.Items.Count To 1 Step -1
        If TypeName(objFolder.Items(i)) = "MailItem" Then
            If subjects.Contains(objFolder.Items(i).subject) Then
                If Not noDelete Then objFolder.Items(i).Delete
                deletedCount = deletedCount + 1
            Else
                subjects.Add (objFolder.Items(i).subject)
            End If
        End If
    Next
    
    MsgBox "Confluence: Deleted " + CStr(deletedCount) + " of " + CStr(totalCount) + " messages."
End Sub
Sub RemoveDuplicates()
    RemoveDuplicateTicketMailsFromFolder "Git", False
    RemoveDuplicateTicketMailsFromFolder "JIRA", False
    RemoveDuplicateConfluenceMails False
End Sub
    
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment
  
            
Added filter for user coments