private Channel ResolveMediaPortalChannel(SynchronizeRecordingsContext context, string channelName) { Channel tvChannel; string channelKey = channelName.ToLowerInvariant(); if (!_mediaPortalChannels.ContainsKey(channelKey)) { tvChannel = new Channel(); tvChannel.ChannelId = Guid.NewGuid(); tvChannel.DisplayName = channelName; foreach (RecordingSummary recording in context.AllRecordings) { if (channelName.Equals(recording.ChannelDisplayName, StringComparison.CurrentCultureIgnoreCase)) { tvChannel.ChannelId = recording.ChannelId; tvChannel.DisplayName = recording.ChannelDisplayName; break; } } _mediaPortalChannels.Add(channelKey, tvChannel); } else { tvChannel = _mediaPortalChannels[channelKey]; } return(tvChannel); }
private void GetAndProcessRecordings(SynchronizeRecordingsContext context, ChannelType channelType) { var groups = Proxies.ControlService.GetAllRecordingGroups(channelType, RecordingGroupMode.GroupBySchedule).Result; foreach (RecordingGroup group in groups) { var recordings = Proxies.ControlService.GetRecordingsForSchedule(group.ScheduleId, includeNonExisting: true).Result; foreach (RecordingSummary recording in recordings) { if (!context.ContainsRecording(recording)) { if (context.AddRecording(recording)) { if (!File.Exists(recording.RecordingFileName)) { context.MissingRecordings.Add(recording); } } } if (_processingBackgroundWorker.CancellationPending) { break; } } } }
private void _processingBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { SynchronizeRecordingsContext context = e.Argument as SynchronizeRecordingsContext; context.ClearFoundRecordings(); foreach (string folder in context.RecordingFolders) { ScanDirectory(context, folder); } }
private void ImportRecording(SynchronizeRecordingsContext context, string recordingFileName) { Recording recording = Utility.GetRecordingMetadata(recordingFileName); if (recording == null) { recording = new Recording(); recording.ScheduleId = _importGuid; recording.ScheduleName = _importName; recording.ChannelId = _unknownChannelGuid; recording.ChannelDisplayName = _unknownChannelName; recording.RecordingStartTime = File.GetCreationTime(recordingFileName); recording.RecordingStartTimeUtc = recording.RecordingStartTime.ToUniversalTime(); recording.RecordingStopTime = recording.RecordingStartTime; recording.RecordingStopTimeUtc = recording.RecordingStartTimeUtc; recording.ProgramStartTime = recording.RecordingStartTime; recording.ProgramStartTimeUtc = recording.RecordingStartTimeUtc; recording.ProgramStopTime = recording.RecordingStartTime; recording.ProgramStopTimeUtc = recording.RecordingStartTimeUtc; recording.Title = Path.GetFileNameWithoutExtension(recordingFileName); recording.RecordingFileName = recordingFileName; try { // Try the MediaPortal xml format using (StreamReader mpReader = new StreamReader(Path.Combine(Path.GetDirectoryName(recordingFileName), Path.GetFileNameWithoutExtension(recordingFileName) + ".xml"))) using (XmlTextReader mpXmlReader = new XmlTextReader(mpReader)) { mpXmlReader.Namespaces = false; MPTags tags = (MPTags)_mediaPortalTagsSerializer.Deserialize(mpXmlReader); recording.Title = tags.GetValue("TITLE", recording.Title); recording.Description = tags.GetValue("COMMENT", recording.Title); recording.Category = tags.GetValue("GENRE", recording.Title); string channelName = tags.GetValue("CHANNEL_NAME", null); if (channelName != null) { Channel tvChannel = ResolveMediaPortalChannel(context, channelName); recording.ChannelId = tvChannel.ChannelId; recording.ChannelDisplayName = tvChannel.DisplayName; } } } catch { } context.AddFoundRecording(recording, false); } else { recording.RecordingFileName = recordingFileName; context.AddFoundRecording(recording, true); } }
private void _processingBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { DateTime startTime = DateTime.Now; SynchronizeRecordingsContext context = e.Argument as SynchronizeRecordingsContext; context.ClearRecordings(); context.MissingRecordings.Clear(); GetAndProcessRecordings(context, ChannelType.Television); GetAndProcessRecordings(context, ChannelType.Radio); Utility.EnsureMinimumTime(startTime, 250); }
private void ScanDirectory(SynchronizeRecordingsContext context, string folder) { try { if (!_processingBackgroundWorker.CancellationPending && Directory.Exists(folder)) { DirectoryInfo dirInfo = new DirectoryInfo(folder); foreach (DirectoryInfo subDirInfo in dirInfo.GetDirectories()) { ScanDirectory(context, subDirInfo.FullName); } foreach (FileInfo fileInfo in dirInfo.GetFiles()) { foreach (string extension in _extensions) { if (fileInfo.Name.EndsWith(extension, StringComparison.CurrentCultureIgnoreCase)) { if (!context.ContainsRecording(fileInfo.FullName)) { ImportRecording(context, fileInfo.FullName); break; } } if (_processingBackgroundWorker.CancellationPending) { break; } } } } } catch { // In case of an error, simply skip this directory. } }
private Channel ResolveMediaPortalChannel(SynchronizeRecordingsContext context, string channelName) { Channel tvChannel; string channelKey = channelName.ToLowerInvariant(); if (!_mediaPortalChannels.ContainsKey(channelKey)) { tvChannel = new Channel(); tvChannel.ChannelId = Guid.NewGuid(); tvChannel.DisplayName = channelName; foreach (RecordingSummary recording in context.AllRecordings) { if (channelName.Equals(recording.ChannelDisplayName, StringComparison.CurrentCultureIgnoreCase)) { tvChannel.ChannelId = recording.ChannelId; tvChannel.DisplayName = recording.ChannelDisplayName; break; } } _mediaPortalChannels.Add(channelKey, tvChannel); } else { tvChannel = _mediaPortalChannels[channelKey]; } return tvChannel; }