示例#1
0
        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);
     }
 }
示例#3
0
        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);
            }
        }
示例#4
0
        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 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);
      }
 }
示例#7
0
 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));
     }
 }
示例#8
0
 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));
     }
 }
示例#9
0
 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;
 }
示例#10
0
        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);
        }
示例#11
0
        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;
     }
 }
示例#13
0
 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();
     }
 }
示例#14
0
 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();
     }
 }
示例#15
0
        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);
        }
示例#16
0
        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);
        }
示例#17
0
        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;
            }
        }
示例#18
0
 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();
         }
     }
 }
示例#19
0
        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();
            }
        }
示例#21
0
        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);
        }
示例#22
0
        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);
        }
示例#23
0
        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();
            }
        }
示例#24
0
        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();
            }
        }
示例#25
0
        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();
        }
示例#27
0
        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();
        }
示例#28
0
        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);
                }
            }
        }
示例#29
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);
                }
            }
        }
示例#30
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);
            }
        }
示例#31
0
        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();
            }
        }
示例#32
0
        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();
        }
示例#33
0
        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();
        }
示例#34
0
        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();
 }
示例#36
0
 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;
 }
示例#37
0
        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.");
            }
        }
示例#38
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);
            }
        }
示例#39
0
        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;
            }
        }
示例#40
0
            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>();
                    });
                }
            }
示例#41
0
        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();
 }
示例#43
0
        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);
        }
示例#44
0
        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();
        }
示例#45
0
 /************************************* Public implementations *******************************/
 public PodcastEpisodes()
 {
     InitializeComponent();
     m_podcastSqlModel = PodcastSqlModel.getInstance();
 }
示例#46
0
        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();
            }
        }