private void DeleteAllDownloads_Click(object sender, EventArgs e) { if (MessageBox.Show("Are you sure you want to delete all downloaded episodes in this subscription?", "Delete?", MessageBoxButton.OKCancel) == MessageBoxResult.OK) { List <PodcastEpisodeModel> episodes = null; using (var db = new PodcastSqlModel()) { episodes = db.episodesForSubscription(m_subscription); foreach (PodcastEpisodeModel episode in episodes) { if (episode.EpisodeDownloadState == PodcastEpisodeModel.EpisodeDownloadStateEnum.Downloaded) { episode.deleteDownloadedEpisode(); PodcastSubscriptionsManager.getInstance().removedPlayableEpisode(episode); } } } using (var db = new PodcastSqlModel()) { m_subscription = db.subscriptionModelForIndex(m_podcastId); } } this.DataContext = m_subscription; this.EpisodeList.ItemsSource = m_subscription.EpisodesPublishedDescending; }
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs naviArgs) { this.DownloadButton.Visibility = System.Windows.Visibility.Collapsed; try { int podcastEpisodeId = int.Parse(NavigationContext.QueryString["episodeId"]); using (var db = new PodcastSqlModel()) { m_podcastEpisode = db.episodeForEpisodeId(podcastEpisodeId); if (m_podcastEpisode != null) { this.DataContext = m_podcastEpisode; if (m_podcastEpisode.isPlayable() && String.IsNullOrEmpty(m_podcastEpisode.EpisodeFile)) { this.DownloadButton.Visibility = System.Windows.Visibility.Visible; } } else { Debug.WriteLine("Episode model is null. Cannot show description."); } } } catch (Exception e) { Debug.WriteLine("Cannot get episode id. Error: " + e.Message); } }
private List <PodcastEpisodeModel> createPlayHistory() { List <PodcastEpisodeModel> playHistory = new List <PodcastEpisodeModel>(); using (var db = new PodcastSqlModel()) { var query = from LastPlayedEpisodeModel e in db.PlayHistory orderby e.TimeStamp descending select e; int itemsCount = 0; foreach (LastPlayedEpisodeModel e in query) { PodcastEpisodeModel episode = db.episodeForEpisodeId(e.LastPlayedEpisodeId); if (episode == null) { Debug.WriteLine("Got NULL episode for play history. This probably means the subscription has been deleted."); continue; } playHistory.Add(episode); itemsCount++; if (itemsCount >= 4) { break; } } return(playHistory); } }
private void MarkAllListened_Click(object sender, EventArgs e) { if (MessageBox.Show("Are you sure you want to mark all episodes as listened?", "Are you sure?", MessageBoxButton.OKCancel) == MessageBoxResult.OK) { List <PodcastEpisodeModel> episodes = null; using (var db = new PodcastSqlModel()) { episodes = db.episodesForSubscription(m_subscription); foreach (PodcastEpisodeModel episode in episodes) { episode.markAsListened(m_cleanListenedEpisodesAutomatically); } db.SubmitChanges(); PodcastSubscriptionsManager.getInstance().podcastPlaystateChanged(m_subscription); m_subscription = db.subscriptionModelForIndex(m_podcastId); } this.DataContext = m_subscription; this.EpisodeList.ItemsSource = m_subscription.EpisodesPublishedDescending; App.showNotificationToast("All episodes marked as listened."); } }
public void updatePinnedInformation() { // Store information about the subscription for the background agent. IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; String subscriptionLatestEpisodeKey = App.LSKEY_BG_SUBSCRIPTION_LATEST_EPISODE + m_subscriptionModel.PodcastId; if (settings.Contains(subscriptionLatestEpisodeKey) == false) { return; } else { settings.Remove(subscriptionLatestEpisodeKey); } DateTime newestEpisodeTimestamp; using (var db = new PodcastSqlModel()) { newestEpisodeTimestamp = db.episodesForSubscription(m_subscriptionModel)[0].EpisodePublished; } String subscriptionData = String.Format("{0}|{1}|{2}", m_subscriptionModel.PodcastId, newestEpisodeTimestamp.ToString("r"), m_subscriptionModel.PodcastRSSUrl); lock (typeof(IsolatedStorageSettings)) { settings.Add(subscriptionLatestEpisodeKey, subscriptionData); settings.Save(); } Debug.WriteLine("Storing latest episode publish date for subscription as: " + newestEpisodeTimestamp.ToString("r")); }
protected override T GetPropertyFromDB <T>(String propertyName) { using (var db = new PodcastSqlModel()) { PodcastSubscriptionModel dbSub = db.Subscriptions.First(sub => sub.PodcastId == this.PodcastId); PropertyInfo property = dbSub.GetType().GetProperties().FirstOrDefault(p => p.Name == propertyName); return((T)property.GetValue(dbSub)); } }
protected override T GetPropertyFromDB <T>(String propertyName) { using (var db = new PodcastSqlModel()) { PodcastEpisodeModel dbEpisode = db.Episodes.First(ep => ep.EpisodeId == this.EpisodeId); PropertyInfo property = dbEpisode.GetType().GetProperties().FirstOrDefault(p => p.Name == propertyName); return((T)property.GetValue(dbEpisode)); } }
void m_subscription_PodcastCleanFinished() { cleanProgressOverlay.Visibility = Visibility.Collapsed; using (var db = new PodcastSqlModel()) { m_subscription = db.subscriptionModelForIndex(m_podcastId); } this.DataContext = m_subscription; this.EpisodeList.ItemsSource = m_subscription.EpisodesPublishedDescending; }
public void cleanOldEpisodes(int keepEpisodes, bool deleteUnplayed = false) { List <String> episodeFiles = new List <String>(); IEnumerable <PodcastEpisodeModel> query = null; bool deleteDownloads = SubscriptionIsDeleteEpisodes; int keepDownloads = 0; using (var db = new PodcastSqlModel()) { PodcastSubscriptionModel e = db.subscriptionModelForIndex(PodcastId); if (!deleteDownloads) { keepDownloads = (from episode in e.Episodes where (episode.EpisodeDownloadState == PodcastEpisodeModel.EpisodeDownloadStateEnum.Downloaded) select episode).ToList().Count; } if (keepEpisodes + keepDownloads >= e.Episodes.Count) { return; } PodcastCleanStarted(); if (deleteDownloads) { query = (from episode in e.Episodes orderby episode.EpisodePublished descending select episode).Skip(keepEpisodes); } else { query = (from episode in e.Episodes orderby episode.EpisodePublished descending where (episode.EpisodeDownloadState != PodcastEpisodeModel.EpisodeDownloadStateEnum.Downloaded) select episode).Skip(keepEpisodes); } foreach (PodcastEpisodeModel de in query) { if (!String.IsNullOrEmpty(de.EpisodeFile)) { episodeFiles.Add(de.EpisodeFile); } } db.deleteEpisodesPerQuery(query); } BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandler(workerCleanSubscriptions); worker.RunWorkerAsync(episodeFiles); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(workerCleanSubscriptionsCompleted); }
public async void cleanOldEpisodes(int keepEpisodes, bool deleteUnplayed = false) { List <String> episodeFiles = new List <String>(); IEnumerable <PodcastEpisodeModel> query = null; bool deleteDownloads = SubscriptionIsDeleteEpisodes; int keepDownloads = 0; using (var db = new PodcastSqlModel()) { PodcastSubscriptionModel e = db.subscriptionModelForIndex(PodcastId); if (!deleteDownloads) { keepDownloads = (from episode in e.Episodes where (episode.EpisodeDownloadState == PodcastEpisodeModel.EpisodeDownloadStateEnum.Downloaded) select episode).ToList().Count; } if (keepEpisodes + keepDownloads >= e.Episodes.Count) { return; } PodcastCleanStarted(); if (deleteDownloads) { query = (from episode in e.Episodes orderby episode.EpisodePublished descending select episode).Skip(keepEpisodes); } else { query = (from episode in e.Episodes orderby episode.EpisodePublished descending where (episode.EpisodeDownloadState != PodcastEpisodeModel.EpisodeDownloadStateEnum.Downloaded) select episode).Skip(keepEpisodes); } foreach (PodcastEpisodeModel de in query) { if (!String.IsNullOrEmpty(de.EpisodeFile)) { episodeFiles.Add(de.EpisodeFile); } } db.deleteEpisodesPerQuery(query); } await Task.Run(() => deleteEpisodeFiles(episodeFiles)); PodcastCleanFinished(); NotifyPropertyChanged("EpisodesText"); NotifyPropertyChanged("EpisodesPublishedDescending"); }
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { m_podcastId = int.Parse(NavigationContext.QueryString["podcastId"]); PodcastSubscriptionModel subscription = null; using (var db = new PodcastSqlModel()) { subscription = db.subscriptionModelForIndex(m_podcastId); this.DataContext = subscription; } }
protected override void StorePropertyToDB <T>(String propertyName, T value) { using (var db = new PodcastSqlModel()) { PodcastEpisodeModel dbEpisode = db.Episodes.First(ep => ep.EpisodeId == this.EpisodeId); PropertyInfo property = dbEpisode.GetType().GetProperties().FirstOrDefault(p => p.Name == propertyName); property.SetValue(dbEpisode, value); db.SubmitChanges(); } }
protected override void StorePropertyToDB <T>(String propertyName, T value) { using (var db = new PodcastSqlModel()) { PodcastSubscriptionModel dbSub = db.Subscriptions.First(sub => sub.PodcastId == this.PodcastId); PropertyInfo property = dbSub.GetType().GetProperties().FirstOrDefault(p => p.Name == propertyName); property.SetValue(dbSub, value); db.SubmitChanges(); } }
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { using (var db = new PodcastSqlModel()) { PodcastSubscriptionModel sub = db.Subscriptions.First(s => s.PodcastId == m_subscription.PodcastId); sub.NewEpisodesCount = 0; db.SubmitChanges(); } PodcastSubscriptionsManager.getInstance().NewPlayableEpisode -= new PodcastSubscriptionsManager.EpisodesEventHandler(m_subscription_NewPlayableEpisode); }
public void reloadPartiallyPlayedEpisodes() { PartiallyPlayedEpisodes = partiallyPlayedEpisodesCount(PodcastId); using (var db = new PodcastSqlModel()) { PodcastSubscriptionModel sub = db.Subscriptions.FirstOrDefault(s => s.PodcastId == PodcastId); if (sub != null) { sub.PartiallyPlayedEpisodes = m_partiallyPlayedEpisodes; db.SubmitChanges(); } } }
public PodcastSubscriptionModel getSubscriptionModel() { PodcastSubscriptionModel sub = null; using (var db = new PodcastSqlModel()) { sub = db.Subscriptions.FirstOrDefault(s => s.PodcastId == this.PodcastId); if (sub == null) { Debug.WriteLine("Warning: Got null subscription!"); } } return(sub); }
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { PodcastSubscriptionModel subscriptionDataContext = this.DataContext as PodcastSubscriptionModel; PodcastSubscriptionModel subscription = null; using (var db = new PodcastSqlModel()) { subscription = db.subscriptionModelForIndex(m_podcastId); subscription.SubscriptionSelectedKeepNumEpisodesIndex = subscriptionDataContext.SubscriptionSelectedKeepNumEpisodesIndex; subscription.IsSubscribed = subscriptionDataContext.IsSubscribed; subscription.IsAutoDownload = subscriptionDataContext.IsAutoDownload; subscription.SubscriptionIsDeleteEpisodes = subscriptionDataContext.SubscriptionIsDeleteEpisodes; db.SubmitChanges(); } }
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { using (var db = new PodcastSqlModel()) { PodcastSubscriptionModel sub = db.Subscriptions.First(s => s.PodcastId == m_subscription.PodcastId); sub.NewEpisodesCount = 0; db.SubmitChanges(); } PodcastSubscriptionsManager.getInstance().NewPlayableEpisode -= new PodcastSubscriptionsManager.EpisodesEventHandler(m_subscription_NewPlayableEpisode); App.episodeDownloadManager.OnPodcastEpisodeDownloadStateChanged -= new PodcastDownloadManagerHandler(episodeDownloadManager_PodcastEpisodeDownloadStateChanged); PodcastPlaybackManager.getInstance().OnPodcastStartedPlaying -= new EventHandler(PodcastEpisodes_OnPodcastPlaystateChanged); PodcastPlaybackManager.getInstance().OnPodcastStoppedPlaying -= new EventHandler(PodcastEpisodes_OnPodcastPlaystateChanged); }
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { using (var db = new PodcastSqlModel()) { SettingsModel s = db.settings(); s.IsAutomaticContinuedPlayback = m_settings.IsAutomaticContinuedPlayback; s.IsAutoDelete = m_settings.IsAutoDelete; s.IsUseCellularData = m_settings.IsUseCellularData; s.SelectedExportIndex = m_settings.SelectedExportIndex; s.ListenedThreashold = m_settings.ListenedThreashold; s.IsAddDownloadsToPlayQueue = m_settings.IsAddDownloadsToPlayQueue; db.SubmitChanges(); } }
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) { PodcastSubscriptionModel subscriptionDataContext = this.DataContext as PodcastSubscriptionModel; PodcastSubscriptionModel subscription = null; using (var db = new PodcastSqlModel()) { subscription = db.subscriptionModelForIndex(m_subscription.PodcastId); subscription.SubscriptionSelectedKeepNumEpisodesIndex = subscriptionDataContext.SubscriptionSelectedKeepNumEpisodesIndex; subscription.IsSubscribed = subscriptionDataContext.IsSubscribed; subscription.IsAutoDownload = subscriptionDataContext.IsAutoDownload; subscription.SubscriptionIsDeleteEpisodes = subscriptionDataContext.SubscriptionIsDeleteEpisodes; db.SubmitChanges(); } m_subscription = null; NavigationService.GoBack(); }
private int unplayedEpisodesCount(int subscriptionId) { using (var db = new PodcastSqlModel()) { try { var query = from episode in db.Episodes where (episode.PodcastId == subscriptionId && episode.EpisodePlayState == PodcastEpisodeModel.EpisodePlayStateEnum.Downloaded && episode.SavedPlayPos == 0) select episode; return(query.AsEnumerable().Where(episode => PodcastPlaybackManager.isAudioPodcast(episode)).Count()); // int count = query.Count(); // return count; } catch (Exception) { return(0); } } }
private int partiallyPlayedEpisodesCount(int subscriptionId) { using (var db = new PodcastSqlModel()) { try { var query = from episode in db.Episodes where (episode.PodcastId == subscriptionId && episode.EpisodePlayState != PodcastEpisodeModel.EpisodePlayStateEnum.Listened && episode.SavedPlayPos > 0) select episode; return(query.AsEnumerable().Where(episode => PodcastPlaybackManager.isAudioPodcast(episode)).Count()); // return query.Count(); } catch (Exception) { // Something happened. return(0); } } }
private void resetEpisodeInDB() { using (var db = new PodcastSqlModel()) { PodcastEpisodeModel e = db.Episodes.FirstOrDefault(ep => ep.EpisodeId == EpisodeId); if (e == null) { Debug.WriteLine("Episode NULL. Probably alrady deleted."); return; } e.SavedPlayPos = SavedPlayPos; e.TotalLengthTicks = TotalLengthTicks; e.EpisodeFile = ""; e.EpisodeDownloadState = EpisodeDownloadStateEnum.Idle; e.EpisodePlayState = EpisodePlayStateEnum.Idle; e.SavedPlayPos = 0; db.SubmitChanges(); PodcastSubscriptionsManager.getInstance().podcastPlaystateChanged(e.PodcastSubscription); } }
internal void markAsListened(bool deleteListened) { Debug.WriteLine("Episode '" + EpisodeName + "' marked as listened."); SavedPlayPos = 0; EpisodePlayState = EpisodePlayStateEnum.Listened; using (var db = new PodcastSqlModel()) { PodcastEpisodeModel e = db.Episodes.FirstOrDefault(ep => ep.EpisodeId == EpisodeId); if (e != null) { e.SavedPlayPos = SavedPlayPos; e.EpisodePlayState = EpisodePlayState; db.SubmitChanges(); } } if (deleteListened && String.IsNullOrEmpty(EpisodeFile) == false) { deleteDownloadedEpisode(); } }
private void DeleteAllButton_Tap(object sender, System.Windows.Input.GestureEventArgs e) { if (MessageBox.Show("Are you sure you want to delete all downloaded podcasts?", "Delete all?", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel) { return; } List <PodcastEpisodeModel> episodes = null; using (var db = new PodcastSqlModel()) { episodes = db.allEpisodes(); } foreach (PodcastEpisodeModel episode in episodes) { episode.deleteDownloadedEpisode(); PodcastSubscriptionsManager.getInstance().removedPlayableEpisode(episode); } long bytes = getDownloadedBytes(); if (bytes != 0) { if (MessageBox.Show("I have deleted all episodes from the database. But there are still some files on the filesystem that were not be deleted. Do you want to delete these too?", "Attention", MessageBoxButton.OKCancel) == MessageBoxResult.OK) { deleteAllDownloadedFiles(); } } m_podcastUsageText = null; UpdateUsageInformation(); }
private void DeleteAllButton_Tap(object sender, System.Windows.Input.GestureEventArgs e) { if (MessageBox.Show("Are you sure you want to delete all downloaded podcasts?", "Delete all?", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel) { return; } List <PodcastEpisodeModel> episodes = null; using (var db = new PodcastSqlModel()) { episodes = db.allEpisodes(); } foreach (PodcastEpisodeModel episode in episodes) { episode.deleteDownloadedEpisode(); PodcastSubscriptionsManager.getInstance().removedPlayableEpisode(episode); } this.UsageText.Text = getUsageString(); }
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { m_podcastId = int.Parse(NavigationContext.QueryString["podcastId"]); using (var db = new PodcastSqlModel()) { m_subscription = db.subscriptionModelForIndex(m_podcastId); m_cleanListenedEpisodesAutomatically = db.settings().IsAutoDelete; if (m_cleanListenedEpisodesAutomatically) { PodcastSubscriptionsManager.getInstance().cleanListenedEpisodes(m_subscription); } } m_playableEpisodes = m_subscription.PlayableEpisodes; this.DataContext = m_subscription; PodcastSubscriptionsManager.getInstance().NewPlayableEpisode -= new PodcastSubscriptionsManager.EpisodesEventHandler(m_subscription_NewPlayableEpisode); PodcastSubscriptionsManager.getInstance().RemovedPlayableEpisode -= new PodcastSubscriptionsManager.EpisodesEventHandler(m_subscription_RemovedPlayableEpisode); PodcastSubscriptionsManager.getInstance().NewPlayableEpisode += new PodcastSubscriptionsManager.EpisodesEventHandler(m_subscription_NewPlayableEpisode); PodcastSubscriptionsManager.getInstance().RemovedPlayableEpisode += new PodcastSubscriptionsManager.EpisodesEventHandler(m_subscription_RemovedPlayableEpisode); bool forceUpdate = false; try { forceUpdate = String.IsNullOrEmpty(NavigationContext.QueryString["forceUpdate"]) == false && bool.Parse(NavigationContext.QueryString["forceUpdate"]); } catch (KeyNotFoundException) { forceUpdate = false; } if (forceUpdate) { // Clear the back stack while (((App)Application.Current).RootFrame.RemoveBackEntry() != null) { ; } ShellTile pinnedSubscriptionTile = m_subscription.getSubscriptionsLiveTile(); if (pinnedSubscriptionTile != null) { StandardTileData tileData = new StandardTileData(); tileData.Count = 0; tileData.BackTitle = ""; pinnedSubscriptionTile.Update(tileData); } PodcastSubscriptionsManager.getInstance().refreshSubscription(m_subscription); } m_subscription.PodcastCleanStarted -= new PodcastSubscriptionModel.SubscriptionModelHandler(m_subscription_PodcastCleanStarted); m_subscription.PodcastCleanFinished -= new PodcastSubscriptionModel.SubscriptionModelHandler(m_subscription_PodcastCleanFinished); m_subscription.PodcastCleanStarted += new PodcastSubscriptionModel.SubscriptionModelHandler(m_subscription_PodcastCleanStarted); m_subscription.PodcastCleanFinished += new PodcastSubscriptionModel.SubscriptionModelHandler(m_subscription_PodcastCleanFinished); // Clean old episodes from the listing. if (SettingsModel.keepNumEpisodesForSelectedIndex(m_subscription.SubscriptionSelectedKeepNumEpisodesIndex) != SettingsModel.KEEP_ALL_EPISODES) { m_subscription.cleanOldEpisodes(SettingsModel.keepNumEpisodesForSelectedIndex(m_subscription.SubscriptionSelectedKeepNumEpisodesIndex)); } if (App.episodeDownloadManager == null) { App.episodeDownloadManager = PodcastEpisodesDownloadManager.getInstance(); } App.episodeDownloadManager.OnPodcastEpisodeDownloadStateChanged += new PodcastDownloadManagerHandler(episodeDownloadManager_PodcastEpisodeDownloadStateChanged); PodcastPlaybackManager.getInstance().OnPodcastStartedPlaying += new EventHandler(PodcastEpisodes_OnPodcastPlaystateChanged); PodcastPlaybackManager.getInstance().OnPodcastStoppedPlaying += new EventHandler(PodcastEpisodes_OnPodcastPlaystateChanged); }
public SubscriptionSettings() { InitializeComponent(); m_podcastSqlModel = PodcastSqlModel.getInstance(); }
private void MarkAllListened_Click(object sender, EventArgs e) { if (MessageBox.Show("Are you sure you want to mark all episodes as listened?", "Are you sure?", MessageBoxButton.OKCancel) == MessageBoxResult.OK) { List<PodcastEpisodeModel> episodes = null; using (var db = new PodcastSqlModel()) { episodes = db.episodesForSubscription(m_subscription); foreach (PodcastEpisodeModel episode in episodes) { episode.markAsListened(m_cleanListenedEpisodesAutomatically); } db.SubmitChanges(); PodcastSubscriptionsManager.getInstance().podcastPlaystateChanged(m_subscription); m_subscription = db.subscriptionModelForIndex(m_podcastId); } this.DataContext = m_subscription; this.EpisodeList.ItemsSource = m_subscription.EpisodesPublishedDescending; App.showNotificationToast("All episodes marked as listened."); } }
private List<PodcastEpisodeModel> createPlayHistory() { List<PodcastEpisodeModel> playHistory = new List<PodcastEpisodeModel>(); using (var db = new PodcastSqlModel()) { var query = from LastPlayedEpisodeModel e in db.PlayHistory orderby e.TimeStamp descending select e; int itemsCount = 0; foreach (LastPlayedEpisodeModel e in query) { PodcastEpisodeModel episode = db.episodeForEpisodeId(e.LastPlayedEpisodeId); if (episode == null) { Debug.WriteLine("Got NULL episode for play history. This probably means the subscription has been deleted."); continue; } playHistory.Add(episode); itemsCount++; if (itemsCount >= 4) { break; } } return playHistory; } }
public void updatePodcastEpisodes() { Debug.WriteLine("Updating episodes for podcast: " + m_subscriptionModel.PodcastName); bool subscriptionAddedNow = true; List <PodcastEpisodeModel> episodes = null; using (var db = new PodcastSqlModel()) { episodes = db.episodesForSubscription(m_subscriptionModel); } DateTime latestEpisodePublishDate = new DateTime(); if (episodes.Count > 0) { // The episodes are in descending order as per publish date. // So take the first episode and we have the latest known publish date. latestEpisodePublishDate = episodes[0].EpisodePublished; // If we already have episodes, this subscription is not being added now. subscriptionAddedNow = false; } episodes = null; Debug.WriteLine("\nStarting to parse episodes for podcast: " + m_subscriptionModel.PodcastName); List <PodcastEpisodeModel> newPodcastEpisodes = PodcastFactory.newPodcastEpisodes(m_subscriptionModel.CachedPodcastRSSFeed, latestEpisodePublishDate); m_subscriptionModel.CachedPodcastRSSFeed = ""; if (newPodcastEpisodes == null) { Debug.WriteLine("WARNING: Got null list of new episodes."); return; } using (var db = new PodcastSqlModel()) { PodcastSubscriptionModel sub = db.Subscriptions.FirstOrDefault(s => s.PodcastId == m_subscriptionModel.PodcastId); if (sub == null) { Debug.WriteLine("Subscription NULL. Probably already deleted."); return; } PodcastEpisodeModel[] newEpisodesSet = new PodcastEpisodeModel[newPodcastEpisodes.Count]; newPodcastEpisodes.CopyTo(newEpisodesSet); // Let's check for duplicate episode names. This can happen if the subscription updates the "pubDate" // of the most recent episode in the feed, in which case the most recent one (at least) can become a duplicate entry. foreach (PodcastEpisodeModel newEpisode in newEpisodesSet.AsEnumerable()) { if (sub.Episodes.OrderByDescending(ep => ep.EpisodePublished).Take(10).ToArray().FirstOrDefault(ep => ep.EpisodeName == newEpisode.EpisodeName) != null) { Debug.WriteLine("Episode already found in the subscription, removing: " + newEpisode.EpisodeName); newPodcastEpisodes.Remove(newEpisode); } } db.insertEpisodesForSubscription(m_subscriptionModel, newPodcastEpisodes); // Indicate new episodes to the UI only when we are not adding the feed. // I.e. we want to show new episodes only when we refresh the feed at restart. if (subscriptionAddedNow == false) { int numOfNewPodcasts = newPodcastEpisodes.Count; Debug.WriteLine("Got {0} new episodes.", numOfNewPodcasts); Deployment.Current.Dispatcher.BeginInvoke(() => { m_subscriptionModel.addNumOfNewEpisodes(numOfNewPodcasts); }); sub.addNumOfNewEpisodes(numOfNewPodcasts); db.SubmitChanges(); } } if (m_subscriptionModel.IsAutoDownload && newPodcastEpisodes.Count > 0) { Deployment.Current.Dispatcher.BeginInvoke(() => { PodcastEpisodesDownloadManager.getInstance().addEpisodesToDownloadQueue(newPodcastEpisodes); }); } if (newPodcastEpisodes.Count > 0) { // Update subscription's information if it's pinned to home screen. updatePinnedInformation(); Deployment.Current.Dispatcher.BeginInvoke(() => { // This will call the setter for episode model in the UI that will notify the UI that the content has changed. m_subscriptionModel.EpisodesPublishedDescending = new ObservableCollection <PodcastEpisodeModel>(); }); } }
private void DeleteAllDownloads_Click(object sender, EventArgs e) { if (MessageBox.Show("Are you sure you want to delete all downloaded episodes in this subscription?", "Delete?", MessageBoxButton.OKCancel) == MessageBoxResult.OK) { List<PodcastEpisodeModel> episodes = null; using (var db = new PodcastSqlModel()) { episodes = db.episodesForSubscription(m_subscription); foreach (PodcastEpisodeModel episode in episodes) { if (episode.EpisodeDownloadState == PodcastEpisodeModel.EpisodeDownloadStateEnum.Downloaded) { episode.deleteDownloadedEpisode(); PodcastSubscriptionsManager.getInstance().removedPlayableEpisode(episode); } } } using (var db = new PodcastSqlModel()) { m_subscription = db.subscriptionModelForIndex(m_podcastId); } } this.DataContext = m_subscription; this.EpisodeList.ItemsSource = m_subscription.EpisodesPublishedDescending; }
public PodcastEpisodesManager(PodcastSubscriptionModel subscriptionModel) { m_subscriptionModel = subscriptionModel; m_podcastsSqlModel = PodcastSqlModel.getInstance(); }
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { m_podcastId = int.Parse(NavigationContext.QueryString["podcastId"]); using (var db = new PodcastSqlModel()) { m_subscription = db.subscriptionModelForIndex(m_podcastId); m_cleanListenedEpisodesAutomatically = db.settings().IsAutoDelete; if (m_cleanListenedEpisodesAutomatically) { PodcastSubscriptionsManager.getInstance().cleanListenedEpisodes(m_subscription); } } m_playableEpisodes = m_subscription.PlayableEpisodes; this.DataContext = m_subscription; PodcastSubscriptionsManager.getInstance().NewPlayableEpisode -= new PodcastSubscriptionsManager.EpisodesEventHandler(m_subscription_NewPlayableEpisode); PodcastSubscriptionsManager.getInstance().RemovedPlayableEpisode -= new PodcastSubscriptionsManager.EpisodesEventHandler(m_subscription_RemovedPlayableEpisode); PodcastSubscriptionsManager.getInstance().NewPlayableEpisode += new PodcastSubscriptionsManager.EpisodesEventHandler(m_subscription_NewPlayableEpisode); PodcastSubscriptionsManager.getInstance().RemovedPlayableEpisode += new PodcastSubscriptionsManager.EpisodesEventHandler(m_subscription_RemovedPlayableEpisode); bool forceUpdate = false; try { forceUpdate = String.IsNullOrEmpty(NavigationContext.QueryString["forceUpdate"]) == false && bool.Parse(NavigationContext.QueryString["forceUpdate"]); } catch (KeyNotFoundException) { forceUpdate = false; } if (forceUpdate) { // Clear the back stack while (((App)Application.Current).RootFrame.RemoveBackEntry() != null) ; ShellTile pinnedSubscriptionTile = m_subscription.getSubscriptionsLiveTile(); if (pinnedSubscriptionTile != null) { StandardTileData tileData = new StandardTileData(); tileData.Count = 0; tileData.BackTitle = ""; pinnedSubscriptionTile.Update(tileData); } PodcastSubscriptionsManager.getInstance().refreshSubscription(m_subscription); } m_subscription.PodcastCleanStarted -= new PodcastSubscriptionModel.SubscriptionModelHandler(m_subscription_PodcastCleanStarted); m_subscription.PodcastCleanFinished -= new PodcastSubscriptionModel.SubscriptionModelHandler(m_subscription_PodcastCleanFinished); m_subscription.PodcastCleanStarted += new PodcastSubscriptionModel.SubscriptionModelHandler(m_subscription_PodcastCleanStarted); m_subscription.PodcastCleanFinished += new PodcastSubscriptionModel.SubscriptionModelHandler(m_subscription_PodcastCleanFinished); // Clean old episodes from the listing. if (SettingsModel.keepNumEpisodesForSelectedIndex(m_subscription.SubscriptionSelectedKeepNumEpisodesIndex) != SettingsModel.KEEP_ALL_EPISODES) { m_subscription.cleanOldEpisodes(SettingsModel.keepNumEpisodesForSelectedIndex(m_subscription.SubscriptionSelectedKeepNumEpisodesIndex)); } if (App.episodeDownloadManager == null) { App.episodeDownloadManager = PodcastEpisodesDownloadManager.getInstance(); } App.episodeDownloadManager.OnPodcastEpisodeDownloadStateChanged += new PodcastDownloadManagerHandler(episodeDownloadManager_PodcastEpisodeDownloadStateChanged); PodcastPlaybackManager.getInstance().OnPodcastStartedPlaying += new EventHandler(PodcastEpisodes_OnPodcastPlaystateChanged); PodcastPlaybackManager.getInstance().OnPodcastStoppedPlaying += new EventHandler(PodcastEpisodes_OnPodcastPlaystateChanged); }
private void DeleteAllButton_Tap(object sender, System.Windows.Input.GestureEventArgs e) { if (MessageBox.Show("Are you sure you want to delete all downloaded podcasts?", "Delete all?", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel) { return; } List<PodcastEpisodeModel> episodes = null; using (var db = new PodcastSqlModel()) { episodes = db.allEpisodes(); } foreach (PodcastEpisodeModel episode in episodes) { episode.deleteDownloadedEpisode(); PodcastSubscriptionsManager.getInstance().removedPlayableEpisode(episode); } this.UsageText.Text = getUsageString(); }
/************************************* Public implementations *******************************/ public PodcastEpisodes() { InitializeComponent(); m_podcastSqlModel = PodcastSqlModel.getInstance(); }