public List<TVProgramme> SearchTVProgrammesByDateRange(DateRange dateRange, string searchText, EPGSearchTextType searchTextType, EPGSearchMatchType searchMatchType, out bool resultsWereTruncated, string[] serviceIDs)
        {
            resultsWereTruncated = false;
            Stopwatch timePerformance = new Stopwatch();
            timePerformance.Start();

            List<TVProgramme> mainOutput = new List<TVProgramme>();

            List<Service> services = ListOfServicesFromIDs(serviceIDs);
            int limiter = 50;
            foreach (Service service in services)
            {
                List<TVProgramme> svcOutput = new List<TVProgramme>();

                // Get entries in time range using API function (about 8-95 times faster)
                ScheduleEntry[] schedEntries = service.GetScheduleEntriesBetween(dateRange.StartTime, dateRange.StopTime);

                TVProgramme tvp;
                foreach (ScheduleEntry se in schedEntries)
                {
                    // Some schedule entries can be null
                    if (se == null) continue;

                    if (!se.IsLatestVersion) continue;

                    Program p = se.Program;
                    if (p == null) continue;

                    List<string> lstSearchFields = new List<string>();
                    if ((searchTextType != EPGSearchTextType.Credits))
                        if (!String.IsNullOrEmpty(p.Title))
                            lstSearchFields.Add(p.Title);

                    if ((searchTextType == EPGSearchTextType.TitleAndEpisodeTitle) || (searchTextType == EPGSearchTextType.TitlesAndDescription) || (searchTextType == EPGSearchTextType.AllTextFields))
                        if (!String.IsNullOrEmpty(p.EpisodeTitle))
                            lstSearchFields.Add(p.EpisodeTitle);

                    if ((searchTextType == EPGSearchTextType.TitlesAndDescription) || (searchTextType == EPGSearchTextType.AllTextFields))
                        if (!string.IsNullOrEmpty(p.Description))
                            lstSearchFields.Add(p.Description);

                    // if (searchTextType == EPGSearchTextType.Credits)  TODO
                    bool match = (StringListMatch(lstSearchFields, searchMatchType, searchText));
                    lstSearchFields.Clear();
                    lstSearchFields = null;

                    if (match)
                    {
                        tvp = Conversion.TVProgrammeFromScheduleEntry(se);
                        if (tvp != null)
                            mainOutput.Add(tvp);

                        if (limiter-- < 1)
                        {
                            resultsWereTruncated = true;
                            break;
                        }

                    }
                }

                if (limiter < 1) break;
            }

            // Sort by start time (prob not necessary)
            CommonEPG.Comparers.TVProgrammeStartTimeComparer comparer = new CommonEPG.Comparers.TVProgrammeStartTimeComparer();
            mainOutput.Sort(comparer);

            timePerformance.Stop();
            DebugNormal("Time to search EPG programmes : " + timePerformance.Elapsed.TotalMilliseconds.ToString() + "ms");

            return mainOutput;
        }
        // Search helpers
        bool StringListMatch(List<string> stringList, EPGSearchMatchType matchType, string searchText)
        {
            searchText = searchText.ToLowerInvariant();

            foreach (string s in stringList)
            {
                switch (matchType)
                {
                    case EPGSearchMatchType.Contains:
                        if (s.ToLowerInvariant().Contains(searchText)) return true;
                        break;

                    case EPGSearchMatchType.ExactMatch:
                        if (s.ToLowerInvariant().Equals(searchText)) return true;
                        break;

                    case EPGSearchMatchType.StartsWith:
                        if (s.ToLowerInvariant().StartsWith(searchText)) return true;
                        break;

                    default:
                        break;
                }
            }

            return false;
        }
Example #3
0
 public List<TVProgramme> SearchTVProgrammesByDateRange(DateRange dateRange, string searchText, EPGSearchTextType searchTextType, EPGSearchMatchType searchMatchType, out bool resultsWereTruncated, string[] serviceIDs)
 {
     return storeManager.SearchTVProgrammesByDateRange(dateRange, searchText, searchTextType, searchMatchType, out resultsWereTruncated, serviceIDs);
 }
Example #4
0
 public List<TVProgramme> SearchTVProgrammes(string searchText, EPGSearchTextType searchTextType, EPGSearchMatchType searchMatchType, out bool resultsWereTruncated, string[] serviceIDs)
 {
     DateRange relevantTime = new DateRange(DateTime.Now.ToUniversalTime(), DateTime.Now.ToUniversalTime().AddDays(40));
     return SearchTVProgrammesByDateRange(relevantTime, searchText, searchTextType, searchMatchType, out resultsWereTruncated, serviceIDs);
 }
Example #5
0
 public static List <TVProgramme> SearchTVProgrammes(string searchText, EPGSearchTextType searchTextType, EPGSearchMatchType searchMatchType, out bool resultsWereTruncated)
 {
     return(mcData.SearchTVProgrammes(searchText, searchTextType, searchMatchType, out resultsWereTruncated, AllTVChannels.Keys.ToArray()));
 }
Example #6
0
 public List <TVProgramme> SearchTVProgrammesByDateRange(DateRange dateRange, string searchText, EPGSearchTextType searchTextType, EPGSearchMatchType searchMatchType, out bool resultsWereTruncated, string[] serviceIDs)
 {
     return(storeManager.SearchTVProgrammesByDateRange(dateRange, searchText, searchTextType, searchMatchType, out resultsWereTruncated, serviceIDs));
 }
Example #7
0
        public List <TVProgramme> SearchTVProgrammes(string searchText, EPGSearchTextType searchTextType, EPGSearchMatchType searchMatchType, out bool resultsWereTruncated, string[] serviceIDs)
        {
            DateRange relevantTime = new DateRange(DateTime.Now.ToUniversalTime(), DateTime.Now.ToUniversalTime().AddDays(40));

            return(SearchTVProgrammesByDateRange(relevantTime, searchText, searchTextType, searchMatchType, out resultsWereTruncated, serviceIDs));
        }