From e11ddfa72c0123d3a57a2b119feae0dd4d2c4e9a Mon Sep 17 00:00:00 2001 From: hak8or Date: Tue, 20 Feb 2018 01:16:30 -0500 Subject: [PATCH] Added refreshed since for channels --- YTManager/Controllers/Admin.cs | 21 +++- ...20180220053952_added_refreshed.Designer.cs | 102 ++++++++++++++++++ .../20180220053952_added_refreshed.cs | 25 +++++ YTManager/Migrations/MediaDBModelSnapshot.cs | 2 + YTManager/Models/Channel.cs | 4 + YTManager/Tasks/FetchVideos.cs | 11 +- 6 files changed, 156 insertions(+), 9 deletions(-) create mode 100644 YTManager/Migrations/20180220053952_added_refreshed.Designer.cs create mode 100644 YTManager/Migrations/20180220053952_added_refreshed.cs diff --git a/YTManager/Controllers/Admin.cs b/YTManager/Controllers/Admin.cs index 48b9829..3f1648f 100644 --- a/YTManager/Controllers/Admin.cs +++ b/YTManager/Controllers/Admin.cs @@ -13,6 +13,15 @@ namespace YTManager.Controllers { [Produces("application/json")] [Route("api/Admin")] public class AdminController : Controller { + // Get the mass update daemon job. + private static RecurringJobDto get_massupdatedaemon() { + return Hangfire.JobStorage + .Current + .GetConnection() + .GetRecurringJobs() + .SingleOrDefault(j => j.Id == Mass_Updater_ID); + } + // ID for mass update job, used to tell if the job is running or not. public static string Mass_Updater_ID { get; } = "2013066213"; @@ -36,9 +45,12 @@ namespace YTManager.Controllers { // Ensures that the background YT Channel update API is running. [HttpPost("Start_Updater")] public IActionResult Start_Updater() { - Hangfire.RecurringJob.AddOrUpdate( - Mass_Updater_ID, - () => Tasks.FetchVideos.MassUpdate(Startup.DBStr), Hangfire.Cron.Hourly); + if (get_massupdatedaemon() == null) { + Hangfire.RecurringJob.AddOrUpdate( + Mass_Updater_ID, + () => Tasks.FetchVideos.MassUpdate(Startup.DBStr), Hangfire.Cron.Minutely); + } + return Ok(); } @@ -46,8 +58,7 @@ namespace YTManager.Controllers { // Check if the periodic update job is enqued. [HttpGet("Update")] public IActionResult Get_Update_Status() { - bool exists = Hangfire.JobStorage.Current.GetConnection().GetRecurringJobs().Any(j => j.Id == Mass_Updater_ID); - return Ok(exists ? "true" : "false"); + return Ok(get_massupdatedaemon() == null ? "false" : "true"); } } } diff --git a/YTManager/Migrations/20180220053952_added_refreshed.Designer.cs b/YTManager/Migrations/20180220053952_added_refreshed.Designer.cs new file mode 100644 index 0000000..49aba42 --- /dev/null +++ b/YTManager/Migrations/20180220053952_added_refreshed.Designer.cs @@ -0,0 +1,102 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Storage.Internal; +using System; +using YTManager; + +namespace YTManager.Migrations +{ + [DbContext(typeof(MediaDB))] + [Migration("20180220053952_added_refreshed")] + partial class added_refreshed + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn) + .HasAnnotation("ProductVersion", "2.0.1-rtm-125"); + + modelBuilder.Entity("YTManager.Models.Channel", b => + { + b.Property("PrimaryKey") + .ValueGeneratedOnAdd(); + + b.Property("AddedtoDB"); + + b.Property("Description") + .IsRequired(); + + b.Property("Refreshed"); + + b.Property("ThumbnailURL") + .IsRequired(); + + b.Property("Title") + .IsRequired(); + + b.Property("YoutubeID") + .IsRequired(); + + b.HasKey("PrimaryKey"); + + b.ToTable("Channels"); + }); + + modelBuilder.Entity("YTManager.Models.Tag", b => + { + b.Property("PrimaryKey") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired(); + + b.HasKey("PrimaryKey"); + + b.ToTable("Tags"); + }); + + modelBuilder.Entity("YTManager.Models.Video", b => + { + b.Property("PrimaryKey") + .ValueGeneratedOnAdd(); + + b.Property("AddedToYT"); + + b.Property("AddedtoDB"); + + b.Property("ChannelPrimaryKey"); + + b.Property("Description") + .IsRequired(); + + b.Property("ThumbnailURL") + .IsRequired(); + + b.Property("Title") + .IsRequired(); + + b.Property("YoutubeID") + .IsRequired(); + + b.HasKey("PrimaryKey"); + + b.HasIndex("ChannelPrimaryKey"); + + b.ToTable("Videos"); + }); + + modelBuilder.Entity("YTManager.Models.Video", b => + { + b.HasOne("YTManager.Models.Channel") + .WithMany("Videos") + .HasForeignKey("ChannelPrimaryKey"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/YTManager/Migrations/20180220053952_added_refreshed.cs b/YTManager/Migrations/20180220053952_added_refreshed.cs new file mode 100644 index 0000000..0b532c7 --- /dev/null +++ b/YTManager/Migrations/20180220053952_added_refreshed.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore.Migrations; +using System; +using System.Collections.Generic; + +namespace YTManager.Migrations +{ + public partial class added_refreshed : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "Refreshed", + table: "Channels", + nullable: false, + defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Refreshed", + table: "Channels"); + } + } +} diff --git a/YTManager/Migrations/MediaDBModelSnapshot.cs b/YTManager/Migrations/MediaDBModelSnapshot.cs index bd15502..676f4da 100644 --- a/YTManager/Migrations/MediaDBModelSnapshot.cs +++ b/YTManager/Migrations/MediaDBModelSnapshot.cs @@ -30,6 +30,8 @@ namespace YTManager.Migrations b.Property("Description") .IsRequired(); + b.Property("Refreshed"); + b.Property("ThumbnailURL") .IsRequired(); diff --git a/YTManager/Models/Channel.cs b/YTManager/Models/Channel.cs index bca9469..9fcac58 100644 --- a/YTManager/Models/Channel.cs +++ b/YTManager/Models/Channel.cs @@ -30,6 +30,10 @@ namespace YTManager.Models { [Required] public DateTime AddedtoDB { get; set; } + //! Last time this channel was updated. + [Required] + public DateTime Refreshed { get; set; } + // Videos this channel has. public List