124 lines
5.5 KiB
C#
124 lines
5.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using director;
|
|
using Director;
|
|
using franz;
|
|
using Newtonsoft.Json;
|
|
using Schedulable.Show;
|
|
|
|
namespace ShowHandlers
|
|
{
|
|
public class YoutubeHandler : ShowHandler
|
|
{
|
|
private readonly AutoResetEvent checkSignal = new AutoResetEvent(false);
|
|
private static string[] AgentsNeeded { get; set; } = { "youtube" };
|
|
private List<string> agentsPresent {get;set;} = new List<string>();
|
|
public override TimeSpan LeadTimeDesired { get => TimeSpan.FromDays(1); }
|
|
private silver_messages.youtube.yt_metadata metadataSoFar = new silver_messages.youtube.yt_metadata();
|
|
|
|
public override void Handle(iCalHoopJumping.CalendarOccurrence evt)
|
|
{
|
|
Console.WriteLine($"begin youtube handler. current time {DateTime.Now.ToLongTimeString()}");
|
|
Console.WriteLine(JsonConvert.SerializeObject(evt));
|
|
Task.Run(() => PreShow(evt));
|
|
Console.WriteLine("kicked off the pre-show");
|
|
if (evt.OccurrenceStart > DateTime.Now)
|
|
{
|
|
Task.WaitAll(Task.Delay(evt.OccurrenceStart - DateTime.Now));
|
|
}
|
|
//youtube releases in particular jump right to post-show
|
|
PostShow(evt);
|
|
}
|
|
~YoutubeHandler()
|
|
{
|
|
//Telefranz.Instance.removeHandler<silver_messages.global.report>(agentReports);
|
|
//Telefranz.Instance.removeHandler<silver_messages.directorial.check_complete>(checkReports);
|
|
}
|
|
protected void PreShow(iCalHoopJumping.CalendarOccurrence evt)
|
|
{
|
|
Console.WriteLine($"it's the pre-show, showtime at: {evt.OccurrenceStart}");
|
|
|
|
preShow_GetAgents(evt, TimeSpan.FromMinutes(10));
|
|
preShow_RunChecks(evt, TimeSpan.FromMinutes(10));
|
|
Console.WriteLine("pre show seems to be set.");
|
|
}
|
|
protected void preShow_GetAgents(iCalHoopJumping.CalendarOccurrence evt, TimeSpan leadNeeded)
|
|
{
|
|
Console.WriteLine($"preshow agents needed: {string.Join(", ", AgentsNeeded)}");
|
|
agentsPresent.Clear();
|
|
|
|
//TODO: actual telefranz
|
|
//Telefranz.Instance.addHandler<silver_messages.global.report>(agentReports);
|
|
//Telefranz.Instance.ProduceMessage(new silver_messages.global.sound_off());
|
|
while (AgentsNeeded.Where(ap => !agentsPresent.Contains(ap))?.Count() > 0)
|
|
{
|
|
checkSignal.WaitOne(TimeSpan.FromSeconds(15));
|
|
if (DateTime.Now > evt.OccurrenceStart - leadNeeded)
|
|
{
|
|
var miaAgents = string.Join(", ", AgentsNeeded.Where(ap => !agentsPresent.Contains(ap)));
|
|
HumanCommunication.Instance.Say($"Youtube handler getting antsy and going forward. mia agents: {miaAgents}",
|
|
HumanCommunication.LogLevel.Warning);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
protected void preShow_RunChecks(iCalHoopJumping.CalendarOccurrence evt, TimeSpan leadNeeded)
|
|
{
|
|
var argsList = new List<string>() { JsonConvert.SerializeObject(evt) };
|
|
//Telefranz.Instance.addHandler<silver_messages.youtube.metadata_needed>(youtubeAgentReports);
|
|
Console.WriteLine($"pre show: run check. It's just going to be \"is the metadata set\".");
|
|
Action issueChecks = () =>
|
|
{
|
|
//Telefranz.Instance.ProduceMessage(new silver_messages.youtube.request_metadata_needed());
|
|
};
|
|
issueChecks();
|
|
while (metadataUnset(metadataSoFar))
|
|
{
|
|
//checkSignal.WaitOne(TimeSpan.FromHours(6));
|
|
checkSignal.WaitOne(TimeSpan.FromSeconds(15));
|
|
if (DateTime.Now > evt.OccurrenceStart - leadNeeded)
|
|
{
|
|
HumanCommunication.Instance.Say($"Youtube handler reports no metadata in time! too late now though. {JsonConvert.SerializeObject(metadataSoFar)}",
|
|
HumanCommunication.LogLevel.Error);
|
|
break;
|
|
}
|
|
issueChecks();
|
|
}
|
|
}
|
|
protected void agentReports(silver_messages.global.report r)
|
|
{
|
|
if (AgentsNeeded?.FirstOrDefault(an => an.ToLower() == r.name.ToLower()) != null)
|
|
{
|
|
lock (agentsPresent)
|
|
{
|
|
agentsPresent.Add(r.name.ToLower());
|
|
checkSignal.Set();
|
|
}
|
|
}
|
|
}
|
|
protected void youtubeAgentReports(silver_messages.youtube.metadata_needed neededmsg)
|
|
{
|
|
metadataSoFar = neededmsg.needed.Where(kvp => kvp.Key == "key")?.Select(kvp => kvp.Value)?.FirstOrDefault();
|
|
checkSignal.Set();
|
|
}
|
|
protected bool metadataUnset(silver_messages.youtube.yt_metadata metadata)
|
|
{
|
|
return (
|
|
string.IsNullOrWhiteSpace(metadata.playlist)
|
|
|| metadata.recording == null
|
|
|| metadata.release == null
|
|
|| string.IsNullOrWhiteSpace(metadata.thumbnail)
|
|
|| string.IsNullOrWhiteSpace(metadata.title)
|
|
);
|
|
}
|
|
protected void PostShow(iCalHoopJumping.CalendarOccurrence evt)
|
|
{
|
|
Console.WriteLine("there really isn't a post-show atm, but in future would be cool to pester matrix/discord/twitter");
|
|
//Telefranz.Instance.ProduceMessage(new silver_messages.directorial.execute_command("advertise"));
|
|
}
|
|
}
|
|
} |