Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
                    }
                }
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 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;
 }
        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 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 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;
                    }
                }
            }
        }