// Spludlow Software // Copyright © Samuel P. Ludlow 2020 All Rights Reserved // Distributed under the terms of the GNU General Public License version 3 // Distributed WITHOUT ANY WARRANTY; without implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE // https://www.spludlow.co.uk/LICENCE.TXT // The Spludlow logo is a registered trademark of Samuel P. Ludlow and may not be used without permission // v1.14 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Data; namespace Spludlow.Printing { public class PrinterHistory { private static DataTable EmptyHistoryTable; static PrinterHistory() { EmptyHistoryTable = Spludlow.Data.TextTable.ReadText(new string[] { "PrintTime Filename Width Height PageCount Description HistoryKey", "DateTime String Single Single Int32 String String", }); } private static DataTable NewTable() { return EmptyHistoryTable.Clone(); } public static void Submit(string printdata) { DateTime printDate = DateTime.Now; string filename = Spludlow.Config.ProgramData + @"\Logs\Print\" + printDate.ToString("yyyy-MM-dd") + ".txt"; //-HH-mm-ss-fff"); PrintDocHeader header = new PrintDocHeader(Spludlow.Text.TakeLine(printdata, 0)); string dataFilename = Spludlow.WebServices.CreateProgramDataTempFilename(".txt"); File.WriteAllText(dataFilename, printdata); DataTable emptytable = NewTable(); DataTable rowsTable = NewTable(); rowsTable.Rows.Add(printDate, dataFilename, header.PageSize.Width, header.PageSize.Height, header.PageCount, header.Description, header.HistoryKey); using (Spludlow.Data.LockedTextTable lockedTable = new Data.LockedTextTable(filename, false, Encoding.UTF8, true, emptytable)) { lockedTable.Table = rowsTable; } } public static void Clear(DateTime beforeDate) { string directory = Spludlow.Config.ProgramData + @"\Logs\Print"; Spludlow.Diagnostics.DeleteFilesWithReport(directory, beforeDate); } public static DataSet Query(string host) { return (DataSet)Spludlow.Call.Now(host, "Spludlow", "Spludlow.Printing.PrinterHistory", "Query"); } public static DataSet Query() { string[] dayFilenames = Directory.GetFiles(Spludlow.Config.ProgramData + @"\Logs\Print", "*.txt"); DataTable table = Spludlow.Data.TextTable.ReadText(new string[] { "Filename FileLength", "String Int64", }); foreach (string dayFilename in dayFilenames) { long length = Spludlow.Io.Files.FileLength(dayFilename); table.Rows.Add(new object[] { dayFilename, length }); } return Spludlow.Data.ADO.WireDataSet(table); } public static DataSet QueryDay(string host, string filename) { return (DataSet)Spludlow.Call.Now(host, "Spludlow", "Spludlow.Printing.PrinterHistory", "QueryDay", new object[] { filename }); } public static DataSet QueryDay(string filename) { DataTable table = Spludlow.Data.TextTable.ReadFile(filename); return Spludlow.Data.ADO.WireDataSet(table); } public static DataSet QueryDay(string host, string filename, int pageIndex, int pageSize) { return (DataSet)Spludlow.Call.Now(host, "Spludlow", "Spludlow.Printing.PrinterHistory", "QueryDay", new object[] { filename, pageIndex, pageSize }); } public static DataSet QueryDay(string filename, int pageIndex, int pageSize) { DataTable table = Spludlow.Data.TextTable.ReadFile(filename); return Spludlow.Data.ADO.PagedQuery(table, null, "PrintTime DESC", pageIndex, pageSize); } public static void RePrint(string filename, string address, string printerType, string printerInfo) { string printData = File.ReadAllText(filename); Printer.PrintAt(address, printData, printerType, printerInfo); } } }