public async Task AutoLoadJobsAsync() {
try {
if (!Directory.Exists(Settings.TempFilesPath))
Directory.CreateDirectory(Settings.TempFilesPath);
}
catch {
return;
}
var JobList = Directory.EnumerateFiles(Settings.TempFilesPath, "Job*_Settings.xml");
int Index = 0;
MediaEncoderSettings settings;
List<Task> TaskList = new List<Task>();
// Get list of interrupted jobs.
foreach (string item in JobList) {
// Load settings file.
settings = null;
try {
settings = LoadSettingsFile(item);
}
catch { }
// Resume job.
if (int.TryParse(Path.GetFileName(item).Replace("Job", "").Replace("_Settings.xml", ""), out Index)) {
if (Index > JobIndex)
JobIndex = Index;
if (settings != null && File.Exists(settings.InputFile) && File.Exists(settings.ScriptFile) && File.Exists(settings.SettingsFile) && File.Exists(Settings.NaturalGroundingFolder + settings.FileName)) {
if (File.Exists(settings.FinalFile)) {
// Merging was completed.
EncodingCompletedEventArgs EncodeResult = GetEncodingResults(settings, settings.FinalFile, null);
if (EncodeResult != null)
EncodingCompleted(this, EncodeResult);
} else if (File.Exists(settings.OutputFile) && new FileInfo(settings.OutputFile).Length > 0) {
if (!IsFileLocked(settings.OutputFile)) {
// Encoding was completed
EncodingCompletedEventArgs EncodeResult = FinalizeEncoding(settings, null);
if (EncodeResult != null)
EncodingCompleted(this, EncodeResult);
else {
DeleteJobFiles(settings);
}
} else {
// Encoding in progress.
Process JobProcess = Getx264Process();
if (JobProcess != null)
TaskList.Add(WaitEncodeProcessAsync(settings, JobProcess));
}
} else {
// Encoding had not yet started.
File.Delete(settings.OutputFile);
TaskList.Add(StartEncodeFileAsync(settings));
}
} else {
// Resume job failed, delete files.
DeleteJobFiles(settings);
}
}
}
await Task.WhenAll(TaskList);
}