generated from noisedestroyers/claude
updated db schema def
This commit is contained in:
@@ -0,0 +1 @@
|
||||
{"RootPath":"D:\\DTS\\Code\\CCNetLogReader\\FogbugzWrapper","ProjectFileName":"FogbugzWrapper.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"Cases.cs"},{"SourceFile":"FBEvent.cs"},{"SourceFile":"FogbugzClient.cs"},{"SourceFile":"Project.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"ZendeskCase.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.8.AssemblyAttributes.cs"}],"References":[{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"D:\\DTS\\Code\\CCNetLogReader\\FogbugzWrapper\\bin\\Debug\\FogbugzWrapper.dll","OutputItemRelativePath":"FogbugzWrapper.dll"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]}
|
||||
164
legacy/CCNetLogReader/FogbugzWrapper/Cases.cs
Normal file
164
legacy/CCNetLogReader/FogbugzWrapper/Cases.cs
Normal file
@@ -0,0 +1,164 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace FogbugzWrapper
|
||||
{
|
||||
[XmlRoot(ElementName = "event")]
|
||||
public class Event
|
||||
{
|
||||
|
||||
[XmlElement(ElementName = "ixBugEvent")]
|
||||
public List<int> IxBugEvent { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "evt")]
|
||||
public int Evt { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sVerb")]
|
||||
public string SVerb { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "ixPerson")]
|
||||
public int IxPerson { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "ixPersonAssignedTo")]
|
||||
public int IxPersonAssignedTo { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "dt")]
|
||||
public DateTime Dt { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "s")]
|
||||
public object S { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "fEmail")]
|
||||
public bool FEmail { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "fHTML")]
|
||||
public bool FHTML { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "fExternal")]
|
||||
public bool FExternal { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sChanges")]
|
||||
public object SChanges { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sFormat")]
|
||||
public object SFormat { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "rgAttachments")]
|
||||
public object RgAttachments { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "evtDescription")]
|
||||
public string EvtDescription { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "bEmail")]
|
||||
public bool BEmail { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "bExternal")]
|
||||
public bool BExternal { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sPerson")]
|
||||
public string SPerson { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sHtml")]
|
||||
public object SHtml { get; set; }
|
||||
|
||||
[XmlAttribute(AttributeName = "ixBug")]
|
||||
public int IxBug { get; set; }
|
||||
|
||||
[XmlText]
|
||||
public string Text { get; set; }
|
||||
}
|
||||
|
||||
[XmlRoot(ElementName = "events")]
|
||||
public class Events
|
||||
{
|
||||
|
||||
[XmlElement(ElementName = "event")]
|
||||
public List<Event> Event { get; set; }
|
||||
}
|
||||
|
||||
[XmlRoot(ElementName = "case")]
|
||||
public class Case
|
||||
{
|
||||
[XmlElement(ElementName = "ixBug")]
|
||||
public List<int> IxBug { get; set; }
|
||||
public int BugIdx
|
||||
{
|
||||
get => IxBug[0];
|
||||
}
|
||||
|
||||
[XmlElement(ElementName = "ixProject")]
|
||||
public int IxProject { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "fOpen")]
|
||||
public bool FOpen { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sTitle")]
|
||||
public string STitle { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sProject")]
|
||||
public string SProject { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sArea")]
|
||||
public string SArea { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sStatus")]
|
||||
public string SStatus { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "dtLastUpdated")]
|
||||
public DateTime DtLastUpdated { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "events")]
|
||||
public Events Events { get; set; }
|
||||
|
||||
[XmlAttribute(AttributeName = "operations")]
|
||||
public string Operations { get; set; }
|
||||
|
||||
[XmlText]
|
||||
public string Text { get; set; }
|
||||
public Case() { }
|
||||
public Case(Case copy)
|
||||
{
|
||||
IxBug = copy.IxBug;
|
||||
IxProject = copy.IxProject;
|
||||
FOpen = copy.FOpen;
|
||||
STitle = copy.STitle;
|
||||
SProject = copy.SProject;
|
||||
SArea = copy.SArea;
|
||||
SStatus = copy.SStatus;
|
||||
DtLastUpdated = copy.DtLastUpdated;
|
||||
Operations = copy.Operations;
|
||||
Text = copy.Text;
|
||||
}
|
||||
}
|
||||
|
||||
[XmlRoot(ElementName = "cases")]
|
||||
public class Cases
|
||||
{
|
||||
|
||||
[XmlElement(ElementName = "case")]
|
||||
public List<Case> Case { get; set; }
|
||||
|
||||
[XmlAttribute(AttributeName = "count")]
|
||||
public int Count { get; set; }
|
||||
|
||||
[XmlAttribute(AttributeName = "totalHits")]
|
||||
public int TotalHits { get; set; }
|
||||
|
||||
[XmlText]
|
||||
public string Text { get; set; }
|
||||
}
|
||||
|
||||
[XmlRoot(ElementName = "response")]
|
||||
public class CasesResponse
|
||||
{
|
||||
|
||||
[XmlElement(ElementName = "description")]
|
||||
public string Description { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "cases")]
|
||||
public Cases Cases { get; set; }
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
77
legacy/CCNetLogReader/FogbugzWrapper/FBEvent.cs
Normal file
77
legacy/CCNetLogReader/FogbugzWrapper/FBEvent.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Xml;
|
||||
|
||||
namespace FogbugzWrapper
|
||||
{
|
||||
public class FBEvent
|
||||
{
|
||||
public enum FBStatuses
|
||||
{
|
||||
UNKNOWN,
|
||||
Opened,
|
||||
Resolved,
|
||||
Closed,
|
||||
Reactivated
|
||||
}
|
||||
|
||||
public string User { get; set; }
|
||||
public string Comment { get; set; }
|
||||
public string StatusString { get; set; }
|
||||
public string TimeStamp { get; set; }
|
||||
public string ReleaseNote { get; set; }
|
||||
|
||||
public int ZendeskNumber { get; set; }
|
||||
|
||||
public FBEvent()
|
||||
{
|
||||
}
|
||||
|
||||
public FBEvent(string dt, string sVerb, string s, string sPerson)
|
||||
{
|
||||
TimeStamp = dt;
|
||||
Comment = s;
|
||||
StatusString = sVerb;
|
||||
User = sPerson;
|
||||
UpdateStatus();
|
||||
}
|
||||
|
||||
public FBEvent(XmlNode eventNode)
|
||||
{
|
||||
TimeStamp = eventNode.SelectSingleNode("dt").InnerText;
|
||||
Comment = eventNode.SelectSingleNode("s").InnerText;
|
||||
User = eventNode.SelectSingleNode("sPerson").InnerText;
|
||||
StatusString = eventNode.SelectSingleNode("sVerb").InnerText;
|
||||
if (StatusString == "ReleaseNoted")
|
||||
{
|
||||
var rNote = eventNode.SelectSingleNode("sChanges").InnerText;
|
||||
if (rNote.ToLower() != "<IGNORE>".ToLower())
|
||||
{
|
||||
ReleaseNote = rNote;
|
||||
}
|
||||
}
|
||||
if(StatusString=="sZendesk")
|
||||
{
|
||||
if (int.TryParse(eventNode.SelectSingleNode("sChanges").InnerText, out int zendeskNumber))
|
||||
{
|
||||
ZendeskNumber = zendeskNumber;
|
||||
}
|
||||
}
|
||||
UpdateStatus();
|
||||
}
|
||||
|
||||
private void UpdateStatus()
|
||||
{
|
||||
var fBStatuses = Enum.GetValues(typeof(FBStatuses)).Cast<FBStatuses>().ToArray();
|
||||
foreach (var s in fBStatuses)
|
||||
{
|
||||
if (StatusString.StartsWith(s.ToString()))
|
||||
{
|
||||
Status = s;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public FBStatuses Status { get; set; }
|
||||
}
|
||||
}
|
||||
364
legacy/CCNetLogReader/FogbugzWrapper/FogbugzClient.cs
Normal file
364
legacy/CCNetLogReader/FogbugzWrapper/FogbugzClient.cs
Normal file
@@ -0,0 +1,364 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Security.Policy;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace FogbugzWrapper
|
||||
{
|
||||
public class FogbugzClient
|
||||
{
|
||||
public string Token { get; } = "1u4thrqm93uqpfr8ptbj2bc112gseo";
|
||||
public static string FogbugzURL { get; set; }
|
||||
private bool _loggedOn = false;
|
||||
|
||||
public string FogbugzLogDir { get; set; } = "FogbugzLog\\";
|
||||
|
||||
public bool IsLoggedIn()
|
||||
{
|
||||
return _loggedOn;
|
||||
}
|
||||
|
||||
public FogbugzClient()
|
||||
{
|
||||
}
|
||||
public FogbugzClient(string uRL, string token)
|
||||
{
|
||||
Init(uRL);
|
||||
Token = token;
|
||||
_loggedOn = LogOn();
|
||||
}
|
||||
public FogbugzClient(string uRL, string email, string password)
|
||||
{
|
||||
Init(uRL);
|
||||
var doc = new XmlDocument();
|
||||
var resp = Command($"logon&email={System.Net.WebUtility.UrlEncode(email)}&password={password}");
|
||||
doc.LoadXml(resp);
|
||||
|
||||
Token = doc.SelectSingleNode("response").FirstChild.InnerText;
|
||||
_loggedOn = LogOn();
|
||||
}
|
||||
private void Init(string uRL)
|
||||
{
|
||||
if (!Directory.Exists($"{FogbugzLogDir}"))
|
||||
{
|
||||
Directory.CreateDirectory($"{FogbugzLogDir}");
|
||||
}
|
||||
FogbugzURL = uRL;
|
||||
}
|
||||
|
||||
private string TokenedCommand(string command)
|
||||
{
|
||||
return Command($"{command}&token={Token}");
|
||||
}
|
||||
|
||||
private string Command(string command)
|
||||
{
|
||||
// Create a request using a URL that can receive a post.
|
||||
WebRequest request = WebRequest.Create(FogbugzURL);
|
||||
request.Proxy = null;
|
||||
// Set the Method property of the request to POST.
|
||||
request.Method = "POST";
|
||||
|
||||
// Create POST data and convert it to a byte array.
|
||||
string postData = $"cmd={command}";
|
||||
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
|
||||
|
||||
// Set the ContentType property of the WebRequest.
|
||||
request.ContentType = "application/x-www-form-urlencoded";
|
||||
// Set the ContentLength property of the WebRequest.
|
||||
request.ContentLength = byteArray.Length;
|
||||
|
||||
// Get the request stream.
|
||||
Stream dataStream = request.GetRequestStream();
|
||||
// Write the data to the request stream.
|
||||
dataStream.Write(byteArray, 0, byteArray.Length);
|
||||
// Close the Stream object.
|
||||
dataStream.Close();
|
||||
|
||||
// Get the response.
|
||||
var response = request.GetResponse();
|
||||
// Display the status.
|
||||
//Console.WriteLine(((HttpWebResponse)response).StatusDescription);
|
||||
|
||||
var responseFromServer = string.Empty;
|
||||
// Get the stream containing content returned by the server.
|
||||
// The using block ensures the stream is automatically closed.
|
||||
using (dataStream = response.GetResponseStream())
|
||||
{
|
||||
// Open the stream using a StreamReader for easy access.
|
||||
StreamReader reader = new StreamReader(dataStream);
|
||||
// Read the content.
|
||||
responseFromServer = reader.ReadToEnd();
|
||||
// Display the content.
|
||||
//Console.WriteLine(responseFromServer);
|
||||
}
|
||||
// Close the response.
|
||||
response.Close();
|
||||
return responseFromServer;
|
||||
}
|
||||
|
||||
public string GetArea(int bugNumber)
|
||||
{
|
||||
var doc = new XmlDocument();
|
||||
var resp = TokenedCommand($"search&q={bugNumber}&cols=sArea");
|
||||
doc.LoadXml(resp);
|
||||
|
||||
return doc.SelectSingleNode("response").FirstChild.FirstChild.FirstChild.InnerText;
|
||||
}
|
||||
|
||||
public void CreateNewTicket(string projectName, string projArea, string title, string description, string assignedTo)
|
||||
{
|
||||
var doc = new XmlDocument();
|
||||
var resp = TokenedCommand($"new&sProject={projectName}&sArea={projArea}&sTitle={title}&sEvent={description}&sPersonAssignedTo={assignedTo}&fRichText=1");
|
||||
doc.LoadXml(resp);
|
||||
|
||||
//return doc.SelectSingleNode("response").FirstChild.FirstChild.FirstChild.InnerText;
|
||||
}
|
||||
|
||||
public string GetTitle(int bugNumber)
|
||||
{
|
||||
var doc = new XmlDocument();
|
||||
var resp = TokenedCommand($"search&q={bugNumber}&cols=sTitle");
|
||||
doc.LoadXml(resp);
|
||||
|
||||
return doc.SelectSingleNode("response").FirstChild.FirstChild.FirstChild.InnerText;
|
||||
}
|
||||
|
||||
public string GetProject(int bugNumber)
|
||||
{
|
||||
var doc = new XmlDocument();
|
||||
var resp = TokenedCommand($"search&q={bugNumber}&cols=sProject");
|
||||
doc.LoadXml(resp);
|
||||
|
||||
return doc.SelectSingleNode("response").FirstChild.FirstChild.FirstChild.InnerText;
|
||||
}
|
||||
public void TouchCase(int caseIdx)
|
||||
{
|
||||
TokenedCommand($"edit&ixBug={caseIdx}&sEvent=Touched");
|
||||
}
|
||||
public void ResolveAndClose(int caseIdx)
|
||||
{
|
||||
TokenedCommand($"resolve&ixBug={caseIdx}&sEvent=ResolvedByManuscriptEdit");
|
||||
TokenedCommand($"close&ixBug={caseIdx}&sEvent=ClosedByManuscriptEdit");
|
||||
}
|
||||
public ProjectResponse GetProjects()
|
||||
{
|
||||
var resp = TokenedCommand($"listProjects");
|
||||
var serializer = new XmlSerializer(typeof(ProjectResponse));
|
||||
|
||||
using (var reader = new StringReader(resp))
|
||||
{
|
||||
return (ProjectResponse)serializer.Deserialize(reader);
|
||||
}
|
||||
}
|
||||
|
||||
public CasesResponse GetCases(int filter)
|
||||
{
|
||||
var resp = TokenedCommand($"listCases&sFilter={filter}&cols=ixBug,ixProject,fOpen,sTitle,sProject,sArea,sStatus,dtLastUpdated,events");
|
||||
var serializer = new XmlSerializer(typeof(CasesResponse));
|
||||
using (var reader = new StringReader(resp))
|
||||
{
|
||||
return (CasesResponse)serializer.Deserialize(reader);
|
||||
}
|
||||
}
|
||||
public List<FBEvent> GetEvents(int bugNumber)
|
||||
{
|
||||
var doc = new XmlDocument();
|
||||
var resp = TokenedCommand($"search&q={bugNumber}&cols=events,plugin_customfield");
|
||||
doc.LoadXml(resp);
|
||||
var timeStamps = doc.GetElementsByTagName("dt");
|
||||
if (timeStamps.Count == 0) return new List<FBEvent>();
|
||||
var lastUpdate = DateTime.Parse(timeStamps.Item(timeStamps.Count - 1).InnerText);
|
||||
|
||||
if (File.Exists($"{FogbugzLogDir}{bugNumber}.{lastUpdate.Ticks}.xml"))
|
||||
{
|
||||
return DeSerializeObject<List<FBEvent>>($"{FogbugzLogDir}{bugNumber}.{lastUpdate.Ticks}.xml");
|
||||
}
|
||||
|
||||
var fbEventList = new List<FBEvent>();
|
||||
var events = doc.SelectSingleNode("response").FirstChild.FirstChild.FirstChild;
|
||||
|
||||
foreach (XmlNode eventNode in doc.SelectSingleNode("response").FirstChild.FirstChild.FirstChild)
|
||||
{
|
||||
fbEventList.Add(new FBEvent(eventNode));
|
||||
}
|
||||
fbEventList.Reverse();
|
||||
SerializeObject(fbEventList, $"{FogbugzLogDir}{bugNumber}.{lastUpdate.Ticks}.xml");
|
||||
|
||||
return fbEventList;
|
||||
}
|
||||
public List<ZendeskCase> GetZendeskCases(int updatedMinutes)
|
||||
{
|
||||
Console.WriteLine($"GetZendeskCases - updatedMinutes:{updatedMinutes}");
|
||||
var rt = new List<ZendeskCase>();
|
||||
var doc = new XmlDocument();
|
||||
if (!IsLoggedIn())
|
||||
{
|
||||
Console.WriteLine("GetZendeskCases - Not Logged In.");
|
||||
return null;
|
||||
}
|
||||
var resp = TokenedCommand($"search&q=ZendeskTicketNumber:* lastupdated:\"-{updatedMinutes}m..now\"&cols=plugin_customfields_at_fogcreek_com_zendeskxissuea73,events,sStatus");
|
||||
doc.LoadXml(resp);
|
||||
//Console.WriteLine($"Full Response: {doc.SelectSingleNode("response").InnerText}");
|
||||
var zdCases = doc.SelectSingleNode("response").ChildNodes[0];
|
||||
if (zdCases == null)
|
||||
{
|
||||
Console.WriteLine($"GetZendeskCases - zdCases is null");
|
||||
return null;
|
||||
}
|
||||
Console.WriteLine($"GetZendeskCases - zdCases.ChildNodes.Count:{zdCases.ChildNodes.Count}");
|
||||
foreach (XmlNode zdNode in zdCases)
|
||||
{
|
||||
if (0 == zdNode.SelectNodes("events").Count
|
||||
|| string.IsNullOrEmpty(zdNode.SelectSingleNode("plugin_customfields_at_fogcreek_com_zendeskxissuea73").InnerText))
|
||||
{ continue; }
|
||||
var zdNumber = int.Parse(zdNode.SelectSingleNode("plugin_customfields_at_fogcreek_com_zendeskxissuea73").InnerText);
|
||||
var fbNumber = int.Parse(zdNode.Attributes["ixBug"].Value);
|
||||
var oldFbStatus = FBEvent.FBStatuses.UNKNOWN;
|
||||
foreach (XmlNode fbEvent in zdNode.SelectSingleNode("events"))
|
||||
{
|
||||
var fbLatestEvent = new FBEvent(fbEvent);
|
||||
if (DateTime.Parse(fbLatestEvent.TimeStamp) > DateTime.Now.AddMinutes(-updatedMinutes) &&
|
||||
fbLatestEvent.Status != oldFbStatus &&
|
||||
fbLatestEvent.StatusString != "Edited" &&
|
||||
fbLatestEvent.StatusString != "Assigned")
|
||||
{
|
||||
rt.Add(new ZendeskCase(zdNumber, fbNumber, fbLatestEvent));
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
}
|
||||
oldFbStatus = fbLatestEvent.Status;
|
||||
}
|
||||
|
||||
}
|
||||
return rt;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serializes an object.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="serializableObject"></param>
|
||||
/// <param name="fileName"></param>
|
||||
public void SerializeObject<T>(T serializableObject, string fileName)
|
||||
{
|
||||
if (serializableObject == null) { return; }
|
||||
|
||||
try
|
||||
{
|
||||
XmlDocument xmlDocument = new XmlDocument();
|
||||
XmlSerializer serializer = new XmlSerializer(serializableObject.GetType());
|
||||
using (MemoryStream stream = new MemoryStream())
|
||||
{
|
||||
serializer.Serialize(stream, serializableObject);
|
||||
stream.Position = 0;
|
||||
xmlDocument.Load(stream);
|
||||
xmlDocument.Save(fileName);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//Log exception here
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes an xml file into an object list
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="fileName"></param>
|
||||
/// <returns></returns>
|
||||
public T DeSerializeObject<T>(string fileName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(fileName)) { return default(T); }
|
||||
|
||||
T objectOut = default(T);
|
||||
|
||||
try
|
||||
{
|
||||
XmlDocument xmlDocument = new XmlDocument();
|
||||
xmlDocument.Load(fileName);
|
||||
string xmlString = xmlDocument.OuterXml;
|
||||
|
||||
using (StringReader read = new StringReader(xmlString))
|
||||
{
|
||||
Type outType = typeof(T);
|
||||
|
||||
XmlSerializer serializer = new XmlSerializer(outType);
|
||||
using (XmlReader reader = new XmlTextReader(read))
|
||||
{
|
||||
objectOut = (T)serializer.Deserialize(reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//Log exception here
|
||||
}
|
||||
|
||||
return objectOut;
|
||||
}
|
||||
|
||||
public FBEvent.FBStatuses GetStatus(int bugNumber)
|
||||
{
|
||||
var fbevents = GetEvents(bugNumber);
|
||||
|
||||
foreach (var e in fbevents)
|
||||
{
|
||||
if (e.Status != FBEvent.FBStatuses.UNKNOWN)
|
||||
{
|
||||
return e.Status;
|
||||
}
|
||||
}
|
||||
return FBEvent.FBStatuses.UNKNOWN;
|
||||
}
|
||||
|
||||
public string GetReleaseNote(int bugNumber)
|
||||
{
|
||||
var fbevents = GetEvents(bugNumber);
|
||||
|
||||
foreach (var e in fbevents)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(e.ReleaseNote))
|
||||
{
|
||||
return e.ReleaseNote;
|
||||
}
|
||||
}
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
public int GetZendeskNumber(int bugNumber)
|
||||
{
|
||||
var fbevents = GetEvents(bugNumber);
|
||||
|
||||
foreach (var e in fbevents)
|
||||
{
|
||||
if (0 != e.ZendeskNumber)
|
||||
{
|
||||
return e.ZendeskNumber;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public bool LogOn()
|
||||
{
|
||||
_loggedOn = true;
|
||||
return _loggedOn;
|
||||
}
|
||||
|
||||
public void LogOff()
|
||||
{
|
||||
var resp = TokenedCommand("logoff");
|
||||
_loggedOn = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
59
legacy/CCNetLogReader/FogbugzWrapper/FogbugzWrapper.csproj
Normal file
59
legacy/CCNetLogReader/FogbugzWrapper/FogbugzWrapper.csproj
Normal file
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{4A6B9D30-DA78-4BFE-B7CD-38774BE0508F}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>FogbugzWrapper</RootNamespace>
|
||||
<AssemblyName>FogbugzWrapper</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="CsQuery, Version=1.3.3.249, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\CsQuery.1.3.4\lib\net40\CsQuery.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Cases.cs" />
|
||||
<Compile Include="FBEvent.cs" />
|
||||
<Compile Include="FogbugzClient.cs" />
|
||||
<Compile Include="Project.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ZendeskCase.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
51
legacy/CCNetLogReader/FogbugzWrapper/Project.cs
Normal file
51
legacy/CCNetLogReader/FogbugzWrapper/Project.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace FogbugzWrapper
|
||||
{
|
||||
[XmlRoot(ElementName = "project")]
|
||||
public class Project
|
||||
{
|
||||
[XmlElement(ElementName = "ixProject")]
|
||||
public int IxProject { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sProject")]
|
||||
public string SProject { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "ixPersonOwner")]
|
||||
public int IxPersonOwner { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sPersonOwner")]
|
||||
public string SPersonOwner { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sEmail")]
|
||||
public string SEmail { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "sPhone")]
|
||||
public object SPhone { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "fInbox")]
|
||||
public bool FInbox { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "ixWorkflow")]
|
||||
public int IxWorkflow { get; set; }
|
||||
|
||||
[XmlElement(ElementName = "fDeleted")]
|
||||
public bool FDeleted { get; set; }
|
||||
}
|
||||
[XmlRoot(ElementName = "projects")]
|
||||
public class Projects
|
||||
{
|
||||
|
||||
[XmlElement(ElementName = "project")]
|
||||
public List<Project> Project { get; set; }
|
||||
}
|
||||
|
||||
[XmlRoot(ElementName = "response")]
|
||||
public class ProjectResponse
|
||||
{
|
||||
|
||||
[XmlElement(ElementName = "projects")]
|
||||
public Projects Projects { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("FogbugzWrapper")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("FogbugzWrapper")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("4a6b9d30-da78-4bfe-b7cd-38774be0508f")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
20
legacy/CCNetLogReader/FogbugzWrapper/ZendeskCase.cs
Normal file
20
legacy/CCNetLogReader/FogbugzWrapper/ZendeskCase.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using System;
|
||||
|
||||
namespace FogbugzWrapper
|
||||
{
|
||||
public class ZendeskCase
|
||||
{
|
||||
public int ZendeskNumber {get;}
|
||||
public int FogbugzNumber {get;}
|
||||
public ZendeskCase() { }
|
||||
public ZendeskCase(int zdRef, int fbRef, FBEvent latestEvent)
|
||||
{
|
||||
ZendeskNumber = zdRef;
|
||||
FogbugzNumber = fbRef;
|
||||
LatestEvent = latestEvent;
|
||||
TimeStamp = DateTime.Parse(latestEvent.TimeStamp);
|
||||
}
|
||||
public FBEvent LatestEvent { get; }
|
||||
public DateTime TimeStamp { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.5.2", FrameworkDisplayName = "")]
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
|
||||
Binary file not shown.
@@ -0,0 +1,6 @@
|
||||
C:\DTS\Code\CCNetLogReader\FogbugzWrapper\bin\Debug\FogbugzWrapper.dll
|
||||
C:\DTS\Code\CCNetLogReader\FogbugzWrapper\bin\Debug\FogbugzWrapper.pdb
|
||||
C:\DTS\Code\CCNetLogReader\FogbugzWrapper\obj\Debug\FogbugzWrapper.csproj.AssemblyReference.cache
|
||||
C:\DTS\Code\CCNetLogReader\FogbugzWrapper\obj\Debug\FogbugzWrapper.csproj.CoreCompileInputs.cache
|
||||
C:\DTS\Code\CCNetLogReader\FogbugzWrapper\obj\Debug\FogbugzWrapper.dll
|
||||
C:\DTS\Code\CCNetLogReader\FogbugzWrapper\obj\Debug\FogbugzWrapper.pdb
|
||||
Reference in New Issue
Block a user