aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/IPPCModule.cs
blob: cd328fabde8e5a17dcb4da9dbd32e8eaad0d775d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media.Imaging;
using Tango.BL.Entities;
using Tango.BL.Enumerations;

namespace Tango.PPC.Common
{
    /// <summary>
    /// Represents a PCC module.
    /// </summary>
    /// <seealso cref="System.IDisposable" />
    public interface IPPCModule : IDisposable
    {
        /// <summary>
        /// Gets the module name.
        /// </summary>
        String Name { get; }

        /// <summary>
        /// Gets the module description.
        /// </summary>
        String Description { get; }

        /// <summary>
        /// Gets the module cover image.
        /// </summary>
        BitmapSource Image { get; }

        /// <summary>
        /// Gets the module entry point view type.
        /// </summary>
        Type MainViewType { get; }

        /// <summary>
        /// Gets the permission required to see and load this module.
        /// </summary>
        Permissions Permission { get; }

        /// <summary>
        /// Gets a value indicating whether this module should be displayed in the application menu.
        /// </summary>
        bool IsVisibleInMenu { get; }

        /// <summary>
        /// Gets a value indicating whether to dock this module menu item to the bottom.
        /// </summary>
        bool DockToBottom { get; }

        /// <summary>
        /// Called when the application has entered the technician mode.
        /// </summary>
        void OnTechnicianEntered();

        /// <summary>
        /// Called when the application has exited the technician mode.
        /// </summary>
        void OnTechnicianExited();
    }
}
="n">LogFile))) { try { String dateString = Path.GetFileNameWithoutExtension(file).Replace($"{logger.Tag}-", ""); int indexPos = dateString.IndexOf(FileLogger.FILE_SET_EXTENSION); int indexOfFile = 0; if (indexPos > 0) { string fileNameIndex = dateString.Substring(indexPos + FileLogger.FILE_SET_EXTENSION.Length); int.TryParse(fileNameIndex, out indexOfFile); dateString = dateString.Substring(0, indexPos); } if (!dateStrings.Contains(dateString)) { dateStrings.Add(dateString); DateTime date = DateTime.ParseExact(dateString, "dd-MM-yyyy_HH-mm-ss", CultureInfo.InvariantCulture); logFiles.Add(new LogFile() { DateTime = date, File = file, PartOfSet = indexOfFile > 0, }); } } catch (Exception ex) { LogManager.Default.Log(ex, $"Could not load application log file {Path.GetFileName(file)}"); } } return logFiles; } public List<LogItemBase> Parse(LogFile logFile) { List<LogItemBase> logItems = new List<LogItemBase>(); List<LogFile> logFiles = new List<LogFile>(); FileLogger logger = LogManager.Default.RegisteredLoggers.FirstOrDefault(x => x.GetType() == typeof(FileLogger)) as FileLogger; if (logFile.PartOfSet) { string fileName = Path.GetFileNameWithoutExtension(logFile.File); string extension = Path.GetExtension(logFile.File); int indexPos = fileName.IndexOf(FileLogger.FILE_SET_EXTENSION); if (indexPos > 0) { fileName = fileName.Substring(0, indexPos); } string[] fileEntries = Directory.GetFiles(FileLogger.DefaultLogsFolder, $"{fileName}*{extension}").Where(x => Path.GetFileName(x).StartsWith(logger.Tag) && x != logger.LogFile).OrderBy(x => x).ToArray(); foreach (var file in fileEntries) { Parse(file, logFile.DateTime, ref logItems); } } else { Parse(logFile.File, logFile.DateTime, ref logItems); } return logItems; } public List<LogItemBase> Parse(String file, DateTime fileDate) { List<LogItemBase> logs = new List<LogItemBase>(); Parse(file, fileDate, ref logs); return logs; } private void Parse(string file, DateTime datetime, ref List<LogItemBase> logItems) { if(File.Exists(file)) { String text = File.ReadAllText(file); var logs = Regex.Split(text, @"(\[\d{2}:\d{2}:\d{2}.\d{2}\])"); for (int i = 1; i < logs.Length; i += 2) { try { DateTime date = DateTime.ParseExact(logs[i].Replace("[", "").Replace("]", ""), "HH:mm:ss.ff", CultureInfo.InvariantCulture); String rest = logs[i + 1]; var matches = Regex.Matches(rest, @"(?<=\[)(.*?)(?=\])"); MessageLogItem item = new MessageLogItem(); item.TimeStamp = new DateTime(datetime.Year, datetime.Month, datetime.Day, date.Hour, date.Minute, date.Second, date.Millisecond); item.Category = (LogCategory)Enum.Parse(typeof(LogCategory), matches[0].ToString()); item.CallerFile = matches[1].ToString(); item.CallerMethodName = matches[2].ToString(); item.CallerLineNumber = int.Parse(matches[3].ToString()); int messageStartIndex = matches[3].Index + matches[3].Length + 2; item.Message = rest.Substring(messageStartIndex, rest.Length - messageStartIndex); logItems.Add(item); } catch (Exception ex) { LogManager.Default.Log(ex, "Could not parse log line: " + logs[i]); } } } } } }