Enigma2: eEPGCache - opis klasy i wykorzystanie

, czwartek, 20 września 2012

Artykuł poświęcam opisowi klasy eEPGCache z pakietu Enigma2.

Funkcje i ich znaczenie wraz z API:

1. setCacheFile(String fileName)
Funkcja ustawia wartość ścieżki do pliku wykorzystywanego w ramach załadowania lub zapisania informacji z bazy EPG - patrz: load() i save(). Parametr fileName powinien być typu STRING.

przykład:

eEPGCache.getInstance().setCacheFile('/hdd/epg.dat')


2. save()
Funkcja służy do zapisu zawartości bazy EPG do wskazanego przy pomocy setChacheFile() pliku płaskiego.


3. load()
Funkcja służy do wciągnięcia zawartości pliku płaskiego wskazanego przez setCacheFile() do bazy EPG.


4. startTimeQuery(eServiceReference ref, NUMBER beginTime = -1, NUMBER minutes = -1)
refwymaganyreferencja do serwisu
beginTimeopcjonalnyczas startu dla zdarzeń zwracanych w kursorze; -1 oznacza brak definicji (dowolny)
minutesopcjonalnydługość odcinka czasowego dla zdarzeń zwracanych w kursorze; -1 oznacza brak definicji (dowolny)
Funkcja służy do inicjalizacji kursora przechodzącego po zdarzeniach EPG. Przygotowany przy użyciu tej funkcji kursor zawiera zdarzenia przecinające odcinek czasu zdefiniowany poprzez beginTime i minutes. Jest powiązana z funkcją getNextTimeEntry(), która to funkcja służy do pobrania następnej w kolejności wartości z kursora. Funkcja zwraca wartość -1 w przypadku, gdy kursor jest pusty.

przykład:
if ptr.startTimeQuery(ref) != -1:
    self.session.open(EPGSelection, ref)
else:
    self.session.open(MessageBox, "Sorry no epg currently available for this service.", MessageBox.TYPE_INFO)


5. eServiceEvent getNextTimeEntry()
Funkcja zwraca następną w kolejności wartość z kursora zainicjalizowanego przez startTimeQuery(). Wywołanie funkcji możliwe jest jedynie po wcześniejszym zainicjalizowaniu.


6. eServiceEvent lookupEventTime(eServiceReference ref, NUMBER begin, NUMBER direction)
refwymaganyreferencja do serwisu
beginopcjonalnyokreślenie horyzontu czasowego dla wyszukiwania zdarzenia; -1 oznacza bieżącą datę
directionopcjonalnydefinicja kierunku przeszukiwania - wartości [-1,0,1]

Funkcja przeszukuje EPG w celu znalezienia zdarzenia dla określonego przez ref serwisu. Zwracane w wyniku działania funkcji jest zdarzenie poprzednie (direction=-1), bieżące (direction=0) lub następne (direction=1) dla horyzontu czasowego określonego przez parametr begin. W przypadku ustawienia parametru begin na wartość -1, brana jest bieżąca data jako horyzont czasowy.

przykład:
queryTime=self.begin+(self.end-self.begin)/2
rec_ref = self.session.nav.getCurrentlyPlayingServiceReference()
evt = eEPGCache.getInstance().lookupEventTime(rec_ref, queryTime)

epg = eEPGCache.getInstance()
ref = self.session.nav.getCurrentlyPlayingServiceReference()
ptr = ref and ref.valid() and epg.lookupEventTime(ref, -1)
ptr = epg.lookupEventTime(ref, ptr.getBeginTime(), +1)
event = epg.lookupEventTime(serviceref, -1, 0)

def getEvent(self):
    service = self.navcore.getCurrentService() 
    info = service and service.info() 
    ret = info and info.getEvent(self.now_or_next) 
    if not ret and info:
        refstr = info.getInfoString(iServiceInformation.sServiceref)
        ret = eEPGCache.getInstance().lookupEventTime(eServiceReference(refstr), -1, self.now_or_next and 1 or 0)
    return ret


7. eServiceEvent lookupEventId(eServiceReference ref, NUMBER event_id)
refwymaganyreferencja do serwisu
event_idwymaganyidentyfikator zdarzenia do wyszukania
Funcja służy do wyszukania w podanym serwisie zdarzenia o określonym parametrem identyfikatorze.

przykład:
event = eEPGCache.getInstance().lookupEventId(service.ref, eventid)


8. [][] lookupEvent([STRING fmt, (eServiceReference ref, NUMBER queryType, NUMBER pe1, NUMBER pe2)])
fmtwymaganyFormat zwracanych danych - opis niżej
refwymaganyreferencja do serwisu
queryTypewymaganytyp zadawanego zapytania - możliwe wartości w tabeli poniżej
pe1wymaganyparametr dodatkowy 1 - zależny od kontekstu ustawionego przez queryType - tabela poniżej
pe2opcjonalnyparametr dodatkowy 2 - zależny od kontekstu ustawionego przez queryType - określa koniec zakresu czasowego - tabela poniżej

Tabela możliwych wartości pola formatu:
WARTOŚĆOPIS
0PyLong(0)
IEvent Id (id zdarzenia)
BEvent Begin Time (czas rozpoczęcia zdarzenia)
DEvent Duration (czas trwania zdarzenia)
TEvent Title (tytuł zdarzenia)
SEvent Short Description (krótki opis zdarzenia)
EEvent Extended Description (rozszerzony opis zdarzenia)
CCurrent Time (bieżący czas)
RService Reference (referencja do serwisu)
NService Name (nazwa serwisu)
nShort Service Name (krótka nazwa serwisu)
XFlaga nie związana ze zwracanym rezultatem określająca, że zwracana ma być minimum jedena pozycja w tabeli wynikowej odpowiadająca każdemu serwisowi nawet, gdy nie znaleziono zdarzeń dla serwisu. W przypadku, gdy nie znaleziono zdarzeń w wynikowym wierszy tabeli wartości nieokreślone są zwracane jako None

Opis parametrów związanych z typem zapytania:
TYPOPISPE1PE2
2zapytanie o identyfikator zdarzeniawartość identyfikatora zdarzeniaNiedotyczy
-1zapytanie o zdarzenia przed określonym parametrem pe1 czasemhoryzont czasowy dla wyszukania (-1 - obecna data)data określająca datę końca dla zakresu przeszukiwania
0zapytanie o zdarzenia przecinające określony parametrem pe1 czashoryzont czasowy dla wyszukania (-1 - obecna data)data określająca datę końca dla zakresu przeszukiwania
+1zapytanie o zdarzenia po określonym parametrem pe1 czasiehoryzont czasowy dla wyszukania (-1 - obecna data)data określająca datę końca dla zakresu przeszukiwania

Funkcja służy do wyszukiwania informacji o zdarzeniach dla podanych parametrów. Informacja zwracana jest w postaci tablicy dwuwymiarowej, gdzie pierwszy wymiar definiuje poszczególne elementy kursora (wyszukane zdarzenia), a drugi wymiar to wartości odpowiadające zdarzeniu które są określone polem Format (dane pojedynczego zdarzenia). Pola czasowe typu NUMBER definiowane są jako liczba sekund od daty EPOCH (w systemach unixowych początek roku 1970).

Przykłady:
events = eEPGCache.getInstance().lookupEvent(['IBDTSENC', (ref, 0, begintime, endtime)])

search = ['IBDCTSERNX']
if services: # It's a Bouquet
    search.extend([(service, 0, -1) for service in services])
events = eEPGCache.getInstance().lookupEvent(search)

search = ['IBDCTSERNX']
if services: # It's a Bouquet
    search.extend([(service, 0, -1) for service in services])
events = eEPGCache.getInstance().lookupEvent(search)
print 'The first event duration: %s'%(str(events[0][2]))

event = eEPGCache.getInstance().lookupEvent(['ESX', (ref, 2, int(idev))])


9. [][] search((STRING fmt, NUMBER size, NUMBER queryType, pe1, pe2))
fmtwymaganyFormat zwracanych danych - opis niżej
sizewymaganymaksymalna liczba zwróconych wierszy
queryTypewymaganytyp zadawanego zapytania - możliwe wartości w tabeli poniżej
pe1wymaganyparametr dodatkowy 1 - zależny od kontekstu ustawionego przez queryType - tabela poniżej
pe2opcjonalnyparametr dodatkowy 2 - zależny od kontekstu ustawionego przez queryType


Tabela możliwych wartości pola formatu:
WARTOŚĆOPIS
IEvent Id (id zdarzenia)
BEvent Begin Time (czas rozpoczęcia zdarzenia)
DEvent Duration (czas trwania zdarzenia)
TEvent Title (tytuł zdarzenia)
SEvent Short Description (krótki opis zdarzenia)
EEvent Extended Description (rozszerzony opis zdarzenia)
RService Reference (referencja do serwisu)
NService Name (nazwa serwisu)
nShort Service Name (krótka nazwa serwisu)

Opis parametrów związanych z typem zapytania:
TYPOPISPE1PE2
0wyszukaj zdarzenia podobne (SIMILAR_BROADCASTINGS_SEARCH)referencja do serwisu w postaci stringaidentyfikator zdarzenia
1wyszukaj zdarzenia o określonym dokładnie tytule (EXAKT_TITLE_SEARCH)tekst do wyszukania
  • 0 = wielkość liter ma znaczenia (CASE_CHECK)
  • 1 = wielkość liter nie ma znaczenia (NO_CASECHECK)
2wyszukaj zdarzenia zawierające tekst w tytule (PARTIAL_TITLE_SEARCH)tekst do wyszukania
  • 0 = wielkość liter ma znaczenia (CASE_CHECK)
  • 1 = wielkość liter nie ma znaczenia (NO_CASECHECK)

Funkcja służy do wyszukiwania informacji o zdarzeniach dla podanych parametrów. Informacja zwracana jest w postaci tablicy dwuwymiarowej, gdzie pierwszy wymiar definiuje poszczególne elementy kursora (wyszukane zdarzenia), a drugi wymiar to wartości odpowiadające zdarzeniu które są określone polem Format (dane pojedynczego zdarzenia).

Przykład:
l = eEPGCache.getInstance().search(('RIBND', 1024, eEPGCache.SIMILAR_BROADCASTINGS_SEARCH, refstr, event_id))


W ramach wykorzystania klasy eEPGCache polecam zapoznać się z klasami:

--- Component.ServiceList !!
--- ServiceReference
--- enigma.eServiceEvent
--- Navigation.Navigation
--- enigma.iStaticServiceInformationPtr
--- enigma.iServiceInformationPtr

2 komentarze:

  1. Unknown pisze...
    Ten komentarz został usunięty przez autora.
  2. Unknown pisze...

    Jestem na początku zabawy z Enigma2 i Python, czy możesz dodać opis jak uruchomić kod?
    Próbowałem uruchomić skrypt poprzez polecenie "python skrypt.py" ale dostaje komunikat o braku modułu enigma.

Prześlij komentarz

GlossyBlue Blogger by Black Quanta. Theme & Icons by N.Design Studio
Entries RSS Comments RSS