private void btnFindRecordings_Click(object sender, RoutedEventArgs e) { string tabloIPAddress = txtTabloIPAddress.Text; recordings = new ObservableCollection <Recording>(); DoWorkWithModal(progress => { progress.Report(String.Format("Finding recordings on Tablo at IP {0}...", tabloIPAddress)); List <int> foundRecordings = GetRecordingList(tabloIPAddress); progress.Report("Loading metadata for recordings found..."); foreach (var foundRecording in foundRecordings) { RecordingMetadata metadata = GetRecordingMetadata(tabloIPAddress, foundRecording); if (metadata != null) { Recording recording = new Recording(); recording.Id = foundRecording; if (metadata.recEpisode != null) { recording.Type = RecordingType.Episode; recording.Description = String.Format("{0} - S{1}E{2} - {3}", metadata.recSeries.jsonForClient.title, metadata.recEpisode.jsonForClient.seasonNumber.ToString("00"), metadata.recEpisode.jsonForClient.episodeNumber.ToString("00"), metadata.recEpisode.jsonForClient.title); recording.RecordedOnDate = DateTime.Parse(metadata.recEpisode.jsonForClient.airDate); if (metadata.recEpisode.jsonForClient.video.state.ToLower() != "finished") { recording.IsNotFinished = true; } } else if (metadata.recMovie != null) { recording.Type = RecordingType.Movie; recording.Description = String.Format("{0} ({1})", metadata.recMovie.jsonForClient.title, metadata.recMovie.jsonForClient.releaseYear); recording.RecordedOnDate = DateTime.Parse(metadata.recMovieAiring.jsonForClient.airDate); if (metadata.recMovieAiring.jsonForClient.video.state.ToLower() != "finished") { recording.IsNotFinished = true; } } else if (metadata.recSportEvent != null) { recording.Type = RecordingType.Manual; recording.Description = String.Format("{0} - {1}", metadata.recSportOrganization.jsonForClient.title, metadata.recSportEvent.jsonForClient.eventTitle); recording.RecordedOnDate = DateTime.Parse(metadata.recSportEvent.jsonForClient.airDate); if (metadata.recSportEvent.jsonForClient.video.state.ToLower() != "finished") { recording.IsNotFinished = true; } } else if (metadata.recManualProgram != null) { recording.Type = RecordingType.Manual; recording.Description = String.Format("{0}", metadata.recManualProgram.jsonForClient.title); recording.RecordedOnDate = DateTime.Parse(metadata.recManualProgramAiring.jsonForClient.airDate); if (metadata.recManualProgramAiring.jsonForClient.video.state.ToLower() != "finished") { recording.IsNotFinished = true; } } else //If this is not a recognized recording type { continue; // Skip the remainder of this iteration. } recordings.Add(recording); if ((recordings.Count % 20) == 0) { progress.Report(String.Format("{0} recordings found...", recordings.Count)); } } } }); lvRecordingsFound.ItemsSource = recordings; CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lvRecordingsFound.ItemsSource); view.SortDescriptions.Add(new SortDescription("Description", ListSortDirection.Ascending)); }
public async Task <ObservableCollection <Recording> > Find(IProgress <ProgressBarInfo> progressBar, IProgress <string> progressFileCountLabel) { progressFileCountLabel.Report("Initalizing finding recordings..."); await Task.Delay(10); ObservableCollection <Recording> recordings = new ObservableCollection <Recording>(); IMediaNamingConvention mediaNamingConvention = ServiceLocator.Current.GetInstance <IMediaNamingConvention>(); progressFileCountLabel.Report(String.Format("Finding recordings on Tablo at IP {0}...", TabloIPAddress)); List <int> foundRecordings = await GetRecordingList(TabloIPAddress); progressFileCountLabel.Report(String.Format("Found {0} files - getting recording metadata...", foundRecordings.Count())); int foundCount = foundRecordings.Count(); int i = 0; progressBar.Report(new ProgressBarInfo() { Maximum = foundCount, Value = i }); progressFileCountLabel.Report("Loading metadata for recordings found..."); foreach (var foundRecording in foundRecordings) { #region IF DEFs #if TargetSingleRecording if (foundRecording != 611517) { continue; } #endif // TargetSingleRecording #if LimitRecordingsFound if (recordings.Count == 10) { break; } #endif // LimitRecordingsFound #endregion RecordingMetadata metadata = GetRecordingMetadata(TabloIPAddress, foundRecording); if (metadata != null) { if (i % 10 == 0) { progressFileCountLabel.Report(String.Format("Loading metadata for recordings found: {0} of {1}", i, foundCount)); } Recording recording = new Recording() { Id = foundRecording, Metadata = metadata }; if (recording.Metadata.recEpisode != null) { recording.Type = RecordingType.Episode; if (recording.IsS00E00) { recording.Description = mediaNamingConvention.GetS00E00Description(OutputDirectory, recording, recordings); } else { recording.Description = mediaNamingConvention.GetEpisodeDescription(recording); } recording.Plot = recording.Metadata.recEpisode.jsonForClient.description; recording.RecordedOnDate = DateTime.Parse(recording.Metadata.recEpisode.jsonForClient.airDate); if (recording.Metadata.recEpisode.jsonForClient.video.state.ToLower() != "finished") { recording.HasFinishedRecording = false; } } else if (recording.Metadata.recMovie != null) { recording.Type = RecordingType.Movie; recording.Description = mediaNamingConvention.GetMovieDescription(recording); recording.RecordedOnDate = DateTime.Parse(recording.Metadata.recMovieAiring.jsonForClient.airDate); recording.Plot = recording.Metadata.recMovie.jsonForClient.plot; if (recording.Metadata.recMovieAiring.jsonForClient.video.state.ToLower() != "finished") { recording.HasFinishedRecording = false; } } else if (recording.Metadata.recSportEvent != null) { recording.Type = RecordingType.Sports; recording.Description = mediaNamingConvention.GetSportsDescription(recording); recording.RecordedOnDate = DateTime.Parse(recording.Metadata.recSportEvent.jsonForClient.airDate); recording.Plot = recording.Metadata.recSportEvent.jsonForClient.description; if (recording.Metadata.recSportEvent.jsonForClient.video.state.ToLower() != "finished") { recording.HasFinishedRecording = false; } } else if (recording.Metadata.recManualProgram != null) { recording.Type = RecordingType.Manual; recording.Description = mediaNamingConvention.GetManualDescription(recording); recording.RecordedOnDate = DateTime.Parse(recording.Metadata.recManualProgramAiring.jsonForClient.airDate); if (recording.Metadata.recManualProgramAiring.jsonForClient.video.state.ToLower() != "finished") { recording.HasFinishedRecording = false; } } else //If this is not a recognized recording type { continue; // Skip the remainder of this iteration. } recordings.Add(recording); i++; progressBar.Report(new ProgressBarInfo() { Maximum = null, Value = i }); await Task.Delay(10); } } // }); progressFileCountLabel.Report(String.Format("Loading metadata for recordings found: {0}", foundCount)); progressBar.Report(new ProgressBarInfo() { Maximum = null, Value = 0 }); await Task.Delay(10); return(recordings); }