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