public void JoinUnjoined() { var notjoined = ReduxItems.Where(r => r.IsReduxMatched == false).ToList(); foreach (var redux in notjoined) { var matches = PipsItems.Where(p => false == (p.ReduxViewModel.Programme.end_gmt <redux.ReduxViewModel.ReduxItem.aired || p.ReduxViewModel.Programme.start_gmt> redux.ReduxViewModel.ReduxItem.aired.AddSeconds(redux.ReduxViewModel.ReduxItem.duration))); //var match = PipsItems.FirstOrDefault(r => r.ReduxViewModel.Programme.start_gmt == redux.ReduxViewModel.ReduxItem.aired); //if (match != null) foreach (var match in matches) { JoinItems = JoinItems.Union(new ScheduleViewModel[] { new ScheduleViewModel( new ReduxViewModel( redux.ReduxViewModel.ReduxItem, match.ReduxViewModel.Programme, new redux_to_pips { redux_id = redux.ReduxViewModel.ReduxItem.id, pips_id = match.ReduxViewModel.Programme.id } ), this.Date) }); //new ScheduleViewModel(new ReduxViewModel(i.R, i.P, i.RP), viewModel.Date); redux.IsPipsMatched = true; } } }
private void Eliminate_Click(object sender, RoutedEventArgs e) { using (var data = new ReduxItems()) { var gaps = data.gaps.ToList(); gaps = (from gap in gaps where ((gap.service_id == 5 && gap.gapend.ToLocalTime().TimeOfDay == new TimeSpan(07, 00, 00)) || (gap.service_id == 4 && gap.gapend.ToLocalTime().TimeOfDay == new TimeSpan(06, 00, 00)) || (gap.service_id == 1 && gap.gapend.ToLocalTime().TimeOfDay == new TimeSpan(19, 00, 00)) || (gap.service_id == 2 && gap.gapend.ToLocalTime().TimeOfDay == new TimeSpan(06, 00, 00)) || (gap.service_id == 3 && gap.gapend.ToLocalTime().TimeOfDay == new TimeSpan(06, 00, 00)) || (gap.service_id == 6 && gap.gapend.ToLocalTime().TimeOfDay == new TimeSpan(19, 00, 00)) ) == false select gap).ToList(); gapGrid.ItemsSource = gaps; } }
// This is a quick(ish) way to scan all the programmes in pips_programmes // and find all gaps in the schedule. // Note that this process will find all actual gaps where // the channel is not transmitting private void ScanGaps_Click(object sender, RoutedEventArgs e) { List <Gap> gaps = new List <Gap>(); Task.Factory.StartNew(() => { StringBuilder sql = new StringBuilder(); sql.AppendLine("insert into gaps (programme_id, service_id, gapstart,gapend)"); // VALUES(1234,1,"2007-06-28 03:00","2007-06-28 06:00") using (var data = new ReduxItems()) { var programmes = (from prog in data.pips_programmes //orderby prog.ServiceId, prog.StartTime select prog).ToList(); programmes = (from prog in programmes orderby prog.service_id, prog.start_gmt select prog).ToList(); PipsProgramme prev = null; using (var newdata = new ReduxItems()) { foreach (var prog in programmes) { if (prev != null && prev.service_id == prog.service_id && prev.end_gmt < prog.start_gmt) { Gap gap = new Gap { pips_id = prog.id, service_id = prog.service_id, gapstart = prev.end_gmt, gapend = prog.start_gmt }; newdata.gaps.Add(gap); Dispatcher.Invoke((MyDelegate) delegate { gapLabel.Content = string.Format("{0}", gap.gapstart); }); } if (prev == null || prog.service_id != prev.service_id || prog.end_gmt > prev.end_gmt) { prev = prog; } } newdata.SaveChanges(); } Dispatcher.Invoke((MyDelegate) delegate { gapGrid.ItemsSource = data.gaps; }); } }); }
private void FetchCurrent_Click(object sender, RoutedEventArgs e) { if (datePicker.SelectedDate != null) { DateTime date = StartDate.Date; DateTime end = EndDate.Date.AddDays(1); using (var data = new ReduxItems()) { var programmes = (from prog in data.pips_programmes where prog.start_gmt >= date && prog.start_gmt < end && prog.service_id == ServiceId select new { DisplayTitle = prog.display_title, Description = prog.description, StartGmt = prog.start_gmt, EndGmt = prog.end_gmt, ServiceName = prog.service_name }).ToList(); gapGrid.ItemsSource = programmes; } } }
private void NewProgramme(object sender, RoutedEventArgs e) { //programmesEntities entities = new programmesEntities(); //var result = from item in entities.pips_programmes select item; //result.First(). using (var items = new ReduxItems()) { var newProgramme = new PipsProgramme() { start_time = new DateTime(2007, 9, 27, 10, 0, 0), end_time = new DateTime(2007, 9, 27, 10, 30, 0), duration = 30 * 60, service_id = 1, service_name = "bbcfour", programme_name = "Life on Mars", description = "Cop Show in the 70s", pid = "b00b8989", matched = true }; items.pips_programmes.Add(newProgramme); items.SaveChanges(); } }
private void ScanWholeDay(DateTime date) { reduxItems = new ReduxItems(); Dispatcher.Invoke((MyDelegate) delegate { dateScanning.Content = date.ToString("dd/MM/yyyy"); }); Services services = new Services(); DateTime dayStart = date.Date; DateTime dayEnd = dayStart.AddDays(1); //if (reduxItems.Scanned.Any(p => p.DateScanned == dayStart) == false) //{ Dispatcher.Invoke((MyDelegate) delegate { working.Content = "Working..."; }); List <XElement> programmeElements = new List <XElement>(); //var dayItems = from item in reduxItems.Items // where item.Aired >= dayStart && item.Aired < dayEnd // select item; foreach (var sid in services.Select(s => s.Id)) { Dispatcher.Invoke((MyDelegate) delegate { working.Content = "Working... " + services[sid].Name; }); string url = services.ProgrammesUrl(sid, dayStart); XElement schedule = XElement.Load(url); var items = from element in schedule.Element("day").Element("broadcasts").Elements("broadcast") select new XElement("programme", new XAttribute("serviceid", sid), element); XElement previous = null; foreach (var item in items) { if (previous != null) { var st = previous.Element("broadcast").GetElementDate("end"); var en = item.Element("broadcast").GetElementDate("start"); if (st < en) { if ((sid == 1 || sid == 6) && en.Hour == 19 && en.Minute == 0) { } else { } } } previous = item; } programmeElements.AddRange(items); } var programmes = from element in programmeElements let broadcast = element.Element("broadcast") let episode = broadcast.Elements("programme").First(e => e.Attribute("type").Value == "episode") select new PipsProgramme() { service_id = element.GetAttributeInt("serviceid"), service_name = services[element.GetAttributeInt("serviceid")].Name, start_time = broadcast.GetElementDate("start"), end_time = broadcast.GetElementDate("end"), duration = broadcast.GetElementInt("duration"), programme_name = episode.Element("title").Value, display_title = episode.Element("display_titles").Element("title").Value, display_subtitle = episode.Element("display_titles").Element("subtitle").Value, pid = episode.Element("pid").Value, description = episode.Element("short_synopsis").Value, rawdata = element.ToString() }; //foreach (var item in dayItems) //{ // var matched = (from programme in programmeElements // where programme.GetAttributeInt("serviceid") == item.ServiceId // && programme.Element("broadcast").GetElementDate("start").ToUniversalTime() == item.Aired // select programme).FirstOrDefault(); // if (matched != null) // { // var broadcast = matched.Element("broadcast"); // item.IsStartTimeMatched = true; // int duration = broadcast.GetElementInt("duration"); // item.IsDurationMatched = duration == item.DurationSecs; // var episode = (from ep in broadcast.Elements("programme") // where ep.Attribute("type").Value == "episode" // select ep).First(); // //item.PipsName = episode.Element("display_titles").Element("title").Value; // //item.TitleMatch = item.PipsName == item.ProgrammeName; // //item.Pid = episode.Element("pid").Value; // //item.PipsDurationSecs = broadcast.GetElementInt("duration"); // } // item.IsChecked = true; //} DateTime timerstart = DateTime.Now; var already = (from p in reduxItems.pips_programmes where p.start_time >= dayStart && p.start_time < dayEnd select p).ToList(); foreach (var prog in programmes) { if (already.Any(p => p.service_id == prog.service_id && p.start_time == prog.start_time) == false) { reduxItems.pips_programmes.Add(prog); } } //reduxItems.Scanned.Add(new Scanned() { DateScanned = dayStart }); //reduxItems.SaveChanges(); DateTime timerend = DateTime.Now; Dispatcher.Invoke((MyDelegate) delegate { working.Content = "took " + (timerend - timerstart).ToString(); }); //} }
private void FillIn() { Services services = new Services(); DateTime date = StartDate.Date; DateTime end = EndDate.Date.AddDays(1); repository = new ReduxItems(); var data = repository; //var programmes = (from prog in data.PipsProgrammes // where prog.StartGmt >= date // && prog.StartGmt < end // && prog.ServiceId == ServiceId // select prog).ToList(); //gapGrid.ItemsSource = programmes; List <PipsProgramme> programmes = new List <PipsProgramme>(); allSchedule = new List <PipsProgramme>(); for (var sdate = date; sdate < end; sdate = sdate.AddDays(1)) { foreach (var url in services.RegionalUrls(ServiceId, sdate)) { try { XElement schedule = XElement.Load(url); var items = from element in schedule.Element("day").Element("broadcasts").Elements("broadcast") select new XElement("programme", new XAttribute("serviceid", ServiceId), element); var progs = from element in items let broadcast = element.Element("broadcast") let episode = broadcast.Elements("programme").First(e => e.Attribute("type").Value == "episode") select new PipsProgramme() { service_id = element.GetAttributeInt("serviceid"), service_name = services[element.GetAttributeInt("serviceid")].Name, start_time = broadcast.GetElementDate("start"), end_time = broadcast.GetElementDate("end"), start_gmt = broadcast.GetElementDate("start").ToUniversalTime(), end_gmt = broadcast.GetElementDate("end").ToUniversalTime(), duration = broadcast.GetElementInt("duration"), programme_name = episode.Element("title").Value, display_title = episode.Element("display_titles").Element("title").Value, display_subtitle = episode.Element("display_titles").Element("subtitle").Value, pid = episode.Element("pid").Value, description = episode.Element("short_synopsis").Value, rawdata = element.ToString() }; allSchedule.AddRange(progs); // filter any that are already there or overlap progs = from prog in progs where programmes.Any(c => c.start_gmt >= prog.start_gmt && c.start_gmt < prog.end_gmt) == false select prog; programmes.AddRange(progs); } catch (WebException) { } } } filteredSchedule = new List <PipsProgramme>(programmes); programmes = programmes.Distinct(new CompareProgrammes()).ToList(); distinctSchedule = programmes; programmes = programmes.Where(p => p.start_gmt >= date && p.start_gmt < end).ToList(); DateTime prevday = date.AddDays(-1); var current = (from prog in data.pips_programmes where prog.start_gmt <end && prog.start_gmt> prevday && prog.end_gmt > date && prog.service_id == ServiceId select prog).ToList(); currentSchedule = current; programmes = (from prog in programmes where current.Any(c => !(c.end_gmt <= prog.start_gmt || c.start_gmt > prog.end_gmt)) == false select prog).ToList(); var gridprog = (from prog in programmes select new { New = true, DisplayTitle = prog.display_title, Description = prog.description, StartGmt = prog.start_gmt, EndGmt = prog.end_gmt, ServiceName = prog.service_name }).Union(from prog in current select new { New = false, DisplayTitle = prog.display_title, Description = prog.description, StartGmt = prog.start_gmt, EndGmt = prog.end_gmt, ServiceName = prog.service_name }).OrderBy(x => x.StartGmt).ToList(); gapGrid.ItemsSource = gridprog; programmesToSave = programmes; }