Files
2025-07-22 11:34:56 -04:00

116 lines
5.5 KiB
C#

using Microsoft.VisualBasic;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ZendeskTickets
{
internal class Program
{
private const string TIMESTAMP_FILE = "lastRunTime.txt";
private const string OUTPUT_SEPERATOR = "========================";
private const string SINGLE_TAB = " ";
static void Main(string[] args)
{
FogbugzWrapper.FogbugzClient fogbugzClient;
if (string.IsNullOrEmpty(Settings1.Default.CurrentToken) && args.Length != 2)
{
Console.WriteLine("No Login Credentials!");
Console.ReadKey();
return;
}
else if(!string.IsNullOrEmpty(Settings1.Default.CurrentToken))
{
fogbugzClient = new FogbugzWrapper.FogbugzClient($@"http://{Properties.Settings1.Default.ManuscriptServerAddress}/api.asp?", Settings1.Default.CurrentToken);
}
else
{
fogbugzClient = new FogbugzWrapper.FogbugzClient($@"http://{Properties.Settings1.Default.ManuscriptServerAddress}/api.asp?", args[0], args[1]);
}
if (fogbugzClient == null)
{
Console.WriteLine($"Login failed for user:{args[0]}");
return;
}
Settings1.Default.CurrentToken = fogbugzClient.Token;
Settings1.Default.Save();
var loggedin = fogbugzClient.IsLoggedIn();
if (!loggedin) { Console.WriteLine($"ERROR: NOT LOGGED IN"); Console.ReadKey(); return; }
var zdCaseCount = 0;
var timeNow = DateTime.Now;
Console.WriteLine($"{timeNow.ToString()} Searching for ZD cases...");
int timeDeltaMinutes = 60;
if (File.Exists(TIMESTAMP_FILE))
{
timeDeltaMinutes = (int)(timeNow - DateTime.Parse(File.ReadAllText(TIMESTAMP_FILE))).TotalMinutes;
}
if (Settings1.Default.PublishResultsToZendesk)
{
File.WriteAllText(TIMESTAMP_FILE, timeNow.ToString());
}
var allZendeskCases = fogbugzClient.GetZendeskCases(timeDeltaMinutes);
if (allZendeskCases?.FirstOrDefault() == null)
{
Console.WriteLine($"ERROR: No Zendesk Cases.");
return;
}
else
{
var sb = new StringBuilder();
foreach (var zendeskCase in allZendeskCases
.OrderBy(x=>x.TimeStamp)
)
{
var comment = string.IsNullOrEmpty(zendeskCase.LatestEvent.Comment) ? "<no comment>" : $"{zendeskCase.LatestEvent.Comment}";
sb.AppendLine($"{Environment.NewLine}{SINGLE_TAB}ZD:{zendeskCase.ZendeskNumber}");
var zdfbMapping = "Automatic Update from Manuscript:" +
$"\\nMS Case:\\t\\t\\thttp://{Properties.Settings1.Default.ManuscriptServerAddress}/f/cases/{zendeskCase.FogbugzNumber}" +
$"\\nEventStatus:\\t\\t\\t{zendeskCase.LatestEvent.StatusString}" +
$"\\nTimestamp (PT):\\t\\t\\t{zendeskCase.TimeStamp}" +
$"\\nUser:\\t\\t\\t\\t{zendeskCase.LatestEvent.User}" +
$"\\nReleaseNote:\\t\\t{zendeskCase.LatestEvent.ReleaseNote}" +
$"\\nComment:" +
$"\\n{comment}";
sb.AppendLine(zdfbMapping);
var completeUpdate = string.Format("{{\"ticket\": {{\"comment\": {{ \"body\": \"{0}\", \"public\": false}} }} }}", zdfbMapping);
sb.AppendLine($"{Environment.NewLine}{OUTPUT_SEPERATOR}");
#region curl
if (Settings1.Default.PublishResultsToZendesk)
{
var curl = new System.Diagnostics.Process();
curl.StartInfo.FileName = "RunCurl.cmd";
var TempFileName = Path.GetTempFileName();
using (var sw = new StreamWriter(TempFileName))
{
sw.WriteLine(completeUpdate);
}
curl.StartInfo.Arguments = $"{zendeskCase.ZendeskNumber} {TempFileName}";
curl.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
curl.Start();
curl.WaitForExit();
}
#endregion
zdCaseCount++;
}
if (Settings1.Default.DebugLogging)
{
File.WriteAllText($"ZendeskTickets.{timeNow.ToString("yyMMdd.hhmmss")}.log", sb.ToString());
Console.Write(sb.ToString());
}
Console.WriteLine($"{DateTime.Now.ToString()} Done!" +
$"{Environment.NewLine}{SINGLE_TAB}Total Cases: {allZendeskCases.Count}" +
$"{Environment.NewLine}{SINGLE_TAB}Updated: {zdCaseCount}" +
$"{Environment.NewLine}{OUTPUT_SEPERATOR}" +
$"{Environment.NewLine}{OUTPUT_SEPERATOR}");
}
}
}
}