static void PopulateDefaultsIfUnset(ref RecordingRequest rr) { if (rr.Quality == -1) { rr.Quality = Settings.Default.DefaultQuality; } if (rr.KeepUntil == KeepUntilTypes.NotSet) { rr.KeepUntil = (KeepUntilTypes)Settings.Default.DefaultKeepUntil; } if (rr.KeepUntil == KeepUntilTypes.LatestEpisodes) { if (rr.KeepNumberOfEpisodes < 1) { rr.KeepNumberOfEpisodes = Settings.Default.DefaultKeepNumberOfEpisodes; } } if (rr.Postpadding == 0) { rr.Postpadding = Convert.ToInt32(Settings.Default.DefaultPostPadding); } if (rr.Prepadding == 0) { rr.Prepadding = Convert.ToInt32(Settings.Default.DefaultPrePadding); } }
public static string AddToQueue(RecordingRequest rr) { int newID = idCounter++; RQueue.Add(newID, rr); return(newID.ToString()); }
public static bool ExtractFromQueue(int id, ref RecordingRequest rr) { if (!RQueue.ContainsKey(id)) { return(false); } rr = RQueue[id]; return(true); }
static void Main3(string[] args) { // Attach to job manager VCRServer server = new VCRServer(new DirectoryInfo(@"C:\temp\VCR.NET 3.9 Alpha\Jobs")); JobManager jobs = server.JobManager; // Get the profile Profile nexus = VCRProfiles.FindProfile("Nexus"); // Find the next recording VCRRecordingInfo rec = jobs.FindNextJob(new DateTime(2009, 2, 19, 20, 0, 0), null, nexus); if (null != rec) { if (rec.StartsAt.HasValue) { using (RecordingRequest recording = jobs.CreateRecording(rec, rec.StartsAt.Value, nexus)) { // Get the information FullInfo info0 = recording.CreateFullInformation(); // Start it recording.BeginExecute(false); // Report Console.WriteLine("Recording..."); Console.ReadLine(); // Get the information FullInfo info1 = recording.CreateFullInformation(); } } } // Done Console.WriteLine("Done"); Console.ReadLine(); }
// Schedule Recordings /// <summary> /// Schedule a recording - this examines the request and populates Service ID, etc. /// The MCDATA.Schedule... method should never be called directly outside this method /// </summary> public static RecordingResult ScheduleRecording(RecordingRequest rr) { // Populate defaults, e.g. quality, if not set PopulateDefaultsIfUnset(ref rr); RecordingResult failedResult = new RecordingResult(); failedResult.Completed = false; if (rr.RequestType != RecordingRequestType.Manual) // manual recordings already have a service ID specified { if (rr.TVProgrammeID < 1) { failedResult.ErrorMessage = "No TV Programme ID was specified."; return(failedResult); } // Populate the Service ID if not already populated TVProgramme tvp = mcData.GetTVProgramme(rr.TVProgrammeID.ToString()); if (tvp == null) { failedResult.ErrorMessage = "No TV Programme with the specified ID could be found."; return(failedResult); } rr.ServiceID = long.Parse(tvp.ServiceID); // could fail } // Get the channel ID from the service ID TVService tvs = TVServiceWithIDOrNull(rr.ServiceID.ToString()); if (tvs == null) { failedResult.ErrorMessage = "No TV Channel with the retrieved ID could be found."; return(failedResult); } rr.MCChannelID = tvs.MCChannelID; // ************** SCHEDULE THE RECORDING ************************ RPRequest generatedRequest; RecordingResult earlyRecResult; if (!mcData.ScheduleRecording(rr, out generatedRequest, out earlyRecResult)) { bool debug2 = (Settings.Default.DebugAdvanced); Functions.WriteLineToLogFileIfSetting(debug2, "Failed already - return the early result"); return(earlyRecResult); } RecordingResult recResult = mcData.DetermineRecordingResultForRequest(generatedRequest); bool debug = (Settings.Default.DebugAdvanced); Functions.WriteLineToLogFileIfSetting(debug, "recResult.Success=" + recResult.Success); // Success? if (recResult.Success) { // Wait a moment so Scheduler can catch up and associate our request with our recordings... System.Threading.Thread.Sleep(600); Functions.WriteLineToLogFileIfSetting(debug, "// Now refresh and get the generated recordings..."); EPGManager.ReloadAllRecordings(); try { RPRequest req = recResult.GeneratedRecordingsBlob.RPRequests[0]; Functions.WriteLineToLogFileIfSetting(debug, "req.Title=" + req.Title); // Add recordings recResult.GeneratedRecordingsBlob.RPRecordings = req.Recordings(); Functions.WriteLineToLogFileIfSetting(debug, "recordings added"); // Add programs linked to these recordings foreach (RPRecording rec in recResult.GeneratedRecordingsBlob.RPRecordings) { TVProgramme tvp = rec.TVProgramme(); if (tvp != null) { recResult.GeneratedRecordingsBlob.TVProgrammes.Add(tvp); Functions.WriteLineToLogFileIfSetting(debug, tvp.Filename + " added"); } } } catch (Exception ex) { Functions.WriteLineToLogFile("ScheduleRecording(): Error retrieving recordings:"); Functions.WriteExceptionToLogFile(ex); recResult.Success = false; recResult.ErrorMessage = "Exception occured while retrieving recordings - the recording may have been scheduled."; } } return(recResult); }
static void Main1(string[] args) { // Attach to job manager VCRServer server = new VCRServer(new DirectoryInfo(@"C:\temp\VCR.NET 3.9 Alpha\Jobs")); JobManager jobs = server.JobManager; // Process all profiles foreach (Profile profile in VCRProfiles.Profiles) { // Report Console.WriteLine(profile.Name); // Start time DateTime start = DateTime.UtcNow; // Process a bit for (int i = 10; i-- > 0;) { // Helper data VCRRecordingInfo[] included; bool inComplete; // Find the recording FullInfo info = jobs.FindNextRecording(start, profile, out inComplete, out included); VCRRecordingInfo rec = info.Recording; VCRJob job = jobs[rec.JobUniqueID.Value]; VCRSchedule sched = job[rec.ScheduleUniqueID.Value]; // Report Console.WriteLine("\t{0} {1} {2} ({3}) {4} {5} {6} {7}", rec.StartsAt.Value.ToLocalTime(), rec.EndsAt.ToLocalTime().TimeOfDay, job.Name, sched.Name, inComplete, included.Length, rec.JobUniqueID, rec.ScheduleUniqueID); // Report foreach (VCRRecordingInfo include in included) { Console.WriteLine("\t\t{0} {1} {2} {3} {4}", include.Source.GetUniqueName(), include.StartsAt.Value.ToLocalTime(), include.EndsAt.ToLocalTime().TimeOfDay, include.JobUniqueID, include.ScheduleUniqueID); } // Report foreach (StreamInfo stream in info.Streams) { foreach (ScheduleInfo schedule in stream.Schedules) { Console.WriteLine("\t\t{0} {1} {2} {3}", schedule.JobUniqueID, schedule.ScheduleUniqueID, schedule.StartsAt.ToLocalTime(), schedule.EndsAt.ToLocalTime().TimeOfDay); } } // Advance start = rec.EndsAt; } // Helper data VCRRecordingInfo[] incDummy; bool dummyFlag; // Start timer Stopwatch timer = Stopwatch.StartNew(); // Measure for (int n = 0; ++n > 0;) { // Find the recording jobs.FindNextRecording(DateTime.UtcNow, profile, out dummyFlag, out incDummy); // Get the time TimeSpan delta = timer.Elapsed; if (delta.TotalSeconds >= 5) { // Report Console.WriteLine("{0}ms", delta.TotalMilliseconds / n); // Done break; } } } // Get the profile Profile nexus = VCRProfiles.FindProfile("Nexus"); // Find the next recording VCRRecordingInfo rec2 = jobs.FindNextJob(new DateTime(2009, 2, 19, 20, 0, 0), null, nexus); if (null != rec2) { if (rec2.StartsAt.HasValue) { using (RecordingRequest recording = jobs.CreateRecording(rec2, rec2.StartsAt.Value, nexus)) { // Get the information FullInfo info0 = recording.CreateFullInformation(); #if EXEC // Start it recording.BeginExecute(false); // Report Console.WriteLine("Recording..."); Console.ReadLine(); // Get the information FullInfo info1 = recording.CreateFullInformation(); #endif } } } // Done Console.WriteLine("Done"); Console.ReadLine(); }