/// <summary> /// Aktualisiert einen Auftrag oder legt einen Auftrag neu an. /// </summary> /// <param name="job">Der neue oder veränderte Auftrag.</param> /// <param name="scheduleIdentifier">Die eindeutige Kennung der veränderten Aufzeichnung.</param> public void Update(VCRJob job, Guid?scheduleIdentifier) { // Report if (job != null) { Tools.ExtendedLogging("Updating Job {0}", job.UniqueID); } // Load default profile name job.SetProfile(); // Validate job.Validate(scheduleIdentifier); // Cleanup schedules job.CleanupExceptions(); // Remove from archive - if job has been recovered job.Delete(ArchiveDirectory); // Try to store to disk - actually this is inside the lock because the directory virtually is part of our map lock (m_Jobs) if (job.Save(JobDirectory).GetValueOrDefault()) { m_Jobs[job.UniqueID.Value] = job; } else { throw new ArgumentException(string.Format(Properties.Resources.SaveJobFailed, job.UniqueID), "job"); } }
/// <summary> /// Ermittelt einen Auftrag nach seiner eindeutigen Kennung. /// </summary> /// <param name="jobIdentifier">Die Kennung des Auftrags.</param> /// <returns>Der gewünschte Auftrag oder <i>null</i>, wenn kein derartiger /// Auftrag existiert.</returns> public VCRJob FindJob(Guid jobIdentifier) { // The result VCRJob result = null; // Synchronize lock (m_Jobs) { // Try map if (m_Jobs.TryGetValue(jobIdentifier, out result)) { return(result); } // Create file name var jobFile = new FileInfo(Path.Combine(ArchiveDirectory.FullName, jobIdentifier.ToString("N").ToUpper() + VCRJob.FileSuffix)); if (!jobFile.Exists) { return(null); } // Load result = SerializationTools.Load <VCRJob>(jobFile); if (result == null) { return(null); } } // Check identifier and finalize settings - for pre-3.0 files if (!result.UniqueID.HasValue) { return(null); } if (!jobIdentifier.Equals(result.UniqueID.Value)) { return(null); } // Finish result.SetProfile(); // Found in archive return(result); }