allow case-sensitive and exact epg search (latter did not work in a quick test though)
authorMoritz Venn <ritzmo@users.schwerkraft.elitedvb.net>
Sun, 18 Jan 2009 11:15:56 +0000 (11:15 +0000)
committerMoritz Venn <ritzmo@users.schwerkraft.elitedvb.net>
Sun, 18 Jan 2009 11:15:56 +0000 (11:15 +0000)
autotimer/src/AutoTimer.py
autotimer/src/AutoTimerComponent.py
autotimer/src/AutoTimerConfiguration.py
autotimer/src/AutoTimerEditor.py

index 06f0fb0..481bc3c 100644 (file)
@@ -32,6 +32,16 @@ def getTimeDiff(timer, begin, end):
                return timer.end - begin
        return 0
 
+typeMap = {
+       "exact": eEPGCache.EXAKT_TITLE_SEARCH,
+       "partial": eEPGCache.PARTIAL_TITLE_SEARCH
+}
+
+caseMap = {
+       "sensitive": eEPGCache.CASE_CHECK,
+       "insensitive": eEPGCache.NO_CASE_CHECK
+}
+
 class AutoTimerIgnoreTimerException(Exception):
        def __init__(self, cause):
                self.cause = cause
@@ -171,7 +181,7 @@ class AutoTimer:
                                        pass
 
                        # Search EPG, default to empty list
-                       ret = self.epgcache.search(('RI', 100, eEPGCache.PARTIAL_TITLE_SEARCH, match, eEPGCache.NO_CASE_CHECK)) or []
+                       ret = self.epgcache.search(('RI', 100, typeMap[timer.searchType], match, caseMap[timer.searchCase])) or []
 
                        for serviceref, eit in ret:
                                eserviceref = eServiceReference(serviceref)
index 4278fcb..6d42efa 100644 (file)
@@ -41,7 +41,7 @@ class AutoTimerComponent(object):
                        afterevent = [], exclude = None, maxduration = None, destination = None, \
                        include = None, matchCount = 0, matchLeft = 0, matchLimit = '', matchFormatString = '', \
                        lastBegin = 0, justplay = False, avoidDuplicateDescription = 0, bouquets = None, \
-                       tags = None, encoding = 'UTF-8'):
+                       tags = None, encoding = 'UTF-8', searchType = "partial", searchCase = "insensitive"):
                self.name = name
                self.match = match
                self.enabled = enabled
@@ -63,6 +63,8 @@ class AutoTimerComponent(object):
                self.bouquets = bouquets
                self.tags = tags or []
                self.encoding = encoding
+               self.searchType = searchType
+               self.searchCase = searchCase
 
 ### Attributes / Properties
 
@@ -124,6 +126,18 @@ class AutoTimerComponent(object):
 
        match = property(lambda self: self._match, setMatch)
 
+       def setSearchCase(self, case):
+               assert case in ("sensitive", "insensitive"), "search case must be sensitive or insensitive"
+               self._searchCase = case
+
+       searchCase = property(lambda self: self._searchCase, setSearchCase)
+
+       def setSearchType(self, type):
+               assert type in ("exact", "partial"), "search type must be exact or partial"
+               self._searchType = type
+
+       searchType = property(lambda self: self._searchType, setSearchType)
+
        def setServices(self, services):
                if services:
                        self._services = services
index f50d41f..8c2d474 100644 (file)
@@ -75,6 +75,10 @@ def parseEntry(element, baseTimer, defaults = False):
        # Read out encoding (won't change if no value is set)
        baseTimer.encoding = element.get("encoding")
 
+       # ...
+       baseTimer.searchType = element.get("searchType", "partial")
+       baseTimer.searchCase = element.get("searchCase", "insensitive")
+
        # Read out timespan
        start = element.get("from")
        end = element.get("to")
@@ -489,6 +493,14 @@ def writeConfig(filename, defaultTimer, timers):
        if defaultTimer.encoding != 'UTF-8':
                list.extend([' encoding="', str(defaultTimer.encoding), '"'])
 
+       # Only display searchType if exact
+       if defaultTimer.searchType == "exact":
+               list.extend([' searchType="', str(defaultTimer.searchType), '"'])
+
+       # Only display searchCase if sensitive
+       if defaultTimer.searchCase == "sensitive":
+               list.extend([' searchCase="', str(defaultTimer.searchCase), '"'])
+
        # Close still opened defaults tag
        list.append('>\n')
 
@@ -589,6 +601,14 @@ def writeConfig(filename, defaultTimer, timers):
                if timer.encoding != 'UTF-8':
                        list.extend([' encoding="', str(timer.encoding), '"'])
 
+               # Only display searchType if exact
+               if timer.searchType == "exact":
+                       list.extend([' searchType="', str(timer.searchType), '"'])
+
+               # Only display searchCase if sensitive
+               if timer.searchCase == "sensitive":
+                       list.extend([' searchCase="', str(timer.searchCase), '"'])
+
                # Close still opened timer tag
                list.append('>\n')
 
index b40b9df..bb603ce 100644 (file)
@@ -152,6 +152,10 @@ class AutoTimerEditorBase:
                        selection.append(default)
                self.encoding = ConfigSelection(choices = selection, default = default)
 
+               # ...
+               self.searchType = ConfigSelection(choices = [("partial", _("partial match")), ("exact", _("exact match"))], default = timer.searchType)
+               self.searchCase = ConfigSelection(choices = [("sensitive", _("case-sensitive search")), ("insensitive", _("case-insensitive search"))], default = timer.searchCase)
+
                # Justplay
                self.justplay = ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[int(timer.justplay)])
 
@@ -418,6 +422,8 @@ class AutoTimerEditor(Screen, ConfigListScreen, AutoTimerEditorBase):
 
                self.list.extend([
                        getConfigListEntry(_("EPG Encoding"), self.encoding),
+                       getConfigListEntry(_("Search Type"), self.searchType),
+                       getConfigListEntry(_("Search strictness"), self.searchCase),
                        getConfigListEntry(_("Timer Type"), self.justplay),
                        getConfigListEntry(_("Only match during Timespan"), self.timespan)
                ])
@@ -574,6 +580,10 @@ class AutoTimerEditor(Screen, ConfigListScreen, AutoTimerEditorBase):
                # Encoding
                self.timer.encoding = self.encoding.value
 
+               # ...
+               self.timer.searchType = self.searchType.value
+               self.timer.searchCase = self.searchCase.value
+
                # Enabled
                self.timer.enabled = self.enabled.value