예제 #1
0
        /// <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");
                }
        }
예제 #2
0
        /// <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);
        }