private string GenerateSource(IMusicDataTable <IMusicDataTableUnit> table, string versionName, string templatePath) { var source = ReadTemplate(templatePath); var tableTemplate = GetTemplate(source, "__TEMPLATE-TABLE__"); var unitTemplate = GetTemplate(source, "__TEMPLATE-TABLE-ROW__"); foreach (var group in table.GetTableUnits().GroupBy(u => u.Genre)) { var tableBodyHtml = group .Select(u => { var src = unitTemplate; src = src.Replace("%music-name%", HttpUtility.HtmlEncode(u.Name)); src = src.Replace("%base-rating-basic%", u.GetBaseRating(Difficulty.Basic).ToString("0.0")); src = src.Replace("%base-rating-advanced%", u.GetBaseRating(Difficulty.Advanced).ToString("0.0")); src = src.Replace("%base-rating-expert%", u.GetBaseRating(Difficulty.Expert).ToString("0.0")); src = src.Replace("%base-rating-master%", u.GetBaseRating(Difficulty.Master).ToString("0.0")); src = src.Replace("%unverified-basic%", !u.VerifiedBaseRating(Difficulty.Basic) ? "unverified" : ""); src = src.Replace("%unverified-advanced%", !u.VerifiedBaseRating(Difficulty.Advanced) ? "unverified" : ""); src = src.Replace("%unverified-expert%", !u.VerifiedBaseRating(Difficulty.Expert) ? "unverified" : ""); src = src.Replace("%unverified-master%", !u.VerifiedBaseRating(Difficulty.Master) ? "unverified" : ""); return(src); }) .Aggregate((acc, src) => acc + "\n" + src); var tableHtml = tableTemplate.Replace("%table-body%", tableBodyHtml); source = source.Replace($@"%table({group.Key})%", tableHtml); } return(source); }
public override MusicDataTable CreateJsonData(IMusicDataTable <IMusicDataTableUnit> data) { var musicDataTable = new MusicDataTable(); musicDataTable.Add(data); return(musicDataTable); }
private static void Deploy(DeployArgs args, IMusicDataTable <IMusicDataTableUnit> musicDataTable, string minLevelText, string maxLevelText, string currentHash = "") { var client = new HttpClient(); var getCurrent = args.CreateRequestMessage(HttpMethod.Get); var getCurrentResult = client.SendAsync(getCurrent).Result; var currentSource = Encoding.UTF8.GetString(getCurrentResult.Content.ReadAsByteArrayAsync().Result); var currentDocument = XDocument.Parse(currentSource); XNamespace ns = "http://www.w3.org/2005/Atom"; var title = currentDocument.Element(ns + "entry").Element(ns + "title").Value; var currentContent = currentDocument.Element(ns + "entry").Element(ns + "content").Value; var beginToken = "<!--GEN_BY_REPORT_TOOL_BEGIN-->"; var endToken = "<!--GEN_BY_REPORT_TOOL_END-->"; var beginIndex = currentContent.IndexOf(beginToken); var endIndex = currentContent.IndexOf(endToken); if (beginIndex == -1 || endIndex == -1) { throw new Exception("Not find token."); } var(hash, expert, master) = GetTableHash(musicDataTable); if (currentHash == hash) { Console.WriteLine("Skipping deploy."); return; } var minLevel = decimal.Parse(minLevelText); var maxLevel = decimal.Parse(maxLevelText); var nextTable = GenerateTableText(minLevel, maxLevel, expert, master); var nextContent = currentContent.Remove(beginIndex + beginToken.Length, endIndex - (beginIndex + beginToken.Length)); nextContent = nextContent.Insert(beginIndex + beginToken.Length, nextTable); var nextSource = $@" <entry xmlns=""http://www.w3.org/2005/Atom"" xmlns:app=""http://www.w3.org/2007/app""> <title>{title}</title> <author><name>name</name></author> <content type=""text/html""> {HttpUtility.HtmlEncode(nextContent.ToString())} </content> <category term=""CHUNITHM"" /> <app:control> <app:draft>no</app:draft> </app:control> </entry> "; Console.WriteLine(nextSource); var putRequest = args.CreateRequestMessage(HttpMethod.Put); putRequest.Content = new StringContent(nextSource); var putRequestResult = client.SendAsync(putRequest).Result; Console.WriteLine(putRequestResult.Content.ReadAsStringAsync().Result); }
public override XLWorkbook CreateWorkbook(IMusicDataTable <IMusicDataTableUnit> data) { var workbook = new XLWorkbook(); ApplyRecord(workbook.AddWorksheet("MusicData"), data); return(workbook); }
public override string CreateCsv(IMusicDataTable <IMusicDataTableUnit> data) { var csv = new StringBuilder(); AppendHeader(csv); foreach (var unit in data.GetTableUnits()) { AppendRow(csv, unit); } return(csv.ToString()); }
public void Call(string[] args) { var arg = new Argument(args); IMusicDataTable <IMusicDataTableUnit> table = null; using (var connector = new ChunithmMusicDatabaseHttpClientConnector(arg.DataBaseUrl)) { var tableGet = connector.GetTableAsync().Result; table = tableGet.MusicDataTable; } using (var writer = new StreamWriter(arg.DestinationPath)) { var source = GenerateSource(table, arg.VersionName, arg.TemplateHtmlPath); writer.Write(source); } }
private void ApplyRecord(IXLWorksheet worksheet, IMusicDataTable <IMusicDataTableUnit> data) { if (worksheet == null || data == null) { return; } var header = new Header().GetColumnsMappedByParameter(); worksheet.Cell(1, header[Header.Parameter.Index].Index).Value = header[Header.Parameter.Index].Text; worksheet.Cell(1, header[Header.Parameter.Id].Index).Value = header[Header.Parameter.Id].Text; worksheet.Cell(1, header[Header.Parameter.Name].Index).Value = header[Header.Parameter.Name].Text; worksheet.Cell(1, header[Header.Parameter.Genre].Index).Value = header[Header.Parameter.Genre].Text; worksheet.Cell(1, header[Header.Parameter.Basic].Index).Value = header[Header.Parameter.Basic].Text; worksheet.Cell(1, header[Header.Parameter.Advanced].Index).Value = header[Header.Parameter.Advanced].Text; worksheet.Cell(1, header[Header.Parameter.Expert].Index).Value = header[Header.Parameter.Expert].Text; worksheet.Cell(1, header[Header.Parameter.Master].Index).Value = header[Header.Parameter.Master].Text; worksheet.Cell(1, header[Header.Parameter.BasicVerified].Index).Value = header[Header.Parameter.BasicVerified].Text; worksheet.Cell(1, header[Header.Parameter.AdvancedVerified].Index).Value = header[Header.Parameter.AdvancedVerified].Text; worksheet.Cell(1, header[Header.Parameter.ExpertVerified].Index).Value = header[Header.Parameter.ExpertVerified].Text; worksheet.Cell(1, header[Header.Parameter.MasterVerified].Index).Value = header[Header.Parameter.MasterVerified].Text; var musicDatas = data.GetTableUnits().ToList(); for (var i = 0; i < musicDatas.Count; i++) { var row = i + 2; worksheet.Cell(row, header[Header.Parameter.Index].Index).Value = i + 1; worksheet.Cell(row, header[Header.Parameter.Id].Index).Value = musicDatas[i].Id; worksheet.Cell(row, header[Header.Parameter.Name].Index).Value = musicDatas[i].Name; worksheet.Cell(row, header[Header.Parameter.Name].Index).DataType = XLDataType.Text; worksheet.Cell(row, header[Header.Parameter.Genre].Index).Value = musicDatas[i].Genre; worksheet.Cell(row, header[Header.Parameter.Basic].Index).Value = musicDatas[i].GetBaseRating(Difficulty.Basic); worksheet.Cell(row, header[Header.Parameter.Advanced].Index).Value = musicDatas[i].GetBaseRating(Difficulty.Advanced); worksheet.Cell(row, header[Header.Parameter.Expert].Index).Value = musicDatas[i].GetBaseRating(Difficulty.Expert); worksheet.Cell(row, header[Header.Parameter.Master].Index).Value = musicDatas[i].GetBaseRating(Difficulty.Master); worksheet.Cell(row, header[Header.Parameter.BasicVerified].Index).Value = musicDatas[i].VerifiedBaseRating(Difficulty.Basic); worksheet.Cell(row, header[Header.Parameter.AdvancedVerified].Index).Value = musicDatas[i].VerifiedBaseRating(Difficulty.Advanced); worksheet.Cell(row, header[Header.Parameter.ExpertVerified].Index).Value = musicDatas[i].VerifiedBaseRating(Difficulty.Expert); worksheet.Cell(row, header[Header.Parameter.MasterVerified].Index).Value = musicDatas[i].VerifiedBaseRating(Difficulty.Master); } }
public static void AreEqual(IMusicDataTable <IMusicDataTableUnit> expected, IMusicDataTable <IMusicDataTableUnit> actual) { Assert.IsNotNull(expected, "expected"); Assert.IsNotNull(actual, "actual"); var expectedTableUnits = expected.GetTableUnits().ToList(); var actualTableUnits = actual.GetTableUnits().ToList(); Assert.IsNotNull(expectedTableUnits, "expected.GetTableUnits()"); Assert.IsNotNull(actualTableUnits, "actual.GetTableUnits()"); Assert.AreEqual(expectedTableUnits.Count, actualTableUnits.Count, "件数"); var count = expectedTableUnits.Count; for (var i = 0; i < count; i++) { AreEqual(expectedTableUnits[i], actualTableUnits[i]); } }
private static (IMusicDataTableUnit[] expert, IMusicDataTableUnit[] master) SplitMusicDataTable(IMusicDataTable <IMusicDataTableUnit> musicDataTable) { var expert = musicDataTable.GetTableUnits() .Where(m => m.VerifiedBaseRating(Difficulty.Expert)) .Where(m => m.GetBaseRating(Difficulty.Expert) >= 11.0) .ToArray(); var master = musicDataTable.GetTableUnits() .Where(m => m.VerifiedBaseRating(Difficulty.Master)) .ToArray(); return(expert, master); }
public static void SetGlobalMusicDataTable(IMusicDataTable <IMusicDataTableUnit> globalMusicDataTable) { Utility.globalMusicDataTable = globalMusicDataTable; }
private static (string hash, IMusicDataTableUnit[] expert, IMusicDataTableUnit[] master) GetTableHash(IMusicDataTable <IMusicDataTableUnit> musicDataTable) { var expert = musicDataTable.GetTableUnits() .Where(m => m.VerifiedBaseRating(Difficulty.Expert)) .Where(m => m.GetBaseRating(Difficulty.Expert) >= 11.0) .ToArray(); var master = musicDataTable.GetTableUnits() .Where(m => m.VerifiedBaseRating(Difficulty.Master)) .ToArray(); var hashOrigin = new StringBuilder(); foreach (var unit in expert) { hashOrigin.Append(unit.Name).Append("EXP"); } foreach (var unit in master) { hashOrigin.Append(unit.Name); } var hash = new StringBuilder(); foreach (var @byte in MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(hashOrigin.ToString()))) { hash.Append(@byte.ToString("x2")); } return(hash.ToString(), expert, master); }