예제 #1
0
        public static void Run(
            [QueueTrigger("new-podcast", Connection = "AzureWebJobsStorage")] PodCast newPodCast,
            [Queue("podcast-to-be-tweeted", Connection = "AzureWebJobsStorage")] ICollector <PodCast> toBeTweeted,
            [Queue("podcast-to-be-added-to-weekly-activity", Connection = "AzureWebJobsStorage")] ICollector <PodCast> toBeAddedToWeeklyActivity,
            ILogger log)
        {
            var podCastAge = (DateTime.Now - newPodCast.Created).TotalHours;

            // Disable tweeting of Podcast listens
            //if (podCastAge < 3)
            //{
            //    toBeTweeted.Add(newPodCast);
            //}

            toBeAddedToWeeklyActivity.Add(newPodCast);

            try
            {
                BroadcastToActivityBot(newPodCast);
            }
            catch (Exception ex)
            {
                log.LogError("Failed to Broadcast to ActivityBot", ex);
            }
        }
예제 #2
0
        public async Task <IActionResult> Create(PodCastCreateViewModel model)
        {
            if (ModelState.IsValid)
            {
                PodCast toBeAddedPodCast = new PodCast
                {
                    Guest       = model.Guest,
                    ReleaseDate = model.ReleaseDate,
                    Host        = model.Host,
                    Title       = model.Title,
                    Url         = model.Url
                };

                var user = await _userManager.GetUserAsync(HttpContext.User);

                _mediaDbContext.PodCasts.Add(toBeAddedPodCast);
                await _mediaDbContext.SaveChangesAsync();

                UserPodCast newConnection = new UserPodCast
                {
                    User      = user,
                    UserId    = user.Id,
                    PodCast   = toBeAddedPodCast,
                    PodCastId = toBeAddedPodCast.Id
                };
                _mediaDbContext.UserPodCasts.Add(newConnection);
                await _mediaDbContext.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }

            return(View(model));
        }
예제 #3
0
        public void AddEpisodeToDownloadList_1_OK()
        {
            // Arrange:
            var podCast = new PodCast(
                null,
                "x",
                new Uri("http://ww.ee"),
                "x",
                "x");

            this.PodCastRepository.SavePodCast(podCast);
            var episode = Episode.ConstructEpisode(
                Guid.NewGuid().ToString(),
                DateTime.Now,
                "x",
                "x",
                new Uri("http://uu.qq"),
                podCast,
                false);
            var episodes = new List <Episode>();

            episodes.Add(episode);
            this.EpisodeRepository.UpdateEpisodeList(
                podCast.Id.Value,
                episodes);

            // Act:
            this.EpisodeRepository.AddEpisodeToDownloadList(
                podCast.Id.Value,
                episode.Id);

            // Assert:
        }
예제 #4
0
        public void GetEpisodesToDownload_All_OK()
        {
            // Arrange:
            var podCast = new PodCast(
                null,
                "x",
                new Uri("http://xx.dd"),
                "x",
                "x");

            this.PodCastRepository.SavePodCast(podCast);
            var episodes = new List <Episode>();

            episodes.Add(Episode.ConstructEpisode(
                             Guid.NewGuid().ToString(),
                             DateTime.Now,
                             "x",
                             "x",
                             new Uri("http://xxx.ddd"),
                             podCast,
                             true));
            this.EpisodeRepository.UpdateEpisodeList(
                podCast.Id.Value,
                episodes);

            // Act:
            this.EpisodeRepository.GetEpisodesToDownload();

            // Assert:
        }
예제 #5
0
        public async Task <IActionResult> PodcastReview(int id, ReviewCreateViewModel reviewCreate)
        {
            PodCast podcastFromDb = _mediaWebDbContext.PodCasts.Find(id);

            Review newReview = new Review()
            {
                Title     = reviewCreate.Title,
                Content   = reviewCreate.Content,
                IsChecked = false
            };

            var user           = _userManager.GetUserAsync(HttpContext.User).Result;
            var podcastReviews = new List <PodcastReview>();

            user.Reviews.Add(newReview);

            podcastReviews.Add(new PodcastReview()
            {
                Review = newReview
            });
            podcastFromDb.PodcastReviews = podcastReviews;

            _mediaWebDbContext.Reviews.Add(newReview);

            await _mediaWebDbContext.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
예제 #6
0
        public List <Data.Model.PodCast> getAll()
        {
            List <PodCast> resultset = new List <PodCast>();
            SqlCommand     comm      = new SqlCommand();

            comm.Connection  = conn;
            comm.CommandText = storedproc;
            comm.CommandType = System.Data.CommandType.StoredProcedure;
            SqlDataReader dr = comm.ExecuteReader();

            if (dr != null)
            {
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        PodCast a = new PodCast(dr["XMLUrl"].ToString(), dr["Name"].ToString(), dr["PodCastRoot"].ToString(), false, null, bool.Parse(dr["DownloadAll"].ToString()), logger);
                        a.fk_genre          = dr["FK_Genre"].ToString();
                        a.useDefault        = bool.Parse(dr["useDefault"].ToString());
                        a.DefaultArtistName = dr["DefaultArtistName"].ToString();
                        a.id = Guid.Parse(dr[0].ToString());
                        resultset.Add(a);
                    }
                }
                if (!dr.IsClosed)
                {
                    dr.Close();
                    dr.Dispose();
                }
            }
            podcasts = resultset;
            return(resultset);
        }
예제 #7
0
        /// <summary>
        /// Saves the pod cast.
        /// </summary>
        /// <param name="podCast">The pod cast.</param>
        /// <exception cref="Uncas.PodCastPlayer.Repository.RepositoryException"></exception>
        public void SavePodCast(
            PodCast podCast)
        {
            if (podCast == null ||
                podCast.Url == null)
            {
                return;
            }

            DBPodCast pc = new DBPodCast
            {
                Author      = podCast.Author,
                Description = podCast.Description,
                Name        = podCast.Name,
                Url         = podCast.Url.ToString()
            };

            try
            {
                this.DB.Add <DBPodCast>(pc);
            }
            catch (Exception ex)
            {
                // TODO: EXCEPTION: Unknown SubSonic exceptions
                throw new RepositoryException(
                          "Error trying to add pod cast to database",
                          ex);
            }

            podCast.Id = (int)pc.PodCastId;
        }
예제 #8
0
        public static async System.Threading.Tasks.Task RunAsync(
            [QueueTrigger("podcast-to-be-added-to-weekly-activity", Connection = "AzureWebJobsStorage")] PodCast podCast,
            Binder binder,
            ILogger log)
        {
            var week = Week.FromDate(podCast.Created);

            var blobName = $"activity-weekly/{week.Year.ToString("0000")}/{week.WeekNumber.ToString("00")}.json";

            log.LogInformation($"To save to {blobName}");

            var attributes = new Attribute[]
            {
                new BlobAttribute(blobName),
                new StorageAccountAttribute("AzureWebJobsStorage")
            };

            var blob = await binder.BindAsync <CloudBlockBlob>(attributes);

            using (var locker = new CloudBlockBlobLocker <Models.WeekActivity>(blob))
            {
                var activity = locker.IsNew ?
                               new Models.WeekActivity(week.Year, week.WeekNumber) :
                               await locker.Download();

                activity.AddPodCast(podCast);

                await locker.Upload(activity);
            }
        }
예제 #9
0
        /// <summary>
        /// Saves the pod cast.
        /// </summary>
        /// <param name="podCast">The pod cast.</param>
        public void SavePodCast(PodCastDetailsViewModel podCast)
        {
            if (podCast.Id.HasValue)
            {
                var existingPodCast =
                    PodCasts.Where(pc =>
                                   pc.Id.Value == podCast.Id.Value)
                    .SingleOrDefault();
                if (existingPodCast != null)
                {
                    existingPodCast.Name = podCast.Name;
                    existingPodCast.Url  = podCast.Url;
                    return;
                }
            }

            int newId =
                (PodCasts.Max(pc => pc.Id) ?? 0)
                + 1;

            var newPodCast =
                new PodCast(
                    newId,
                    podCast.Name,
                    podCast.Url);

            PodCasts.Add(newPodCast);
        }
예제 #10
0
        public async Task <IActionResult> Detail(int id)
        {
            PodCast podcastFromDb =
                await _mediaWebDbContext.PodCasts
                .Include(podcast => podcast.PodCastHosts)
                .ThenInclude(podcastHost => podcastHost.Host)
                .Include(podcast => podcast.PodCastGuests)
                .ThenInclude(podcastGuest => podcastGuest.Guest)
                .Include(podcast => podcast.PodcastReviews)
                .ThenInclude(podcastReview => podcastReview.Review)
                .ThenInclude(review => review.MediaWebUser)
                .FirstOrDefaultAsync(m => m.Id == id);

            PodcastDetailViewModel detailModel = new PodcastDetailViewModel()
            {
                Id             = podcastFromDb.Id,
                Title          = podcastFromDb.Title,
                ReleaseDate    = podcastFromDb.ReleaseDate,
                Description    = podcastFromDb.Description,
                File           = podcastFromDb.File,
                PodcastHosts   = podcastFromDb.PodCastHosts,
                PodcastGuests  = podcastFromDb.PodCastGuests,
                PodcastReviews = podcastFromDb.PodcastReviews.Where(pr => pr.Review.IsChecked == true),
                IsHidden       = podcastFromDb.IsHidden
            };

            return(View(detailModel));
        }
예제 #11
0
 //Lägger till en pod om den inte redan finns i listan
 public override bool Add(PodCast pod)
 {
     if (!Contains(pod))
     {
         return(base.Add(pod));
     }
     return(false);
 }
예제 #12
0
        //Genomför en uppdatering av en podcast med en uppdaterad feed
        private PodCast PerformPodUpdate(PodCast p, SyndicationFeed updatedFeed)
        {
            p.Name        = updatedFeed.Title.Text;
            p.LastUpdated = updatedFeed.LastUpdatedTime;
            p.Episodes    = EpisodeList <Episode> .FromSyndicationItems(updatedFeed.Items);

            return(p);
        }
예제 #13
0
 /// <summary>
 /// Gets the episode.
 /// </summary>
 /// <param name="id">The id of the episode.</param>
 /// <param name="podCast">The pod cast.</param>
 /// <returns>The episode.</returns>
 private static Episode GetEpisode(
     string id,
     PodCast podCast)
 {
     return(GetEpisode(
                id,
                podCast,
                false));
 }
예제 #14
0
        //Uppdaterar en podcast om det finns ett nytt avsnitt
        private async Task CheckForPodUpdates(PodCast pod)
        {
            bool updated = await RSSManager.UpdatePodIfNeeded(pod);

            if (updated)
            {
                FirePodUpdated();
            }
        }
예제 #15
0
        public async Task <IActionResult> ConfirmDelete(int id)
        {
            PodCast podCastToDelete = await _mediaDbContext.PodCasts.FindAsync(id);

            _mediaDbContext.PodCasts.Remove(podCastToDelete);
            await _mediaDbContext.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
예제 #16
0
        private static void RunForXMLv2(string path, string dnbpath, bool islocalxml = true, string Show = "", string Genre = "")
        {
            Genre   g = DBContext.getGenreByName(Genre);
            PodCast p = new PodCast(path, Show, dnbpath, islocalxml, g, false, logger);

            RSSListener.SQL.Inserts.InsertPodcast podcast = new RSSListener.SQL.Inserts.InsertPodcast(connection, p);
            //List<Artist> artists = checkallartists(p.shows);
            //Console.Read();
        }
예제 #17
0
        public async Task <IActionResult> Delete(int id)
        {
            PodCast podCastFromDb = await _mediaDbContext.PodCasts.FindAsync(id);

            return(View(new PodCast()
            {
                Id = podCastFromDb.Id
            }));
        }
예제 #18
0
        public async Task <IActionResult> HidePodcast(int id)
        {
            PodCast podcastFromDb = await _mediaWebDbContext.PodCasts.FirstOrDefaultAsync(m => m.Id == id);

            podcastFromDb.IsHidden = true;

            await _mediaWebDbContext.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
예제 #19
0
        /// <summary>
        /// Downloads the episode list.
        /// </summary>
        /// <param name="podCast">The pod cast.</param>
        /// <returns>A list of episodes.</returns>
        /// <exception cref="Uncas.PodCastPlayer.Utility.UtilityException"></exception>
        public IList <Episode> DownloadEpisodeList(
            PodCast podCast)
        {
            if (podCast == null)
            {
                return(null);
            }

            return(FetchEpisodeList(
                       podCast));
        }
예제 #20
0
        public Media GetInstance(IDbContext ctx
                                 , string name
                                 , string description
                                 , int authorId
                                 , string imagepath
                                 , decimal price
                                 , bool isAvailable
                                 , int categoryId
                                 , TimeSpan?duration = null
                                 , string urlFeed    = ""
                                 , int quality       = 0
                                 , int pages         = 0)
        {
            Media media = null;

            if (duration.HasValue && string.IsNullOrWhiteSpace(urlFeed))
            {
                media = new Music {
                    Duration = duration.Value
                };
            }
            else if (duration.HasValue && !string.IsNullOrWhiteSpace(urlFeed))
            {
                media = new PodCast {
                    Duration = duration.Value, UrlFeed = urlFeed
                };
            }
            else if (pages != 0)
            {
                media = new Book {
                    Pages = pages
                };
            }
            else if (quality != 0)
            {
                media = new Video {
                    Quality = quality
                };
            }
            else
            {
                throw new Exception("Invalid media type.");
            }

            media.Name        = name;
            media.Description = description;
            media.ImagePath   = imagepath;
            media.Price       = price;
            media.IsAvailable = isAvailable;
            media.Category    = ctx.Categories.Find(categoryId);
            media.Author.Add(ctx.Users.Find(authorId));

            return(media);
        }
예제 #21
0
        /// <summary>
        /// Gets the pod cast.
        /// </summary>
        /// <returns>The pod cast.</returns>
        private static PodCast GetPodCast()
        {
            var podCast = new PodCast(
                1,
                "x",
                new Uri("http://sss.dd"),
                "x",
                "x");

            return(podCast);
        }
예제 #22
0
        /// <summary>
        /// Downloads the episode list.
        /// </summary>
        /// <param name="podCast">The pod cast.</param>
        /// <returns>A list of episodes.</returns>
        /// <exception cref="Uncas.PodCastPlayer.Utility.UtilityException"></exception>
        public IList<Episode> DownloadEpisodeList(
            PodCast podCast)
        {
            if (podCast == null)
            {
                return null;
            }

            return FetchEpisodeList(
                podCast);
        }
예제 #23
0
        //Uppdaterar listan med podcastavsnitt
        private void UpdateEpisodeList(PodCast feed)
        {
            EpisodeList <Episode> epList = feed.Episodes;

            lvPodCastEpisodes.Items.Clear();
            lvPodCastEpisodes.Items.AddRange(epList.ToListViewItems());
            if (epList != null && epList.Count > 0)
            {
                UpdateEpisodeDetails(epList.Get(0));
            }
        }
예제 #24
0
        public async Task <IActionResult> Delete(int id)
        {
            PodCast podcastFromDb = await _mediaWebDbContext.PodCasts.FirstOrDefaultAsync(m => m.Id == id);

            PodcastDeleteViewModel deleteModel = new PodcastDeleteViewModel()
            {
                Id    = podcastFromDb.Id,
                Title = podcastFromDb.Title
            };

            return(View(deleteModel));
        }
예제 #25
0
        public void DownloadPodCastInfo_Hanselminutes_OK()
        {
            // Arrange:

            // Act:
            PodCast podCast =
                this.downloader.DownloadPodCastInfo(
                    GetUri());

            // Assert:
            Trace.WriteLine(podCast);
        }
예제 #26
0
        public void downloadXMLData(PodCast p)
        {
            //Download XML Data
            string pathtolocal = @"c:\temp\myxml.xml";

            //Ensure there is no file
            try
            {
                if (System.IO.File.Exists(pathtolocal))
                {
                    System.IO.File.Delete(pathtolocal);
                }
            }
            catch (System.IO.IOException ioex)
            {
                if (logger != null)
                {
                    logger.addEvent(new cEvent(Severity.Warning, "There was an error attempting to delete the file: " + pathtolocal, ioex));
                }
                return;
            }
            //Download from URL in 'path' variable
            try
            {
                System.Net.WebClient wc = new System.Net.WebClient();
                wc.DownloadFile(p.URL, pathtolocal);
                if (logger != null)
                {
                    logger.addEvent(new cEvent(Severity.Information, "File successfully downloaded from: " + p.URL));
                }
            }
            catch (System.Net.WebException webex)
            {
                if (logger != null)
                {
                    logger.addEvent(new cEvent(Severity.FATAL, "Could not download the RSS feed data from: " + p.URL, webex));
                }
                return;
            }
            string xml = System.IO.File.ReadAllText(pathtolocal);

            fetchPodCastsFromXML(p, pathtolocal);
            if (p.AutomaticDownload)
            {
                foreach (Show s in p.shows)
                {
                    if (!s.fileExists)
                    {
                        s.downloadFile(s.url);
                    }
                }
            }
        }
예제 #27
0
        private void GetEpisodes()
        {
            PodCast pod      = _podcastController.GetPodCast(lblPodcast.Text);
            var     podId    = pod.Id;
            var     episodes = _episodeController.GetAllEpisodes(podId).ToList();

            episodes.Reverse();
            foreach (var episode in episodes)
            {
                lstBoxEpisodes.Items.Add(episode.Title);
            }
            lblPodCastDescription.Text = "Avsnittsbeskrivning";
        }
예제 #28
0
        /// <summary>
        /// Gets the episode.
        /// </summary>
        /// <param name="podCast">The pod cast.</param>
        /// <returns>The episode.</returns>
        private static Episode GetEpisode(PodCast podCast)
        {
            var one = Episode.ConstructEpisode(
                "x",
                DateTime.Now,
                "x",
                "x",
                new Uri("http://www.xxx.dk"),
                podCast,
                false);

            return(one);
        }
예제 #29
0
        //Uppdaterar en podcast om poden har en uppdatering
        public async Task <bool> UpdatePodIfNeeded(PodCast p)
        {
            var updatedFeed = await ReadRSSAsync(p.Url);

            bool updated = false;

            if (updatedFeed.LastUpdatedTime > p.LastUpdated)
            {
                PerformPodUpdate(p, updatedFeed);
                updated = true;
            }
            return(updated);
        }
예제 #30
0
        public async Task <IActionResult> Edit(int id)
        {
            PodCast podcastFromDb = await _mediaWebDbContext.PodCasts.FirstOrDefaultAsync(m => m.Id == id);

            PodcastEditViewModel editModel = new PodcastEditViewModel()
            {
                Title       = podcastFromDb.Title,
                ReleaseDate = podcastFromDb.ReleaseDate,
                Description = podcastFromDb.Description,
                PodcastLink = podcastFromDb.File
            };

            return(View(editModel));
        }
예제 #31
0
        public async Task <IActionResult> DeleteConfirmed(int id)
        {
            PodCast podcastFromDb = await _mediaWebDbContext.PodCasts.FirstOrDefaultAsync(m => m.Id == id);

            if (!string.IsNullOrEmpty(podcastFromDb.File))
            {
                _uploadUtility.DeleteFile(_hostingEnvironment.WebRootPath, podcastFromDb.File);
            }

            _mediaWebDbContext.PodCasts.Remove(podcastFromDb);
            await _mediaWebDbContext.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
예제 #32
0
        /// <summary>
        /// Reads the pod cast.
        /// </summary>
        /// <param name="podCast">The pod cast.</param>
        /// <returns>A list of episodes.</returns>
        /// <exception cref="Uncas.PodCastPlayer.Utility.UtilityException"></exception>
        private static IList<Episode> FetchEpisodeList(
            PodCast podCast)
        {
            var result = new List<Episode>();

            // Loads the pod cast:
            var feed = GetFeed(podCast.Url);
            foreach (var item in feed.Items)
            {
                // Gets enclosure info:
                var enclosure =
                    item.Links.Where(
                    l => l.RelationshipType == "enclosure")
                    .SingleOrDefault();
                if (enclosure == null)
                {
                    continue;
                }

                // Gets episode info:
                var episode =
                    Episode.ConstructEpisode(
                    item.Id,
                    item.PublishDate.Date,
                    item.Title.Text,
                    item.Summary.Text,
                    enclosure.Uri,
                    podCast,
                    false);

                episode.MediaInfo =
                    new EpisodeMediaInfo
                    {
                        FileSizeInBytes = enclosure.Length
                    };

                result.Add(episode);
            }

            return result;
        }