Exemplo n.º 1
0
 /// <summary>
 /// 触发异常的事件
 /// </summary>
 /// <param name="filePath"></param>
 /// <param name="ex"></param>
 protected virtual void FireConvertedEvent()
 {
     try
     {
         if (Converted != null)
         {
             Converted.Invoke(null, null);
         }
     }
     catch (Exception)
     {
         //本demo忽略此异常
         //throw;
     }
 }
Exemplo n.º 2
0
 /// <summary>
 /// 触发转换结果对象
 /// </summary>
 /// <param name="filePath"></param>
 /// <param name="result"></param>
 protected virtual void FireConvertedEvent(String filePath, Boolean result)
 {
     try
     {
         if (Converted != null)
         {
             Converted.Invoke(null, new ConvertedEventArgs()
             {
                 FilePath = filePath,
                 Result   = result
             });
         }
     }
     catch (Exception ex)
     {
         FireExceptionEvent(filePath, ex);
     }
 }
Exemplo n.º 3
0
 /// <summary>
 /// Raises the Converted event and passes the ResultModel to subscribers.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="newResult"></param>
 protected virtual void OnNewResult(object sender, ResultModel newResult)
 {
     Converted?.Invoke(this, newResult);
 }
Exemplo n.º 4
0
        public void Open(string path)
        {
            // Start reading file...
            var lines = ReadLines(path);

            // Find first "#Fields:..." row.
            var marker = lines
                         .SkipWhile(line => line.Text.StartsWith("#") && !line.Text.StartsWith("#Fields:"))
                         .FirstOrDefault();

            // if not found, it's not W3C log file, then open the path with "Open" verb and exit.
            if ((marker.Text?.StartsWith("#Fields:") ?? false) == false)
            {
                Shell.Open(path);
                Exit?.Invoke(this, EventArgs.Empty);
                return;
            }

            // Generate .xlsx path as temporary file.
            var xlsxPath = Path.Combine(Path.GetTempPath(), $"~{Guid.NewGuid():N}.xlsx");

            // Convert from W3C text log file to .xlsx file.
            using (var xlbook = new XLWorkbook())
                using (var xlsheet = xlbook.AddWorksheet("Sheet1"))
                {
                    // Query columns header texts and adjust date & time column.
                    var headers        = marker.Text.Split(' ').Skip(1).ToList();
                    var colIndexOfDate = headers.IndexOf("date");
                    var colIndexOfTime = headers.IndexOf("time");
                    if (colIndexOfDate != -1 && colIndexOfTime != -1)
                    {
                        headers[colIndexOfDate] = "date-time";
                        headers.RemoveAt(colIndexOfTime);
                        xlsheet.Column(colIndexOfDate + 1).Style.NumberFormat.Format = "yyyy/mm/dd hh:mm:ss";
                    }

                    // Build column header on .xlsx
                    using (var headerRow = xlsheet.Row(1))
                        headers.Each((header, index) =>
                        {
                            headerRow.Cell(index + 1).Value = header;
                        });
                    xlsheet.SheetView.FreezeRows(1);
                    xlsheet.RangeUsed().SetAutoFilter();

                    // Enumerate all content lines, and write into .xlsx
                    var prevProgress = 0;
                    lines
                    .Where(line => !line.Text.StartsWith("#"))
                    .Each((line, lineIndex) =>
                    {
                        var newProgress = (int)Math.Ceiling(line.Progress * 100);
                        if (prevProgress != newProgress)
                        {
                            prevProgress = newProgress;
                            Progress?.Invoke(this, new ProgressEventArgs(newProgress));
                        }

                        // Adjust date & time column.
                        var values = line.Text.Split(' ').ToList();
                        if (colIndexOfDate != -1 && colIndexOfTime != -1)
                        {
                            values[colIndexOfDate] += " " + values[colIndexOfTime];
                            values.RemoveAt(colIndexOfTime);
                        }

                        using (var valueRow = xlsheet.Row(lineIndex + 1 + 1))
                            values.Each((value, colIndex) =>
                            {
                                valueRow.Cell(colIndex + 1).Value = value;
                            });
                    });

                    xlsheet.Columns().AdjustToContents(minWidth: 0, maxWidth: 100);

                    xlbook.SaveAs(xlsxPath);
                }

            // Open with "Open" verb for .xlsx file.
            File.SetAttributes(xlsxPath, FileAttributes.ReadOnly);
            Converted?.Invoke(this, EventArgs.Empty);
            var xlapp = Shell.Open(xlsxPath);

            xlapp?.WaitForExit();

            // Sweep .xlsx as temporary file.
            try
            {
                File.SetAttributes(xlsxPath, FileAttributes.Normal);
                File.Delete(xlsxPath);
            }
            catch (Exception) { }

            Exit?.Invoke(this, EventArgs.Empty);
        }