using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace crusherScanner
{
internal class WorkingDirControl
{
///
/// Update sample as scanned in the working directory.
///
/// Sample data containing Job and Barcode.
public static void UpdateWorkingDir(System.ComponentModel.DoWorkEventArgs e)
{
if (e.Argument == null)
{
return;
}
Scan scanData = (Scan)e.Argument;
string[] DataDirs = new string[2] { Properties.Settings.Default.OreDefWorkFile, Properties.Settings.Default.OreDefInFile };
string? JobFile = GetJobFilePath(scanData, DataDirs);
if (JobFile != null)
{
if (JobFile.Contains(DataDirs[0]))
{
scanData = updateSampleInJobFile(scanData, JobFile);
}
else
{
try
{
File.Move($"{DataDirs[1]}\\{scanData.sampleData.Job}.csv", $"{DataDirs[0]}\\{scanData.sampleData.Job}.csv");
scanData = updateSampleInJobFile(scanData, $"{DataDirs[0]}\\{scanData.sampleData.Job}.csv");
}
catch (Exception)
{
}
}
e.Result = scanData;
}
else
{
e.Result = scanData; // This shouldn't happen.
}
}
///
/// Is the currently scanned sample's job in the working directory.
///
/// Sample data containing Job and Barcode.
///
private static string? GetJobFilePath(Scan scanData,string[] DataDirs)
{
try
{
foreach (var DataDir in DataDirs)
{
if (Directory.Exists(DataDir))
{
var jobFiles = Directory.EnumerateFiles(DataDir, "ML??????.csv", SearchOption.TopDirectoryOnly);
foreach (var jobFile in jobFiles)
{
if (jobFile.Contains(scanData.sampleData.Job))
{
return jobFile;
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("An error occurred." + Environment.NewLine + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return null;
}
private static Scan updateSampleInJobFile(Scan scanData, string DataFile)
{
List fileLines = new();
using FileStream OreDefWorkingFile = new(DataFile, FileMode.Open, System.IO.FileAccess.ReadWrite, FileShare.None);
{
using StreamReader Reader = new(OreDefWorkingFile);
{
var line = Reader.ReadLine();
while (line != null)
{
if (line != null && line.Contains('\u002C'))
{
scanData.JobTotal++;
string[] CSV = line.Split('\u002C');
if(CSV[0] == scanData.sampleData.Sid)
{
CSV[8] = scanData.sampleData.Sid;
fileLines.Add(string.Join('\u002C', CSV));
}
else
{
fileLines.Add(line);
}
// Count if sample has been scanned already
if(CSV[8] != "")
{
scanData.JobCount++;
}
// set CSV to null to prevent data roll over
CSV = null;
}
line = Reader.ReadLine();
}
}
OreDefWorkingFile.Position = 0;
using StreamWriter writer = new(OreDefWorkingFile);
{
foreach (var line in fileLines)
{
writer.WriteLine(line);
}
}
writer.Close();
}
scanData.JobCount--; // Compensate for the file header
scanData.JobTotal--; // Compensate for the file header
return scanData;
}
}
}