String getProgramsPerDay(ScheduleDataset.Channel channel, DateTime from, DateTime to) { StringBuilder sb = new StringBuilder(); foreach (var i in getDaysForPerChannelMode(from, to)) { var slots = new List <ScheduleDataset.Slot>(); double totalMinutes = 24 * 60; if (this.programsWithChId.ContainsKey(channel.id)) { foreach (var j in this.programsWithChId[channel.id]) { if (j.endAt <= i || (i + TimeSpan.FromHours(24)) <= j.startAt) { continue; } double scrollOffset = Math.Max((j.startAt - i).TotalMinutes, 0); double scrollHeight = (j.endAt - j.startAt).TotalMinutes; scrollHeight = Math.Min(scrollHeight, totalMinutes - scrollOffset); var add = new Tuple <ScheduleDataset.Slot, double, double>(j, scrollOffset, scrollHeight); slots.Add(j); } slots.Sort((a, b) => { return(a.startAt < b.startAt ? -1 : 1); }); } sb.AppendLine($"<td>\n\n{getOneChannel(slots, i, i + TimeSpan.FromHours(24))}\n\n</td>\n"); } return("<table><tr>\n" + sb.ToString() + "\n</tr></table>"); }
public void saveHtml(String outPath, ScheduleDataset.Channel saveChannel) { DateTime firstProgramTime = DateTime.Now, finalProgramTime = DateTime.Now; foreach (var i in this.programsWithChId[saveChannel.id]) { firstProgramTime = i.startAt < firstProgramTime ? i.startAt : firstProgramTime; finalProgramTime = finalProgramTime < i.endAt ? i.endAt : finalProgramTime; } //0分0秒に合わせる firstProgramTime = firstProgramTime.AddMinutes(firstProgramTime.Minute * -1); firstProgramTime = firstProgramTime.AddSeconds(firstProgramTime.Second * -1); firstProgramTime = firstProgramTime.AddMilliseconds(firstProgramTime.Millisecond * -1); finalProgramTime = finalProgramTime.AddHours(1); finalProgramTime = finalProgramTime.AddMinutes(finalProgramTime.Minute * -1); finalProgramTime = finalProgramTime.AddSeconds(finalProgramTime.Second * -1); finalProgramTime = finalProgramTime.AddMilliseconds(finalProgramTime.Millisecond * -1); String val; System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly(); using (System.IO.StreamReader sr = new System.IO.StreamReader(myAssembly.GetManifestResourceStream("abema_onair_schedule.Resources.outHtml.txt"), System.Text.Encoding.UTF8)) { val = sr.ReadToEnd(); } val = val.Replace("<!--ALL-CHANNELS-->", JsonConvert.SerializeObject(this.allChannelIds, Formatting.None)); val = val.Replace("<!--THIS-FILE-CONTAIN-CHANNELS-->", JsonConvert.SerializeObject(new List <ChannelAndId> { new ChannelAndId { ChannelId = saveChannel.id, ChannelName = saveChannel.name } }, Formatting.None)); val = val.Replace("<!--HEADERH-->", getHeaderHAllDay(firstProgramTime, finalProgramTime)); val = val.Replace("<!--HEADERV-->", getHeaderVOneDay()); val = val.Replace("<!--MAIN-->", getProgramsPerDay(saveChannel, firstProgramTime, finalProgramTime)); val = val.Replace("<!--CH-COUNT -->", getDaysForPerChannelMode(firstProgramTime, finalProgramTime).Count.ToString()); val = val.Replace("<!--FIRST-DATE-UNIX-SEC-->", new DateTimeOffset(new DateTime(2000, 1, 1, ScheduleHtml.StartHour, 0, 0)).ToUnixTimeSeconds().ToString()); val = val.Replace("<!--FINAL-DATE-UNIX-SEC-->", new DateTimeOffset(new DateTime(2000, 1, 2, ScheduleHtml.StartHour, 0, 0)).ToUnixTimeSeconds().ToString()); System.IO.File.WriteAllText(outPath, val); }