Пример #1
0
        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;
                }
            }
        }
Пример #2
0
 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;
     }
 }
Пример #3
0
        // 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; });
                }
            });
        }
Пример #4
0
 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;
         }
     }
 }
Пример #5
0
 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();
     }
 }
Пример #6
0
        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(); });
            //}
        }
Пример #7
0
        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;
        }