Index: TAOR-rework-bugfixing/TAOR rework/LogBestandTextMapper.vb
===================================================================
diff -u -r1620 -r1621
--- TAOR-rework-bugfixing/TAOR rework/LogBestandTextMapper.vb (.../LogBestandTextMapper.vb) (revision 1620)
+++ TAOR-rework-bugfixing/TAOR rework/LogBestandTextMapper.vb (.../LogBestandTextMapper.vb) (revision 1621)
@@ -1,16 +1,24 @@
Imports System.IO
+Imports System.Text.RegularExpressions
Module LogBestandTextMapper
Const AantalLogs As Integer = 5
Dim _busy As Boolean
- Private _currentLogPath As String = ""
- Public ReadOnly Property CurrentLogPath() As String
+ Private _vorigeLogPad = String.Empty
+ Public ReadOnly Property VorigeLogPad() As String
Get
- Return _currentLogPath
+ Return _vorigeLogPad
End Get
End Property
+ Private _huidigeLogPad = String.Empty
+ Public ReadOnly Property HuidigeLogPad() As String
+ Get
+ Return _huidigeLogPad
+ End Get
+ End Property
+
'''
''' Wegschrijven van entry in het logbestand.
'''
@@ -28,7 +36,7 @@
Try
'Stream writer initialiseren met pad naar het log bestand. Tekst wordt niet overschreven, maar toegevoegd.
- Dim streamWriter = My.Computer.FileSystem.OpenTextFileWriter(_currentLogPath, True)
+ Dim streamWriter = My.Computer.FileSystem.OpenTextFileWriter(_huidigeLogPad, True)
'De tekst die wordt weggeschreven opbouwen: datum databank naam status bericht.
Dim logText = String.Format("{0,-23}{1,-10}{3,-13}{2}", Now.ToString("yyyy-MM-dd HH:mm:ss"), databank, logMessage, If(voltooid, "VOLTOOID!", ""))
'Wegschrijven.
@@ -45,9 +53,9 @@
'Hoofding opbouwen.
Dim hoofding = String.Format("{0,-23}{1,-10}{3,-13}{2}", "Datum", "Databank", "Bericht", "Status")
'Nieuw log bestand aanmaken en pad er naartoe opslaan.
- _currentLogPath = MaakNieuweLogFile()
+ _huidigeLogPad = MaakNieuweLogFile()
'Streamwriter initialiseren.
- Dim streamWriter = My.Computer.FileSystem.OpenTextFileWriter(_currentLogPath, False)
+ Dim streamWriter = My.Computer.FileSystem.OpenTextFileWriter(_huidigeLogPad, False)
'Hoofding wegschrijven.
streamWriter.WriteLine(hoofding)
'Stream sluiten.
@@ -57,28 +65,48 @@
End Try
End Sub
- Public Function GeefPathLaatsteLogFile() As String
- 'Variabelen declareren.
- Dim bestandsnaam as String = String.Empty
- Dim laatsteWijzigingTijdstip As Date
+ '''
+ ''' Naam van de vorige log.
+ ''' Als het nieuwe log bestand nog niet is aangemaakt is dit het meest recente. Indien dit wel het geval is, wordt het tweede meest recente log bestand gekozen.
+ '''
+ '''
+ Public Function GeefPadVorigeLog() As String
+ Try
+ 'Nummers en paden opvragen.
+ Dim nummersEnPadenDict = GeefLogNummersEnPaden()
- 'Log map opvragen.
- dim pathLogFolder = GetPathLogFolder()
- 'Alle bestanden hierin overlopen.
- For each fileName in Directory.EnumerateFiles(pathLogFolder)
- 'Pad naar bestand opbouwen.
- dim filePath = Path.Combine(pathLogFolder, fileName)
- 'Tijdstip laatste wijziging.
- dim lastChanged = System.IO.File.GetLastWriteTimeUtc(filePath)
- 'Controleren of de datum van dit bestand recenter is.
- If bestandsnaam is String.Empty OrElse (lastChanged > laatsteWijzigingTijdstip) Then
- 'Zo ja, registreer dit bestand.
- bestandsnaam = fileName
- laatsteWijzigingTijdstip = lastChanged
+ 'Controleren of er wel logs beschikbaar zijn, anders lege string retourneren.
+ If nummersEnPadenDict.Count = 0 Then
+ 'Nog geen logs aanwezig.
+ Return String.Empty
+ ElseIf nummersEnPadenDict.Count = 1 And (Not String.IsNullOrEmpty(_huidigeLogPad)) Then
+ 'Er is een log aanwezig, maar dit is de huidige log.
+ Return String.Empty
End If
- Next
- Return bestandsnaam
+ 'Nummers uit dictionary halen.
+ Dim nummers = nummersEnPadenDict.Keys.ToList()
+
+ 'Log nummers sorteren oud -> nieuw.
+ nummers.Sort()
+
+ 'Nummer van de juiste log.
+ Dim nummerLog As Integer
+
+ 'Kijken of het nieuwe log bestand al is aangemaakt.
+ If String.IsNullOrEmpty(_huidigeLogPad) Then
+ 'Zo ja, retourneer het voorlaatste pad.
+ nummerLog = nummers.Item(nummers.Count - 1)
+ Else
+ 'Zo neen, retourneer laatste pad.
+ nummerLog = nummers.Item(nummers.Count)
+ End If
+
+ 'Pad opvragen uit dictionary en retourneren.
+ Return nummersEnPadenDict.Item(nummerLog)
+ Catch ex As Exception
+ Throw New Exception($"Kon pad naar vorige log niet opvragen.{vbNewLine}{ex.Message}")
+ End Try
End Function
Private Function MaakNieuweLogFile() As String
@@ -107,16 +135,49 @@
Throw New Exception("Er is iets fout gelopen bij het opvragen van het Path voor de log bestanden")
End Function
- Public Function GetPathLogFolder() As String
- 'Opvragen van het pad naar het bureaublad
- Dim logFolderPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
- Dim logfolder As String = "TAOR REWORK LOGS"
- logFolderPath = Path.Combine(logFolderPath, logfolder)
- 'als de folder nog niet bestaat, aanmaken
- If (Not System.IO.Directory.Exists(logFolderPath)) Then
- System.IO.Directory.CreateDirectory(logFolderPath)
+ Private Function GeefLogNummersEnPaden() As Dictionary(Of Integer, String)
+ 'Dictionary initialiseren met als sleutel de nummer en value het pad van de log.
+ Dim nummersEnPadenDict = New Dictionary(Of Integer, String)
+
+ 'Log map opvragen.
+ Dim pathLogFolder = GetPathLogFolder()
+ 'Alle bestanden hierin overlopen en opslaan in lijst.
+ Dim logBestandspaden = Directory.EnumerateFiles(pathLogFolder).ToList()
+
+ 'Controleren of er wel logs beschikbaar zijn, anders lege dictionary retourneren.
+ If logBestandspaden.Count = 0 Then
+ 'Nog geen logs aanwezig.
+ Return nummersEnPadenDict
End If
- Return logFolderPath
+
+ 'Log nummer uit het pad halen.
+
+ 'Dictionary vullen.
+ For Each pad In logBestandspaden
+ 'Laatste nummer nemen, dat nadien niet wordt gevolgd door een nummer.
+ Dim nummer = Regex.Match(pad, "(\d+)(?!.*\d)").Value
+ 'Toevoegen aan dictionary.
+ nummersEnPadenDict.Add(nummer, pad)
+ Next
+
+ 'Opgevulde dictionary retourneren.
+ Return nummersEnPadenDict
End Function
+ Public Function GetPathLogFolder() As String
+ Try
+ 'Opvragen van het pad naar het bureaublad.
+ Dim desktopPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
+ 'Pad naar log folder opbouwen.
+ Dim logFolderPath = Path.Combine(desktopPath, "TAOR REWORK LOGS")
+ 'Als de folder nog niet bestaat, aanmaken.
+ If (Not Directory.Exists(logFolderPath)) Then
+ Directory.CreateDirectory(logFolderPath)
+ End If
+ Return logFolderPath
+ Catch ex As Exception
+ Throw New Exception($"Kon pad van de map met logs niet opvragen of kon map niet aanmaken.{vbNewLine}{ex.Message}")
+ End Try
+ End Function
+
End Module
\ No newline at end of file