public RecordingResult() { RequestResult = RequestResults.Unset; GeneratedRecordingsBlob = new RPRecordingsBlob(); Completed = false; Success = false; }
// DETERMINE SUCCESS public RecordingResult DetermineIfRequestSucceeded(RPRequest rpRequest) { // Asume failure RecordingResult recResult = new RecordingResult(); recResult.Completed = true; recResult.ErrorMessage = "An unknown error occurred."; Request recRequest = GetRequestWithID(rpRequest.ID); if (recRequest == null) { recResult.RequestResult = RecordingResult.RequestResults.FailedWithError; recResult.ErrorMessage = "Could not re-located the recording request to determine success or failure. It may have succeeded."; return recResult; } // No requested programmes were generated - so report failure and cancel; it's a useless request. if ((recRequest.RequestedPrograms == null) && (!(recRequest is WishListRequest))) // allow a keyword to continue { recResult.RequestResult = RecordingResult.RequestResults.NoProgrammesFound; return recResult; } // Let's compile some stats... // if (recRequest.HasConflictedRequestedPrograms) { DebugNormal("Request has conflicted requested programmes. (only in EPG, there may yet be enough tuners.):"); // We know that only one programme is requested. Are there any recordings at all? bool FoundAnyRequestedProgrammesThatWillRecord = false; int numberOfRequestedProgrammes = 0; int numberOfRequestedProgrammesThatWillRecord = 0; DebugNormal("Enumerating all requested programmes to see which will record:"); foreach (RequestedProgram rprog in recRequest.RequestedPrograms) { numberOfRequestedProgrammes++; DebugNormal("Program: " + rprog.ToString()); // should work DebugNormal("WillRecord: " + rprog.WillRecord); //DebugNormal("IsAssigned: " + rprog.IsAssigned); //DebugNormal("IsRequestFilled: " + rprog.IsRequestFilled); //DebugNormal("IsReal: " + rprog.IsReal); if (rprog.WillRecord) { numberOfRequestedProgrammesThatWillRecord++; FoundAnyRequestedProgrammesThatWillRecord = true; // dont bother checking first to speed up } } // What kind of request? // ******************************** ONE TIME / MANUAL CONFLICTS ******************************** if ( (recRequest is OneTimeRequest) || (recRequest is ManualRequest) ) { if (!FoundAnyRequestedProgrammesThatWillRecord) { // No requested programmes will record... ...this is the end of the line recResult.WereConflicts = true; // not strictly necessary recRequest.Cancel(); recResult.Completed = true; recResult.RequestResult = RecordingResult.RequestResults.Conflicts; return recResult; } } // ******************************** SERIES / WISHLIST CONFLICTS ******************************** if ((recRequest is SeriesRequest) || (recRequest is WishListRequest)) { // if !FoundAnyRequested... Abandon if none will record ? NOT FOR NOW // Conflicts mean nothing, it comes down to what will actually record, so it's possible // that everything is actually okay. Check now: if (numberOfRequestedProgrammesThatWillRecord < numberOfRequestedProgrammes) { // Calculate how many are in conflict and warn user recResult.ConflictInfo = "Out of " + numberOfRequestedProgrammes.ToString() + " shows found, " + (numberOfRequestedProgrammes - numberOfRequestedProgrammesThatWillRecord).ToString() + " will not record as they conflict with existing recordings."; recResult.WereConflicts = true; } // else everything is Okay } } // *********************** SUCCESS ********************************* // RECORDINGS / TV PROGRAMMES List<RPRecording> rprecordings = new List<RPRecording>(); List<TVProgramme> tvprogrammes = new List<TVProgramme>(); // Make a blob RPRecordingsBlob blob = new RPRecordingsBlob(); // Store NEW request in blob. (might have changed since the one that was passed to this method) RPRequest newRequest = Conversion.RPRequestFromRequest(recRequest); blob.RPRequests = new List<RPRequest>() { newRequest }; // Don't store anything else inside the blob here - it's done in the main callback in EPGManager.cs when all recordings are refreshed. // Store the blob inside the record result recResult.GeneratedRecordingsBlob = blob; // Success! (?) recResult.Success = true; recResult.Completed = true; recResult.RequestResult = RecordingResult.RequestResults.OK; // Return the result (to waitHandle etc) return recResult; }
/// <summary> /// Returns a recordings blob object with all recording requests and recordings inside. /// </summary> /// <returns></returns> public static string RecordingsBlobAsXML() { List<RPRequest> allRequests = EPGManager.AllRequests.Values.ToList(); List<RPRecording> allRecordings = EPGManager.AllRecordings.Values.ToList(); // Pull up all the relevant TV programmes that will record too. List<TVProgramme> progsToRecord = new List<TVProgramme>(); foreach (RPRecording rec in allRecordings) { TVProgramme tvp = rec.TVProgramme(); if (tvp != null) progsToRecord.Add(tvp); } RPRecordingsBlob newBlob = new RPRecordingsBlob(allRequests, allRecordings, progsToRecord); return XMLHelper.Serialize<RPRecordingsBlob>(newBlob); }